Example #1
0
    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
Example #2
0
def check_and_dispose():
    """
    二重起動をチェック.
    もし二重起動だったらメッセージを出して即座に終了する.
    """
    if multiplelaunch.is_already_running(selfinfo.WINDOW_CLASSNAME):
        dialog_wrapper.ok(dlgmsg.MSG_NOTICE_DOUBLE_LAUNCH)
        sys.exit(0)
Example #3
0
def check_and_dispose():
    """
    二重起動だったらメッセージを出して即座に終了する.
    """
    if multiplelaunch.is_already_running(selfinfo.WINDOWCLASSNAME):
        dialog_wrapper.ok(
            "二重起動です." + os.linesep +
            "新しく起動した方は終了します."
        )
        sys.exit(0)
Example #4
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)
Example #5
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
Example #6
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
    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))
Example #9
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
Example #10
0
    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)
Example #11
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):]
Example #12
0
    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)
Example #13
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
 def _interpret(self, command=None):
     dialog_wrapper.ok(selfinfo.PROGRAM_INFO, "バージョン情報")
Example #15
0
 def _interpret(self, commanddata):
     dialog_wrapper.ok(selfinfo.PROGRAM_INFO, dlgmsg.MSG_NOTICE_VERSION_INFO_TITLE)
Example #16
0
 def _failed_dialog(self, programpath="", arguments=""):
     dialog_wrapper.ok(dlgmsg.MSG_ERROR_FAILED_LAUNCH_PROGRAM % (programpath, arguments))