diff -r f5cea1a6851e -r a1d970365e41 ProjectController.py --- a/ProjectController.py Thu Jun 28 16:42:07 2012 +0200 +++ b/ProjectController.py Sun Jul 01 23:20:19 2012 +0200 @@ -939,6 +939,10 @@ 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._IECCodeView is None: @@ -955,11 +959,9 @@ self._IECCodeView.SetText(text = text) self._IECCodeView.SetIcon(GetBitmap("ST")) + if self._IECCodeView is not None: self.AppFrame.EditProjectElement(self._IECCodeView, name) - elif onlyopened: - self.AppFrame.EditProjectElement(self._IECCodeView, name, onlyopened) - return self._IECCodeView elif name == "IEC raw code": @@ -972,25 +974,56 @@ 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) - elif onlyopened: - self.AppFrame.EditProjectElement(self._IECRawCodeView, name, onlyopened) - 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) - elif onlyopened: - self.AppFrame.EditProjectElement(self._ProjectFilesView, name, onlyopened) + 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")) + + if self._FileEditors.has_key(name): + self.AppFrame.EditProjectElement(self._FileEditors[name], name) - return self._ProjectFilesView - + return self._FileEditors[name] else: return ConfigTreeNode._OpenView(self, name, onlyopened) @@ -1002,6 +1035,8 @@ 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)