ProjectController.py
changeset 784 a1d970365e41
parent 782 6f0e10085df9
child 786 aaacf208beb9
--- 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)