--- 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)