diff -r 7499535588e6 -r f49875b9e946 ProjectController.py --- a/ProjectController.py Tue Jun 19 21:59:34 2012 +0200 +++ b/ProjectController.py Fri Jul 06 21:00:43 2012 +0200 @@ -14,17 +14,18 @@ import targets import connectors -from util.misc import opjimg, CheckPathPerm, GetClassImporter +from util.misc import CheckPathPerm, GetClassImporter from util.MiniTextControler import MiniTextControler from util.ProcessLogger import ProcessLogger +from util.FileManagementPanel import FileManagementPanel from PLCControler import PLCControler -from PLCOpenEditor import CWD from TextViewer import TextViewer from plcopen.structures import IEC_KEYWORDS from targets.typemapping import DebugTypesSize from util.discovery import DiscoveryDialog from ConfigTreeNode import ConfigTreeNode from ProjectNodeEditor import ProjectNodeEditor +from utils.BitmapLibrary import GetBitmap base_folder = os.path.split(sys.path[0])[0] @@ -182,8 +183,8 @@ def GetProjectName(self): return os.path.split(self.ProjectPath)[1] - def GetIconPath(self): - return os.path.join(CWD, "Images", "PROJECT.png") + def GetIconName(self): + return "PROJECT" def GetDefaultTargetName(self): if wx.Platform == '__WXMSW__': @@ -315,7 +316,7 @@ CTNChild.CTNName()), "type": ITEM_CONFNODE, "confnode": CTNChild, - "icon": CTNChild.GetIconPath(), + "icon": CTNChild.GetIconName(), "values": self.RecursiveConfNodeInfos(CTNChild)}) return values @@ -933,14 +934,22 @@ _IECRawCodeView = None def _editIECrawcode(self): self._OpenView("IEC raw code") - - def _OpenView(self, name=None): + + _ProjectFilesView = None + def _OpenProjectFiles(self): + self._OpenView("Project files") + + _FileEditors = {} + def _OpenFileEditor(self, filepath): + self._OpenView(filepath) + + def _OpenView(self, name=None, onlyopened=False): if name == "IEC code": - if self._IEC_code_viewer is None: + if self._IECCodeView is None: plc_file = self._getIECcodepath() self._IECCodeView = TextViewer(self.AppFrame.TabsOpened, "", None, None, instancepath=name) - #self._IECCodeViewr.Enable(False) + #self._IECCodeView.Enable(False) self._IECCodeView.SetTextSyntax("ALL") self._IECCodeView.SetKeywords(IEC_KEYWORDS) try: @@ -948,29 +957,75 @@ except: text = '(* No IEC code have been generated at that time ! *)' self._IECCodeView.SetText(text = text) - self._IECCodeView.SetIcon(self.AppFrame.GenerateBitmap("ST")) - + self._IECCodeView.SetIcon(GetBitmap("ST")) + + if self._IECCodeView is not None: self.AppFrame.EditProjectElement(self._IECCodeView, name) - + return self._IECCodeView elif name == "IEC raw code": - if self.IEC_raw_code_viewer is None: + if self._IECRawCodeView is None: controler = MiniTextControler(self._getIECrawcodepath()) - self.IEC_raw_code_viewer = TextViewer(self.AppFrame.TabsOpened, "", None, controler, instancepath=name) - #self.IEC_raw_code_viewer.Enable(False) - self.IEC_raw_code_viewer.SetTextSyntax("ALL") - self.IEC_raw_code_viewer.SetKeywords(IEC_KEYWORDS) - self.IEC_raw_code_viewer.RefreshView() - self.IEC_raw_code_viewer.SetIcon(self.AppFrame.GenerateBitmap("ST")) + self._IECRawCodeView = TextViewer(self.AppFrame.TabsOpened, "", None, controler, instancepath=name) + #self._IECRawCodeView.Enable(False) + self._IECRawCodeView.SetTextSyntax("ALL") + self._IECRawCodeView.SetKeywords(IEC_KEYWORDS) + self._IECRawCodeView.RefreshView() + self._IECRawCodeView.SetIcon(GetBitmap("ST")) + + if self._IECRawCodeView is not None: + self.AppFrame.EditProjectElement(self._IECRawCodeView, name) + + return self._IECRawCodeView + + elif name == "Project files": + if self._ProjectFilesView is None: + self._ProjectFilesView = FileManagementPanel(self.AppFrame.TabsOpened, self, name, self._getProjectFilesPath(), True) + + extensions = [] + for extension, name, editor in features.file_editors: + if extension not in extensions: + extensions.append(extension) + self._ProjectFilesView.SetEditableFileExtensions(extensions) + + if self._ProjectFilesView is not None: + self.AppFrame.EditProjectElement(self._ProjectFilesView, name) + + return self._ProjectFilesView + + elif name is not None and os.path.isfile(name): + if not self._FileEditors.has_key(name): + file_extension = os.path.splitext(name)[1] + + editors = dict([(editor_name, editor) + for extension, editor_name, editor in features.file_editors + if extension == file_extension]) + + editor_name = None + if len(editors) == 1: + editor_name = editors.keys()[0] + elif len(editors) > 0: + names = editors.keys() + dialog = wx.SingleChoiceDialog(self.ParentWindow, + _("Select an editor:"), _("Editor selection"), + names, wx.OK|wx.CANCEL) + if dialog.ShowModal() == wx.ID_OK: + editor_name = names[dialog.GetSelection()] + dialog.Destroy() + + if editor_name is not None: + editor = editors[editor_name]() + self._FileEditors[name] = editor(self.AppFrame.TabsOpened, self, name, self.AppFrame) + self._FileEditors[name].SetIcon(GetBitmap("FILE")) - self.AppFrame.EditProjectElement(self.IEC_raw_code_viewer, name) - - return self.IEC_raw_code_viewer - + if self._FileEditors.has_key(name): + self.AppFrame.EditProjectElement(self._FileEditors[name], name) + + return self._FileEditors[name] else: - return ConfigTreeNode._OpenView(self, name) + return ConfigTreeNode._OpenView(self, self.CTNName(), onlyopened) def OnCloseEditor(self, view): ConfigTreeNode.OnCloseEditor(self, view) @@ -978,6 +1033,10 @@ self._IECCodeView = None if self._IECRawCodeView == view: self._IECRawCodeView = None + if self._ProjectFilesView == view: + self._ProjectFilesView = None + if view in self._FileEditors.values(): + self._FileEditors.pop(view.GetTagName()) def _Clean(self): self._CloseView(self._IECCodeView) @@ -1415,16 +1474,6 @@ wx.CallAfter(self.UpdateMethodsFromPLCStatus) - def _ImportProjectFile(self): - dialog = wx.FileDialog(self.AppFrame, _("Choose a file"), os.getcwd(), "", _("All files|*.*"), wx.OPEN) - if dialog.ShowModal() == wx.ID_OK: - filepath = dialog.GetPath() - if os.path.isfile(filepath): - shutil.copy(filepath, self._getProjectFilesPath()) - else: - self.logger.write_error(_("No such file: %s\n") % filepath) - dialog.Destroy() - StatusMethods = [ {"bitmap" : "Build", "name" : _("Build"), @@ -1471,10 +1520,10 @@ "name" : _("Raw IEC code"), "tooltip" : _("Edit raw IEC code added to code generated by PLCGenerator"), "method" : "_editIECrawcode"}, - {"bitmap" : "ImportFile", - "name" : _("Import file"), - "tooltip" : _("Import into project a file to be transfered with PLC"), - "method" : "_ImportProjectFile"}, + {"bitmap" : "ManageFolder", + "name" : _("Project Files"), + "tooltip" : _("Open a file explorer to manage project files"), + "method" : "_OpenProjectFiles"}, ]