class SystemTrayIcon(QSystemTrayIcon):
    
    showSettingView = pyqtSignal()
    
    def __init__(self, icon, parent=None):
        QSystemTrayIcon.__init__(self, icon, parent)
        self.activated.connect(self.on_activated) 
        
    @pyqtSlot(str, bool)
    def click_menu(self, menu_id, state):
        if menu_id == "quit":
            qApp.quit()
        elif menu_id == "wizard":
            pass
        elif menu_id == "about":
            pass
        elif menu_id == "settings":
            self.showSettingView.emit()
        else:
            if menu_id == "pause":
                if not state:
                    delete_selection()
                
                self.set_menu_active(state)    
                
            setting_config.update_trayicon_config(menu_id, state)
            
    def set_menu_active(self, state):
        self.menu.setItemActivity("toggle_speech", not state)
        self.menu.setItemActivity("key_trigger_ocr", not state)
        self.menu.setItemActivity("key_trigger_select", not state)
        
    def on_activated(self, reason):
        if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]:
            geometry = self.geometry()
            mouse_x = int(geometry.x() / 2 + geometry.width() / 2)
            mouse_y = int(geometry.y() / 2)
            
            self.menu = Menu([
                    CheckboxMenuItem("pause", "暂停翻译", setting_config.get_trayicon_config("pause")),
                    CheckboxMenuItem("toggle_speech", "取词后发音", setting_config.get_trayicon_config("toggle_speech")),
                    CheckboxMenuItem("key_trigger_ocr", "按Ctrl键屏幕取词", setting_config.get_trayicon_config("key_trigger_ocr")),
                    CheckboxMenuItem("key_trigger_select", "按Shift键翻译选区", setting_config.get_trayicon_config("key_trigger_select")),
                    MenuSeparator(),
                    ("settings", "设置"),
                    ("wizard", "向导"),
                    ("about", "关于"),
                    MenuSeparator(),
                    ("quit", "退出"),
                    ])
            self.menu.itemClicked.connect(self.click_menu)
            self.menu.showDockMenu(mouse_x, mouse_y)
            self.set_menu_active(setting_config.get_trayicon_config("pause"))
            
    def get_trayarea(self):
        geometry = self.geometry()
        return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon):
    
    showSettingView = pyqtSignal()
    
    def __init__(self, parent=None):
        QSystemTrayIcon.__init__(self, self.get_trayicon(), parent)
        self.activated.connect(self.on_activated) 
        
        self.menu_is_visible = False
        
    def set_trayicon(self):
        self.setIcon(self.get_trayicon())
        
    def get_trayicon(self):
        if is_true(setting_config.get_trayicon_config("pause")):
            icon_name = "pause_trayicon.png"
        else:
            icon_name = "trayicon.png"
            
        return QIcon(os.path.join(get_parent_dir(__file__), "image", icon_name))
    
    @pyqtSlot(str, bool)
    def click_menu(self, menu_id, state):
        if menu_id == "quit":
            qApp.quit()
        elif menu_id == "wizard":
            pass
        elif menu_id == "about":
            pass
        elif menu_id == "settings":
            self.showSettingView.emit()
        elif menu_id == "lang":
            src_lang = setting_config.get_translate_config("src_lang")
            dst_lang = setting_config.get_translate_config("dst_lang")
            setting_config.update_translate_config("src_lang", dst_lang)
            setting_config.update_translate_config("dst_lang", src_lang)
            
            self.menu.setItemText("lang", self.get_lang_value())
            
            setting_view.updateLang.emit()
        else:
            if menu_id == "pause":
                if not state:
                    delete_selection()
                
                self.set_menu_active(state)    
                
            setting_config.update_trayicon_config(menu_id, state)
            
            self.set_trayicon()
            
    def set_menu_active(self, state):
        self.menu.setItemActivity("toggle_speech", not state)
        self.menu.setItemActivity("key_trigger_select", not state)
        self.menu.setItemActivity("local_translate", not state)
        
    def get_lang_value(self):
        return (dict(LANGUAGES))[setting_config.get_translate_config("src_lang")] + " <=> " + (dict(LANGUAGES))[setting_config.get_translate_config("dst_lang")]
        
    def on_activated(self, reason):
        if not self.menu_is_visible:
            if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]:
                geometry = self.geometry()
                if QT_VERSION == "5.1":
                    mouse_x = int(geometry.x() / 2 + geometry.width() / 2)
                    mouse_y = int(geometry.y() / 2)
                else:
                    mouse_x = int(geometry.x() + geometry.width() / 2)
                    mouse_y = int(geometry.y())
                
                self.menu = Menu([
                        CheckableMenuItem("pause", _("Pause translation"), 
                                         setting_config.get_trayicon_config("pause")),
                        CheckableMenuItem("toggle_speech", _("Pronounce automatically"), 
                                         setting_config.get_trayicon_config("toggle_speech")),
                        CheckableMenuItem("key_trigger_select", _("Translate only when holding Ctrl key"), 
                                         setting_config.get_trayicon_config("key_trigger_select")),
                        CheckableMenuItem("local_translate", _("Offline translation"),
                                         setting_config.get_trayicon_config("local_translate")),
                        MenuSeparator(),
                        CheckableMenuItem("lang", self.get_lang_value(), showCheckmark=False),
                        MenuSeparator(),
                        ("settings", _("Settings")),
                        # ("wizard", _("Wizard")),
                        MenuSeparator(),
                        ("quit", _("Exit")),
                        ])
                
                self.menu.itemClicked.connect(self.click_menu)
                self.menu.menuDismissed.connect(self.exit_menu)
                self.set_menu_active(setting_config.get_trayicon_config("pause"))
                if mouse_y > screen_height / 2:
                    self.menu.showDockMenu(mouse_x, mouse_y, cornerDirection="down")
                else:
                    self.menu.showDockMenu(mouse_x, mouse_y + geometry.height(), cornerDirection="up")
            
        self.menu_is_visible = not self.menu_is_visible
        
    @pyqtSlot()    
    def exit_menu(self):
        self.menu_is_visible = False
                    
    def get_trayarea(self):
        geometry = self.geometry()
        return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon):

    showSettingView = pyqtSignal()

    def __init__(self, icon, parent=None):
        QSystemTrayIcon.__init__(self, icon, parent)
        self.activated.connect(self.on_activated)

    @pyqtSlot(str, bool)
    def click_menu(self, menu_id, state):
        if menu_id == "quit":
            qApp.quit()
        elif menu_id == "wizard":
            pass
        elif menu_id == "about":
            pass
        elif menu_id == "settings":
            self.showSettingView.emit()
        else:
            if menu_id == "pause":
                if not state:
                    delete_selection()

                self.set_menu_active(state)

            setting_config.update_trayicon_config(menu_id, state)

    def set_menu_active(self, state):
        self.menu.setItemActivity("toggle_speech", not state)
        self.menu.setItemActivity("key_trigger_ocr", not state)
        self.menu.setItemActivity("key_trigger_select", not state)

    def on_activated(self, reason):
        if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]:
            geometry = self.geometry()
            mouse_x = int(geometry.x() / 2 + geometry.width() / 2)
            mouse_y = int(geometry.y() / 2)

            self.menu = Menu([
                CheckboxMenuItem("pause", "暂停翻译",
                                 setting_config.get_trayicon_config("pause")),
                CheckboxMenuItem(
                    "toggle_speech", "取词后发音",
                    setting_config.get_trayicon_config("toggle_speech")),
                CheckboxMenuItem(
                    "key_trigger_ocr", "按Ctrl键屏幕取词",
                    setting_config.get_trayicon_config("key_trigger_ocr")),
                CheckboxMenuItem(
                    "key_trigger_select", "按Shift键翻译选区",
                    setting_config.get_trayicon_config("key_trigger_select")),
                MenuSeparator(),
                ("settings", "设置"),
                ("wizard", "向导"),
                ("about", "关于"),
                MenuSeparator(),
                ("quit", "退出"),
            ])
            self.menu.itemClicked.connect(self.click_menu)
            self.menu.showDockMenu(mouse_x, mouse_y)
            self.set_menu_active(setting_config.get_trayicon_config("pause"))

    def get_trayarea(self):
        geometry = self.geometry()
        return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
