350 size=wx.Size(200, -1), |
350 size=wx.Size(200, -1), |
351 style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
351 style=wx.TR_HAS_BUTTONS|wx.TR_EDIT_LABELS|wx.TR_SINGLE|wx.SUNKEN_BORDER) |
352 self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) |
352 self.AUIManager.AddPane(self.ProjectTree, wx.aui.AuiPaneInfo().Caption("Project Tree").Left().Layer(1).BestSize(wx.Size(200, 500)).CloseButton(False)) |
353 if wx.VERSION >= (2, 6, 0): |
353 if wx.VERSION >= (2, 6, 0): |
354 self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp) |
354 self.ProjectTree.Bind(wx.EVT_RIGHT_UP, self.OnProjectTreeRightUp) |
|
355 self.ProjectTree.Bind(wx.EVT_LEFT_UP, self.OnProjectTreeLeftUp) |
355 else: |
356 else: |
356 wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp) |
357 wx.EVT_RIGHT_UP(self.ProjectTree, self.OnProjectTreeRightUp) |
|
358 wx.EVT_LEFT_UP(self.ProjectTree, self.OnProjectTreeLeftUp) |
357 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag, |
359 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnProjectTreeBeginDrag, |
358 id=ID_PLCOPENEDITORPROJECTTREE) |
360 id=ID_PLCOPENEDITORPROJECTTREE) |
359 self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit, |
361 self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnProjectTreeItemBeginEdit, |
360 id=ID_PLCOPENEDITORPROJECTTREE) |
362 id=ID_PLCOPENEDITORPROJECTTREE) |
361 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit, |
363 self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnProjectTreeItemEndEdit, |
362 id=ID_PLCOPENEDITORPROJECTTREE) |
364 id=ID_PLCOPENEDITORPROJECTTREE) |
363 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
365 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnProjectTreeItemActivated, |
364 id=ID_PLCOPENEDITORPROJECTTREE) |
366 id=ID_PLCOPENEDITORPROJECTTREE) |
365 self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected, |
367 self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnProjectTreeItemChanging, |
366 id=ID_PLCOPENEDITORPROJECTTREE) |
368 id=ID_PLCOPENEDITORPROJECTTREE) |
367 |
369 |
368 if wx.VERSION < (2, 8, 0): |
370 if wx.VERSION < (2, 8, 0): |
369 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
371 self.ToolBar = self.CreateToolBar(wx.TB_HORIZONTAL|wx.TB_FLAT|wx.NO_BORDER, |
370 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
372 ID_PLCOPENEDITORTOOLBAR, 'ToolBar') |
938 if selected >= 0: |
944 if selected >= 0: |
939 window = self.GetPage(selected) |
945 window = self.GetPage(selected) |
940 else: |
946 else: |
941 window = None |
947 window = None |
942 if window: |
948 if window: |
943 ## found = False |
949 if self.ProjectTree: |
944 ## words = window.GetTagName().split("::") |
950 root = self.ProjectTree.GetRootItem() |
945 ## if self.ProjectTree: |
951 words = window.GetTagName().split("::") |
946 ## root = self.ProjectTree.GetRootItem() |
952 if words[0] == "P": |
947 ## if wx.VERSION >= (2, 6, 0): |
953 self.SelectProjectTreeItem(root, [(words[1], ITEM_POU)]) |
948 ## item, root_cookie = self.ProjectTree.GetFirstChild(root) |
954 elif words[0] == "T": |
949 ## else: |
955 self.SelectProjectTreeItem(root, [(words[1], ITEM_POU), (words[2], ITEM_TRANSITION)]) |
950 ## item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
956 elif words[0] == "A": |
951 ## while item.IsOk() and not found: |
957 self.SelectProjectTreeItem(root, [(words[1], ITEM_POU), (words[2], ITEM_ACTION)]) |
952 ## if self.ProjectTree.GetItemText(item) == words[1]: |
958 elif words[0] == "C": |
953 ## self.ProjectTree.SelectItem(item) |
959 self.SelectProjectTreeItem(root, [(words[1], ITEM_CONFIGURATION)]) |
954 ## item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
960 elif words[0] == "R": |
|
961 self.SelectProjectTreeItem(root, [(words[1], ITEM_CONFIGURATION), (words[2], ITEM_RESOURCE)]) |
955 window.RefreshView() |
962 window.RefreshView() |
956 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
963 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
957 self.RefreshFileMenu() |
964 self.RefreshFileMenu() |
958 self.RefreshEditMenu() |
965 self.RefreshEditMenu() |
959 self.RefreshToolBar() |
966 self.RefreshToolBar() |
960 event.Skip() |
967 event.Skip() |
961 |
968 |
|
969 def SelectProjectTreeItem(self, root, items): |
|
970 found = False |
|
971 if self.ProjectTree: |
|
972 if wx.VERSION >= (2, 6, 0): |
|
973 item, root_cookie = self.ProjectTree.GetFirstChild(root) |
|
974 else: |
|
975 item, root_cookie = self.ProjectTree.GetFirstChild(root, 0) |
|
976 while item.IsOk() and not found: |
|
977 if (self.ProjectTree.GetItemText(item), self.ProjectTree.GetPyData(item)) == items[0]: |
|
978 if len(items) == 1: |
|
979 self.SelectedItem = item |
|
980 self.ProjectTree.SelectItem(item) |
|
981 wx.CallAfter(self.ResetSelectedItem) |
|
982 return True |
|
983 else: |
|
984 found = self.SelectProjectTreeItem(item, items[1:]) |
|
985 else: |
|
986 found = self.SelectProjectTreeItem(item, items) |
|
987 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) |
|
988 return found |
|
989 |
962 def OnProjectTreeBeginDrag(self, event): |
990 def OnProjectTreeBeginDrag(self, event): |
963 item = event.GetItem() |
991 if self.SelectedItem is not None and self.ProjectTree.GetPyData(self.SelectedItem) == ITEM_POU: |
964 if self.ProjectTree.GetPyData(item) == ITEM_POU: |
992 block_name = self.ProjectTree.GetItemText(self.SelectedItem) |
965 block_name = self.ProjectTree.GetItemText(item) |
|
966 block_type = self.Controler.GetPouType(block_name) |
993 block_type = self.Controler.GetPouType(block_name) |
967 if block_type != "program": |
994 if block_type != "program": |
968 data = wx.TextDataObject(str((block_name, block_type, ""))) |
995 data = wx.TextDataObject(str((block_name, block_type, ""))) |
969 dragSource = wx.DropSource(self.ProjectTree) |
996 dragSource = wx.DropSource(self.ProjectTree) |
970 dragSource.SetData(data) |
997 dragSource.SetData(data) |
971 dragSource.DoDragDrop() |
998 dragSource.DoDragDrop() |
|
999 self.ResetSelectedItem() |
972 |
1000 |
973 def RefreshEditorNames(self, item_type, old_name, new_name): |
1001 def RefreshEditorNames(self, item_type, old_name, new_name): |
974 for i in xrange(self.GetPageCount()): |
1002 for i in xrange(self.GetPageCount()): |
975 editor = self.GetPage(i) |
1003 editor = self.GetPage(i) |
976 editor.RefreshName(item_type, old_name, new_name) |
1004 editor.RefreshName(item_type, old_name, new_name) |
1130 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
1158 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
1131 elif data == ITEM_ACTION: |
1159 elif data == ITEM_ACTION: |
1132 tagname = self.Controler.ComputePouActionName(pou_name, name) |
1160 tagname = self.Controler.ComputePouActionName(pou_name, name) |
1133 self.EditProjectElement(data, tagname) |
1161 self.EditProjectElement(data, tagname) |
1134 |
1162 |
1135 def OnProjectTreeItemSelected(self, event): |
1163 def OnProjectTreeLeftUp(self, event): |
1136 selected = event.GetItem() |
1164 if self.SelectedItem is not None: |
1137 name = self.ProjectTree.GetItemText(selected) |
1165 print "LeftUp", self.ProjectTree.GetItemText(self.SelectedItem) |
1138 data = self.ProjectTree.GetPyData(selected) |
1166 self.ProjectTree.SelectItem(self.SelectedItem) |
1139 if data == ITEM_POU: |
1167 name = self.ProjectTree.GetItemText(self.SelectedItem) |
1140 self.EditProjectElement(data, self.Controler.ComputePouName(name), True) |
1168 data = self.ProjectTree.GetPyData(self.SelectedItem) |
1141 elif data == ITEM_CONFIGURATION: |
1169 if data == ITEM_POU: |
1142 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True) |
1170 self.EditProjectElement(data, self.Controler.ComputePouName(name), True) |
1143 elif data == ITEM_RESOURCE: |
1171 elif data == ITEM_CONFIGURATION: |
1144 item = self.ProjectTree.GetItemParent(selected) |
1172 self.EditProjectElement(data, self.Controler.ComputeConfigurationName(name), True) |
1145 item_type = self.ProjectTree.GetPyData(item) |
1173 elif data == ITEM_RESOURCE: |
1146 while item_type != ITEM_CONFIGURATION: |
1174 item = self.ProjectTree.GetItemParent(self.SelectedItem) |
1147 item = self.ProjectTree.GetItemParent(item) |
|
1148 item_type = self.ProjectTree.GetPyData(item) |
1175 item_type = self.ProjectTree.GetPyData(item) |
1149 config_name = self.ProjectTree.GetItemText(item) |
1176 while item_type != ITEM_CONFIGURATION: |
1150 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True) |
1177 item = self.ProjectTree.GetItemParent(item) |
1151 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
1178 item_type = self.ProjectTree.GetPyData(item) |
1152 item = self.ProjectTree.GetItemParent(selected) |
1179 config_name = self.ProjectTree.GetItemText(item) |
1153 item_type = self.ProjectTree.GetPyData(item) |
1180 self.EditProjectElement(data, self.Controler.ComputeConfigurationResourceName(config_name, name), True) |
1154 while item_type != ITEM_POU: |
1181 elif data in [ITEM_TRANSITION, ITEM_ACTION]: |
1155 item = self.ProjectTree.GetItemParent(item) |
1182 item = self.ProjectTree.GetItemParent(self.SelectedItem) |
1156 item_type = self.ProjectTree.GetPyData(item) |
1183 item_type = self.ProjectTree.GetPyData(item) |
1157 pou_name = self.ProjectTree.GetItemText(item) |
1184 while item_type != ITEM_POU: |
1158 if data == ITEM_TRANSITION: |
1185 item = self.ProjectTree.GetItemParent(item) |
1159 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
1186 item_type = self.ProjectTree.GetPyData(item) |
1160 elif data == ITEM_ACTION: |
1187 pou_name = self.ProjectTree.GetItemText(item) |
1161 tagname = self.Controler.ComputePouActionName(pou_name, name) |
1188 if data == ITEM_TRANSITION: |
1162 self.EditProjectElement(data, tagname, True) |
1189 tagname = self.Controler.ComputePouTransitionName(pou_name, name) |
1163 event.Skip() |
1190 elif data == ITEM_ACTION: |
|
1191 tagname = self.Controler.ComputePouActionName(pou_name, name) |
|
1192 self.EditProjectElement(data, tagname, True) |
|
1193 wx.CallAfter(self.ResetSelectedItem) |
|
1194 else: |
|
1195 print "LeftUp", None |
|
1196 event.Skip() |
|
1197 |
|
1198 def OnProjectTreeItemChanging(self, event): |
|
1199 if self.SelectedItem is not None: |
|
1200 print "Changing", self.ProjectTree.GetItemText(event.GetItem()), self.ProjectTree.GetItemText(self.SelectedItem) |
|
1201 else: |
|
1202 print "Changing", None, self.ProjectTree.GetItemText(event.GetItem()) |
|
1203 if self.ProjectTree.GetPyData(event.GetItem()) != ITEM_UNEDITABLE and self.SelectedItem is None: |
|
1204 self.SelectedItem = event.GetItem() |
|
1205 event.Veto() |
|
1206 else: |
|
1207 event.Skip() |
1164 |
1208 |
1165 def IsOpened(self, tagname): |
1209 def IsOpened(self, tagname): |
1166 for idx in xrange(self.GetPageCount()): |
1210 for idx in xrange(self.GetPageCount()): |
1167 if self.GetPage(idx).IsViewing(tagname): |
1211 if self.GetPage(idx).IsViewing(tagname): |
1168 return idx |
1212 return idx |