From 3958fa914c8a524ed4b6a5b035b794e12708fa1d Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Thu, 1 Mar 2018 22:42:01 +0000 Subject: Import ultracopier_1.4.0.4.orig.tar.xz [dgit import orig ultracopier_1.4.0.4.orig.tar.xz] --- SystrayIcon.h | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 SystrayIcon.h (limited to 'SystrayIcon.h') diff --git a/SystrayIcon.h b/SystrayIcon.h new file mode 100644 index 0000000..5db5b4f --- /dev/null +++ b/SystrayIcon.h @@ -0,0 +1,144 @@ +/** \file SystrayIcon.h +\brief Define the class of the systray icon +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef SYSTRAY_ICON_H +#define SYSTRAY_ICON_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Environment.h" + +/** \brief The systray icon + +This class provide a systray icon and its functions */ +class SystrayIcon : public QSystemTrayIcon +{ + Q_OBJECT + public: + /// \brief Initiate and show the icon in the systray + SystrayIcon(QObject * parent = 0); + /// \brief Hide and destroy the icon in the systray + ~SystrayIcon(); + public slots: + /// \brief For show a message linked to the systray icon + void showSystrayMessage(const std::string& text); + /** \brief Send that's caught state have changed for CatchedState::Uncatched or CatchedState::Semicatched or CatchedState::Catched + \see CatchState + \see tryCatchCopy() + \see tryUncatchCopy() + \param state is the new state */ + void listenerReady(const Ultracopier::ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply); + void pluginLoaderReady(const Ultracopier::CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply); + void addCopyEngine(const std::string &name,const bool &canDoOnlyCopy); + void removeCopyEngine(const std::string &name); + #ifdef ULTRACOPIER_INTERNET_SUPPORT + void newUpdate(const std::string &version); + #endif + private: + #ifdef ULTRACOPIER_INTERNET_SUPPORT + std::string lastVersion; + #endif + QMenu* systrayMenu; ///< Pointer on the menu + #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0)) + QMenu* copyMenu; ///< Pointer on the copy menu (move or copy) + #else + std::vector actions; + #endif + QAction* actionMenuQuit; ///< Pointer on the Quit action + #ifdef ULTRACOPIER_DEBUG + QAction* actionSaveBugReport; + #endif + QAction* actionMenuAbout; ///< Pointer on the About action + QAction* actionOptions; ///< Pointer on the Options action + QIcon IconQuit; ///< Pointer on the icon for quit + #ifdef ULTRACOPIER_DEBUG + QIcon IconSaveBugReport; + #endif + QIcon IconInfo; ///< Pointer on the icon for info + QIcon IconAdd; ///< Pointer on the icon for add + QIcon IconOptions; ///< Pointer on the options + /// \brief To update the systray icon + void updateSystrayIcon(); + void showTryCatchMessageWithNoListener(); + struct EngineEntry + { + bool canDoOnlyCopy; + std::string name; + }; + std::vector engineEntryList; + // To store the current catch state + Ultracopier::ListeningState stateListener; + Ultracopier::CatchState statePluginLoader; + bool haveListenerInfo,havePluginLoaderInfo; + bool haveListener,havePluginLoader; + QTimer timerCheckSetTooltip; + + void addEngineAction(const QString &name, const QIcon &icon, const QString &label, QMenu *menu, void (SystrayIcon::*query)()); + + /** \brief drag event processing (impossible with Qt on systray) + + need setAcceptDrops(true); into the constructor + need implementation to accept the drop: + void dragEnterEvent(QDragEnterEvent* event); + void dragMoveEvent(QDragMoveEvent* event); + void dragLeaveEvent(QDragLeaveEvent* event); + */ + void dropEvent(QDropEvent *event); + /** \brief accept all event to allow the drag and drop + \see dropEvent() */ + void dragEnterEvent(QDragEnterEvent* event); + /** \brief accept all event to allow the drag and drop + \see dropEvent() */ + void dragMoveEvent(QDragMoveEvent* event); + /** \brief accept all event to allow the drag and drop + \see dropEvent() */ + void dragLeaveEvent(QDragLeaveEvent* event); + private slots: + /// \brief To update the current themes + void updateCurrentTheme(); + /** \brief To catch an action on the systray icon + \param reason Why it activated */ + void CatchAction(QSystemTrayIcon::ActivationReason reason); + /// \brief To catch copy menu action + void CatchCopyQuery(); + /// \brief To catch move menu action + void CatchMoveQuery(); + /// \brief To catch transfer menu action + void CatchTransferQuery(); + /// \brief to retranslate the ui + void retranslateTheUI(); + void reloadEngineList(); + void checkSetTooltip(); + #ifdef ULTRACOPIER_INTERNET_SUPPORT + void messageClicked(); + #endif + signals: + /// \brief Quit ultracopier + void quit() const; + /// \brief Try catch the copy/move with plugin compatible + void tryCatchCopy() const; + /// \brief Try uncatch the copy/move with plugin compatible + void tryUncatchCopy() const; + /// \brief Show the help dialog + void showHelp() const; + /// \brief Show the help option + void showOptions() const; + /** \brief Add window copy or window move + \param mode Can be CopyMode::Copy or CopyMode::Move + \return The core object of the new window created */ + void addWindowCopyMove(Ultracopier::CopyMode mode,std::string name) const; + void addWindowTransfer(std::string name) const; + void urlDropped(std::vector urls) const; + void saveBugReport() const; +}; + +#endif // SYSTRAY_ICON_H -- cgit v1.2.3