337 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
320 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
338 id=ID_PLCOPENEDITORPROJECTTREE) |
321 id=ID_PLCOPENEDITORPROJECTTREE) |
339 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected, |
322 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected, |
340 id=ID_PLCOPENEDITORPROJECTTREE) |
323 id=ID_PLCOPENEDITORPROJECTTREE) |
341 |
324 |
342 if wx.Platform == '__WXMSW__': |
325 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
343 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
326 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
344 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
327 self.ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
345 self.ToolBar.SetToolBitmapSize(wx.Size(25, 25)) |
328 self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
346 self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
329 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
347 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
330 self.ToolBar.Realize() |
348 self.ToolBar.Realize() |
331 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
349 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
332 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
350 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
333 |
351 |
334 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
352 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
335 name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0, |
353 name='TabsOpened', parent=self.MainSplitter, pos=wx.Point(0, |
336 0), size=wx.Size(0, 0), style=0) |
354 0), size=wx.Size(0, 0), style=0) |
337 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
355 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
338 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
356 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
339 |
357 |
340 self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200) |
358 self.MainSplitter.SplitVertically(self.ProjectTree, self.TabsOpened, 200) |
341 |
359 |
|
360 else: |
|
361 self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, |
|
362 name='TabPanel', parent=self.MainSplitter, pos=wx.Point(0, 0), |
|
363 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
|
364 |
|
365 self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar', |
|
366 parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40), |
|
367 style=wx.TB_HORIZONTAL|wx.NO_BORDER) |
|
368 self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, |
|
369 wx.Bitmap(os.path.join(CWD, 'Images', 'select.png')), wx.NullBitmap, "Select an object") |
|
370 self.ToolBar.Realize() |
|
371 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
|
372 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
|
373 |
|
374 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
|
375 name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0, |
|
376 0), size=wx.Size(0, 0), style=0) |
|
377 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
|
378 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
|
379 |
|
380 self.MainSplitter.SplitVertically(self.ProjectTree, self.EditorPanel, 200) |
|
381 |
|
382 self._init_sizers() |
|
383 |
|
384 def __init__(self, parent, controler = None, fileOpen = None): |
342 def __init__(self, parent, controler = None, fileOpen = None): |
385 self.ModeSolo = controler == None |
343 self.ModeSolo = controler == None |
386 self._init_ctrls(parent) |
344 self._init_ctrls(parent) |
387 |
345 |
388 if wx.Platform != '__WXMSW__': |
346 if wx.Platform != '__WXMSW__': |
896 self.ProjectTree.Expand(selected) |
854 self.ProjectTree.Expand(selected) |
897 name = self.ProjectTree.GetItemText(selected) |
855 name = self.ProjectTree.GetItemText(selected) |
898 data = self.ProjectTree.GetPyData(selected) |
856 data = self.ProjectTree.GetPyData(selected) |
899 if name == "Properties": |
857 if name == "Properties": |
900 self.ShowProperties() |
858 self.ShowProperties() |
901 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
859 if data in [ITEM_POU, ITEM_CONFIGURATION]: |
902 idx = None |
860 self.EditProjectElement(data, name) |
903 if data == ITEM_CONFIGURATION: |
861 elif data == ITEM_RESOURCE: |
904 idx = self.Controler.OpenConfigurationEditing(name) |
862 item = self.ProjectTree.GetItemParent(selected) |
|
863 item_type = self.ProjectTree.GetPyData(item) |
|
864 while item_type != ITEM_CONFIGURATION: |
|
865 item = self.ProjectTree.GetItemParent(item) |
|
866 item_type = self.ProjectTree.GetPyData(item) |
|
867 config_name = self.ProjectTree.GetItemText(item) |
|
868 self.EditProjectElement(data, "%s::%s"%(config_name, name)) |
|
869 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
|
870 item = self.ProjectTree.GetItemParent(selected) |
|
871 item_type = self.ProjectTree.GetPyData(item) |
|
872 while item_type != ITEM_POU: |
|
873 item = self.ProjectTree.GetItemParent(item) |
|
874 item_type = self.ProjectTree.GetPyData(item) |
|
875 pou_name = self.ProjectTree.GetItemText(item) |
|
876 self.EditProjectElement(data, "%s::%s"%(pou_name, name)) |
|
877 |
|
878 def OnProjectTreeItemSelected(self, event): |
|
879 selected = event.GetItem() |
|
880 name = self.ProjectTree.GetItemText(selected) |
|
881 data = self.ProjectTree.GetPyData(selected) |
|
882 if data in [ITEM_POU, ITEM_CONFIGURATION]: |
|
883 self.EditProjectElement(data, name, True) |
|
884 elif data == ITEM_RESOURCE: |
|
885 item = self.ProjectTree.GetItemParent(selected) |
|
886 item_type = self.ProjectTree.GetPyData(item) |
|
887 while item_type != ITEM_CONFIGURATION: |
|
888 item = self.ProjectTree.GetItemParent(item) |
|
889 item_type = self.ProjectTree.GetPyData(item) |
|
890 config_name = self.ProjectTree.GetItemText(item) |
|
891 self.EditProjectElement(data, "%s::%s"%(config_name, name), True) |
|
892 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
|
893 item = self.ProjectTree.GetItemParent(selected) |
|
894 item_type = self.ProjectTree.GetPyData(item) |
|
895 while item_type != ITEM_POU: |
|
896 item = self.ProjectTree.GetItemParent(item) |
|
897 item_type = self.ProjectTree.GetPyData(item) |
|
898 pou_name = self.ProjectTree.GetItemText(item) |
|
899 self.EditProjectElement(data, "%s::%s"%(pou_name, name), True) |
|
900 event.Skip() |
|
901 |
|
902 def EditProjectElement(self, elementtype, elementname, onlyopened = False): |
|
903 idx = None |
|
904 names = elementname.split("::") |
|
905 if elementtype == ITEM_CONFIGURATION and len(names) == 1: |
|
906 if not onlyopened: |
|
907 idx = self.Controler.OpenConfigurationEditing(*names) |
|
908 if idx is not None: |
|
909 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = names[0]) |
|
910 self.TabsOpened.AddPage(new_window, "") |
|
911 if idx is None: |
|
912 idx = self.Controler.ChangeConfigurationEditing(*names) |
|
913 elif elementtype == ITEM_RESOURCE and len(names) == 2: |
|
914 if not onlyopened: |
|
915 idx = self.Controler.OpenConfigurationResourceEditing(*names) |
|
916 if idx is not None: |
|
917 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = names[0], resource_name = names[1]) |
|
918 self.TabsOpened.AddPage(new_window, "") |
|
919 if idx is None: |
|
920 idx = self.Controler.ChangeConfigurationResourceEditing(*names) |
|
921 elif elementtype == ITEM_POU and len(names) == 1: |
|
922 if not onlyopened: |
|
923 idx = self.Controler.OpenPouEditing(*names) |
905 if idx != None: |
924 if idx != None: |
906 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
925 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(names[0]), pou_name = names[0]) |
907 self.TabsOpened.AddPage(new_window, "") |
926 self.TabsOpened.AddPage(new_window, "") |
908 else: |
927 if idx is None: |
909 idx = self.Controler.ChangeConfigurationEditing(name) |
928 idx = self.Controler.ChangePouEditing(*names) |
910 elif data == ITEM_RESOURCE: |
929 elif elementtype == ITEM_TRANSITION and len(names) == 2: |
911 item = self.ProjectTree.GetItemParent(selected) |
930 if not onlyopened: |
912 item_type = self.ProjectTree.GetPyData(item) |
931 idx = self.Controler.OpenPouTransitionEditing(*names) |
913 while item_type != ITEM_CONFIGURATION: |
932 if idx is not None: |
914 item = self.ProjectTree.GetItemParent(item) |
933 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = names[0], transition_name = names[1]) |
915 item_type = self.ProjectTree.GetPyData(item) |
|
916 config_name = self.ProjectTree.GetItemText(item) |
|
917 idx = self.Controler.OpenConfigurationResourceEditing(config_name, name) |
|
918 if idx != None: |
|
919 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name) |
|
920 self.TabsOpened.AddPage(new_window, "") |
934 self.TabsOpened.AddPage(new_window, "") |
921 else: |
935 if idx is None: |
922 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
936 idx = self.Controler.ChangePouTransitionEditing(*names) |
923 elif data == ITEM_POU: |
937 elif elementtype == ITEM_ACTION and len(names) == 2: |
924 idx = self.Controler.OpenPouEditing(name) |
938 if not onlyopened: |
925 if idx != None: |
939 idx = self.Controler.OpenPouActionEditing(*names) |
926 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name) |
940 if idx is not None: |
|
941 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = names[0], action_name = names[1]) |
927 self.TabsOpened.AddPage(new_window, "") |
942 self.TabsOpened.AddPage(new_window, "") |
928 else: |
943 if idx is None: |
929 idx = self.Controler.ChangePouEditing(name) |
944 idx = self.Controler.ChangePouActionEditing(*names) |
930 else: |
945 if idx != None: |
931 item = self.ProjectTree.GetItemParent(selected) |
946 old_selected = self.TabsOpened.GetSelection() |
932 item_type = self.ProjectTree.GetPyData(item) |
947 if old_selected >= 0: |
933 while item_type != ITEM_POU: |
948 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
934 item = self.ProjectTree.GetItemParent(item) |
949 self.TabsOpened.SetSelection(idx) |
935 item_type = self.ProjectTree.GetPyData(item) |
950 window = self.TabsOpened.GetPage(idx) |
936 pou_name = self.ProjectTree.GetItemText(item) |
951 window.RefreshView() |
937 if data == ITEM_TRANSITION: |
952 self.RefreshTabsOpenedTitles() |
938 idx = self.Controler.OpenPouTransitionEditing(pou_name, name) |
953 self.RefreshFileMenu() |
939 if idx != None: |
954 self.RefreshEditMenu() |
940 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = pou_name, transition_name = name) |
955 self.RefreshToolBar() |
941 self.TabsOpened.AddPage(new_window, "") |
|
942 else: |
|
943 idx = self.Controler.ChangePouTransitionEditing(pou_name, name) |
|
944 elif data == ITEM_ACTION: |
|
945 idx = self.Controler.OpenPouActionEditing(pou_name, name) |
|
946 if idx != None: |
|
947 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = pou_name, action_name = name) |
|
948 self.TabsOpened.AddPage(new_window, "") |
|
949 else: |
|
950 idx = self.Controler.ChangePouActionEditing(pou_name, name) |
|
951 if idx != None: |
|
952 old_selected = self.TabsOpened.GetSelection() |
|
953 if old_selected >= 0: |
|
954 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
955 self.TabsOpened.SetSelection(idx) |
|
956 window = self.TabsOpened.GetPage(idx) |
|
957 window.RefreshView() |
|
958 self.RefreshTabsOpenedTitles() |
|
959 self.RefreshFileMenu() |
|
960 self.RefreshEditMenu() |
|
961 self.RefreshToolBar() |
|
962 |
956 |
963 def OnProjectTreeRightUp(self, event): |
957 def OnProjectTreeRightUp(self, event): |
964 selected = self.ProjectTree.GetSelection() |
958 selected = self.ProjectTree.GetSelection() |
965 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
959 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
966 name = self.ProjectTree.GetItemText(selected) |
960 name = self.ProjectTree.GetItemText(selected) |
967 if self.Controler.GetPouBodyType(name) == "SFC": |
961 if self.Controler.GetPouBodyType(name) == "SFC": |
968 self.PopupMenu(self.SFCMenu) |
962 self.PopupMenu(self.SFCMenu) |
969 elif self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
963 elif self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
970 self.PopupMenu(self.ConfigMenu) |
964 self.PopupMenu(self.ConfigMenu) |
971 event.Skip() |
|
972 |
|
973 def OnProjectTreeItemSelected(self, event): |
|
974 selected = event.GetItem() |
|
975 name = self.ProjectTree.GetItemText(selected) |
|
976 data = self.ProjectTree.GetPyData(selected) |
|
977 if data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
|
978 idx = None |
|
979 if data == ITEM_CONFIGURATION: |
|
980 if self.Controler.IsConfigurationEditing(name): |
|
981 idx = self.Controler.ChangeConfigurationEditing(name) |
|
982 elif data == ITEM_RESOURCE: |
|
983 item = self.ProjectTree.GetItemParent(selected) |
|
984 item_type = self.ProjectTree.GetPyData(item) |
|
985 while item_type != ITEM_CONFIGURATION: |
|
986 item = self.ProjectTree.GetItemParent(item) |
|
987 item_type = self.ProjectTree.GetPyData(item) |
|
988 config_name = self.ProjectTree.GetItemText(item) |
|
989 if self.Controler.IsConfigurationResourceEditing(config_name, name): |
|
990 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
|
991 elif data == ITEM_POU: |
|
992 if self.Controler.IsPouEditing(name): |
|
993 idx = self.Controler.ChangePouEditing(name) |
|
994 else: |
|
995 item = self.ProjectTree.GetItemParent(selected) |
|
996 item_type = self.ProjectTree.GetPyData(item) |
|
997 while item_type != ITEM_POU: |
|
998 item = self.ProjectTree.GetItemParent(item) |
|
999 item_type = self.ProjectTree.GetPyData(item) |
|
1000 pou_name = self.ProjectTree.GetItemText(item) |
|
1001 if data == ITEM_TRANSITION: |
|
1002 if self.Controler.IsPouTransitionEditing(pou_name, name): |
|
1003 idx = self.Controler.ChangePouTransitionEditing(pou_name, name) |
|
1004 elif data == ITEM_ACTION: |
|
1005 if self.Controler.IsPouActionEditing(pou_name, name): |
|
1006 idx = self.Controler.ChangePouActionEditing(pou_name, name) |
|
1007 if idx != None: |
|
1008 old_selected = self.TabsOpened.GetSelection() |
|
1009 if old_selected >= 0: |
|
1010 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
1011 self.TabsOpened.SetSelection(idx) |
|
1012 window = self.TabsOpened.GetPage(idx) |
|
1013 window.RefreshView() |
|
1014 self.RefreshTabsOpenedTitles() |
|
1015 self.RefreshFileMenu() |
|
1016 self.RefreshEditMenu() |
|
1017 self.RefreshToolBar() |
|
1018 event.Skip() |
965 event.Skip() |
1019 |
966 |
1020 def RefreshProjectTree(self): |
967 def RefreshProjectTree(self): |
1021 infos = self.Controler.GetProjectInfos() |
968 infos = self.Controler.GetProjectInfos() |
1022 root = self.ProjectTree.GetRootItem() |
969 root = self.ProjectTree.GetRootItem() |