PLCOpenEditor.py
changeset 120 add8e391e00c
parent 118 0c53d6a36013
child 121 40b91ba978db
equal deleted inserted replaced
119:564564136c79 120:add8e391e00c
    22 #License along with this library; if not, write to the Free Software
    22 #License along with this library; if not, write to the Free Software
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 from time import localtime
    25 from time import localtime
    26 from datetime import datetime
    26 from datetime import datetime
    27 import wx
    27 import wx, wx.grid
    28 import wx.grid
    28 
       
    29 if wx.VERSION >= (2, 8, 0):
       
    30     import wx.aui
    29 
    31 
    30 from SFCViewer import *
    32 from SFCViewer import *
    31 from LDViewer import *
    33 from LDViewer import *
    32 from Viewer import *
    34 from Viewer import *
    33 from TextViewer import *
    35 from TextViewer import *
   311         if not self.ModeSolo:
   313         if not self.ModeSolo:
   312             self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5)
   314             self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5)
   313             accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
   315             accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
   314             self.SetAcceleratorTable(accel)
   316             self.SetAcceleratorTable(accel)
   315         
   317         
   316         self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER,
   318         if wx.VERSION >= (2, 8, 0):
   317               name='MainSplitter', parent=self, point=wx.Point(0, 0),
   319             self.AUIManager = wx.aui.AuiManager(self)
   318               size=wx.Size(0, 0), style=wx.SP_3D)
   320             self.Panes = {}
   319         self.MainSplitter.SetNeedUpdating(True)
   321         
   320         self.MainSplitter.SetMinimumPaneSize(1)
   322         if wx.VERSION < (2, 8, 0):
   321         
   323             self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER,
   322         self.ProjectTree = wx.TreeCtrl(id=ID_PLCOPENEDITORPROJECTTREE,
   324                   name='MainSplitter', parent=self, point=wx.Point(0, 0),
   323               name='treeCtrl1', parent=self.MainSplitter, pos=wx.Point(0, 0),
   325                   size=wx.Size(0, 0), style=wx.SP_3D)
   324               size=wx.Size(-1, -1),
   326             self.MainSplitter.SetNeedUpdating(True)
   325               style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
   327             self.MainSplitter.SetMinimumPaneSize(1)
       
   328             
       
   329             self.ProjectTree = wx.TreeCtrl(id=ID_PLCOPENEDITORPROJECTTREE,
       
   330                   name='treeCtrl1', parent=self.MainSplitter, pos=wx.Point(0, 0),
       
   331                   size=wx.Size(-1, -1),
       
   332                   style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
       
   333         else:
       
   334             self.ProjectTree = wx.TreeCtrl(id=ID_PLCOPENEDITORPROJECTTREE,
       
   335                   name='treeCtrl1', parent=self, pos=wx.Point(0, 0),
       
   336                   size=wx.Size(200, -1),
       
   337                   style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER)
       
   338             self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").CloseButton(False))
   326         if wx.VERSION >= (2, 6, 0):
   339         if wx.VERSION >= (2, 6, 0):
   327             self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
   340             self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp)
   328         else:
   341         else:
   329             wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp)
   342             wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp)
   330         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   343         self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag,
   336         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   349         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated,
   337               id=ID_PLCOPENEDITORPROJECTTREE)
   350               id=ID_PLCOPENEDITORPROJECTTREE)
   338         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   351         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   339               id=ID_PLCOPENEDITORPROJECTTREE)
   352               id=ID_PLCOPENEDITORPROJECTTREE)
   340         
   353         
   341         self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
   354         if wx.VERSION < (2, 8, 0):
   342               ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
   355             self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, 
   343         self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
   356                   ID_PLCOPENEDITORTOOLBAR, 'ToolBar')
   344         self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
   357             self.ToolBar.SetToolBitmapSize(wx.Size(25, 25))
   345               wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
   358             self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
   346         self.ToolBar.Realize()
   359                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
       
   360             self.ToolBar.Realize()
       
   361         else:
       
   362             ToolBar = wx.ToolBar(self, ID_PLCOPENEDITORTOOLBAR, wx.DefaultPosition, wx.DefaultSize,
       
   363                     wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
       
   364             ToolBar.SetToolBitmapSize(wx.Size(25, 25))
       
   365             ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, 
       
   366                   wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object")
       
   367             ToolBar.Realize()
       
   368             self.Panes["ToolBar"] = ToolBar
       
   369             self.AUIManager.AddPane(ToolBar, wx.aui.AuiPaneInfo().
       
   370                       Name("ToolBar").Caption("Toolbar").
       
   371                       ToolbarPane().Top().
       
   372                       LeftDockable(False).RightDockable(False))
       
   373         
   347         self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
   374         self.Bind(wx.EVT_TOOL, self.OnSelectionTool, 
   348               id=ID_PLCOPENEDITORTOOLBARSELECTION)
   375               id=ID_PLCOPENEDITORTOOLBARSELECTION)
   349     
   376             
   350         self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
   377         if wx.VERSION < (2, 8, 0):
   351               name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
   378             self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
   352               0), size=wx.Size(0, 0), style=0)
   379                   name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0,
       
   380                   0), size=wx.Size(0, 0), style=0)
       
   381             self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200)
       
   382         else:
       
   383             self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
       
   384                   name='TabsOpened', parent=self, pos=wx.Point(0,
       
   385                   0), size=wx.Size(0, 0), style=0)
       
   386             self.AUIManager.AddPane(self.TabsOpened, wx.aui.AuiPaneInfo().Name("TabsOpened").CenterPane())
       
   387 
   353         if wx.VERSION >= (2, 6, 0):
   388         if wx.VERSION >= (2, 6, 0):
   354             self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   389             self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   355                 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
   390                 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED)
   356         else:
   391         else:
   357             wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
   392             wx.EVT_NOTEBOOK_PAGE_CHANGED(self.TabsOpened, ID_PLCOPENEDITORTABSOPENED,
   358                 self.OnPouSelectedChanged)
   393                 self.OnPouSelectedChanged)
   359         self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200)
   394         
       
   395         if wx.VERSION > (2, 8, 0):
       
   396             self.AUIManager.Update(); 
   360         
   397         
   361     def __init__(self, parent, controler = None, fileOpen = None):
   398     def __init__(self, parent, controler = None, fileOpen = None):
   362         self.ModeSolo = controler == None
   399         self.ModeSolo = controler == None
   363         self._init_ctrls(parent)
   400         self._init_ctrls(parent)
   364         
   401         
   619     def ResetCurrentMode(self):
   656     def ResetCurrentMode(self):
   620         selected = self.TabsOpened.GetSelection()
   657         selected = self.TabsOpened.GetSelection()
   621         if selected != -1:
   658         if selected != -1:
   622             window = self.TabsOpened.GetPage(selected)
   659             window = self.TabsOpened.GetPage(selected)
   623             window.SetMode(MODE_SELECTION)
   660             window.SetMode(MODE_SELECTION)
   624         self.ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
   661         if wx.VERSION < (2, 8, 0):
       
   662             self.ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
       
   663         else:
       
   664             self.Panes["ToolBar"].ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
   625 
   665 
   626     def ResetToolToggle(self, id):
   666     def ResetToolToggle(self, id):
   627         tool = self.ToolBar.FindById(id)
   667         if wx.VERSION < (2, 8, 0):
       
   668             tool = self.ToolBar.FindById(id)
       
   669         else:
       
   670             tool = self.Panes["ToolBar"].FindById(id)
   628         tool.SetToggle(False)
   671         tool.SetToggle(False)
   629 
   672 
   630     def OnSelectionTool(self, event):
   673     def OnSelectionTool(self, event):
   631         selected = self.TabsOpened.GetSelection()
   674         selected = self.TabsOpened.GetSelection()
   632         if selected != -1:
   675         if selected != -1:
  1087         for item in self.CurrentToolBar:
  1130         for item in self.CurrentToolBar:
  1088             if wx.VERSION >= (2, 6, 0):
  1131             if wx.VERSION >= (2, 6, 0):
  1089                 self.Unbind(wx.EVT_MENU, id=item)
  1132                 self.Unbind(wx.EVT_MENU, id=item)
  1090             else:
  1133             else:
  1091                 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) 
  1134                 self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED) 
  1092             self.ToolBar.DeleteTool(item)
  1135             
       
  1136             if wx.VERSION < (2, 8, 0):
       
  1137                 ToolBar = self.ToolBar
       
  1138             else:
       
  1139                 ToolBar = self.Panes["ToolBar"]
       
  1140             ToolBar.DeleteTool(item)
       
  1141             ToolBar.Realize()
       
  1142             if wx.VERSION >= (2, 8, 0):
       
  1143                 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
       
  1144                 self.AUIManager.Update()
  1093 
  1145 
  1094     def RefreshToolBar(self):
  1146     def RefreshToolBar(self):
  1095         language = self.Controler.GetCurrentElementEditingBodyType()
  1147         language = self.Controler.GetCurrentElementEditingBodyType()
  1096         if language and language != self.CurrentLanguage:
  1148         if language and language != self.CurrentLanguage:
  1097             self.ResetToolBar()
  1149             self.ResetToolBar()
  1098             self.CurrentLanguage = language
  1150             self.CurrentLanguage = language
  1099             self.CurrentToolBar = []
  1151             self.CurrentToolBar = []
       
  1152             if wx.VERSION < (2, 8, 0):
       
  1153                 ToolBar = self.ToolBar
       
  1154             else:
       
  1155                 ToolBar = self.Panes["ToolBar"]
  1100             for radio, modes, id, method, picture, help in ToolBarItems[language]:
  1156             for radio, modes, id, method, picture, help in ToolBarItems[language]:
  1101                 if modes & self.DrawingMode:
  1157                 if modes & self.DrawingMode:
  1102                     if radio or self.DrawingMode == FREEDRAWING_MODE:
  1158                     if radio or self.DrawingMode == FREEDRAWING_MODE:
  1103                         self.ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
  1159                         ToolBar.AddRadioTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), wx.NullBitmap, help)
  1104                     else:
  1160                     else:
  1105                         self.ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
  1161                         ToolBar.AddSimpleTool(id, wx.Bitmap(os.path.join(CWD, "Images", picture)), help)
  1106                     self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
  1162                     self.Bind(wx.EVT_TOOL, getattr(self, method), id=id)
  1107                     self.CurrentToolBar.append(id)
  1163                     self.CurrentToolBar.append(id)
  1108             self.ToolBar.Realize()
  1164             ToolBar.Realize()
       
  1165             if wx.VERSION >= (2, 8, 0):
       
  1166                 self.AUIManager.GetPane("ToolBar").BestSize(ToolBar.GetBestSize())
       
  1167                 self.AUIManager.Update()
  1109         elif not language:
  1168         elif not language:
  1110             self.ResetToolBar()
  1169             self.ResetToolBar()
  1111             self.CurrentLanguage = language
  1170             self.CurrentLanguage = language
  1112         self.ResetCurrentMode()
  1171         self.ResetCurrentMode()
  1113 
  1172