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 |