Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
hiertest.py139 linesDownload Raw Back to Demos
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 
codekingpro/portable-devtools · Team Ai