PLCOpenEditor.py
changeset 92 76d5001393df
parent 90 2245e8776086
child 95 ee66a9a1748b
equal deleted inserted replaced
91:e8e9ddeed76c 92:76d5001393df
    37 
    37 
    38 import os, re, platform, sys, time, traceback, getopt
    38 import os, re, platform, sys, time, traceback, getopt
    39 
    39 
    40 __version__ = "$Revision$"
    40 __version__ = "$Revision$"
    41 
    41 
    42 def create(parent):
       
    43     return PLCOpenEditor(parent)
       
    44 
       
    45 def usage():
       
    46     print "\nUsage of PLCOpenEditor.py :"
       
    47     print "\n   %s [Filepath]\n"%sys.argv[0]
       
    48 
       
    49 try:
       
    50     opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
       
    51 except getopt.GetoptError:
       
    52     # print help information and exit:
       
    53     usage()
       
    54     sys.exit(2)
       
    55 
       
    56 for o, a in opts:
       
    57     if o in ("-h", "--help"):
       
    58         usage()
       
    59         sys.exit()
       
    60 
       
    61 fileOpen = None
       
    62 if len(args) > 1:
       
    63     usage()
       
    64     sys.exit()
       
    65 elif len(args) == 1:
       
    66     fileOpen = args[0]
       
    67 CWD = os.path.split(__file__)[0]
    42 CWD = os.path.split(__file__)[0]
    68 
    43 
    69 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORPROJECTTREE, 
    44 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORPROJECTTREE, 
    70  ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITOREDITORPANEL,
    45  ID_PLCOPENEDITORMAINSPLITTER, ID_PLCOPENEDITOREDITORPANEL,
    71  ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTOOLBAR,
    46  ID_PLCOPENEDITORTABSOPENED, ID_PLCOPENEDITORTOOLBAR,
   343               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   318               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   344               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   319               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   345         self._init_utils()
   320         self._init_utils()
   346         self.SetClientSize(wx.Size(1000, 600))
   321         self.SetClientSize(wx.Size(1000, 600))
   347         self.SetMenuBar(self.menuBar1)
   322         self.SetMenuBar(self.menuBar1)
   348         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR)
   323         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
   349         if not self.ModeSolo:
   324         if not self.ModeSolo:
   350             self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5)
   325             self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5)
   351             accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
   326             accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)])
   352             self.SetAcceleratorTable(accel)
   327             self.SetAcceleratorTable(accel)
       
   328             self.Bind(wx.EVT_ACTIVATE, self.OnFrameActivated)
   353         
   329         
   354         self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER,
   330         self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER,
   355               name='MainSplitter', parent=self, point=wx.Point(0, 0),
   331               name='MainSplitter', parent=self, point=wx.Point(0, 0),
   356               size=wx.Size(0, 0), style=wx.SP_3D)
   332               size=wx.Size(0, 0), style=wx.SP_3D)
   357         self.MainSplitter.SetNeedUpdating(True)
   333         self.MainSplitter.SetNeedUpdating(True)
   358         self.MainSplitter.SetMinimumPaneSize(1)
   334         self.MainSplitter.SetMinimumPaneSize(1)
   359 
   335         
   360         self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, 
   336         self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, 
   361               name='TabPanel', parent=self.MainSplitter, pos=wx.Point(0, 0),
   337               name='TabPanel', parent=self.MainSplitter, pos=wx.Point(0, 0),
   362               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   338               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   363         
   339         
   364         self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
   340         self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED,
   393         self.MainSplitter.SplitVertically(self.ProjectTree, self.EditorPanel,
   369         self.MainSplitter.SplitVertically(self.ProjectTree, self.EditorPanel,
   394               200)
   370               200)
   395         
   371         
   396         self._init_sizers()
   372         self._init_sizers()
   397 
   373 
   398     def __init__(self, parent, controler = None):
   374     def __init__(self, parent, controler = None, fileOpen = None):
   399         self.ModeSolo = controler == None
   375         self.ModeSolo = controler == None
   400         self._init_ctrls(parent)
   376         self._init_ctrls(parent)
   401         
   377         
   402         self.TreeImageList = wx.ImageList(16, 16)
   378         self.TreeImageList = wx.ImageList(16, 16)
   403         for language in LANGUAGES:
   379         for language in LANGUAGES:
   404             self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   380             self.TreeImageList.Add(wx.Bitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   405         self.ProjectTree.SetImageList(self.TreeImageList)
   381         self.ProjectTree.SetImageList(self.TreeImageList)
   406         
   382         
   407         if self.ModeSolo:
   383         if self.ModeSolo:
   408             self.Controler = PLCControler()
   384             self.Controler = PLCControler()
       
   385             if fileOpen:
       
   386                 self.Controler.OpenXMLFile(fileOpen)
       
   387                 self.RefreshProjectTree()
   409         else:
   388         else:
   410             self.Controler = controler
   389             self.Controler = controler
   411         
       
   412         if self.ModeSolo and fileOpen:
       
   413             self.Controler.OpenXMLFile(fileOpen)
       
   414             self.RefreshProjectTree()
       
   415         
   390         
   416         self.CurrentToolBar = []
   391         self.CurrentToolBar = []
   417         self.CurrentLanguage = ""
   392         self.CurrentLanguage = ""
   418         self.DrawingMode = FREEDRAWING_MODE
   393         self.DrawingMode = FREEDRAWING_MODE
   419         #self.DrawingMode = DRIVENDRAWING_MODE
   394         #self.DrawingMode = DRIVENDRAWING_MODE
   496             projectname = new_values.pop("projectName")
   471             projectname = new_values.pop("projectName")
   497             new_values["creationDateTime"] = old_values["creationDateTime"]
   472             new_values["creationDateTime"] = old_values["creationDateTime"]
   498             self.Controler.SetProjectProperties(projectname, new_values)
   473             self.Controler.SetProjectProperties(projectname, new_values)
   499             self.RefreshProjectTree()
   474             self.RefreshProjectTree()
   500         dialog.Destroy()
   475         dialog.Destroy()
       
   476 
       
   477     def OnFrameActivated(self, event):
       
   478         if not self.ModeSolo and event.GetActive():
       
   479             self.Controler.RefreshPluginsBlockLists()
       
   480             selected = self.TabsOpened.GetSelection()
       
   481             if selected >= 0:
       
   482                 self.TabsOpened.GetPage(selected).RefreshView()
       
   483         event.Skip()
   501 
   484 
   502     def OnCloseFrame(self, event):
   485     def OnCloseFrame(self, event):
   503         if not self.ModeSolo and getattr(self, "_onclose", None) != None:
   486         if not self.ModeSolo and getattr(self, "_onclose", None) != None:
   504             self._onclose()
   487             self._onclose()
   505             event.Skip()
   488             event.Skip()
  2804 
  2787 
  2805     #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args)
  2788     #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args)
  2806     sys.excepthook = handle_exception
  2789     sys.excepthook = handle_exception
  2807 
  2790 
  2808 if __name__ == '__main__':
  2791 if __name__ == '__main__':
       
  2792     def usage():
       
  2793         print "\nUsage of PLCOpenEditor.py :"
       
  2794         print "\n   %s [Filepath]\n"%sys.argv[0]
       
  2795 
       
  2796     try:
       
  2797         opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
       
  2798     except getopt.GetoptError:
       
  2799         # print help information and exit:
       
  2800         usage()
       
  2801         sys.exit(2)
       
  2802 
       
  2803     for o, a in opts:
       
  2804         if o in ("-h", "--help"):
       
  2805             usage()
       
  2806             sys.exit()
       
  2807 
       
  2808     fileOpen = None
       
  2809     if len(args) > 1:
       
  2810         usage()
       
  2811         sys.exit()
       
  2812     elif len(args) == 1:
       
  2813         fileOpen = args[0]
       
  2814     
  2809     app = wx.PySimpleApp()
  2815     app = wx.PySimpleApp()
  2810     wx.InitAllImageHandlers()
  2816     wx.InitAllImageHandlers()
  2811     
  2817     
  2812     # Install a exception handle for bug reports
  2818     # Install a exception handle for bug reports
  2813     AddExceptHook(os.getcwd(),__version__)
  2819     AddExceptHook(os.getcwd(),__version__)
  2814     
  2820     
  2815     frame = PLCOpenEditor(None)
  2821     frame = PLCOpenEditor(None, fileOpen=fileOpen)
  2816 
  2822 
  2817     frame.Show()
  2823     frame.Show()
  2818     app.MainLoop()
  2824     app.MainLoop()
  2819     
  2825