diff options
author | m32 <mak@trisoft.com.pl> | 2020-03-03 05:08:08 +0300 |
---|---|---|
committer | m32 <mak@trisoft.com.pl> | 2020-03-03 05:08:08 +0300 |
commit | f10f2927265617da0ef0c8c784b296152dbad770 (patch) | |
tree | da616ebfb13efc20cdf15e8add090dde80a36cc9 /python/configs/plug | |
parent | 395d32c3ac84cc58495f9ea98c68129d31af3fcd (diff) |
VSF plugin
Diffstat (limited to 'python/configs/plug')
-rw-r--r-- | python/configs/plug/far2l/upanel.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/python/configs/plug/far2l/upanel.py b/python/configs/plug/far2l/upanel.py new file mode 100644 index 00000000..d71cebd1 --- /dev/null +++ b/python/configs/plug/far2l/upanel.py @@ -0,0 +1,73 @@ +import os +from .plugin import PluginVFS + + +class Screen: + def __init__(self, parent): + self.parent = parent + self.hScreen = None + + def __enter__(self): + self.hScreen = self.parent.info.SaveScreen(0,0,-1,-1) + + def __exit__(self, *args): + self.parent.info.RestoreScreen(self.hScreen) + +class Plugin(PluginVFS): + label = "Python panel" + area = "Disk" + + def OpenPlugin(self, OpenFrom): + self.Root = "PythonPanel" + self.names = [] + self.Items = [] + return True + + def GetOpenPluginInfo(self, OpenInfo): + Info = self.ffi.cast("struct OpenPluginInfo *", OpenInfo) + Info.Flags = ( + self.ffic.OPIF_USEFILTER| + self.ffic.OPIF_USESORTGROUPS| + self.ffic.OPIF_USEHIGHLIGHTING| + self.ffic.OPIF_ADDDOTS| + self.ffic.OPIF_SHOWNAMESONLY + ) + Info.HostFile = self.ffi.NULL + Info.CurDir = self.s2f(self.Root) + Info.Format = self.s2f(self.label) + + def GetFindData(self, PanelItem, ItemsNumber, OpMode): + PanelItem = self.ffi.cast('struct PluginPanelItem **', PanelItem) + ItemsNumber = self.ffi.cast('int *', ItemsNumber) + n = len(self.Items) + p = self.ffi.NULL if n == 0 else self.Items + PanelItem[0] = p + ItemsNumber[0] = n + return 1 + + def SetDirectory(self, Dir, OpMode): + if OpMode & self.ffic.OPM_FIND: + return 0 + if self.f2s(Dir) == "": + self.info.Control(self, self.ffic.FCTL_CLOSEPLUGIN, 0, 0) + else: + self.info.Control(self, self.ffic.FCTL_CLOSEPLUGIN, 0, Dir) + return 1 + + def PutFiles(self, PanelItem, ItemsNumber, Move, SrcPath, OpMode): + PanelItem = self.ffi.cast('struct PluginPanelItem *', PanelItem) + SrcPath = self.f2s(SrcPath) + for i in range(ItemsNumber): + self.PutFile(PanelItem[i], Move, SrcPath, OpMode) + return 1 + + def PutFile(self, PanelItem, Move, SrcPath, OpMode): + fqname = os.path.join(SrcPath, self.f2s(PanelItem.FindData.lpwszFileName)) + items = self.ffi.new("struct PluginPanelItem []", len(self.Items)+1) + for i in range(len(self.Items)): + items[i] = self.Items[i] + self.Items = items + self.names.append(self.s2f(fqname)) + i = len(self.Items)-1 + items[i].FindData = PanelItem.FindData + items[i].FindData.lpwszFileName = self.names[i] |