Exemplo n.º 1
0
 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"))
Exemplo n.º 2
0
    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"))
Exemplo n.º 3
0
 def record_callback(self, reply):
     global press_ctrl
     global press_shift
     
     check_valid_event(reply)
  
     data = reply.data
     while len(data):
         event, data = get_event_data(data)
         
         if event.type == X.KeyPress:
             keyname = get_keyname(event)
             
             if keyname not in ["Control_L", "Control_R"]:
                 self.try_stop_timer(self.press_ctrl_timer)
     
             if keyname in ["Control_L", "Control_R"]:
                 press_ctrl = True
                 
                 if not setting_config.get_trayicon_config("pause"):
                     if not self.view.isVisible() or not self.view.in_translate_area():
                         self.press_ctrl_timer = Timer(self.press_ctrl_delay, self.emit_press_ctrl)
                         self.press_ctrl_timer.start()
             elif keyname in ["Shift_L", "Shift_R"]:
                 press_shift = True
             elif keyname in ["Escape"]:
                 self.press_esc.emit()
         elif event.type == X.KeyRelease:
             keyname = get_keyname(event)
             if keyname in ["Control_L", "Control_R"]:
                 press_ctrl = False
                 self.release_ctrl.emit()
             elif keyname in ["Shift_L", "Shift_R"]:
                 press_shift = False
         elif event.type == X.ButtonPress:
             if event.detail == 1:
                 self.left_button_press.emit(event.root_x, event.root_y, event.time)
             elif event.detail == 3:
                 self.right_button_press.emit(event.root_x, event.root_y, event.time)
             elif event.detail == 5:
                 self.wheel_press.emit()
         elif event.type == X.ButtonRelease:
             if not self.view.isVisible() or not self.view.in_translate_area():
                 if not setting_config.get_trayicon_config("pause"):
                     if not setting_config.get_trayicon_config("key_trigger_select") or press_shift:
                         selection_content = commands.getoutput("xsel -p -o")
                         delete_selection()
                         
                         if len(selection_content) > 1 and not selection_content.isspace():
                             self.translate_selection.emit(event.root_x, event.root_y, selection_content)
             # Delete clipboard selection if user selection in visible area to avoid next time to translate those selection content.
             elif self.view.isVisible() and self.view.in_translate_area():
                 delete_selection()
         elif event.type == X.MotionNotify:
             self.try_stop_timer(self.stop_timer)
         
             if not setting_config.get_trayicon_config("pause"):
                 self.stop_timer = Timer(self.stop_delay, lambda : self.emit_cursor_stop(event.root_x, event.root_y))
                 self.stop_timer.start()
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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))
Exemplo n.º 6
0
    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))
def get_phonetic_symbol(text):
    # Return nothing if text is not ONE word.
    if len(text.split(" ")) <= 0:
        return ""
    
    if not is_network_connected() or setting_config.get_trayicon_config("local_translate"):
        # Not found local phonetic yet.
        return ""
    else:
        global voice_simple
        return voice_simple.get_phonetic_symbol(text)
def get_voice(text, voice):
    if not is_network_connected() or setting_config.get_trayicon_config("local_translate"):
        voice_engines = tts_plugin.get_voice_engines(setting_config.get_translate_config("src_lang"), False)
        voice_engine_names = map(lambda (name, display_name): name, voice_engines)
        if len(voice_engine_names) > 0:
            local_simple = imp.load_source("local_simple", tts_plugin.get_plugin_file(voice_engine_names[0]))
            return local_simple.get_voice(text)
        else:
            return []
    else:
        return voice.get_voice(text)
Exemplo n.º 9
0
 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"))
Exemplo n.º 10
0
def get_phonetic_symbol(text):
    # Return nothing if text is not ONE word.
    if len(text.split(" ")) <= 0:
        return ""

    if not is_network_connected() or setting_config.get_trayicon_config(
            "local_translate"):
        # Not found local phonetic yet.
        return ""
    else:
        global voice_simple
        return voice_simple.get_phonetic_symbol(text)
Exemplo n.º 11
0
 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
Exemplo n.º 12
0
def get_voice(text, voice):
    if not is_network_connected() or setting_config.get_trayicon_config(
            "local_translate"):
        voice_engines = tts_plugin.get_voice_engines(
            setting_config.get_translate_config("src_lang"), False)
        voice_engine_names = map(lambda (name, display_name): name,
                                 voice_engines)
        if len(voice_engine_names) > 0:
            local_simple = imp.load_source(
                "local_simple",
                tts_plugin.get_plugin_file(voice_engine_names[0]))
            return local_simple.get_voice(text)
        else:
            return []
    else:
        return voice.get_voice(text)
Exemplo n.º 13
0
 def emit_cursor_stop(self, mouse_x, mouse_y):
     if (not setting_config.get_trayicon_config("key_trigger_ocr") or press_ctrl) and (not self.view.isVisible() or not self.view.in_translate_area()):
         self.cursor_stop.emit()
