mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Implement #3834 (Feature Request - Active Job Count in Tray Tooltip)
This commit is contained in:
parent
d3b61d9094
commit
b5fcc2466b
@ -11,7 +11,7 @@ from Queue import Empty, Queue
|
|||||||
|
|
||||||
from PyQt4.Qt import QAbstractTableModel, QVariant, QModelIndex, Qt, \
|
from PyQt4.Qt import QAbstractTableModel, QVariant, QModelIndex, Qt, \
|
||||||
QTimer, SIGNAL, QIcon, QDialog, QAbstractItemDelegate, QApplication, \
|
QTimer, SIGNAL, QIcon, QDialog, QAbstractItemDelegate, QApplication, \
|
||||||
QSize, QStyleOptionProgressBarV2, QString, QStyle
|
QSize, QStyleOptionProgressBarV2, QString, QStyle, QToolTip
|
||||||
|
|
||||||
from calibre.utils.ipc.server import Server
|
from calibre.utils.ipc.server import Server
|
||||||
from calibre.utils.ipc.job import ParallelJob
|
from calibre.utils.ipc.job import ParallelJob
|
||||||
@ -57,6 +57,28 @@ class JobManager(QAbstractTableModel):
|
|||||||
else:
|
else:
|
||||||
return QVariant(section+1)
|
return QVariant(section+1)
|
||||||
|
|
||||||
|
def show_tooltip(self, arg):
|
||||||
|
widget, pos = arg
|
||||||
|
QToolTip.showText(pos, self.get_tooltip())
|
||||||
|
|
||||||
|
def get_tooltip(self):
|
||||||
|
running_jobs = [j for j in self.jobs if j.run_state == j.RUNNING]
|
||||||
|
waiting_jobs = [j for j in self.jobs if j.run_state == j.WAITING]
|
||||||
|
lines = [_('There are %d running jobs:')%len(running_jobs)]
|
||||||
|
for job in running_jobs:
|
||||||
|
desc = job.description
|
||||||
|
if not desc:
|
||||||
|
desc = _('Unknown job')
|
||||||
|
p = 100. if job.is_finished else job.percent
|
||||||
|
lines.append('%s: %.0f%% done'%(desc, p))
|
||||||
|
lines.extend(['', _('There are %d waiting jobs:')%len(waiting_jobs)])
|
||||||
|
for job in waiting_jobs:
|
||||||
|
desc = job.description
|
||||||
|
if not desc:
|
||||||
|
desc = _('Unknown job')
|
||||||
|
lines.append(desc)
|
||||||
|
return '\n'.join(['calibre', '']+ lines)
|
||||||
|
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
try:
|
try:
|
||||||
if role not in (Qt.DisplayRole, Qt.DecorationRole):
|
if role not in (Qt.DisplayRole, Qt.DecorationRole):
|
||||||
|
@ -11,7 +11,7 @@ from PyQt4.Qt import Qt, SIGNAL, QObject, QCoreApplication, QUrl, QTimer, \
|
|||||||
QModelIndex, QPixmap, QColor, QPainter, QMenu, QIcon, \
|
QModelIndex, QPixmap, QColor, QPainter, QMenu, QIcon, \
|
||||||
QToolButton, QDialog, QDesktopServices, QFileDialog, \
|
QToolButton, QDialog, QDesktopServices, QFileDialog, \
|
||||||
QSystemTrayIcon, QApplication, QKeySequence, QAction, \
|
QSystemTrayIcon, QApplication, QKeySequence, QAction, \
|
||||||
QMessageBox, QStackedLayout
|
QMessageBox, QStackedLayout, QHelpEvent
|
||||||
from PyQt4.QtSvg import QSvgRenderer
|
from PyQt4.QtSvg import QSvgRenderer
|
||||||
|
|
||||||
from calibre import prints, patheq
|
from calibre import prints, patheq
|
||||||
@ -89,6 +89,18 @@ class Listener(Thread):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class SystemTrayIcon(QSystemTrayIcon):
|
||||||
|
|
||||||
|
def __init__(self, icon, parent):
|
||||||
|
QSystemTrayIcon.__init__(self, icon, parent)
|
||||||
|
|
||||||
|
def event(self, ev):
|
||||||
|
if ev.type() == ev.ToolTip:
|
||||||
|
evh = QHelpEvent(ev)
|
||||||
|
self.emit(SIGNAL('tooltip_requested(PyQt_PyObject)'),
|
||||||
|
(self, evh.globalPos()))
|
||||||
|
return True
|
||||||
|
return QSystemTrayIcon.event(self, ev)
|
||||||
|
|
||||||
class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||||
'The main GUI'
|
'The main GUI'
|
||||||
@ -144,8 +156,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.device_connected = False
|
self.device_connected = False
|
||||||
self.viewers = collections.deque()
|
self.viewers = collections.deque()
|
||||||
self.content_server = None
|
self.content_server = None
|
||||||
self.system_tray_icon = QSystemTrayIcon(QIcon(I('library.png')), self)
|
self.system_tray_icon = SystemTrayIcon(QIcon(I('library.png')), self)
|
||||||
self.system_tray_icon.setToolTip('calibre')
|
self.system_tray_icon.setToolTip('calibre')
|
||||||
|
self.connect(self.system_tray_icon,
|
||||||
|
SIGNAL('tooltip_requested(PyQt_PyObject)'),
|
||||||
|
self.job_manager.show_tooltip)
|
||||||
if not config['systray_icon']:
|
if not config['systray_icon']:
|
||||||
self.system_tray_icon.hide()
|
self.system_tray_icon.hide()
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user