145 from util.TextCtrlAutoComplete import TextCtrlAutoComplete |
145 from util.TextCtrlAutoComplete import TextCtrlAutoComplete |
146 import cPickle |
146 import cPickle |
147 from util.BrowseValuesLibraryDialog import BrowseValuesLibraryDialog |
147 from util.BrowseValuesLibraryDialog import BrowseValuesLibraryDialog |
148 import types, time, re, platform, time, traceback, commands |
148 import types, time, re, platform, time, traceback, commands |
149 from ProjectController import ProjectController, MATIEC_ERROR_MODEL |
149 from ProjectController import ProjectController, MATIEC_ERROR_MODEL |
150 from util import MiniTextControler |
150 from util.MiniTextControler import MiniTextControler |
151 from util.ProcessLogger import ProcessLogger |
151 from util.ProcessLogger import ProcessLogger |
152 |
152 |
153 from docutil import OpenHtmlFrame |
153 from docutil import OpenHtmlFrame |
154 from PLCOpenEditor import IDEFrame, AppendMenu, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES, USE_AUI |
154 from PLCOpenEditor import IDEFrame, AppendMenu, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE, SCALING, PAGETITLES, USE_AUI |
155 from PLCOpenEditor import EditorPanel, Viewer, TextViewer, GraphicViewer, ResourceEditor, ConfigurationEditor, DataTypeEditor |
155 from PLCOpenEditor import EditorPanel, Viewer, TextViewer, GraphicViewer, ResourceEditor, ConfigurationEditor, DataTypeEditor |
156 from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY |
156 from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY |
157 |
157 |
158 SCROLLBAR_UNIT = 10 |
158 SCROLLBAR_UNIT = 10 |
159 WINDOW_COLOUR = wx.Colour(240,240,240) |
159 WINDOW_COLOUR = wx.Colour(240,240,240) |
556 self.CTR = ProjectController(self, self.Log) |
556 self.CTR = ProjectController(self, self.Log) |
557 self.Controler = self.CTR |
557 self.Controler = self.CTR |
558 result = self.CTR.LoadProject(projectOpen, buildpath) |
558 result = self.CTR.LoadProject(projectOpen, buildpath) |
559 if not result: |
559 if not result: |
560 self.LibraryPanel.SetControler(self.Controler) |
560 self.LibraryPanel.SetControler(self.Controler) |
|
561 self.PouInstanceVariablesPanel.SetController(self.Controler) |
561 self.RefreshConfigRecentProjects(os.path.abspath(projectOpen)) |
562 self.RefreshConfigRecentProjects(os.path.abspath(projectOpen)) |
562 self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE) |
563 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
563 self.RefreshAll() |
564 self.RefreshAll() |
564 else: |
565 else: |
565 self.ResetView() |
566 self.ResetView() |
566 self.ShowErrorMessage(result) |
567 self.ShowErrorMessage(result) |
567 else: |
568 else: |
568 self.CTR = ctr |
569 self.CTR = ctr |
569 self.Controler = ctr |
570 self.Controler = ctr |
570 if ctr is not None: |
571 if ctr is not None: |
571 self.LibraryPanel.SetControler(self.Controler) |
572 self.LibraryPanel.SetControler(self.Controler) |
572 self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE) |
573 self.PouInstanceVariablesPanel.SetController(self.Controler) |
|
574 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
573 self.RefreshAll() |
575 self.RefreshAll() |
574 if self.EnableDebug: |
576 if self.EnableDebug: |
575 self.DebugVariablePanel.SetDataProducer(self.CTR) |
577 self.DebugVariablePanel.SetDataProducer(self.CTR) |
576 |
578 |
577 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) |
579 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) |
771 MenuToolBar.EnableTool(wx.ID_SAVEAS, False) |
773 MenuToolBar.EnableTool(wx.ID_SAVEAS, False) |
772 self.FileMenu.Enable(wx.ID_PROPERTIES, False) |
774 self.FileMenu.Enable(wx.ID_PROPERTIES, False) |
773 self.FileMenu.Enable(wx.ID_CLOSE_ALL, False) |
775 self.FileMenu.Enable(wx.ID_CLOSE_ALL, False) |
774 |
776 |
775 def RefreshRecentProjectsMenu(self): |
777 def RefreshRecentProjectsMenu(self): |
776 for i in xrange(self.RecentProjectsMenu.GetMenuItemCount()): |
|
777 item = self.RecentProjectsMenu.FindItemByPosition(0) |
|
778 self.RecentProjectsMenu.Delete(item.GetId()) |
|
779 |
|
780 recent_projects = cPickle.loads(str(self.Config.Read("RecentProjects", cPickle.dumps([])))) |
778 recent_projects = cPickle.loads(str(self.Config.Read("RecentProjects", cPickle.dumps([])))) |
781 self.FileMenu.Enable(ID_FILEMENURECENTPROJECTS, len(recent_projects) > 0) |
779 self.FileMenu.Enable(ID_FILEMENURECENTPROJECTS, len(recent_projects) > 0) |
782 for idx, projectpath in enumerate(recent_projects): |
780 for idx, projectpath in enumerate(recent_projects): |
783 id = wx.NewId() |
781 text = u'%d: %s' % (idx + 1, projectpath) |
784 AppendMenu(self.RecentProjectsMenu, help='', id=id, |
782 |
785 kind=wx.ITEM_NORMAL, text="%d: %s" % (idx + 1, projectpath)) |
783 if idx < self.RecentProjectsMenu.GetMenuItemCount(): |
|
784 item = self.RecentProjectsMenu.FindItemByPosition(idx) |
|
785 id = item.GetId() |
|
786 item.SetItemLabel(text) |
|
787 self.Disconnect(id, id, wx.EVT_BUTTON._getEvtType()) |
|
788 else: |
|
789 id = wx.NewId() |
|
790 AppendMenu(self.RecentProjectsMenu, help='', id=id, |
|
791 kind=wx.ITEM_NORMAL, text=text) |
786 self.Bind(wx.EVT_MENU, self.GenerateOpenRecentProjectFunction(projectpath), id=id) |
792 self.Bind(wx.EVT_MENU, self.GenerateOpenRecentProjectFunction(projectpath), id=id) |
787 |
793 |
788 def GenerateOpenRecentProjectFunction(self, projectpath): |
794 def GenerateOpenRecentProjectFunction(self, projectpath): |
789 def OpenRecentProject(event): |
795 def OpenRecentProject(event): |
790 if self.CTR is not None and not self.CheckSaveBeforeClosing(): |
796 if self.CTR is not None and not self.CheckSaveBeforeClosing(): |
791 return |
797 return |
792 |
798 |
1678 result = ctr.NewProject(projectpath) |
1684 result = ctr.NewProject(projectpath) |
1679 if not result: |
1685 if not result: |
1680 self.CTR = ctr |
1686 self.CTR = ctr |
1681 self.Controler = self.CTR |
1687 self.Controler = self.CTR |
1682 self.LibraryPanel.SetControler(self.Controler) |
1688 self.LibraryPanel.SetControler(self.Controler) |
|
1689 self.PouInstanceVariablesPanel.SetController(self.Controler) |
1683 self.RefreshConfigRecentProjects(projectpath) |
1690 self.RefreshConfigRecentProjects(projectpath) |
1684 if self.EnableDebug: |
1691 if self.EnableDebug: |
1685 self.DebugVariablePanel.SetDataProducer(self.CTR) |
1692 self.DebugVariablePanel.SetDataProducer(self.CTR) |
1686 self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE) |
1693 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1687 self.RefreshAll() |
1694 self.RefreshAll() |
1688 else: |
1695 else: |
1689 self.ResetView() |
1696 self.ResetView() |
1690 self.ShowErrorMessage(result) |
1697 self.ShowErrorMessage(result) |
1691 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) |
1698 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) |
1713 self.CTR = ProjectController(self, self.Log) |
1720 self.CTR = ProjectController(self, self.Log) |
1714 self.Controler = self.CTR |
1721 self.Controler = self.CTR |
1715 result = self.CTR.LoadProject(projectpath) |
1722 result = self.CTR.LoadProject(projectpath) |
1716 if not result: |
1723 if not result: |
1717 self.LibraryPanel.SetControler(self.Controler) |
1724 self.LibraryPanel.SetControler(self.Controler) |
|
1725 self.PouInstanceVariablesPanel.SetController(self.Controler) |
1718 self.RefreshConfigRecentProjects(projectpath) |
1726 self.RefreshConfigRecentProjects(projectpath) |
1719 if self.EnableDebug: |
1727 if self.EnableDebug: |
1720 self.DebugVariablePanel.SetDataProducer(self.CTR) |
1728 self.DebugVariablePanel.SetDataProducer(self.CTR) |
1721 self.LoadProjectOrganization() |
1729 self.LoadProjectOrganization() |
1722 self._Refresh(TYPESTREE, INSTANCESTREE, LIBRARYTREE) |
1730 self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
1723 self.RefreshAll() |
1731 self.RefreshAll() |
1724 else: |
1732 else: |
1725 self.ResetView() |
1733 self.ResetView() |
1726 self.ShowErrorMessage(result) |
1734 self.ShowErrorMessage(result) |
1727 else: |
1735 else: |