Exemplo n.º 14
0
 def handle_event(self, event):
     # print "*****************"
     if event.type == X.KeyPress:
         keyname = get_keyname(event)
         
         if not is_alt_key(keyname):
             self.try_stop_timer(self.press_alt_timer)
         elif not is_ctrl_key(keyname):
             self.try_stop_timer(self.press_ctrl_timer)
     
         if is_alt_key(keyname):
             self.press_alt_flag = True
             
             if not setting_config.get_trayicon_config("pause"):
                 print "Press alt", not self.is_view_visible() or not self.is_cursor_in_view_area()
                 if not self.is_view_visible() or not self.is_cursor_in_view_area():
                     self.press_alt_timer = Timer(self.press_alt_delay, lambda : self.press_alt.emit())
                     self.press_alt_timer.start()
         elif is_ctrl_key(keyname):
             self.press_ctrl_flag = True
             
             if not setting_config.get_trayicon_config("pause"):
                 print "Press ctrl", not self.is_view_visible() or not self.is_cursor_in_view_area()
                 if not self.is_view_visible() or not self.is_cursor_in_view_area():
                     self.press_ctrl_timer = Timer(self.press_ctrl_delay, lambda : self.press_ctrl.emit())
                     self.press_ctrl_timer.start()
         elif keyname in ["Escape"]:
             self.press_esc.emit()
     elif event.type == X.KeyRelease:
         keyname = get_keyname(event)
         if is_alt_key(keyname):
             self.press_alt_flag = False
             self.release_alt.emit()
         elif is_ctrl_key(keyname):
             self.press_ctrl_flag = False
             self.release_ctrl.emit()
     elif event.type == X.ButtonPress:
         if event.detail == 1:
             self.left_button_press.emit(event.root_x, event.root_y, event.time)
         elif event.detail == 3:
             self.right_button_press.emit(event.root_x, event.root_y, event.time)
         elif event.detail == 5:
             self.wheel_press.emit()
     elif event.type == X.ButtonRelease:
         print "Button release", not self.is_view_visible() or not self.is_cursor_in_view_area()
         if not self.is_view_visible() or not self.is_cursor_in_view_area():
             if not setting_config.get_trayicon_config("pause"):
                 if not setting_config.get_trayicon_config("key_trigger_select") or self.press_ctrl_flag:
                     selection_content = commands.getoutput("xsel -p -o")
                     delete_selection()
                     
                     if len(selection_content) > 1 and not selection_content.isspace():
                         self.translate_selection.emit(event.root_x, event.root_y, selection_content)
         # Delete clipboard selection if user selection in visible area to avoid next time to translate those selection content.
         elif self.is_view_visible() and self.is_cursor_in_view_area():
             delete_selection()
     elif event.type == X.MotionNotify:
         self.try_stop_timer(self.stop_timer)
     
         if not setting_config.get_trayicon_config("pause"):
             self.stop_timer = Timer(self.stop_delay, lambda : self.emit_cursor_stop(event.root_x, event.root_y))
             self.stop_timer.start()                    
    def handle_event(self, event):
        if event.type == X.KeyPress:
            keyname = get_keyname(event)
            
            self.try_stop_timer(self.press_alt_timer)
            self.try_stop_timer(self.press_ctrl_timer)
        
            if is_alt_key(keyname):
                self.press_alt_flag = True
                
                if not setting_config.get_trayicon_config("pause"):
                    if not self.is_view_visible() or not self.is_cursor_in_view_area():
                        self.press_alt_timer = Timer(self.press_alt_delay, self.emit_press_alt)
                        self.press_alt_timer.start()
            elif is_ctrl_key(keyname):
                self.press_ctrl_flag = True
                
                if not setting_config.get_trayicon_config("pause"):
                    if not self.is_view_visible() or not self.is_cursor_in_view_area():
                        self.press_ctrl_timer = Timer(self.press_ctrl_delay, self.emit_press_ctrl)
                        self.press_ctrl_timer.start()
            elif keyname in ["Escape"]:
                self.press_esc.emit()
        elif event.type == X.KeyRelease:
            keyname = get_keyname(event)
            if is_alt_key(keyname):
                self.press_alt_flag = False
                self.release_alt.emit()
            elif is_ctrl_key(keyname):
                self.press_ctrl_flag = False
                self.release_ctrl.emit()
        elif event.type == X.ButtonPress:
            if event.detail == 1:
                self.left_button_press.emit(event.root_x, event.root_y, event.time)
                
                # Set hover flag when press.
                self.hover_flag = False    
                
                if self.double_click_timeout:
                    self.double_click_flag = False
                    self.double_click_timeout = False
                    self.double_click_counter = 0

                    self.double_reset_timer = Timer(self.double_click_delay, self.reset_double_click)
                    self.double_reset_timer.start()
                    
            elif event.detail == 3:
                self.right_button_press.emit(event.root_x, event.root_y, event.time)
            elif event.detail == 5:
                self.wheel_press.emit()
        elif event.type == X.ButtonRelease:
                
            self.double_click_counter += 1
            if self.double_click_counter == 2:
                if self.double_reset_timer != None:
                    self.try_stop_timer(self.double_reset_timer)
                    
                self.double_click_flag = True
                self.double_click_timeout = True

            # import time    
            if not self.is_view_visible() or not self.is_cursor_in_view_area():
                # print "1", time.time()
                # Trigger selection handle if mouse hover or double click.
                if self.hover_flag or self.double_click_flag:
                    if not setting_config.get_trayicon_config("pause"):
                        if not setting_config.get_trayicon_config("key_trigger_select") or self.press_ctrl_flag:
                            self.translate_selection_area()
            # Delete clipboard selection if user selection in visible area to avoid next time to translate those selection content.
            elif self.is_view_visible() and self.is_cursor_in_view_area():
                # print "2", time.time()
                delete_selection()
                
            self.hover_flag = False    
        elif event.type == X.MotionNotify:
            # Set hover flag to prove selection action.
            self.hover_flag = True
            
            self.try_stop_timer(self.stop_timer)
        
            if not setting_config.get_trayicon_config("pause"):
                self.stop_timer = Timer(self.stop_delay, lambda : self.emit_cursor_stop(event.root_x, event.root_y))
                self.stop_timer.start()                    
