Beispiel #1
0
    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
Beispiel #2
0
 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
Beispiel #3
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)
Beispiel #4
0
    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):]
Beispiel #5
0
    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
Beispiel #6
0
 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