File: SystrayIcon.h

package info (click to toggle)
ultracopier 0.3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 6,640 kB
  • ctags: 3,679
  • sloc: cpp: 27,286; ansic: 1,860; xml: 536; makefile: 38
file content (125 lines) | stat: -rw-r--r-- 4,410 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/** \file SystrayIcon.h
\brief Define the class of the systray icon
\author alpha_one_x86
\version 0.3
\date 2010
\licence GPL3, see the file COPYING */

#ifndef SYSTRAY_ICON_H
#define SYSTRAY_ICON_H

#include <QSystemTrayIcon>
#include <QObject>
#include <QAction>
#include <QMenu>
#include <QTimer>
#include <QDropEvent>
#include <QList>
#include <QUrl>

#include "Environment.h"
#include "GlobalClass.h"

/** \brief The systray icon

This class provide a systray icon and its functions */
class SystrayIcon : public QSystemTrayIcon, public GlobalClass
{
	Q_OBJECT
	public:
		/// \brief Initiate and show the icon in the systray
		SystrayIcon();
		/// \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 QString& 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 ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
		void pluginLoaderReady(const CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
		void addCopyEngine(const QString &name,const bool &canDoOnlyCopy);
		void removeCopyEngine(const QString &name);
	private:
		QMenu* systrayMenu;			///< Pointer on the menu
		QMenu* copyMenu;			///< Pointer on the copy menu (move or copy)
		QAction* actionMenuQuit;		///< Pointer on the Quit action
		QAction* actionMenuAbout;		///< Pointer on the About action
		QAction* actionOptions;			///< Pointer on the Options action
		QIcon IconQuit;			///< Pointer on the icon for quit
		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;
			QString name;
		};
		QList<EngineEntry> engineEntryList;
		// To store the current catch state
		ListeningState stateListener;
		CatchState statePluginLoader;
		bool haveListenerInfo,havePluginLoaderInfo;
		bool haveListener,havePluginLoader;
		QTimer timerCheckSetTooltip;
		/** \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();
	signals:
		/// \brief Quit ultracopier
		void quit();
		/// \brief Try catch the copy/move with plugin compatible
		void tryCatchCopy();
		/// \brief Try uncatch the copy/move with plugin compatible
		void tryUncatchCopy();
		/// \brief Show the help dialog
		void showHelp();
		/// \brief Show the help option
		void showOptions();
		/** \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(CopyMode mode,QString name);
		void addWindowTransfer(QString name);
		void urlDropped(QList<QUrl> urls);
};

#endif // SYSTRAY_ICON_H