-
Notifications
You must be signed in to change notification settings - Fork 9
/
trayicon.py
executable file
·146 lines (121 loc) · 5.54 KB
/
trayicon.py
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- coding: utf-8 -*-
#Copyright (C)2010 Abhinandh <abhinandh@gmail.com>
#This Program in licenser under General Public License Ver 3
from PyQt4.QtGui import *
from PyQt4.QtCore import QString, QThread, QFileInfo, QUrl, QObject, pyqtSignal, QFileInfo
from cloudhandle import CloudHandle
import icons_rc
class TrayIcon(QSystemTrayIcon):
fileList = []
def __init__(self,parent = None):
super(QSystemTrayIcon,self).__init__(parent)
self.createContextMenu()
self.signals = self.Signals()
self.apiHandle = CloudHandle()
self.connectActions()
self.deleteAction = DeleteAction()
self.noOfUploads = 0
self.setIcon(QIcon(":/icons/icons/icon.png"))
self.setToolTip("Cloud App")
def createContextMenu(self):
self.contextMenu = QMenu()
self.quitAction = QAction(QIcon(":/icons/icons/quit.png"), "Quit",self.contextMenu)
self.prefAction = QAction(QIcon(":/icons/icons/preferences.png"), "Preferences",self.contextMenu)
self.reloadAction = QAction(QIcon(":/icons/icons/reload.png"), "Reload",self.contextMenu)
self.openWebAction = QAction(QIcon(":/icons/icons/web-interface.png"), "Open Web Interface",self.contextMenu)
self.fileListMenu = QMenu("Loading File list...")
self.fileListMenu.setIcon(QIcon(":/icons/icons/list-unordered.png"))
self.fileListMenu.setEnabled(0)
self.uploadStatus = QAction("",self.contextMenu)
self.uploadStatus.setEnabled(0)
self.uploadStatus.setVisible(0)
self.queueStatus = QAction("",self.contextMenu)
self.queueStatus.setEnabled(0)
self.queueStatus.setVisible(0)
self.contextMenu.addAction(self.uploadStatus)
self.contextMenu.addAction(self.queueStatus)
self.contextMenu.addSeparator()
self.contextMenu.addAction(self.openWebAction)
self.contextMenu.addSeparator()
self.contextMenu.addAction(self.reloadAction)
self.contextMenu.addMenu(self.fileListMenu)
self.contextMenu.addSeparator()
self.contextMenu.addAction(self.prefAction)
self.contextMenu.addAction(self.quitAction)
self.setContextMenu(self.contextMenu)
def connectActions(self):
self.quitAction.triggered.connect(qApp.quit)
self.openWebAction.triggered.connect(self.openWebInterface)
self.fileListMenu.triggered[QAction].connect(self.menuItemClicked)
self.signals.delete[str].connect(self.apiHandle.deleteItem)
self.prefAction.triggered.connect(self.apiHandle.showPreferences)
self.apiHandle.signals.gotFileList[list].connect(self.populateFileList)
self.apiHandle.signals.loadClipboard[str].connect(self.loadClipboardText)
self.apiHandle.signals.uploadStarted.connect(self.uploadStatusAdd)
self.apiHandle.signals.uploadFinished.connect(self.uploadStatusRemove)
def populateFileList(self, fileList):
#PyQt converts all Strings to QStrings, converting back.
l = []
for item in fileList:
m = {}
for key in item:
m[str(key)] = str(item[key])
l.append(m)
self.fileList = l
self.fileListMenu.clear()
self.fileListMenu.setTitle("File List")
self.fileListMenu.setEnabled(1)
for item in self.fileList:
newAction = QAction(self)
text = item["name"]
newAction.setText(text[:20] + ('...' if len(text) > 20 else ''))
newAction.setIcon(QIcon(":/icons/icons/" + QFileInfo(item["icon"]).fileName()))
self.fileListMenu.addAction(newAction)
item["action"] = newAction
self.fileListMenu.addAction(self.deleteAction)
def menuItemClicked(self, action):
"""Slot for click on file list actions"""
for item in self.fileList:
if item["action"] == action:
deleteCheckBox = self.deleteAction.widget.checkBox
if deleteCheckBox.isChecked():
self.signals.delete.emit(item["href"])
else:
self.loadClipboardText(item["url"])
break
def loadClipboardText(self, text):
"""Loads the text into clipboard"""
text = str(text)
clipboard = qApp.clipboard()
clipboard.setText(text)
def openWebInterface(self):
QDesktopServices().openUrl(QUrl('http://my.cl.ly'))
def uploadStatusAdd(self):
self.uploadStatus.setVisible(1)
self.noOfUploads += 1
text = "Adding "+ str(self.noOfUploads) + " File(s)."
self.uploadStatus.setText(text)
def uploadStatusRemove(self):
self.noOfUploads -= 1
if self.noOfUploads == 0:
self.uploadStatus.setVisible(0)
else:
text = "Adding "+ str(self.noOfUploads) + " File(s)."
self.uploadStatus.setText(text)
class Signals(QObject):
delete = pyqtSignal(str)
class DeleteAction(QWidgetAction):
def __init__(self, parent=None):
super(DeleteAction, self).__init__(parent)
self.widget = DeleteActionWidget()
self.setDefaultWidget(self.widget)
class DeleteActionWidget(QWidget):
def __init__(self, parent=None):
super(DeleteActionWidget, self).__init__(parent)
self.checkBox = QCheckBox()
self.checkBox.setFixedSize(32,32)
self.label = QLabel('Delete')
self.layout = QHBoxLayout()
self.layout.addWidget(self.checkBox)
self.layout.addWidget(self.label)
self.setLayout(self.layout)