Exemplo n.º 16
0
 def handle_press_ctrl():
     if setting_config.get_trayicon_config("key_trigger_ocr"):
         translate_simple.translate_cursor_word()
Exemplo n.º 17
0
    def handle_event(self, event):
        if event.type == X.KeyPress:
            keyname = get_keyname(event)

            self.try_stop_timer(self.press_alt_timer)
            self.try_stop_timer(self.press_ctrl_timer)

            if is_alt_key(keyname):
                self.press_alt_flag = True

                if not setting_config.get_trayicon_config("pause"):
                    if not self.is_view_visible(
                    ) or not self.is_cursor_in_view_area():
                        self.press_alt_timer = Timer(self.press_alt_delay,
                                                     self.emit_press_alt)
                        self.press_alt_timer.start()
            elif is_ctrl_key(keyname):
                self.press_ctrl_flag = True

                if not setting_config.get_trayicon_config("pause"):
                    if not self.is_view_visible(
                    ) or not self.is_cursor_in_view_area():
                        self.press_ctrl_timer = Timer(self.press_ctrl_delay,
                                                      self.emit_press_ctrl)
                        self.press_ctrl_timer.start()
            elif keyname in ["Escape"]:
                self.press_esc.emit()
        elif event.type == X.KeyRelease:
            keyname = get_keyname(event)
            if is_alt_key(keyname):
                self.press_alt_flag = False
                self.release_alt.emit()
            elif is_ctrl_key(keyname):
                self.press_ctrl_flag = False
                self.release_ctrl.emit()
        elif event.type == X.ButtonPress:
            if event.detail == 1:
                self.left_button_press.emit(event.root_x, event.root_y,
                                            event.time)

                # Set hover flag when press.
                self.hover_flag = False

                if self.double_click_timeout:
                    self.double_click_flag = False
                    self.double_click_timeout = False
                    self.double_click_counter = 0

                    self.double_reset_timer = Timer(self.double_click_delay,
                                                    self.reset_double_click)
                    self.double_reset_timer.start()

            elif event.detail == 3:
                self.right_button_press.emit(event.root_x, event.root_y,
                                             event.time)
            elif event.detail == 5:
                self.wheel_press.emit()
        elif event.type == X.ButtonRelease:

            self.double_click_counter += 1
            if self.double_click_counter == 2:
                if self.double_reset_timer != None:
                    self.try_stop_timer(self.double_reset_timer)

                self.double_click_flag = True
                self.double_click_timeout = True

            # import time
            if not self.is_view_visible() or not self.is_cursor_in_view_area():
                # print "1", time.time()
                # Trigger selection handle if mouse hover or double click.
                if self.hover_flag or self.double_click_flag:
                    if not setting_config.get_trayicon_config("pause"):
                        if not setting_config.get_trayicon_config(
                                "key_trigger_select") or self.press_ctrl_flag:
                            self.translate_selection_area()
            # Delete clipboard selection if user selection in visible area to avoid next time to translate those selection content.
            elif self.is_view_visible() and self.is_cursor_in_view_area():
                # print "2", time.time()
                delete_selection()

            self.hover_flag = False
        elif event.type == X.MotionNotify:
            # Set hover flag to prove selection action.
            self.hover_flag = True

            self.try_stop_timer(self.stop_timer)

            if not setting_config.get_trayicon_config("pause"):
                self.stop_timer = Timer(
                    self.stop_delay,
                    lambda: self.emit_cursor_stop(event.root_x, event.root_y))
                self.stop_timer.start()
Exemplo n.º 18
0
 def handle_press_ctrl():
     if setting_config.get_trayicon_config("key_trigger_ocr"):
         translate_simple.translate_cursor_word()
def get_translate_long():
    if not is_network_connected() or setting_config.get_trayicon_config("local_translate"):
        return translate_local_long
    else:
        return translate_long
Exemplo n.º 20
0
def get_translate_long():
    if not is_network_connected() or setting_config.get_trayicon_config(
            "local_translate"):
        return translate_local_long
    else:
        return translate_long