Exemple #4
0
class SystemTrayIcon(QSystemTrayIcon):

    showSettingView = pyqtSignal()

    def __init__(self, parent=None):
        QSystemTrayIcon.__init__(self, self.get_trayicon(), parent)
        self.activated.connect(self.on_activated)

        self.menu_is_visible = False

    def set_trayicon(self):
        self.setIcon(self.get_trayicon())

    def get_trayicon(self):
        if is_true(setting_config.get_trayicon_config("pause")):
            icon_name = "pause_trayicon.png"
        else:
            icon_name = "trayicon.png"

        return QIcon(os.path.join(get_parent_dir(__file__), "image",
                                  icon_name))

    @pyqtSlot(str, bool)
    def click_menu(self, menu_id, state):
        if menu_id == "quit":
            qApp.quit()
        elif menu_id == "wizard":
            pass
        elif menu_id == "about":
            pass
        elif menu_id == "settings":
            self.showSettingView.emit()
        elif menu_id == "lang":
            src_lang = setting_config.get_translate_config("src_lang")
            dst_lang = setting_config.get_translate_config("dst_lang")
            setting_config.update_translate_config("src_lang", dst_lang)
            setting_config.update_translate_config("dst_lang", src_lang)

            self.menu.setItemText("lang", self.get_lang_value())

            setting_view.updateLang.emit()
        else:
            if menu_id == "pause":
                if not state:
                    delete_selection()

                self.set_menu_active(state)

            setting_config.update_trayicon_config(menu_id, state)

            self.set_trayicon()

    def set_menu_active(self, state):
        self.menu.setItemActivity("toggle_speech", not state)
        self.menu.setItemActivity("key_trigger_select", not state)
        self.menu.setItemActivity("local_translate", not state)

    def get_lang_value(self):
        return (dict(LANGUAGES))[setting_config.get_translate_config(
            "src_lang")] + " <=> " + (dict(LANGUAGES))[
                setting_config.get_translate_config("dst_lang")]

    def on_activated(self, reason):
        if not self.menu_is_visible:
            if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]:
                geometry = self.geometry()
                if QT_VERSION == "5.1":
                    mouse_x = int(geometry.x() / 2 + geometry.width() / 2)
                    mouse_y = int(geometry.y() / 2)
                else:
                    mouse_x = int(geometry.x() + geometry.width() / 2)
                    mouse_y = int(geometry.y())

                self.menu = Menu([
                    CheckableMenuItem(
                        "pause", _("Pause translation"),
                        setting_config.get_trayicon_config("pause")),
                    CheckableMenuItem(
                        "toggle_speech", _("Pronounce automatically"),
                        setting_config.get_trayicon_config("toggle_speech")),
                    CheckableMenuItem(
                        "key_trigger_select",
                        _("Translate only when holding Ctrl key"),
                        setting_config.get_trayicon_config(
                            "key_trigger_select")),
                    CheckableMenuItem(
                        "local_translate", _("Offline translation"),
                        setting_config.get_trayicon_config("local_translate")),
                    MenuSeparator(),
                    CheckableMenuItem("lang",
                                      self.get_lang_value(),
                                      showCheckmark=False),
                    MenuSeparator(),
                    ("settings", _("Settings")),
                    # ("wizard", _("Wizard")),
                    MenuSeparator(),
                    ("quit", _("Exit")),
                ])

                self.menu.itemClicked.connect(self.click_menu)
                self.menu.menuDismissed.connect(self.exit_menu)
                self.set_menu_active(
                    setting_config.get_trayicon_config("pause"))
                if mouse_y > screen_height / 2:
                    self.menu.showDockMenu(mouse_x,
                                           mouse_y,
                                           cornerDirection="down")
                else:
                    self.menu.showDockMenu(mouse_x,
                                           mouse_y + geometry.height(),
                                           cornerDirection="up")

        self.menu_is_visible = not self.menu_is_visible

    @pyqtSlot()
    def exit_menu(self):
        self.menu_is_visible = False

    def get_trayarea(self):
        geometry = self.geometry()
        return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon):
    
    showSettingView = pyqtSignal()
    
    def __init__(self, parent=None):
        QSystemTrayIcon.__init__(self, self.get_trayicon(), parent)
        self.activated.connect(self.on_activated) 
        
    def set_trayicon(self):
        self.setIcon(self.get_trayicon())
        
    def get_trayicon(self):
        if is_true(setting_config.get_trayicon_config("pause")):
            icon_name = "pause_trayicon.png"
        else:
            icon_name = "trayicon.png"
            
        return QIcon(os.path.join(get_parent_dir(__file__), "image", icon_name))
    
    @pyqtSlot(str, bool)
    def click_menu(self, menu_id, state):
        if menu_id == "quit":
            qApp.quit()
        elif menu_id == "wizard":
            pass
        elif menu_id == "about":
            pass
        elif menu_id == "settings":
            self.showSettingView.emit()
        elif menu_id == "lang":
            src_lang = setting_config.get_translate_config("src_lang")
            dst_lang = setting_config.get_translate_config("dst_lang")
            setting_config.update_translate_config("src_lang", dst_lang)
            setting_config.update_translate_config("dst_lang", src_lang)
            
            self.menu.setItemText("lang", self.get_lang_value())
            
            setting_view.updateLang.emit()
        else:
            if menu_id == "pause":
                if not state:
                    delete_selection()
                
                self.set_menu_active(state)    
                
            setting_config.update_trayicon_config(menu_id, state)
            
            self.set_trayicon()
            
    def set_menu_active(self, state):
        self.menu.setItemActivity("toggle_speech", not state)
        self.menu.setItemActivity("key_trigger_select", not state)
        
    def get_lang_value(self):
        return (dict(LANGUAGES))[setting_config.get_translate_config("src_lang")] + " -> " + (dict(LANGUAGES))[setting_config.get_translate_config("dst_lang")]
        
    def on_activated(self, reason):
        if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]:
            geometry = self.geometry()
            mouse_x = int(geometry.x() / 2 + geometry.width() / 2)
            mouse_y = int(geometry.y() / 2)
            
            self.menu = Menu([
                    CheckboxMenuItem("pause", _("Pause translate"), 
                                     setting_config.get_trayicon_config("pause")),
                    CheckboxMenuItem("toggle_speech", _("Voice after translate"), 
                                     setting_config.get_trayicon_config("toggle_speech")),
                    CheckboxMenuItem("key_trigger_select", _("Press ctrl to translate selection"), 
                                     setting_config.get_trayicon_config("key_trigger_select")),
                    MenuSeparator(),
                    CheckboxMenuItem("lang", self.get_lang_value(), showCheckmark=False),
                    MenuSeparator(),
                    ("settings", _("Settings")),
                    ("wizard", _("Wizard")),
                    ("about", _("About")),
                    MenuSeparator(),
                    ("quit", _("Exit")),
                    ])
            self.menu.itemClicked.connect(self.click_menu)
            self.menu.showDockMenu(mouse_x, mouse_y)
            self.set_menu_active(setting_config.get_trayicon_config("pause"))
            
    def get_trayarea(self):
        geometry = self.geometry()
        return (geometry.y() / 2, geometry.y() / 2 + geometry.height())