class DropWidget(QLabel): hidden = True def __init__(self, parent=None): super(QWidget,self).__init__(parent) self.setWindowFlags(Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.signals = self.Signals() self.setAcceptDrops(1) self.resize(QSize(217,68)) self.setAlignment(Qt.AlignCenter) self.setPixmap(QPixmap(':/bg/cloudapp_droptarget.png')) self.trayIcon = TrayIcon() self.trayIcon.show() self.trayIcon.activated[QSystemTrayIcon.ActivationReason].connect(self.trayActivated) self.signals.itemDropped[str].connect(self.trayIcon.apiHandle.addItem) self.trayIcon.apiHandle.pdialog.voffsetSlider.valueChanged[int].connect(self.vmove) self.move(qApp.desktop().screenGeometry().width()-217,self.trayIcon.apiHandle.pdialog.settings['drop_topoffset']) def vmove(self, val): self.move(self.x(),val) def dragEnterEvent(self, event): if self.trayIcon.apiHandle.connected: event.acceptProposedAction() def dropEvent(self, event): mimeData = event.mimeData() pos = event.pos() if pos.x() > 25: if mimeData.hasUrls(): for url in mimeData.urls(): if url.scheme() in ('file', 'http','https','ftp'): self.signals.itemDropped.emit(url.toString()) self.animOpacity() def trayActivated(self, reason): if reason == QSystemTrayIcon.Trigger: self.toggle() elif reason == QSystemTrayIcon.Context: if hasattr(self.trayIcon, "deleteAction"): deleteCheckBox = self.trayIcon.deleteAction.widget.checkBox if deleteCheckBox.isChecked(): deleteCheckBox.toggle() def animOpacity(self): if self.hidden: self.show() else: self.hide() self.hidden = not self.hidden def toggle(self): self.animOpacity() class Signals(QObject): itemDropped = pyqtSignal(str)
class TrayApp: def get_default_config(self): config = ConfigParser.RawConfigParser() config.add_section('GUI') config.set('GUI', 'CardWindowY', '15') config.set('GUI', 'CardWindowY', '15') config.add_section('Learning') config.set('Learning', 'SlideTimeout', '10') config.set('Learning', 'SlideInterval', '40') config.set('Learning', 'FlipSides', 'false') config.set('Learning', 'DefaultDB', 'french.jml') return config def __init__(self): self.config = ConfigParser.RawConfigParser() try: self.config.readfp(open('memocard.cfg')) except: self.config = self.get_default_config() self.flip = self.config.getboolean('Learning', 'FlipSides') self.icon = TrayIcon() self.icon.connect('activate', self.slide_show_cb) # Build menu menu = gtk.Menu() self.topMenu = menu menuItem = gtk.MenuItem('Start/Stop slide show') menuItem.connect('activate', self.slide_show_cb) self.slide_show_mode = False menu.append(menuItem) menuItem = gtk.CheckMenuItem('Flip cards') menuItem.connect('activate', self.flip_cb) menu.append(menuItem) menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT) menuItem.connect('activate', self.quit_cb, self.icon) menu.append(menuItem) self.icon.connect('popup-menu', self.popup_menu_cb, menu) self.icon.show() # Init cards database self.db = jmemorize_db.jMemorizeDB() self.db.open_db(self.config.get('Learning', 'DefaultDB')) # Add Filter menu Item if backend provides it try: flt = self.db.getFilter() flt_menu = self.build_FilterMenu(flt) if flt_menu != None: menuItem = gtk.MenuItem('Filter') menuItem.set_submenu(flt_menu) menu.prepend(menuItem) menu.connect('hide', self.setToolTip_from_filter) except Exception, e: print "Unable to get Filter menu from DB: ", e
def __init__(self): super().__init__() self.setFixedHeight(500) self.setFixedWidth(350) self.setupNote() self.setupToolBar() self.setupStatusBar() self.view.setupSignal(self.updateStatusBar) ti = TrayIcon(self) ti.show() self.show()
class DropWidget(QLabel): def __init__(self, parent=None): super(QWidget,self).__init__(parent) self.setWindowFlags(Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.signals = self.Signals() self.setAcceptDrops(1) self.resize(QSize(238,68)) self.setAlignment(Qt.AlignCenter) self.trayIcon = TrayIcon() self.trayIcon.show() self.trayIcon.activated[QSystemTrayIcon.ActivationReason].connect(self.trayActivated) self.signals.itemDropped[str].connect(self.trayIcon.apiHandle.addItem) self.trayIcon.apiHandle.pdialog.voffsetSlider.valueChanged[int].connect(self.vmove) self.move(qApp.desktop().width()-227,self.trayIcon.apiHandle.pdialog.settings['drop_topoffset']) self.slideIn() def vmove(self, val): self.move(self.x(),val) def dragEnterEvent(self, event): if self.trayIcon.apiHandle.connected: event.acceptProposedAction() self.slideOut() def dropEvent(self, event): mimeData = event.mimeData() pos = event.pos() if pos.x() > 25: if mimeData.hasUrls(): for url in mimeData.urls(): if url.scheme() in ('file', 'http','https','ftp'): self.signals.itemDropped.emit(url.toString()) def trayActivated(self, reason): if reason == QSystemTrayIcon.Trigger: if self.trayIcon.apiHandle.connected: self.toggle() elif reason == QSystemTrayIcon.Context: if hasattr(self.trayIcon, "deleteAction"): deleteCheckBox = self.trayIcon.deleteAction.widget.checkBox if deleteCheckBox.isChecked(): deleteCheckBox.toggle() def mousePressEvent(self, event): if event.x() in range(4,18): self.toggle() def slide(self, newRect): self.a = QPropertyAnimation(self, "geometry") self.a.setDuration(500) self.a.setStartValue(self.geometry()) self.a.setEndValue(newRect) self.a.setEasingCurve(QEasingCurve.InOutQuad) self.a.start() def slideOut(self): current = self.geometry() new = QRect(current) new.moveTopLeft(QPoint(qApp.desktop().width() - 236, current.y())) bg = ':/bg/cloudapp_droptarget_out.png' self.setPixmap(QPixmap(bg)) self.slide(new) def slideIn(self): current = self.geometry() new = QRect(current) bg = ':/bg/cloudapp_droptarget_in.png' self.setPixmap(QPixmap(bg)) new.moveTopLeft(QPoint(qApp.desktop().width() - 19, current.y())) self.slide(new) def toggle(self): current = self.geometry() if current.x() > (qApp.desktop().width() - 236): self.slideOut() else: self.slideIn() class Signals(QObject): itemDropped = pyqtSignal(str)
class DropWidget(QLabel): def __init__(self, parent=None): super(QWidget, self).__init__(parent) self.setWindowFlags(Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.signals = self.Signals() self.setAcceptDrops(1) self.resize(QSize(238, 68)) self.setAlignment(Qt.AlignCenter) self.trayIcon = TrayIcon() self.trayIcon.show() self.trayIcon.activated[QSystemTrayIcon.ActivationReason].connect( self.trayActivated) self.signals.itemDropped[str].connect(self.trayIcon.apiHandle.addItem) self.trayIcon.apiHandle.pdialog.voffsetSlider.valueChanged[ int].connect(self.vmove) self.move(qApp.desktop().width() - 227, self.trayIcon.apiHandle.pdialog.settings['drop_topoffset']) self.slideIn() def vmove(self, val): self.move(self.x(), val) def dragEnterEvent(self, event): if self.trayIcon.apiHandle.connected: event.acceptProposedAction() self.slideOut() def dropEvent(self, event): mimeData = event.mimeData() pos = event.pos() if pos.x() > 25: if mimeData.hasUrls(): for url in mimeData.urls(): if url.scheme() in ('file', 'http', 'https', 'ftp'): self.signals.itemDropped.emit(url.toString()) def trayActivated(self, reason): if reason == QSystemTrayIcon.Trigger: self.toggle() elif reason == QSystemTrayIcon.Context: if hasattr(self.trayIcon, "deleteAction"): deleteCheckBox = self.trayIcon.deleteAction.widget.checkBox if deleteCheckBox.isChecked(): deleteCheckBox.toggle() def mousePressEvent(self, event): if event.x() in range(4, 18): self.toggle() def slide(self, newRect): self.a = QPropertyAnimation(self, "geometry") self.a.setDuration(500) self.a.setStartValue(self.geometry()) self.a.setEndValue(newRect) self.a.setEasingCurve(QEasingCurve.InOutQuad) self.a.start() def slideOut(self): current = self.geometry() new = QRect(current) new.moveTopLeft(QPoint(qApp.desktop().width() - 236, current.y())) bg = ':/bg/cloudapp_droptarget_out.png' self.setPixmap(QPixmap(bg)) self.slide(new) def slideIn(self): current = self.geometry() new = QRect(current) bg = ':/bg/cloudapp_droptarget_in.png' self.setPixmap(QPixmap(bg)) new.moveTopLeft(QPoint(qApp.desktop().width() - 19, current.y())) self.slide(new) def toggle(self): current = self.geometry() if current.x() > (qApp.desktop().width() - 236): self.slideOut() else: self.slideIn() class Signals(QObject): itemDropped = pyqtSignal(str)