def _decide_history_range(self, commanddata, itemname): """ @param itemname エラー時にどこがエラーなのかを表示する目的で使用 @exception HistoryError 履歴範囲の指定に不足有り (itemname),history,(start),(end),(accelerator) name command prm1 prm2 prm3 """ start_str = commanddata.get_parameter1() end_str = commanddata.get_parameter2() accelstr = commanddata.get_parameter3() #fordebugging... #print '(%s|%s|%s)' % (start_str, end_str, accelstr) if start_str!='' and end_str!='': self._start = int(start_str) self._end = int(end_str) elif start_str=='' and end_str=='': pass # use default else: errmsg = dlgmsg.MSG_ERROR_SHOTAGE_HISTORY_RANGE % itemname dialog_wrapper.ok(errmsg) raise HistoryError(errmsg) self._accelstr = accelstr
def check_and_dispose(): """ 二重起動をチェック. もし二重起動だったらメッセージを出して即座に終了する. """ if multiplelaunch.is_already_running(selfinfo.WINDOW_CLASSNAME): dialog_wrapper.ok(dlgmsg.MSG_NOTICE_DOUBLE_LAUNCH) sys.exit(0)
def check_and_dispose(): """ 二重起動だったらメッセージを出して即座に終了する. """ if multiplelaunch.is_already_running(selfinfo.WINDOWCLASSNAME): dialog_wrapper.ok( "二重起動です." + os.linesep + "新しく起動した方は終了します." ) sys.exit(0)
def _get_history_by_range(self): """ @exception HistoryError 履歴の範囲指定が異常 """ try: self._histories = historymanager.inst.get_data_by_range( self._start, self._end ) except RuntimeError as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_INVALID_HISTORY_RANGE % dlgmsg.exception2str(e)) raise HistoryError(e)
def _ini2list(self): """ @retval True 読み込みに成功 @retval False 読み込みに失敗 """ try: self._content_of_file = self._reader.read(selfinfo.MENUINI_PATH) except IOError as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_LOAD_MENUINI % (selfinfo.MENUINI_PATH, dlgmsg.exception2str(e))) return False return True
def _set_to_config_wrapper(self, key, value): """ 設定値を Config にセットする. 失敗した場合は, 設定ファイルの記述 or コード自体がおかしい. いずれにせよユーザ側に明示的に通知して, プログラム自体は終了させることで修正してもらうようにする. (コード自体がおかしい場合はプログラマ自身が修正する. もちろん公開後はこのエラーが出てはいけない.) """ try: log.debug("before config[" + str(key) + "]=" + str(value)) config.inst.set(key, value) log.debug("after config[" + str(key) + "]=" + str(value)) except config.ProgrammersMistake as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_INTERNAL_CONFIG_SET % dlgmsg.exception2str(e)) endhandler.inst.run() raise except config.NotFoundConfigKeyFailure as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_NOTFOUND_CONFIG_KEY % key) endhandler.inst.run() raise except config.BoolConversionFailure as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_CONFIG_BOOL_CONVERTION % key) endhandler.inst.run() raise except config.IntegerConversionFailure as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_CONFIG_INTERGER_CONVERSION % key) endhandler.inst.run() raise pass
def reload(self): """ スニペットを再読込した後, observer 達に再読込したデータを通知する. @note 必要なら排他制御すること. """ file_content_list = [] try: file_content_list = _load_and_merge() except IOError as e: dialog_wrapper.ok( "スニペットを読み込むことができません." + os.linesep + selfinfo.SNIPPETFOLDER_FULLPATH + " を確認してください." ) return snippetdict = _convert_to_snippetdict(file_content_list) self._notify_all(snippetdict)
def _interpret(self, command=None): """ command の書式 (programname),(parameter) """ _executer = executer.Executer() _command, _parameter = '', '' try: _command = command[0] _parameter = command[1] except IndexError: pass _executer_arg = [_command] if _parameter: _executer_arg.append(_parameter) if _executer.execute(_executer_arg)==False: dialog_wrapper.ok("プログラムの起動に失敗しました\ncmd:%s\nprm:%s" \ % (_command, _parameter))
def _create_fixed_phrase(self, commanddata): """ @exception CannotCreateFixedPhraseError スニペット読込or取得に失敗 """ snippetname = commanddata.get_parameter1() if snippetname=="": dialog_wrapper.ok(dlgmsg.MSG_ERROR_SHOTAGE_EMPTY_SNIPPET_NAME) raise CannotCreateFixedPhraseError(dlgmsg.MSG_ERROR_SHOTAGE_EMPTY_SNIPPET_NAME) snippetinst = snippet.Snippet() snippetdata = "" try: snippetdata = snippetinst.get(snippetname) except KeyError: dialog_wrapper.ok(dlgmsg.MSG_ERROR_NOTFOUND_SNIPPET_FILE % snippetname) raise CannotCreateFixedPhraseError(snippetname) try: snippetdata = \ selfinfo_dynamic.macro_interpreter2snippet.deploy(snippetdata) except Exception as e: # 失敗したら展開前の値をそのまま返す. # # 原則ここには来ないはず. 来るとしたら, # dynamic 情報にマクロインスタンスがセットされてないとか, # deploy の内部で何らかのエラーが起きたとか. dialog_wrapper.ok(dlgmsg.MSG_ERROR_INTERNAL_INTERPRETER2SNIPPET_DEPLOY % dlgmsg.exception2str(e)) return snippetdata
def _get_found_data(self, query, commanddata, itemname): """ @param itemname メニュー項目名, エラーメッセージ表示時に使用 (itemname),hisearch,(表示上限数),(accelerator) name command prm1 prm2 """ maxshownum = commanddata.get_parameter1() accelstr = commanddata.get_parameter2() if maxshownum=='': pass # use default else: self._maxshownum = int(maxshownum) self._accelstr = accelstr try: self._histories, self._historyindexes = \ historymanager.inst.get_found_data(self._query, self._maxshownum) except RuntimeError as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_INVALID_HISTORY_HISEARCH_PARAMETER % (itemname,e)) raise HistoryError(e)
def _get_query(self): """ <クエリ候補> ::= <検索開始文字列><クエリ> ~~~~~~~ ここを取り出す @return 空文字列 クエリ取得に失敗 """ # クリップボードからクエリ候補を取得 import util_win.clipboard as clipboard emptystr = '' cbstr = '' try: cbstr = clipboard.Clipboard.get() except Exception as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_GET_HISTORY_SEARCH_QUERY % dlgmsg.exception2str(e)) return emptystr startstr = config.inst.get_hisearch_startstr() if not(cbstr.startswith(startstr)): return emptystr return cbstr[len(startstr):]
def load_and_register_hotkeys(self): hotkey_entries = None try: hotkey_entries = self._iniloader.read_all() except IOError as e: dialog_wrapper.ok("設定ファイルの読込に失敗./" + str(e)) return if not(hotkey_entries): return import hotkey_callback_map for hotkey_entry in hotkey_entries: name = hotkey_entry.get_name() modifier = hotkey_entry.get_modifier() keycode = hotkey_entry.get_keycode() callback_parameter = hotkey_entry.get_callback_parameter() # 対応する name のコールバック関数が無ければ無効. callback = None try: callback = hotkey_callback_map.get(name) except KeyError: dialog_wrapper.ok("設定項目 %s は無効です." % name) continue is_valid_hotkey = self._hotkey_manager.register_hotkey( name, modifier, keycode ) # 既に別のホットキーが登録されている場合などに失敗する. # そう何回も通るケースは少ないだろうから, # 何回も dialog が出てウザいってことは無いと思う. if not(is_valid_hotkey): dialog_wrapper.ok( "ホットキー %s の登録に失敗しました.\nErrorCode: %s" \ % (name, str(win32api.GetLastError())) ) continue self._hotkey_manager.register_callback(name, callback, callback_parameter)
def _interpret_menu(self): """ @retval 空文字列 メニュー表示に失敗orメニュー表示を省略 """ with menucreator.MenuCreator() as creator: empty = "" tracker = menutracker.MenuTracker(self._hwnd) macroer = macro.Macro(gui_info_wrapper.get()) # メニュー作成前に必要な設定はここで取得. maxlen_menuitem = config.inst.get_menuitem_length() if maxlen_menuitem<=1: maxlen_menuitem = config.Config.MAP["menuitem_length"] # メニュー作成前に Config を初期値に戻す. # 初期値がベースだから. config.inst.init() # 各行を解釈してメニューを作成 line_interpreter = LineInterpreter(creator, macroer, maxlen_menuitem) try: for i in range(len(self._content_of_file)): line_interpreter.interpret(self._content_of_file[i]) except config.ConfigError as e: # 下位でダイアログ表示まで行っているため, # ここでは何もせずそのまま raise raise except historymenu.HistoryError as e: # 下位でダイアログ表示まで行っているため, # ここでは何もせず中断. return empty except Exception as e: # 予期せぬエラー含め内部エラーはここで吸収. errmsg = dlgmsg.MSG_ERROR_INTERNAL_INTERPRET_LINE % dlgmsg.exception2str(e) dialog_wrapper.ok(errmsg) return empty if self._use_config_only: return empty # 完成したメニューデータを取り出す. # 作成に失敗していたら警告を出して終了する. menudata = None try: menudata = creator.get_menudata() except ValueError as e: dialog_wrapper.ok(dlgmsg.MSG_ERROR_INVALID_MENU_STRUCTURE % dlgmsg.exception2str(e)) endhandler.inst.run() # コピペコマンド側で使うため, マクロインスタンスを動的情報にセット. selfinfo_dynamic.macro_interpreter2snippet = macroer # 作成したメニューを表示し, 選択項目に対応する値を取得. retval = empty try: mx, my = trackpositioncalculator.inst.get() retval = tracker.track(menudata, mx, my) except Exception as e: # メニューキャンセル時にもここに入るのでダイアログにはしない. log.error( "interepretation error: failed to track." + str(e) ) return retval
def _interpret(self, command=None): dialog_wrapper.ok(selfinfo.PROGRAM_INFO, "バージョン情報")
def _interpret(self, commanddata): dialog_wrapper.ok(selfinfo.PROGRAM_INFO, dlgmsg.MSG_NOTICE_VERSION_INFO_TITLE)
def _failed_dialog(self, programpath="", arguments=""): dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_LAUNCH_PROGRAM % (programpath, arguments))