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 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 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()
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
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)
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_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 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
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)
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()
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()
def handle_press_ctrl(): if setting_config.get_trayicon_config("key_trigger_ocr"): translate_simple.translate_cursor_word()
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()
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
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