codekingpro/portable-devtools
114k
1import os2 3import commctrl4import win32ui5from pywin.mfc import docview, window6from pywin.tools import hierlist7 8 9# directory listbox10# This has obvious limitations - doesnt track subdirs, etc. Demonstrates11# simple use of Python code for querying the tree as needed.12# Only use strings, and lists of strings (from curdir())13class DirHierList(hierlist.HierList):14 def __init__(self, root, listBoxID=win32ui.IDC_LIST1):15 hierlist.HierList.__init__(self, root, win32ui.IDB_HIERFOLDERS, listBoxID)16 17 def GetText(self, item):18 return os.path.basename(item)19 20 def GetSubList(self, item):21 if os.path.isdir(item):22 ret = [os.path.join(item, fname) for fname in os.listdir(item)]23 else:24 ret = None25 return ret26 27 # if the item is a dir, it is expandable.28 def IsExpandable(self, item):29 return os.path.isdir(item)30 31 def GetSelectedBitmapColumn(self, item):32 return self.GetBitmapColumn(item) + 6 # Use different color for selection33 34 35class TestDocument(docview.Document):36 def __init__(self, template):37 docview.Document.__init__(self, template)38 self.hierlist = hierlist.HierListWithItems(39 HLIFileDir("\\"), win32ui.IDB_HIERFOLDERS, win32ui.AFX_IDW_PANE_FIRST40 )41 42 43class HierListView(docview.TreeView):44 def OnInitialUpdate(self):45 rc = self._obj_.OnInitialUpdate()46 self.hierList = self.GetDocument().hierlist47 self.hierList.HierInit(self.GetParent())48 self.hierList.SetStyle(49 commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS50 )51 return rc52 53 54class HierListFrame(window.MDIChildWnd):55 pass56 57 58def GetTestRoot():59 tree1 = ("Tree 1", [("Item 1", "Item 1 data"), "Item 2", 3])60 tree2 = ("Tree 2", [("Item 2.1", "Item 2 data"), "Item 2.2", 2.3])61 return ("Root", [tree1, tree2, "Item 3"])62 63 64def demoboth():65 template = docview.DocTemplate(66 win32ui.IDR_PYTHONTYPE, TestDocument, HierListFrame, HierListView67 )68 template.OpenDocumentFile(None).SetTitle("Hierlist demo")69 70 demomodeless()71 72 73def demomodeless():74 testList2 = DirHierList("\\")75 dlg = hierlist.HierDialog("hier list test", testList2)76 dlg.CreateWindow()77 78 79def demodlg():80 testList2 = DirHierList("\\")81 dlg = hierlist.HierDialog("hier list test", testList2)82 dlg.DoModal()83 84 85def demo():86 template = docview.DocTemplate(87 win32ui.IDR_PYTHONTYPE, TestDocument, HierListFrame, HierListView88 )89 template.OpenDocumentFile(None).SetTitle("Hierlist demo")90 91 92#93# Demo/Test for HierList items.94#95# Easy to make a better directory program.96#97class HLIFileDir(hierlist.HierListItem):98 def __init__(self, filename):99 self.filename = filename100 hierlist.HierListItem.__init__(self)101 102 def GetText(self):103 try:104 return "%-20s %d bytes" % (105 os.path.basename(self.filename),106 os.stat(self.filename)[6],107 )108 except os.error as details:109 return "%-20s - %s" % (self.filename, details[1])110 111 def IsExpandable(self):112 return os.path.isdir(self.filename)113 114 def GetSubList(self):115 ret = []116 for newname in os.listdir(self.filename):117 if newname not in (".", ".."):118 ret.append(HLIFileDir(os.path.join(self.filename, newname)))119 return ret120 121 122def demohli():123 template = docview.DocTemplate(124 win32ui.IDR_PYTHONTYPE,125 TestDocument,126 hierlist.HierListFrame,127 hierlist.HierListView,128 )129 template.OpenDocumentFile(None).SetTitle("Hierlist demo")130 131 132if __name__ == "__main__":133 import demoutils134 135 if demoutils.HaveGoodGUI():136 demoboth()137 else:138 demodlg()139 