⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outlineservice.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 2 页
字号:
    def FindDistanceToTreeItems(self, item, position, distances, items):        data = self.GetPyData(item)        this_dist = 1000000        if data and data[2]:            positionTuple = data[2]            if position >= positionTuple[1]:                items.append(item)                distances.append(position - positionTuple[1])        if self.ItemHasChildren(item):            child, cookie = self.GetFirstChild(item)            while child.IsOk():                self.FindDistanceToTreeItems(child, position, distances, items)                child, cookie = self.GetNextChild(item, cookie)        return False    def SetDoSelectCallback(self, item, view, callbackdata):        """ When an item in the outline view is selected,        a method is called to select the respective text in the document view.        The view must define the method DoSelectCallback(self, data) in order for this to work        """        self.SetPyData(item, (self._origOrderIndex, view, callbackdata))        self._origOrderIndex = self._origOrderIndex + 1    def CallDoLoadOutlineCallback(self, event):        """ Invoke the DoLoadOutlineCallback        """        rootItem = self.GetRootItem()        if rootItem:            data = self.GetPyData(rootItem)            if data:                view = data[self.VIEW]                if view and view.DoLoadOutlineCallback():                    self.SortAllChildren(self.GetRootItem())    def GetCallbackView(self):        rootItem = self.GetRootItem()        if rootItem:            return self.GetPyData(rootItem)[self.VIEW]        else:            return Noneclass OutlineService(Service.Service):    #----------------------------------------------------------------------------    # Constants    #----------------------------------------------------------------------------    SHOW_WINDOW = wx.NewId()  # keep this line for each subclass, need unique ID for each Service    SORT = wx.NewId()    SORT_ASC = wx.NewId()    SORT_DESC = wx.NewId()    SORT_NONE = wx.NewId()    #----------------------------------------------------------------------------    # Overridden methods    #----------------------------------------------------------------------------    def __init__(self, serviceName, embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM):        Service.Service.__init__(self, serviceName, embeddedWindowLocation)        self._validViewTypes = []    def _CreateView(self):        return OutlineView(self)    def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):        Service.Service.InstallControls(self, frame, menuBar, toolBar, statusBar, document)        wx.EVT_MENU(frame, OutlineService.SORT_ASC, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, OutlineService.SORT_ASC, frame.ProcessUpdateUIEvent)        wx.EVT_MENU(frame, OutlineService.SORT_DESC, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, OutlineService.SORT_DESC, frame.ProcessUpdateUIEvent)        wx.EVT_MENU(frame, OutlineService.SORT_NONE, frame.ProcessEvent)        wx.EVT_UPDATE_UI(frame, OutlineService.SORT_NONE, frame.ProcessUpdateUIEvent)        if wx.GetApp().GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:            return True        viewMenu = menuBar.GetMenu(menuBar.FindMenu(_("&View")))        self._outlineSortMenu = wx.Menu()        self._outlineSortMenu.AppendRadioItem(OutlineService.SORT_NONE, _("Unsorted"), _("Display items in original order"))        self._outlineSortMenu.AppendRadioItem(OutlineService.SORT_ASC, _("Sort A-Z"), _("Display items in ascending order"))        self._outlineSortMenu.AppendRadioItem(OutlineService.SORT_DESC, _("Sort Z-A"), _("Display items in descending order"))        viewMenu.AppendMenu(wx.NewId(), _("Outline Sort"), self._outlineSortMenu)        return True    #----------------------------------------------------------------------------    # Event Processing Methods    #----------------------------------------------------------------------------    def ProcessEvent(self, event):        if Service.Service.ProcessEvent(self, event):            return True        id = event.GetId()        if id == OutlineService.SORT_ASC:            self.OnSort(event)            return True        elif id == OutlineService.SORT_DESC:            self.OnSort(event)            return True        elif id == OutlineService.SORT_NONE:            self.OnSort(event)            return True        else:            return False    def ProcessUpdateUIEvent(self, event):        if Service.Service.ProcessUpdateUIEvent(self, event):            return True        id = event.GetId()        if id == OutlineService.SORT_ASC:            event.Enable(True)            config = wx.ConfigBase_Get()            sort = config.ReadInt("OutlineSort", SORT_NONE)            if sort == SORT_ASC:                self._outlineSortMenu.Check(OutlineService.SORT_ASC, True)            else:                self._outlineSortMenu.Check(OutlineService.SORT_ASC, False)            return True        elif id == OutlineService.SORT_DESC:            event.Enable(True)            config = wx.ConfigBase_Get()            sort = config.ReadInt("OutlineSort", SORT_NONE)            if sort == SORT_DESC:                self._outlineSortMenu.Check(OutlineService.SORT_DESC, True)            else:                self._outlineSortMenu.Check(OutlineService.SORT_DESC, False)            return True        elif id == OutlineService.SORT_NONE:            event.Enable(True)            config = wx.ConfigBase_Get()            sort = config.ReadInt("OutlineSort", SORT_NONE)            if sort == SORT_NONE:                self._outlineSortMenu.Check(OutlineService.SORT_NONE, True)            else:                self._outlineSortMenu.Check(OutlineService.SORT_NONE, False)            return True        else:            return False    def OnSort(self, event):        id = event.GetId()        if id == OutlineService.SORT_ASC:            wx.ConfigBase_Get().WriteInt("OutlineSort", SORT_ASC)            self.GetView().OnSort(SORT_ASC)            return True        elif id == OutlineService.SORT_DESC:            wx.ConfigBase_Get().WriteInt("OutlineSort", SORT_DESC)            self.GetView().OnSort(SORT_DESC)            return True        elif id == OutlineService.SORT_NONE:            wx.ConfigBase_Get().WriteInt("OutlineSort", SORT_NONE)            self.GetView().OnSort(SORT_NONE)            return True    #----------------------------------------------------------------------------    # Service specific methods    #----------------------------------------------------------------------------    def LoadOutline(self, view, position=-1, force=False):        if not self.GetView():            return        if hasattr(view, "DoLoadOutlineCallback"):            self.SaveExpansionState()            if view.DoLoadOutlineCallback(force=force):                self.GetView().OnSort(wx.ConfigBase_Get().ReadInt("OutlineSort", SORT_NONE))                self.LoadExpansionState()            if position >= 0:                self.SyncToPosition(position)    def SyncToPosition(self, position):        if not self.GetView():            return        self.GetView().GetTreeCtrl().SelectClosestItem(position)    def OnCloseFrame(self, event):        Service.Service.OnCloseFrame(self, event)        self.SaveExpansionState(clear = True)        return True    def SaveExpansionState(self, clear = False):        if clear:            expanded = []        elif self.GetView():            expanded = self.GetView().GetExpansionState()        wx.ConfigBase_Get().Write("OutlineLastExpanded", expanded.__repr__())    def LoadExpansionState(self):        expanded = wx.ConfigBase_Get().Read("OutlineLastExpanded")        if expanded:            self.GetView().SetExpansionState(eval(expanded))    #----------------------------------------------------------------------------    # Timer Methods    #----------------------------------------------------------------------------    def StartBackgroundTimer(self):        self._timer = wx.PyTimer(self.DoBackgroundRefresh)        self._timer.Start(250)    def DoBackgroundRefresh(self):        """ Refresh the outline view periodically """        self._timer.Stop()                foundRegisteredView = False        if self.GetView():            currView = wx.GetApp().GetDocumentManager().GetCurrentView()            if currView:                for viewType in self._validViewTypes:                    if isinstance(currView, viewType):                        self.LoadOutline(currView)                        foundRegisteredView = True                        break            if not foundRegisteredView:                self.GetView().ClearTreeCtrl()                            self._timer.Start(1000) # 1 second interval    def AddViewTypeForBackgroundHandler(self, viewType):        self._validViewTypes.append(viewType)    def GetViewTypesForBackgroundHandler(self):        return self._validViewTypes    def RemoveViewTypeForBackgroundHandler(self, viewType):        self._validViewTypes.remove(viewType)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -