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

📄 projecteditor.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 5 页
字号:
        Wizard.BaseWizard.__init__(self, parent, self.WIZTITLE)        self._projectLocationPage = self.CreateProjectLocation(self)        wx.wizard.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnWizPageChanging)    def CreateProjectLocation(self,wizard):        page = Wizard.TitledWizardPage(wizard, _("Name and Location"))        page.GetSizer().Add(wx.StaticText(page, -1, _("\nEnter the name and location for the project.\n")))        self._projectName, self._dirCtrl, sizer, self._fileValidation = UICommon.CreateDirectoryControl(page, fileExtension="agp", appDirDefaultStartDir=True, fileLabel=_("Name:"), dirLabel=_("Location:"))        page.GetSizer().Add(sizer, 1, flag=wx.EXPAND)        wizard.Layout()        wizard.FitToPage(page)        return page    def RunWizard(self, existingTables = None, existingRelationships = None):        status = Wizard.BaseWizard.RunWizard(self, self._projectLocationPage)        if status:            wx.ConfigBase_Get().Write(PROJECT_DIRECTORY_KEY, self._dirCtrl.GetValue())            docManager = wx.GetApp().GetTopWindow().GetDocumentManager()            if os.path.exists(self._fullProjectPath):                # What if the document is already open and we're overwriting it?                documents = docManager.GetDocuments()                for document in documents:                    if os.path.normcase(document.GetFilename()) == os.path.normcase(self._fullProjectPath):  # If the renamed document is open, update it                        document.DeleteAllViews()                        break                os.remove(self._fullProjectPath)            for template in docManager.GetTemplates():                if template.GetDocumentType() == ProjectDocument:                    doc = template.CreateDocument(self._fullProjectPath, flags = wx.lib.docview.DOC_NEW)                    doc.OnSaveDocument(self._fullProjectPath)                    projectService = wx.GetApp().GetService(ProjectService)                    view = projectService.GetView()                    view.AddProjectToView(doc)                    break        self.Destroy()        return status    def OnWizPageChanging(self, event):        if event.GetDirection():  # It's going forwards            if event.GetPage() == self._projectLocationPage:                if not self._fileValidation(validClassName=True):                    event.Veto()                    return                self._fullProjectPath = os.path.join(self._dirCtrl.GetValue(),UICommon.MakeNameEndInExtension(self._projectName.GetValue(), PROJECT_EXTENSION))    def OnShowCreatePages(self):        self.Hide()        import DataModelEditor        requestedPos = self.GetPositionTuple()        projectService = wx.GetApp().GetService(ProjectService)        projectView = projectService.GetView()        wiz = DataModelEditor.ImportExportWizard(projectView.GetFrame(), pos=requestedPos)        if wiz.RunWizard(dontDestroy=True):           self._schemaName.SetValue(wiz.GetSchemaFileName())        wiz.Destroy()        self.Show(True)class ProjectTemplate(wx.lib.docview.DocTemplate):    def CreateDocument(self, path, flags):        if path:            doc = wx.lib.docview.DocTemplate.CreateDocument(self, path, flags)            if path:                doc.GetModel()._projectDir = os.path.dirname(path)            return doc        else:            wiz = NewProjectWizard(wx.GetApp().GetTopWindow())            wiz.RunWizard()            wiz.Destroy()            return None  # never return the doc, otherwise docview will think it is a new file and rename itclass ProjectAddFilesCommand(wx.lib.docview.Command):    def __init__(self, projectDoc, filePaths, folderPath=None, types=None, names=None):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._projectDoc = projectDoc        self._allFilePaths = filePaths        self._folderPath = folderPath        self._types = types        self._names = names                if not self._types:            self._types = []            projectService = wx.GetApp().GetService(ProjectService)            for filePath in self._allFilePaths:                self._types.append(projectService.FindFileTypeDefault(filePath))        # list of files that will really be added        self._newFiles = []        for filePath in self._allFilePaths:            if not projectDoc.GetModel().FindFile(filePath):                self._newFiles.append(filePath)    def GetName(self):        if len(self._allFilePaths) == 1:            return _("Add File %s") % os.path.basename(self._allFilePaths[0])        else:            return _("Add Files")    def Do(self):        return self._projectDoc.AddFiles(self._allFilePaths, self._folderPath, self._types, self._names)    def Undo(self):        return self._projectDoc.RemoveFiles(self._newFiles)class ProjectRemoveFilesCommand(wx.lib.docview.Command):    def __init__(self, projectDoc, files):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._projectDoc = projectDoc        self._files = files    def GetName(self):        if len(self._files) == 1:            return _("Remove File %s") % os.path.basename(self._files[0].filePath)        else:            return _("Remove Files")    def Do(self):        return self._projectDoc.RemoveFiles(files=self._files)    def Undo(self):        return self._projectDoc.AddFiles(files=self._files)class ProjectRenameFileCommand(wx.lib.docview.Command):    def __init__(self, projectDoc, oldFilePath, newFilePath, isProject = False):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._projectDoc = projectDoc        self._oldFilePath = oldFilePath        self._newFilePath = newFilePath        self._isProject = isProject    def GetName(self):        return _("Rename File %s to %s") % (os.path.basename(self._oldFilePath), os.path.basename(self._newFilePath))    def Do(self):        return self._projectDoc.RenameFile(self._oldFilePath, self._newFilePath, self._isProject)    def Undo(self):        return self._projectDoc.RenameFile(self._newFilePath, self._oldFilePath, self._isProject)class ProjectRenameFolderCommand(wx.lib.docview.Command):    def __init__(self, doc, oldFolderPath, newFolderPath):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._doc = doc        self._oldFolderPath = oldFolderPath        self._newFolderPath = newFolderPath    def GetName(self):        return _("Rename Folder %s to %s") % (os.path.basename(self._oldFolderPath), os.path.basename(self._newFolderPath))    def Do(self):        return self._doc.RenameFolder(self._oldFolderPath, self._newFolderPath)    def Undo(self):        return self._doc.RenameFolder(self._newFolderPath, self._oldFolderPath)    class ProjectAddFolderCommand(wx.lib.docview.Command):    def __init__(self, view, doc, folderpath):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._doc = doc        self._view = view        self._folderpath = folderpath    def GetName(self):        return _("Add Folder %s") % (os.path.basename(self._folderpath))    def Do(self):        if self._view.GetDocument() != self._doc:            return True        status = self._view.AddFolder(self._folderpath)        if status:            self._view._treeCtrl.UnselectAll()            item = self._view._treeCtrl.FindFolder(self._folderpath)            self._view._treeCtrl.SelectItem(item)        return status    def Undo(self):        if self._view.GetDocument() != self._doc:            return True        return self._view.DeleteFolder(self._folderpath)class ProjectRemoveFolderCommand(wx.lib.docview.Command):    def __init__(self, view, doc, folderpath):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._doc = doc        self._view = view        self._folderpath = folderpath    def GetName(self):        return _("Remove Folder %s") % (os.path.basename(self._folderpath))    def Do(self):        if self._view.GetDocument() != self._doc:            return True        return self._view.DeleteFolder(self._folderpath)    def Undo(self):        if self._view.GetDocument() != self._doc:            return True        status = self._view.AddFolder(self._folderpath)        if status:            self._view._treeCtrl.UnselectAll()            item = self._view._treeCtrl.FindFolder(self._folderpath)            self._view._treeCtrl.SelectItem(item)        return statusclass ProjectMoveFilesCommand(wx.lib.docview.Command):    def __init__(self, doc, files, folderPath):        wx.lib.docview.Command.__init__(self, canUndo = True)        self._doc = doc        self._files = files        self._newFolderPath = folderPath                self._oldFolderPaths = []        for file in self._files:            self._oldFolderPaths.append(file.logicalFolder)                def GetName(self):        if len(self._files) == 1:            return _("Move File %s") % os.path.basename(self._files[0].filePath)        else:                return _("Move Files")    def Do(self):        return self._doc.MoveFiles(self._files, self._newFolderPath)    def Undo(self):        return self._doc.MoveFiles(self._files, self._oldFolderPaths)            class ProjectTreeCtrl(wx.TreeCtrl):    #----------------------------------------------------------------------------    # Overridden Methods    #----------------------------------------------------------------------------    def __init__(self, parent, id, style):        wx.TreeCtrl.__init__(self, parent, id, style = style)        templates = wx.GetApp().GetDocumentManager().GetTemplates()        iconList = wx.ImageList(16, 16, initialCount = len(templates))        self._iconIndexLookup = []        for template in templates:            icon = template.GetIcon()            if icon:                if icon.GetHeight() != 16 or icon.GetWidth() != 16:                    icon.SetHeight(16)                    icon.SetWidth(16)                    if wx.GetApp().GetDebug():                        print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName                iconIndex = iconList.AddIcon(icon)                self._iconIndexLookup.append((template, iconIndex))        icon = getBlankIcon()        if icon.GetHeight() != 16 or icon.GetWidth() != 16:            icon.SetHeight(16)            icon.SetWidth(16)            if wx.GetApp().GetDebug():                print "Warning: getBlankIcon isn't 16x16, not crossplatform"        self._blankIconIndex = iconList.AddIcon(icon)                icon = getFolderClosedIcon()        if icon.GetHeight() != 16 or icon.GetWidth() != 16:            icon.SetHeight(16)            icon.SetWidth(16)            if wx.GetApp().GetDebug():                print "Warning: getFolderIcon isn't 16x16, not crossplatform"        self._folderClosedIconIndex = iconList.AddIcon(icon)        icon = getFolderOpenIcon()        if icon.GetHeight() != 16 or icon.GetWidth() != 16:            icon.SetHeight(16)            icon.SetWidth(16)            if wx.GetApp().GetDebug():                print "Warning: getFolderIcon isn't 16x16, not crossplatform"        self._folderOpenIconIndex = iconList.AddIcon(icon)        self.AssignImageList(iconList)    def OnCompareItems(self, item1, item2):        item1IsFolder = (self.GetPyData(item1) == None)        item2IsFolder = (self.GetPyData(item2) == None)        if (item1IsFolder == item2IsFolder):  # if both are folders or both not            return cmp(self.GetItemText(item1).lower(), self.GetItemText(item2).lower())        elif item1IsFolder and not item2IsFolder: # folders sort above non-folders            return -1        elif not item1IsFolder and item2IsFolder: # folders sort above non-folders            return 1        

⌨️ 快捷键说明

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