def OnDrop(self, files): """Opens dropped files @param files: list of file paths @postcondition: all files that could be properly opend are added to the notebook """ # Check file properties and make a "clean" list of file(s) to open valid_files = list() for fname in files: self.LOG("[ed_pages][evt] File(s) Dropped: %s" % fname) if not os.path.exists(fname): self.frame.PushStatusText(_("Invalid file: %s") % fname, \ ed_glob.SB_INFO) elif os.path.isdir(fname): dcnt = glob.glob(os.path.join(fname, '*')) dcnt = util.FilterFiles(dcnt) dlg = None if not len(dcnt): dlg = wx.MessageDialog(self, _("There are no files that Editra" " can open in %s") % fname, _("No Valid Files to Open"), style=wx.OK | wx.CENTER | \ wx.ICON_INFORMATION) elif len(dcnt) > 5: # Warn when the folder contains many files dlg = wx.MessageDialog(self, _("Do you wish to open all %d files" " in this directory?\n\nWarning" " opening many files at once may" " cause the editor to temporarly " " freeze.") % len(dcnt), _("Open Directory?"), style=wx.YES | wx.NO | \ wx.ICON_INFORMATION) if dlg is not None: result = dlg.ShowModal() dlg.Destroy() else: result = wx.ID_YES if result == wx.ID_YES: valid_files.extend(dcnt) else: pass else: valid_files.append(fname) for fname in valid_files: pathname = util.GetPathName(fname) the_file = util.GetFileName(fname) self.OpenPage(pathname, the_file) self.frame.PushStatusText(_("Opened file: %s") % fname, \ ed_glob.SB_INFO) return
def DoOpen(self, evt, fname=u''): """ Do the work of opening a file and placing it in a new notebook page. @keyword fname: can be optionally specified to open a file without opening a FileDialog @type fname: string """ try: e_id = evt.GetId() except AttributeError: e_id = evt if e_id == ID_OPEN: fdir = self.GetNotebook().GetCurrentCtrl().GetFileName() if len(fdir): fdir = os.path.dirname(fdir) elif not hasattr(sys, 'frozen'): fdir = os.curdir dlg = wx.FileDialog(self, _("Choose a File"), fdir, "", ''.join(syntax.GenFileFilters()), wx.OPEN | wx.MULTIPLE) dlg.SetFilterIndex(_PGET('FFILTER', 'int', 0)) if dlg.ShowModal() == wx.ID_OK: _PSET('FFILTER', dlg.GetFilterIndex()) for path in dlg.GetPaths(): if _PGET('OPEN_NW', default=False): wx.GetApp().OpenNewWindow(path) else: self.nb.OpenPage(util.GetPathName(path), util.GetFileName(path)) self.nb.GoCurrentPage() dlg.Destroy() else: self.LOG("[ed_main][info] CMD Open File: %s" % fname) self.nb.OpenPage(util.GetPathName(fname), util.GetFileName(fname), quiet=True) self.Raise()
def testGetFileName(self): """Test that getting the file name from a string returns the correct string. """ roots = (("Home", "foo", "projects"), ("usr", "bin"), ("Users", "bar", "Desktop")) fname = "test.py" paths = [os.path.join(os.sep.join(root), fname) for root in roots] for path in paths: self.assertEqual(fname, util.GetFileName(path), "util.GetFileName(%s) != %s" % (path, fname))
def GenerateHead(self): """Generates the html head block @return: html header information @rtype: string """ return "<head>\n<title>%s</title>\n" \ "<meta name=\"Generator\" content=\"Editra/%s\">\n" \ "<meta http-equiv=\"content-type\" content=\"text/html; " \ "charset=utf-8\">" \ "\n</head>" % (util.GetFileName(self.stc.GetFileName()), ed_glob.VERSION)
def DoOpen(self, evt, fname=u''): """ Do the work of opening a file and placing it in a new notebook page. @keyword fname: can be optionally specified to open a file without opening a FileDialog @type fname: string """ result = wx.ID_CANCEL try: e_id = evt.GetId() except AttributeError: e_id = evt if e_id == ID_OPEN: dlg = wx.FileDialog(self, _("Choose a File"), '', "", ''.join(syntax.GenFileFilters()), wx.OPEN | wx.MULTIPLE) dlg.SetFilterIndex(_PGET('FFILTER', 'int', 0)) result = dlg.ShowModal() _PSET('FFILTER', dlg.GetFilterIndex()) paths = dlg.GetPaths() dlg.Destroy() if result != wx.ID_OK: self.LOG('[mainw][info] Canceled Opening File') else: for path in paths: if _PGET('OPEN_NW', default=False): wx.GetApp().OpenNewWindow(path) else: dirname = util.GetPathName(path) filename = util.GetFileName(path) self.nb.OpenPage(dirname, filename) self.nb.GoCurrentPage() else: self.LOG("[mainw][info] CMD Open File: %s" % fname) filename = util.GetFileName(fname) dirname = util.GetPathName(fname) self.nb.OpenPage(dirname, filename)
def ResetAtalsConfig(root, prefixRoot, prefix, outDir): print("reset atals config") configName = "resource\\default.res.json" jsonData = json.load(file(os.path.join(root, configName), "r")) resJsonData = jsonData["resources"] jsonData["resources"] = [] newResJsonData = [] # 移除旧的配置 for data in resJsonData: if not data["url"].startswith(prefix): newResJsonData.append(data) # 增加新的配置文件 checkDir = os.path.join(outDir, prefixRoot, prefix.replace("/", "\\")) # 读取新生成的文件目录 for parent, dirnames, filenames in os.walk(checkDir): for filename in filenames: # 文件路径 realFilePath = os.path.join(parent, filename) # 配置路径 filePath = os.path.join(parent, filename).replace( checkDir, prefix).replace("\\", "/") fileType = "image" if filename.endswith(".json"): fileType = "sheet" # 如果是sheet的图片,不添加到列表 if fileType == "image" and realFilePath.endswith( ".png") and os.path.exists( realFilePath.replace(".png", ".json")): continue typeData = { "url": filePath, "type": fileType, "name": util.GetFileName(filePath) + (fileType == "sheet" and "_json" or "") } # 增加图集元素 if fileType == "sheet": frameJsonData = json.load(file(realFilePath, "r")) sheetArray = [] for sheetKey in frameJsonData["frames"]: sheetArray.append(sheetKey) typeData["subkeys"] = ",".join(sheetArray) newResJsonData.append(typeData) jsonData["resources"] = newResJsonData json.dump(jsonData, file(os.path.join(outDir, configName), "w"))
def ChangePage(self, pgid): """Change the page and focus to the the given page id @param pgid: Page number to change to """ window = self.GetPage(pgid) # returns current stc window.SetFocus() self.control = window fname = self.control.GetFileName() if fname == "": fname = self.GetPageText(pgid) self.frame.SetTitle("%s - file://%s" % (util.GetFileName(fname), fname))
def OpenFileObject(self, fileobj): """Open a new text editor page with the given file object. The file object must be an instance of ed_txt.EdFile. @param fileobj: File Object """ # Create the control self.GetTopLevelParent().Freeze() control = ed_editv.EdEditorView(self, wx.ID_ANY) control.Hide() # Load the files data path = fileobj.GetPath() filename = util.GetFileName(path) control.SetDocument(fileobj) result = control.ReloadFile() # Setup the buffer fileobj.AddModifiedCallback(control.FireModified) # Setup the notebook self.control = control self.control.FindLexer() self.control.EmptyUndoBuffer() self.control.Show() self.AddPage(self.control, filename) self.frame.SetTitle(self.control.GetTitleString()) self.frame.AddFileToHistory(path) self.SetPageText(self.GetSelection(), filename) self.LOG("[ed_pages][evt] Opened Page: %s" % filename) # Set tab image cpage = self.GetSelection() if fileobj.ReadOnly: super(EdPages, self).SetPageImage(cpage, self._index[ed_glob.ID_READONLY]) else: self.SetPageImage(cpage, str(self.control.GetLangId())) self.GetTopLevelParent().Thaw() # Refocus on selected page self.GoCurrentPage() ed_msg.PostMessage(ed_msg.EDMSG_FILE_OPENED, self.control.GetFileName()) if Profile_Get('WARN_EOL', default=True): self.control.CheckEOL()
def EditCommand(self, cmd): """Perform an edit related command @param cmd: command string to execute """ # e fname: edit file cmd = cmd[1:].strip() frame = self.GetTopLevelParent() if not os.path.isabs(cmd): cmd = os.path.join(self._curdir, cmd) if os.path.exists(cmd): frame.DoOpen(ed_glob.ID_COMMAND_LINE_OPEN, cmd) else: frame.nb.OpenPage(util.GetPathName(cmd), util.GetFileName(cmd))
def OpenDocPointer(self, ptr, doc, title=u''): """Open a page using an stc document poiner @param ptr: EdEditorView document Pointer @param doc: EdFile instance @keyword title: tab title """ self.GetTopLevelParent().Freeze() nbuff = self.GetCurrentPage() need_add = False if nbuff.GetFileName() or nbuff.GetLength(): need_add = True nbuff = ed_editv.EdEditorView(self) nbuff.SetDocPointer(ptr) nbuff.SetDocument(doc) doc.AddModifiedCallback(nbuff.FireModified) nbuff.FindLexer() path = nbuff.GetFileName() if Profile_Get('SAVE_POS'): pos = self.DocMgr.GetPos(path) nbuff.GotoPos(pos) nbuff.ScrollToColumn(0) if title: filename = title else: filename = util.GetFileName(path) if need_add: self.AddPage(nbuff, filename) else: self.SetPageText(self.GetSelection(), filename) self.frame.SetTitle(nbuff.GetTitleString()) self.LOG("[ed_pages][evt] Opened Page: %s" % filename) # Set tab image # TODO: Handle read only images self.SetPageImage(self.GetSelection(), str(nbuff.GetLangId())) # Refocus on selected page self.control = nbuff self.GoCurrentPage() self.GetTopLevelParent().Thaw() ed_msg.PostMessage(ed_msg.EDMSG_FILE_OPENED, nbuff.GetFileName())
def OnSave(self, evt): """Save Current or All Buffers @param evt: Event fired that called this handler @type evt: wxMenuEvent """ e_id = evt.GetId() ctrls = list() if e_id == ID_SAVE: page = self.nb.GetSelection() ctrls = [(self.nb.GetPageText(page), self.nb.GetCurrentCtrl(), page)] elif e_id == ID_SAVEALL: # Collect all open editor buffers for page in xrange(self.nb.GetPageCount()): if issubclass( self.nb.GetPage(page).__class__, wx.stc.StyledTextCtrl): ctrls.append((self.nb.GetPageText(page), self.nb.GetPage(page), page)) else: evt.Skip() return for ctrl in ctrls: fname = util.GetFileName(ctrl[1].GetFileName()) if fname != '': fpath = ctrl[1].GetFileName() result = ctrl[1].SaveFile(fpath) if result: self.PushStatusText(_("Saved File: %s") % fname, SB_INFO) if e_id == ID_SAVEALL: if ctrl[2] != self.nb.GetSelection(): self.nb.SetPageText(ctrl[2], fname) else: self.nb.OnUpdatePageText(None) else: err = ctrl[1].GetDocument().GetLastError() self.PushStatusText(_("ERROR: %s") % err, SB_INFO) ed_mdlg.SaveErrorDlg(self, fname, err) ctrl[1].GetDocument().ResetAll() else: ret_val = self.OnSaveAs(ID_SAVEAS, ctrl[0], ctrl[1]) if ret_val: self.AddFileToHistory(ctrl[1].GetFileName())
def OnSave(self, evt): """Save Current or All Buffers @param evt: Event fired that called this handler @type evt: wxMenuEvent """ e_id = evt.GetId() ctrls = list() if e_id == ID_SAVE: ctrls = [(self.nb.GetPageText(self.nb.GetSelection()), self.nb.GetCurrentCtrl())] elif e_id == ID_SAVEALL: for page in xrange(self.nb.GetPageCount()): if issubclass( self.nb.GetPage(page).__class__, wx.stc.StyledTextCtrl): ctrls.append( (self.nb.GetPageText(page), self.nb.GetPage(page))) else: evt.Skip() return for ctrl in ctrls: fname = util.GetFileName(ctrl[1].GetFileName()) if fname != '': fpath = ctrl[1].GetFileName() result = ctrl[1].SaveFile(fpath) if result: self.PushStatusText(_("Saved File: %s") % fname, SB_INFO) else: self.PushStatusText( _("ERROR: Failed to save %s") % fname, SB_INFO) dlg = wx.MessageDialog(self, _("Failed to save file: %s\n\nError:\n%d") % \ (fname, result), _("Save Error"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() else: ret_val = self.OnSaveAs(ID_SAVEAS, ctrl[0], ctrl[1]) if ret_val: self.AddFileToHistory(ctrl[1].GetFileName()) self.UpdateToolBar()
def OnSaveAs(self, evt, title=u'', page=None): """Save File Using a new/different name @param evt: Event fired that called this handler @type evt: wxMenuEvent """ if page: ctrl = page else: ctrl = self.nb.GetCurrentCtrl() if title == u'': title = os.path.split(ctrl.GetFileName())[1] dlg = wx.FileDialog(self, _("Choose a Save Location"), os.path.dirname(ctrl.GetFileName()), title.lstrip("*"), ''.join(syntax.GenFileFilters()), wx.SAVE | wx.OVERWRITE_PROMPT) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() result = ctrl.SaveFile(path) fname = util.GetFileName(ctrl.GetFileName()) if not result: err = ctrl.GetDocument().GetLastError() ed_mdlg.SaveErrorDlg(self, fname, err) ctrl.GetDocument().ResetAll() self.PushStatusText( _("ERROR: Failed to save %s") % fname, SB_INFO) else: self.PushStatusText(_("Saved File As: %s") % fname, SB_INFO) self.SetTitle("%s - file://%s" % (fname, ctrl.GetFileName())) self.nb.SetPageText(self.nb.GetSelection(), fname) self.nb.GetCurrentCtrl().FindLexer() self.nb.UpdatePageImage() return result else: dlg.Destroy()
def ChangePage(self, pg_num): """Change the page and focus to the the given page id @param pg_num: Page number to change """ if self.GetSelection() != pg_num: self.SetSelection(pg_num) # Get the window that is the current page window = self.GetPage(pg_num) window.SetFocus() self.control = window fname = self.control.GetFileName() # Update Frame Title if fname == "": fname = self.GetPageText(pg_num) self.frame.SetTitle("%s - file://%s" % (util.GetFileName(fname), fname)) if not self.frame.IsExiting(): ed_msg.PostMessage(ed_msg.EDMSG_UI_NB_CHANGED, (self, pg_num))
def DocDuplicated(self, path): """Check for if the given path is open elswhere and duplicate the docpointer. @param path: string """ doc = ed_msg.RequestResult(ed_msg.EDREQ_DOCPOINTER, [self, path]) if hasattr(doc, 'GetDocPointer'): self.GetTopLevelParent().Freeze() nbuff = ed_editv.EdEditorView(self, wx.ID_ANY) nbuff.SetDocPointer(doc.GetDocPointer()) doc = doc.GetDocument() nbuff.SetDocument(doc) doc.AddModifiedCallback(nbuff.FireModified) nbuff.FindLexer() nbuff.EmptyUndoBuffer() if Profile_Get('SAVE_POS'): pos = self.DocMgr.GetPos(nbuff.GetFileName()) nbuff.GotoPos(pos) nbuff.ScrollToColumn(0) filename = util.GetFileName(path) self.AddPage(nbuff, filename) self.frame.SetTitle(nbuff.GetTitleString()) self.SetPageText(self.GetSelection(), filename) self.LOG("[ed_pages][evt] Opened Page: %s" % filename) # Set tab image self.SetPageImage(self.GetSelection(), str(nbuff.GetLangId())) # Refocus on selected page self.control = nbuff self.GoCurrentPage() self.GetTopLevelParent().Thaw() ed_msg.PostMessage(ed_msg.EDMSG_FILE_OPENED, nbuff.GetFileName()) return True else: return False
def OnSaveAs(self, evt, title=u'', page=None): """Save File Using a new/different name @param evt: Event fired that called this handler @type evt: wxMenuEvent """ dlg = wx.FileDialog(self, _("Choose a Save Location"), u'', title.lstrip(u"*"), ''.join(syntax.GenFileFilters()), wx.SAVE | wx.OVERWRITE_PROMPT) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if page: ctrl = page else: ctrl = self.nb.GetCurrentCtrl() result = ctrl.SaveFile(path) fname = util.GetFileName(ctrl.GetFileName()) if not result: dlg = wx.MessageDialog(self, _("Failed to save file: %s\n\nError:\n%d") % \ (fname, result), _("Save Error"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() self.PushStatusText( _("ERROR: Failed to save %s") % fname, SB_INFO) else: self.PushStatusText(_("Saved File As: %s") % fname, SB_INFO) self.SetTitle(u"%s - file://%s" % (fname, ctrl.GetFileName())) self.nb.SetPageText(self.nb.GetSelection(), fname) self.nb.GetCurrentCtrl().FindLexer() self.nb.UpdatePageImage() return result else: dlg.Destroy()
def OpenPreviewFile(self, file_lbl): """Opens a file using the names in the Syntax Files choice control as a search query. @param file_lbl: name of file to open in test data directory """ fname = file_lbl.replace(u" ", u"_").replace(u"/", u"_").lower() fname = fname.replace('#', 'sharp') try: # fname = glob.glob(ed_glob.CONFIG['TEST_DIR'] + fname + ".*")[0] fname = glob.glob( os.path.join(util.GetResourceDir('tests'), fname) + ".*")[0] except IndexError: self.LOG('[style_editor][err] File %s Does not exist' % fname) return False #self.preview.SetFileName(fname) self.preview.dirname = util.GetPathName(fname) self.preview.filename = util.GetFileName(fname) self.preview.ClearAll() self.preview.LoadFile(fname) self.preview.FindLexer() self.preview.EmptyUndoBuffer() return True