def GoForward(self,stream,admin=False): """検索結果表示では、フォルダを開くときに別タブを生成する。""" index=self.GetFocusedItem() elem=self.listObject.GetElement(index) if (not stream) and (type(elem)==browsableObjects.File or type(elem)==browsableObjects.GrepItem) :#このファイルを開く misc.RunFile(elem.fullpath,admin) return else: #新しいタブで開く globalVars.app.hMainView.Navigate(elem.fullpath,as_new_tab=True)
def GoForward(self, stream, admin=False): """選択中のフォルダやドライブに入るか、選択中のファイルを実行する。stream=True の場合、ファイルの NTFS 副ストリームを開く。""" index = self.GetFocusedItem() elem = self.listObject.GetElement(index) if not stream and type(elem) == browsableObjects.File: # このファイルを開く misc.RunFile(elem.fullpath, admin, "", self.listObject.rootDirectory) return else: # TODO: 管理者権限が要求され、自身が管理者権限を有していないなら、別のfalconが昇格して開くように return self.Move(elem.fullpath)
def ExecProgram(self, val): argv = misc.CommandLineToArgv(val) path = argv[0] prm = " ".join(argv[1:]) misc.RunFile(path, prm=prm, workdir=self.listObject.rootDirectory)
def OnMenuSelect(self, event): """メニュー項目が選択されたときのイベントハンドら。""" # ショートカットキーが無効状態のときは何もしない if not self.parent.shortcutEnable: event.Skip() return # プレビュー再生停止等のため、キー押下をタブへ通知 # ここにきている場合KeyDownイベントはとれないため self.parent.activeTab.OnKeyDown() selected = event.GetId() # メニュー識別しの数値が出る # カラムソートは特別対応 if selected >= constants.MENU_ID_SORT_COLUMN: self.ColumnSort(selected) return # キー重複対応のためのIDの場合には、イベントを投げ直す # 複数投げられるが、有効状態の者は1つだけなはず if globalVars.app.hMainView.menu.keymap.isRefHit(selected): for ref in globalVars.app.hMainView.menu.keymap.GetOriginalRefs(selected): newEvent = wx.CommandEvent(event.GetEventType(), ref) newEvent.SetExtraLong(EVENT_FROM_SELF) # キー操作無効を示す音を鳴らさない wx.PostEvent(self.parent.hFrame.GetEventHandler(), newEvent) return # 選択された(ショートカットで押された)メニューが無効状態なら何もしない if selected in views.menuBlocker.testMenu(self.parent.activeTab): if not event.GetExtraLong() == EVENT_FROM_SELF: globalVars.app.PlaySound(globalVars.app.config["sounds"]["boundary"]) event.Skip() return if selected == menuItemsStore.getRef("ENV_PASTTABTEST"): self.parent.Navigate({"action": "past"}, as_new_tab=True) return # end test if selected == menuItemsStore.getRef("MOVE_BACKWARD"): self.GoBackward() return if selected == menuItemsStore.getRef("MOVE_FORWARD"): self.GoForward(False) return if selected == menuItemsStore.getRef("MOVE_EXEC_ORIGINAL_ASSOCIATION"): elem = self.parent.activeTab.GetFocusedElement() if ((not isinstance(elem, browsableObjects.Folder)) and isinstance(elem, (browsableObjects.File, browsableObjects.Stream, browsableObjects.GrepItem))): extention = os.path.splitext(elem.fullpath)[1][1:].lower() if extention in globalVars.app.config["originalAssociation"]: config = globalVars.app.config["originalAssociation"][extention] else: config = globalVars.app.config["originalAssociation"]["<default_file>"] else: config = globalVars.app.config["originalAssociation"]["<default_dir>"] config = misc.analyzeUserInputPath(config) misc.RunFile(config, prm="\"%s\"" % (elem.fullpath)) return if selected == menuItemsStore.getRef("ENV_KEY_CONFIG"): keys = self.parent.menu.keymap.map[self.parent.identifier.upper()] keyData = {} menuData = {} for refName in defaultKeymap.defaultKeymap["MainView".upper()].keys(): title = menuItemsDic.dic[refName] if refName in keys: keyData[title] = keys[refName] else: keyData[title] = "なし" menuData[title] = refName d = views.globalKeyConfig.Dialog(keyData, menuData) d.Initialize() if d.Show() == wx.ID_CANCEL: return result = {} keyData, menuData = d.GetValue() # キーマップの既存設定を置き換える keymap = ConfigManager.ConfigManager() keymap.read(constants.KEYMAP_FILE_NAME) for name, key in keyData.items(): if key != _("なし"): keymap[self.parent.identifier.upper()][menuData[name]] = key else: keymap[self.parent.identifier.upper()][menuData[name]] = "" keymap.write() # ショートカットキーの変更適用とメニューバーの再描画 self.parent.UpdateUserCommand() self.parent.menu.Apply(self.parent.hFrame) return if selected == menuItemsStore.getRef("MOVE_FORWARD_ADMIN"): self.GoForward(False, admin=True) return if selected == menuItemsStore.getRef("MOVE_FORWARD_STREAM"): self.GoForward(True) return if selected == menuItemsStore.getRef("MOVE_FORWARD_TAB"): self.OpenNewTab() return if selected == menuItemsStore.getRef("MOVE_CLOSECURRENTTAB"): self.CloseTab() return if selected == menuItemsStore.getRef("MOVE_NEWTAB"): self.NewTab() return if selected == menuItemsStore.getRef("EDIT_COPY"): self.parent.activeTab.Copy() return if selected == menuItemsStore.getRef("EDIT_CUT"): self.parent.activeTab.Cut() return if selected == menuItemsStore.getRef("EDIT_PAST"): self.parent.activeTab.Past() return if selected == menuItemsStore.getRef("EDIT_NAMECOPY"): self.parent.activeTab.NameCopy() return if selected == menuItemsStore.getRef("EDIT_FULLPATHCOPY"): self.parent.activeTab.FullpathCopy() return if selected == menuItemsStore.getRef("EDIT_SELECTALL"): self.parent.activeTab.SelectAll() return if selected == menuItemsStore.getRef("MOVE_TOPFILE"): self.parent.activeTab.GoToTopFile() return if selected == menuItemsStore.getRef("MOVE_SPECIAL_UP"): self.parent.activeTab.Jump(constants.ARROW_UP) return if selected == menuItemsStore.getRef("MOVE_SPECIAL_DOWN"): self.parent.activeTab.Jump(constants.ARROW_DOWN) return if selected == menuItemsStore.getRef("MOVE_HIST_PREV"): self.parent.activeTab.GoHistPrevious() return if selected == menuItemsStore.getRef("MOVE_HIST_NEXT"): self.parent.activeTab.GoHistNext() return if selected == menuItemsStore.getRef("MOVE_MARKSET"): self.parent.activeTab.MarkSet() self.parent.menu.Enable(menuItemsStore.getRef("MOVE_MARK"), True) return if selected == menuItemsStore.getRef("MOVE_MARK"): self.parent.activeTab.GoToMark() return if selected == menuItemsStore.getRef("MOVE_INPUT_DIR"): d = views.SympleImputDialog.Dialog(_("パスを指定して移動"), _("移動先")) d.Initialize() if d.Show() == wx.ID_CANCEL: return self.parent.activeTab.Move(misc.analyzeUserInputPath(d.GetValue(), self.parent.activeTab.listObject.rootDirectory)) return if selected == menuItemsStore.getRef("MOVE_ADD_FAVORITE"): rootDir = self.parent.activeTab.listObject.rootDirectory d = views.favoriteDirectory.SettingDialog(self.parent.hFrame, os.path.basename(rootDir), rootDir, "") d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return name, path, key = d.GetValue() if name in globalVars.app.favoriteDirectory: dlg = wx.MessageDialog( self.parent.hFrame, _("この名前は既に登録されています。登録を上書きしますか?"), _("上書き確認"), wx.YES_NO | wx.ICON_QUESTION) if dlg.ShowModal() == wx.ID_NO: return v = dict(globalVars.app.favoriteDirectory.keyMap.items()) v[name] = key if not views.KeyValueSettingDialogBase.KeySettingValidation( dict(globalVars.app.favoriteDirectory.keyMap.items()), v, None): return globalVars.app.favoriteDirectory.add(name, path, key) self.parent.UpdateUserCommand() return if selected == menuItemsStore.getRef("MOVE_SETTING_FAVORITE"): d = views.favoriteDirectory.Dialog( dict(globalVars.app.favoriteDirectory.paramMap.items()), dict(globalVars.app.favoriteDirectory.keyMap.items())) d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return result = {} params, keys = d.GetValue() globalVars.app.favoriteDirectory.replace(params, keys) self.parent.UpdateUserCommand() return if selected == menuItemsStore.getRef("MOVE_SETTING_OPEN_HERE"): d = views.openHere.Dialog( dict(globalVars.app.openHereCommand.paramMap.items()), dict(globalVars.app.openHereCommand.keyMap.items())) d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return result = {} params, keys = d.GetValue() globalVars.app.openHereCommand.replace(params, keys) self.parent.UpdateUserCommand() return if selected == menuItemsStore.getRef("VIEW_SORTNEXT"): self.DelaiedCall(self.SortNext) return if selected == menuItemsStore.getRef("EDIT_MARKITEM"): self.parent.activeTab.OnSpaceKey() return if selected == menuItemsStore.getRef("EDIT_MARKITEM_ALL"): self.parent.activeTab.CheckAll() return if selected == menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"): self.parent.activeTab.UncheckAll() return if selected == menuItemsStore.getRef("EDIT_MARKITEM_INVERSE"): self.parent.activeTab.CheckInverse() return if selected == menuItemsStore.getRef("VIEW_SORTSELECT"): self.SortSelect() return if selected == menuItemsStore.getRef("VIEW_SORTCYCLEAD"): self.DelaiedCall(self.SortCycleAd) return if selected == menuItemsStore.getRef("EDIT_SEARCH"): self.Search() return if selected == menuItemsStore.getRef("EDIT_UPDATEFILELIST"): self.UpdateFilelist() return if selected == menuItemsStore.getRef("EDIT_OPENCONTEXTMENU"): self.OpenContextMenu() return if selected == menuItemsStore.getRef("FILE_MAKESHORTCUT"): target = self.parent.activeTab.GetSelectedItems().GetElement(0) # browsableObjects d = views.makeShortcut.Dialog( target.basename, target.canLnkTarget, target.canHardLinkTarget, target.canSynLinkTarget) d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return self.parent.activeTab.MakeShortcut(d.GetValue()) return if selected == menuItemsStore.getRef("FILE_CHANGEATTRIBUTE"): d = views.changeAttribute.Dialog(self.parent.activeTab.GetSelectedItems().GetAttributeCheckState()) d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return val = d.GetValue() self.parent.activeTab.ChangeAttribute(val) return if selected == menuItemsStore.getRef("FILE_MKDIR"): d = views.SympleImputDialog.Dialog(_("ディレクトリ作成"), _("ディレクトリ名")) d.Initialize() if d.Show() == wx.ID_CANCEL: return self.parent.activeTab.MakeDirectory(d.GetValue()) return if selected == menuItemsStore.getRef("FILE_FILEOPTEST"): self.parent.activeTab.FileOperationTest() return if selected == menuItemsStore.getRef("FILE_TRASH"): self.parent.activeTab.Trash() return if selected == menuItemsStore.getRef("FILE_DELETE"): self.parent.activeTab.Delete() return if selected == menuItemsStore.getRef("FILE_VIEW_DETAIL"): elem = self.parent.activeTab.GetFocusedElement() self.ShowDetail(elem) return if selected == menuItemsStore.getRef("FILE_SHOWPROPERTIES"): self.parent.activeTab.ShowProperties() return if selected == menuItemsStore.getRef("READ_CURRENTFOLDER"): self.DelaiedCall(self.parent.activeTab.ReadCurrentFolder) return if selected == menuItemsStore.getRef("READ_LISTITEMNUMBER"): self.DelaiedCall(self.parent.activeTab.ReadListItemNumber) return if selected == menuItemsStore.getRef("READ_LISTINFO"): self.DelaiedCall(self.parent.activeTab.ReadListInfo) return if selected == menuItemsStore.getRef("READ_CONTENT_PREVIEW"): self.parent.activeTab.Preview() return if selected == menuItemsStore.getRef("READ_CONTENT_READHEADER"): self.DelaiedCall(self.parent.activeTab.ReadHeader) return if selected == menuItemsStore.getRef("READ_CONTENT_READFOOTER"): self.DelaiedCall(self.parent.activeTab.ReadFooter) return if selected == menuItemsStore.getRef("READ_SETMOVEMENTREAD"): self.parent.activeTab.SetMovementRead() return if selected == menuItemsStore.getRef("TOOL_DIRCALC"): self.parent.activeTab.DirCalc() return if selected == menuItemsStore.getRef("TOOL_HASHCALC"): d = views.makeHash.Dialog(self.parent.activeTab.GetFocusedElement().fullpath) d.Initialize() d.Show() return if selected == menuItemsStore.getRef("TOOL_EXEC_PROGRAM"): self.ExecProgram() return if selected == menuItemsStore.getRef("TOOL_ADDPATH"): t = self.parent.activeTab.GetSelectedItems() t = t.GetItemPaths() if misc.addPath(t): dialog(_("パスの追加"), _("ユーザ環境変数PATHに追加しました。")) else: dialog(_("パスの追加"), _("追加に失敗しました。")) return if selected == menuItemsStore.getRef("TOOL_EJECT_DRIVE"): ret = deviceCtrl.ejectDrive(self.parent.activeTab.GetFocusedElement().letter) if ret == errorCodes.OK: dialog(_("成功"), _("ドライブは安全に切断されました。")) self.UpdateFilelist(False) elif ret == errorCodes.FILE_NOT_FOUND: dialog(_("エラー"), _("指定されたドライブが見つかりません。既に取り外しされた可能性があります。")) elif ret == errorCodes.UNKNOWN: # エラー表示はむこうでやってる pass elif errorCodes.ACCESS_DENIED: dialog(_("エラー"), _("取り外しに失敗しました。") + _("このドライブは使用中の可能性があります。")) return if selected == menuItemsStore.getRef("TOOL_EJECT_DEVICE"): ret = deviceCtrl.EjectDevice(self.parent.activeTab.GetFocusedElement().letter) if ret == errorCodes.OK: dialog(_("成功"), _("デバイスは安全に取り外せる状態になりました。")) self.UpdateFilelist(False) elif ret == errorCodes.UNKNOWN: dialog(_("エラー"), _("デバイスの取り外しに失敗しました。")) return if selected == menuItemsStore.getRef("VIEW_DRIVE_INFO"): elem = self.parent.activeTab.GetRootObject() if elem is None: dialog(_("エラー"), _("ドライブ情報の取得に失敗しました。")) return self.ShowDetail(elem) return if selected == menuItemsStore.getRef("ENV_REGIST_ORIGINAL_ASSOCIATION"): config = globalVars.app.config["originalAssociation"] d = views.registerOriginalAssociation.Dialog(dict(config.items())) d.Initialize() if d.Show() == wx.ID_CANCEL: return result = {} result["originalAssociation"] = d.GetValue()[0] globalVars.app.config.remove_section("originalAssociation") globalVars.app.config.read_dict(result) return if selected == menuItemsStore.getRef("ENV_TESTDIALOG"): return if selected == menuItemsStore.getRef("ENV_FONTTEST"): self.fonttest = views.fonttest.View() self.fonttest.Initialize() return if selected == menuItemsStore.getRef("ENV_SETTINGS"): d = views.settingsDialog.Dialog() d.Initialize() d.Show() return if selected == menuItemsStore.getRef("FILE_RENAME"): self.StartRename() return if selected == menuItemsStore.getRef("FILE_EXIT"): self.parent.hFrame.Close() return if selected == menuItemsStore.getRef("HELP_VERINFO"): views.versionDialog.versionDialog() return if selected == menuItemsStore.getRef("HELP_UPDATE"): globalVars.update.update() return for m in globalVars.app.userCommandManagers: if m.isRefHit(selected): if m == globalVars.app.favoriteDirectory: ret = self.parent.activeTab.Move(misc.analyzeUserInputPath(m.get(selected), self.parent.activeTab.listObject.rootDirectory)) # TODO: エラー処理する else: # ここで開く path = m.get(selected) path, prm = misc.PathParamSplit(path) prm = prm.replace("%1", self.parent.activeTab.listObject.rootDirectory) misc.RunFile(path, False, prm) return dialog(_("エラー"), _("操作が定義されていないメニューです。")) return
def Navigate(target, cursor="", previous_tab=None, create_new_tab_info=None, environment={}): """ 指定したパスにアクセスする。現在のタブと違う種類のタブが必要とされた場合に、新しいタブを返す。今のタブを再利用した場合は、Trueを返す。失敗時にはエラーコードを返す。 パスに空の文字を指定すると、ドライブリストへ行く。 パスに辞書を指定した場合、内容によって動作が変わる。事前に取得したファイルリストからの検索などができる。 create_new_tab_info に (parent,hPanel) のタプルがあれば、この情報を使って新規タブを作成する。これは、メインビューで使っている """ if previous_tab is None and create_new_tab_info is None: return errorCodes.INVALID_PARAMETER parent = previous_tab.parent if previous_tab is not None else create_new_tab_info[ 0] hListCtrl = previous_tab.hListCtrl if previous_tab is not None else None creator = create_new_tab_info[ 1] if create_new_tab_info is not None else None targetItemIndex = -1 if isinstance(target, dict): if target['action'] == 'search': newtab = searchResult.SearchResultTab(environment) newtab.Initialize(parent, creator) newtab.StartSearch(target['basePath'], target['out_lst'], target['keyword'], target['isRegularExpression']) return newtab #end 検索 if target['action'] == 'grep': newtab = grepResult.GrepResultTab(environment) newtab.Initialize(parent, creator) newtab.StartSearch(target['basePath'], target['out_lst'], target['keyword'], target['isRegularExpression']) return newtab #end grep検索 #end targetが辞書の時の特殊処理 if target == "": #ドライブリスト lst = lists.DriveList() lst.Initialize() if isinstance(previous_tab, driveList.DriveListTab): #再利用 newtab = previous_tab else: newtab = driveList.DriveListTab(environment) newtab.Initialize(parent, creator, hListCtrl) #end 再利用するかどうか targetItemIndex = lst.Search(cursor, 1) if targetItemIndex == -1: targetItemIndex = lst.Search(cursor, 0) newtab.Update(lst, targetItemIndex) if globalVars.app.config['on_list_moved']['read_item_count'] == 'True': newtab.ReadListItemNumber(short=True) return newtab #end ドライブリストへ行く target = os.path.expandvars(target) if not os.path.exists(target): dialog(_("エラー"), _("移動に失敗しました。移動先が存在しません。")) return errorCodes.FILE_NOT_FOUND elif os.path.isfile(target): #副ストリームへ移動 lst = lists.StreamList() lst.Initialize(target) if isinstance(previous_tab, streamList.StreamListTab): #再利用 newtab = previous_tab else: newtab = streamList.StreamListTab(environment) newtab.Initialize(parent, creator, hListCtrl) #end 再利用するかどうか newtab.Update(lst) if globalVars.app.config['on_list_moved']['read_item_count'] == 'True': newtab.ReadListItemNumber(short=True) return newtab else: lst = lists.FileList() result = lst.Initialize(target) if result != errorCodes.OK: if result == errorCodes.ACCESS_DENIED and not ctypes.windll.shell32.IsUserAnAdmin( ): dlg = wx.MessageDialog( None, _("アクセスが拒否されました。管理者としてFalconを別ウィンドウで立ち上げて再試行しますか?"), _("確認"), wx.YES_NO | wx.ICON_QUESTION) if dlg.ShowModal() == wx.ID_YES: misc.RunFile(sys.argv[0], True, target) return result #アクセス負荷 if cursor != "": targetItemIndex = lst.Search(cursor) if type(previous_tab) == fileList.FileListTab: #再利用 newtab = previous_tab else: newtab = fileList.FileListTab(environment) newtab.Initialize(parent, creator, hListCtrl) #end 再利用するかどうか newtab.Update(lst, targetItemIndex) #end ターゲットにフォーカス if globalVars.app.config['on_list_moved']['read_item_count'] == 'True': newtab.ReadListItemNumber(short=True) return newtab
def Navigate(target, cursor="", previous_tab=None, create_new_tab_info=None, environment=None): """ 指定したパスにアクセスする。現在のタブと違う種類のタブが必要とされた場合に、新しいタブを返す。今のタブを再利用した場合は、Trueを返す。失敗時にはエラーコードを返す。 パスに空の文字を指定すると、ドライブリストへ行く。 パスに辞書を指定した場合、内容によって動作が変わる。事前に取得したファイルリストからの検索などができる。 create_new_tab_info に (parent,hPanel) のタプルがあれば、この情報を使って新規タブを作成する。これは、メインビューで使っている """ if previous_tab is None and create_new_tab_info is None: return errorCodes.INVALID_PARAMETER parent = previous_tab.parent if previous_tab is not None else create_new_tab_info[ 0] hListCtrl = previous_tab.hListCtrl if previous_tab is not None else None creator = create_new_tab_info[ 1] if create_new_tab_info is not None else None targetItemIndex = -1 if environment is None: environment = {} if isinstance(target, dict): if target['action'] == 'search': newtab = searchResult.SearchResultTab(environment) newtab.Initialize(parent, creator) newtab.StartSearch(target['basePath'], target['out_lst'], target['keyword'], target['isRegularExpression']) # end 検索 if target['action'] == 'grep': newtab = grepResult.GrepResultTab({}) newtab.Initialize(parent, creator) newtab.StartSearch(target['basePath'], target['out_lst'], target['keyword'], target['isRegularExpression']) # end grep検索 if target['action'] == 'past': newtab = pastProgress.PastProgressTab(environment) newtab.Initialize(parent, creator) lst = lists.PastProgressList() lst.Initialize( header_directory=target["operator"].instructions["to"]) newtab.Update(lst) newtab.SetFileOperator(target["operator"]) # end 貼り付け # かならずviews.Main.Navigateを経由して呼び出されているはず return newtab # end targetが辞書の時の特殊処理 target = os.path.expandvars(target) if target == "": # ドライブリスト lst = lists.DriveList() lst.Initialize() if isinstance(previous_tab, driveList.DriveListTab): # 再利用 newtab = previous_tab else: newtab = driveList.DriveListTab(environment) newtab.Initialize(parent, creator, hListCtrl) # end 再利用するかどうか targetItemIndex = lst.Search(cursor, 1) if targetItemIndex == -1 and cursor != "": # ネットワークドライブ対策 targetItemIndex = lst.Search(cursor, 0) # end ドライブリストへ行く elif target[0:2] == "\\\\" and "\\" not in target[2:]: lst = lists.NetworkResourceList() result = lst.Initialize(target) if result != errorCodes.OK: return result # アクセス不可 newtab = NetworkResourceList.NetworkResourceListTab(environment) newtab.Initialize(parent, creator, hListCtrl) elif not os.path.exists(target): log.error("navigate failed: %s not exist." % target) dialog(_("エラー"), _("移動に失敗しました。移動先が存在しません。")) return errorCodes.FILE_NOT_FOUND elif os.path.isfile(target): # 副ストリームへ移動 lst = lists.StreamList() lst.Initialize(target) if isinstance(previous_tab, streamList.StreamListTab): # 再利用 newtab = previous_tab else: newtab = streamList.StreamListTab(environment) newtab.Initialize(parent, creator, hListCtrl) # end 再利用するかどうか targetItemIndex = -1 else: lst = lists.FileList() result = lst.Initialize(target) if result != errorCodes.OK: if result == errorCodes.ACCESS_DENIED and not ctypes.windll.shell32.IsUserAnAdmin( ): dlg = wx.MessageDialog( None, _("アクセスが拒否されました。管理者としてFalconを別ウィンドウで立ち上げて再試行しますか?"), _("確認"), wx.YES_NO | wx.ICON_QUESTION) if dlg.ShowModal() == wx.ID_YES: misc.RunFile(sys.argv[0], True, target) return result # アクセス不可 if cursor != "": targetItemIndex = lst.Search(cursor) if isinstance(previous_tab, fileList.FileListTab): # 再利用 newtab = previous_tab else: newtab = fileList.FileListTab(environment) newtab.Initialize(parent, creator, hListCtrl) # end 再利用するかどうか newtab.Update(lst, targetItemIndex) # end ターゲットにフォーカス if globalVars.app.config['on_list_moved']['read_item_count'] == 'True': newtab.ReadListItemNumber(short=True) if newtab != previous_tab and previous_tab is not None: globalVars.app.hMainView.ReplaceCurrentTab(newtab) return newtab
def OnMenuSelect(self, event): """メニュー項目が選択されたときのイベントハンドら。""" #ショートカットキーが無効状態のときは何もしない if not self.parent.SetShortcutEnable: event.Skip() return selected = event.GetId() #メニュー識別しの数値が出る #カラムソートは特別対応 if selected >= constants.MENU_ID_SORT_COLUMN: self.ColumnSort(selected) return #キー重複対応のためのIDの場合には、イベントを投げ直す #複数投げられるが、有効状態の者は1つだけなはず if globalVars.app.hMainView.menu.keymap.isRefHit(selected): for ref in globalVars.app.hMainView.menu.keymap.GetOriginalRefs( selected): newEvent = wx.CommandEvent(event.GetEventType(), ref) newEvent.SetExtraLong(EVENT_FROM_SELF) #キー操作無効を示す音を鳴らさない wx.PostEvent(globalVars.app.hMainView.hFrame.GetEventHandler(), newEvent) return #選択された(ショートカットで押された)メニューが無効状態なら何もしない if self.parent.menu.blockCount[selected] > 0: if not event.GetExtraLong() == EVENT_FROM_SELF: globalVars.app.PlaySound( globalVars.app.config["sounds"]["boundary"]) event.Skip() return if selected == menuItemsStore.getRef("MOVE_BACKWARD"): self.GoBackward() return if selected == menuItemsStore.getRef("MOVE_FORWARD"): self.GoForward(False) return if selected == menuItemsStore.getRef("MOVE_EXEC_ORIGINAL_ASSOCIATION"): elem = self.parent.activeTab.GetFocusedElement() if (not type(elem) == browsableObjects.Folder) and isinstance( elem, (browsableObjects.File, browsableObjects.Stream, browsableObjects.GrepItem)): extention = os.path.splitext(elem.fullpath)[1][1:].lower() if extention in globalVars.app.config["originalAssociation"]: config = globalVars.app.config["originalAssociation"][ extention] else: config = globalVars.app.config["originalAssociation"][ "<default_file>"] else: config = globalVars.app.config["originalAssociation"][ "<default_dir>"] misc.RunFile(config, prm=elem.fullpath) return if selected == menuItemsStore.getRef("MOVE_FORWARD_ADMIN"): self.GoForward(False, admin=True) return if selected == menuItemsStore.getRef("MOVE_FORWARD_STREAM"): self.GoForward(True) return if selected == menuItemsStore.getRef("MOVE_FORWARD_TAB"): self.OpenNewTab() return if selected == menuItemsStore.getRef("MOVE_CLOSECURRENTTAB"): self.CloseTab() return if selected == menuItemsStore.getRef("MOVE_NEWTAB"): self.NewTab() return if selected == menuItemsStore.getRef("EDIT_COPY"): self.parent.activeTab.Copy() return if selected == menuItemsStore.getRef("EDIT_CUT"): self.parent.activeTab.Cut() return if selected == menuItemsStore.getRef("EDIT_PAST"): self.parent.activeTab.Past() return if selected == menuItemsStore.getRef("EDIT_NAMECOPY"): self.parent.activeTab.NameCopy() return if selected == menuItemsStore.getRef("EDIT_FULLPATHCOPY"): self.parent.activeTab.FullpathCopy() return if selected == menuItemsStore.getRef("EDIT_SELECTALL"): self.parent.activeTab.SelectAll() return if selected == menuItemsStore.getRef("MOVE_TOPFILE"): self.parent.activeTab.GoToTopFile() return if selected == menuItemsStore.getRef("MOVE_MARKSET"): self.parent.activeTab.MarkSet() self.parent.menu.Enable(menuItemsStore.getRef("MOVE_MARK"), True) return if selected == menuItemsStore.getRef("MOVE_MARK"): self.parent.activeTab.GoToMark() return if selected == menuItemsStore.getRef("VIEW_SORTNEXT"): self.DelaiedCall(self.SortNext) return if selected == menuItemsStore.getRef("EDIT_MARKITEM"): self.parent.activeTab.OnSpaceKey() return if selected == menuItemsStore.getRef("EDIT_MARKITEM_ALL"): self.parent.activeTab.CheckAll() return if selected == menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"): self.parent.activeTab.UncheckAll() return if selected == menuItemsStore.getRef("EDIT_MARKITEM_INVERSE"): self.parent.activeTab.CheckInverse() return if selected == menuItemsStore.getRef("VIEW_SORTSELECT"): self.SortSelect() return if selected == menuItemsStore.getRef("VIEW_SORTCYCLEAD"): self.DelaiedCall(self.SortCycleAd) return if selected == menuItemsStore.getRef("EDIT_SEARCH"): self.Search() return if selected == menuItemsStore.getRef("EDIT_UPDATEFILELIST"): self.UpdateFilelist() return if selected == menuItemsStore.getRef("EDIT_OPENCONTEXTMENU"): self.OpenContextMenu() return if selected == menuItemsStore.getRef("FILE_MAKESHORTCUT"): target = self.parent.activeTab.GetSelectedItems().GetElement( 0) #browsableObjects d = views.makeShortcut.Dialog(target.basename) d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return self.parent.activeTab.MakeShortcut(d.GetValue()) d.Destroy() return if selected == menuItemsStore.getRef("FILE_CHANGEATTRIBUTE"): d = views.changeAttribute.Dialog() d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return val = d.GetValue() d.Destroy() self.parent.activeTab.ChangeAttribute(val) return if selected == menuItemsStore.getRef("FILE_MKDIR"): d = views.mkdir.Dialog() d.Initialize() ret = d.Show() if ret == wx.ID_CANCEL: return self.parent.activeTab.MakeDirectory(d.GetValue()) d.Destroy() return if selected == menuItemsStore.getRef("FILE_FILEOPTEST"): self.parent.activeTab.FileOperationTest() return if selected == menuItemsStore.getRef("FILE_TRASH"): self.parent.activeTab.Trash() return if selected == menuItemsStore.getRef("FILE_DELETE"): self.parent.activeTab.Delete() return if selected == menuItemsStore.getRef("FILE_VIEW_DETAIL"): elem = self.parent.activeTab.listObject.GetElement( self.parent.activeTab.GetFocusedItem()) self.ShowDetail(elem) return if selected == menuItemsStore.getRef("FILE_SHOWPROPERTIES"): self.parent.activeTab.ShowProperties() return if selected == menuItemsStore.getRef("READ_CURRENTFOLDER"): self.DelaiedCall(self.parent.activeTab.ReadCurrentFolder) return if selected == menuItemsStore.getRef("READ_LISTITEMNUMBER"): self.DelaiedCall(self.parent.activeTab.ReadListItemNumber) return if selected == menuItemsStore.getRef("READ_LISTINFO"): self.DelaiedCall(self.parent.activeTab.ReadListInfo) return if selected == menuItemsStore.getRef("READ_CONTENT_PREVIEW"): self.parent.activeTab.Preview() return if selected == menuItemsStore.getRef("READ_CONTENT_READHEADER"): self.DelaiedCall(self.parent.activeTab.ReadHeader) return if selected == menuItemsStore.getRef("READ_CONTENT_READFOOTER"): self.DelaiedCall(self.parent.activeTab.ReadFooter) return if selected == menuItemsStore.getRef("READ_SETMOVEMENTREAD"): self.parent.activeTab.SetMovementRead() return if selected == menuItemsStore.getRef("TOOL_DIRCALC"): self.parent.activeTab.DirCalc() return if selected == menuItemsStore.getRef("TOOL_HASHCALC"): d = views.makeHash.Dialog( self.parent.activeTab.GetFocusedElement().fullpath) d.Initialize() d.Show() d.Destroy() return if selected == menuItemsStore.getRef("TOOL_EXEC_PROGRAM"): self.ExecProgram() return if selected == menuItemsStore.getRef("TOOL_ADDPATH"): t = self.parent.activeTab.GetSelectedItems() if item in t: if item.__class__ != browsableObjects.Folder: return t = t.GetItemPaths() if misc.addPath(t): dialog(_("パスの追加"), _("ユーザ環境変数PATHに追加しました。")) else: dialog(_("パスの追加"), _("追加に失敗しました。")) return if selected == menuItemsStore.getRef("TOOL_EJECT_DRIVE"): ret = deviceCtrl.ejectDrive( self.parent.activeTab.GetFocusedElement().letter) if ret == errorCodes.OK: dialog(_("成功"), _("ドライブは安全に切断されました。")) self.UpdateFilelist(False) elif ret == errorCodes.FILE_NOT_FOUND: dialog(_("エラー"), _("指定されたドライブが見つかりません。既に取り外しされた可能性があります。")) elif ret == errorCodes.UNKNOWN: #エラー表示はむこうでやってる pass elif errorCodes.ACCESS_DENIED: dialog(_("エラー"), _("取り外しに失敗しました。") + _("このドライブは使用中の可能性があります。")) return if selected == menuItemsStore.getRef("TOOL_EJECT_DEVICE"): ret = deviceCtrl.EjectDevice( self.parent.activeTab.GetFocusedElement().letter) if ret == errorCodes.OK: dialog(_("成功"), _("デバイスは安全に取り外せる状態になりました。")) self.UpdateFilelist(False) elif ret == errorCodes.UNKNOWN: dialog(_("エラー"), _("デバイスの取り外しに失敗しました。")) return if selected == menuItemsStore.getRef("VIEW_DRIVE_INFO"): rootPath = self.parent.activeTab.GetFocusedElement( ).GetRootDrivePath() elem = None if len(rootPath) == 1: elem = lists.drive.GetDriveObject(int(ord(rootPath) - 65)) else: #ネットワークリソース lst = lists.drive.DriveList() lst.Initialize(None, True) for d in lst: if d.basename == rootPath: elem = d if elem == None: dialog(_("エラー"), _("ドライブ情報の取得に失敗しました。")) return self.ShowDetail(elem) return if selected == menuItemsStore.getRef( "ENV_REGIST_ORIGINAL_ASSOCIATION"): config = globalVars.app.config["originalAssociation"] d = views.registOriginalAssociation.Dialog(dict(config.items())) d.Initialize() if d.Show() == wx.ID_CANCEL: d.Destroy() return result = {} result["originalAssociation"] = d.GetValue() globalVars.app.config.remove_section("originalAssociation") globalVars.app.config.read_dict(result) return if selected == menuItemsStore.getRef("ENV_TESTDIALOG"): self.testdialog = views.test.View() self.testdialog.Initialize() self.testdialog.Show() return if selected == menuItemsStore.getRef("ENV_FONTTEST"): self.fonttest = views.fonttest.View() self.fonttest.Initialize() return if selected == menuItemsStore.getRef("FILE_RENAME"): self.StartRename() return if selected == menuItemsStore.getRef("FILE_EXIT"): self.Exit(event) return if selected == menuItemsStore.getRef("HELP_VERINFO"): self.ShowVersionInfo() return for m in globalVars.app.userCommandManagers: if m.isRefHit(selected): if m == globalVars.app.favoriteDirectory: ret = self.parent.activeTab.Move(m.get(selected)) if issubclass(ret.__class__, tabs.base.FalconTabBase): self.parent.ReplaceCurrentTab(ret) #TODO: エラー処理する else: path = m.get(selected) path = path.replace( "%1", self.parent.activeTab.listObject.rootDirectory) prm = re.sub(r"^[^ ]* (.*)$", r"\1", path) path = re.sub(r"^([^ ]*).*$", r"\1", path) misc.RunFile(path, False, prm) return dialog(_("エラー"), _("操作が定義されていないメニューです。")) return