From 72015a90656d0dd676fa8292dfc3f1aca73bda98 Mon Sep 17 00:00:00 2001 From: kochi Date: Sun, 19 Jul 2020 15:49:18 +0900 Subject: [PATCH] =?UTF-8?q?#346=20#143=20=E3=83=8D=E3=83=83=E3=83=88?= =?UTF-8?q?=E3=83=AF=E3=83=BC=E3=82=AF=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E5=AF=BE=E8=B1=A1=E3=81=AE=E3=83=8F=E3=83=BC=E3=83=89=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E4=BD=9C=E6=88=90=E3=82=92=E3=83=96=E3=83=AD?= =?UTF-8?q?=E3=83=83=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browsableObjects.py | 17 +++++++++++++++-- views/main.py | 2 +- views/makeShortcut.py | 15 +++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/browsableObjects.py b/browsableObjects.py index 8162fdb..2a49832 100644 --- a/browsableObjects.py +++ b/browsableObjects.py @@ -15,8 +15,13 @@ class FalconBrowsableBase(): """全ての閲覧可能オブジェクトに共通する基本クラス。""" __slots__=["attributes","attributesString","log","longAttributesString"] + canLnkTarget=True + canHardLinkTarget=True + canSynLinkTarget=True + def __init__(self): self.log=logging.getLogger("falcon.browsableObjects") + def GetAttributesString(self): """属性の文字列を設定する。""" attrib=self.attributes @@ -57,10 +62,10 @@ def __repr__(self): class File(FalconBrowsableBase): """ファイルを表す。このオブジェクトは情報を保持するだけで、指し示すファイルにアクセスすることはない。フルパスは計算可能なのだが、二重に値を生成したくはないので、あえて値を渡すようにしている。""" - __slots__=["basename","creationDate","directory","fullpath","modDate","shortName","size","typeString","hIcon"] + __slots__=["basename","creationDate","directory","fullpath","modDate","shortName","size","typeString","hIcon","canHardLinkTarget"] def Initialize(self,directory="", basename="", fullpath="", size=-1, modDate=None, attributes=-1, typeString="",creationDate=None,shortName="",hIcon=-1): - """必要な情報をセットする""" + """必要な情報をセットする。継承しているクラスのうち、grepItemだけはここを通らないので注意。""" self.directory=directory self.basename=basename self.fullpath=directory+"\\"+basename @@ -73,6 +78,9 @@ def Initialize(self,directory="", basename="", fullpath="", size=-1, modDate=Non self.shortName=shortName self.hIcon=hIcon + if self.fullpath[0:2]=="\\\\": + self.canHardLinkTarget=False + def GetListTuple(self): """表示に必要なタプルを返す。""" return (self.basename, misc.ConvertBytesTo(self.size,misc.UNIT_AUTO,True), misc.PTime2string(self.modDate), self.attributesString, self.typeString) @@ -139,6 +147,9 @@ def Initialize(self,ln,preview,fileobject): self.hits=0#とりあえず入れておく self.hIcon=fileobject.hIcon + if fullpath[0:2]=="\\\\": + self.canHardLinkTarget=False + def SetHitCount(self,h): """ヒット数を設定する。""" self.hits=h @@ -215,6 +226,8 @@ def GetRootDrivePath(self): class NetworkResource(FalconBrowsableBase): """ネットワーク上のディスクリソースを表す。このオブジェクトは情報を保持するだけで、指し示すリソースにアクセスすることはない。フルパスは計算可能なのだが、二重に値を生成したくはないので、あえて値を渡すようにしている。""" + canHardLinkTarget=False + def Initialize(self,basename="", fullpath="", address="",hIcon=-1): """ 必要な情報をセットする diff --git a/views/main.py b/views/main.py index 93fb08c..ac32ea7 100644 --- a/views/main.py +++ b/views/main.py @@ -533,7 +533,7 @@ def OnMenuSelect(self,event): return if selected==menuItemsStore.getRef("FILE_MAKESHORTCUT"): target=self.parent.activeTab.GetSelectedItems().GetElement(0) #browsableObjects - d=views.makeShortcut.Dialog(target.basename) + d=views.makeShortcut.Dialog(target.basename,target.canLnkTarget,target.canHardLinkTarget,target.canSynLinkTarget) d.Initialize() ret=d.Show() if ret==wx.ID_CANCEL: return diff --git a/views/makeShortcut.py b/views/makeShortcut.py index 79dbfc9..400fc9f 100644 --- a/views/makeShortcut.py +++ b/views/makeShortcut.py @@ -24,11 +24,18 @@ class Dialog(BaseDialog): LINK_ABSOLUTE=0 LINK_RELATIVE=1 - #作成先初期値を決めるためのターゲットの名前とタイプ - def __init__(self,targetName): + #作成先初期値を決めるためのターゲットの名前、作成できないタイプがあれば指定 + def __init__(self,targetName,canMakeLnk=True,canMakeHardLink=True,canMakeSynLink=True): + if not canMakeLnk and not canMakeSynLink and not canMakeHardLink: + raise ValueError(_("makeShortcutDialogを表示するには、少なくとも1種類のショートカットの作成が有効化されている必要があります。")) + super().__init__() #対象オブジェクトの拡張子を除く名前 self.targetName=targetName + self.canMakeLnk=canMakeLnk + self.canMakeSynLink=canMakeSynLink + self.canMakeHardLink=canMakeHardLink + print(self.canMakeHardLink) def Initialize(self): t=misc.Timer() @@ -51,6 +58,10 @@ def InstallControls(self): self.creator=views.ViewCreator.ViewCreator(1,self.panel,self.mainArea,wx.VERTICAL,20) self.type=self.creator.radiobox(_("作成方式"),_typeChoices,self.typeChangeEvent,1,wx.VERTICAL) + self.type.EnableItem(self.TYPE_LNK,self.canMakeLnk) + self.type.EnableItem(self.TYPE_HARDLINK,self.canMakeHardLink) + self.type.EnableItem(self.TYPE_SYNLINK,self.canMakeSynLink) + self.creator=views.ViewCreator.ViewCreator(1,self.panel,self.sizer,wx.HORIZONTAL,0,"",wx.EXPAND) self.destination,tmp=self.creator.inputbox(_("作成先")+":",-1,self.targetName+".lnk")