From 0e1fa34003a8ace2965108417b3cc06f541251cc Mon Sep 17 00:00:00 2001 From: kochi Date: Wed, 1 Apr 2020 23:51:22 +0900 Subject: [PATCH] =?UTF-8?q?#143=20=E5=88=A9=E7=94=A8=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tabs/NetworkResourceList.py | 113 ++++++++++++++++++++++++++++++++++++ tabs/base.py | 9 ++- views/main.py | 1 + 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 tabs/NetworkResourceList.py diff --git a/tabs/NetworkResourceList.py b/tabs/NetworkResourceList.py new file mode 100644 index 0000000..d2a294c --- /dev/null +++ b/tabs/NetworkResourceList.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +#Falcon NetworkResource List tab +#Copyright (C) 2020 yamahubuki +#Note: All comments except these top lines will be written in Japanese. + +""" +ネットワークリソースリストです。ファイルリストと比べると、機能が制限されます。 +""" + +import os +import gettext +import wx +import errorCodes +import lists +import browsableObjects +import globalVars +import fileOperator +import misc +import workerThreads +import workerThreadTasks +import fileSystemManager +import tabs.fileList + +from simpleDialog import * +from win32com.shell import shell, shellcon +from . import base + +class NetworkResourceListTab(base.FalconTabBase): + """ネットワークリソースリストが表示されているタブ。""" + + blockMenuList=[ + "FILE_CHANGEATTRIBUTE", + "FILE_TRASH", + "FILE_DELETE", + "FILE_MKDIR", + "EDIT_CUT", + "EDIT_SEARCH", + "MOVE_TOPFILE", + "TOOL_DIRCALC", + "TOOL_HASHCALC", + "TOOL_ADDPATH", + "READ_CONTENT_PREVIEW" + ] + + def Update(self,cursor=""): + """指定された要素をタブに適用する。""" + self._cancelBackgroundTasks() + lst=lists.NetworkDeviceList() + lst.Initialize(None) + self.hListCtrl.DeleteAllItems() + self.SetListColumns(lst) + self.listObject=lst + self.UpdateListContent(self.listObject.GetItems()) + if cursor!="": + c=lst.Search(cursor,0) + self.hListCtrl.Select(c) + self.hListCtrl.Focus(c) + #end カーソル初期位置を設定 + #end Update + + def GoBackward(self): + """ドライブ一覧に戻る""" + return self.Move(""," ") + + def MakeShortcut(self,option): + prm="" + dir="" + if option["type"]=="shortcut": + prm=option["parameter"] + dir=option["directory"] + target=self.parent.activeTab.GetSelectedItems().GetElement(0).fullpath + dest=option["destination"] + if not os.path.isabs(dest): #早退の場合は絶対に直す + dest=os.path.normpath(os.path.join(os.path.dirname(target),dest)) + + #TODO: + #相対パスでの作成に後日対応する必要がある + #ハードリンクはドライブをまたげないのでバリデーションする + #ファイルシステムを確認し、対応してない種類のものは作れないようにバリデーションする + #作業フォルダの指定に対応する(ファイルオペレータ側の修正も必用) + + if option["type"]=="shortcut": + inst={"operation":option["type"], "target": [(dest,target,prm)]} + else: + inst={"operation":option["type"], "from": [target], "to": [dest]} + #end ショートカットかそれ以外 + op=fileOperator.FileOperator(inst) + ret=op.Execute() + if op.CheckSucceeded()==0: + dialog(_("エラー"),_("ショートカットの作成に失敗しました。")) + return + #end error + self.UpdateFilelist(silence=True) + + def FileOperationTest(self): + if self.task: + self.task.Cancel() + else: + self.task=workerThreads.RegisterTask(workerThreadTasks.DebugBeep) + + def ShowProperties(self): + index=self.GetFocusedItem() + shell.ShellExecuteEx(shellcon.SEE_MASK_INVOKEIDLIST,0,"properties",self.listObject.GetElement(index).fullpath) + + def ReadCurrentFolder(self): + globalVars.app.say("現在は、ネットワーク上のリソースの洗濯") + + def ReadListItemNumber(self): + globalVars.app.say(_("ネットワークリソース %(drives)d個") % {'drives': len(self.listObject)}) + + def ReadListInfo(self): + globalVars.app.say(_("ネットワークリソース一覧を %(sortkind)sの%(sortad)sで一覧中、 %(max)d個中 %(current)d個目") %{'sortkind': self.listObject.GetSortKindString(), 'sortad': self.listObject.GetSortAdString(), 'max': len(self.listObject), 'current': self.GetFocusedItem()+1}) + diff --git a/tabs/base.py b/tabs/base.py index f3fe53d..6bd6af5 100644 --- a/tabs/base.py +++ b/tabs/base.py @@ -80,11 +80,16 @@ class FalconTabBase(object): "TOOL_ADDPATH", "READ_CONTENT_PREVIEW" ]) + selectItemTypeMenuConditions[browsableObjects.NetworkResource]=[] + selectItemTypeMenuConditions[browsableObjects.NetworkResource].extend([ + "FILE_RENAME", + "EDIT_COPY", + "TOOL_EJECT_DRIVE", + "TOOL_EJECT_DEVICE" + ]) #以下3つは専用のタブになってるのでこの機能でやる必要はない。KeyErrorにならないようにしとくだけ。 selectItemTypeMenuConditions[browsableObjects.Drive]=[] selectItemTypeMenuConditions[browsableObjects.Stream]=[] - selectItemTypeMenuConditions[browsableObjects.NetworkResource]=[] - def __init__(self,environment): self.task=None diff --git a/views/main.py b/views/main.py index 61cd78b..96795bf 100644 --- a/views/main.py +++ b/views/main.py @@ -69,6 +69,7 @@ def Initialize(self): tabs.base.FalconTabBase.selectItemMenuConditions[0].append(target.refHead+v) tabs.base.FalconTabBase.selectItemMenuConditions[2].append(target.refHead+v) tabs.base.FalconTabBase.selectItemTypeMenuConditions[browsableObjects.File].append(target.refHead+v) + tabs.base.FalconTabBase.selectItemTypeMenuConditions[browsableObjects.NetworkResource].append(target.refHead+v) tabs.streamList.StreamListTab.blockMenuList.append(target.refHead+v) self.menu.keymap.add(self.identifier,target.refHead+v,target.keyMap[v]) errors=self.menu.keymap.GetError(self.identifier)