143 def transitionCreationFunction(viewer, id, specific_values): |
144 def transitionCreationFunction(viewer, id, specific_values): |
144 transition = SFC_Transition(viewer, specific_values.condition_type, |
145 transition = SFC_Transition(viewer, specific_values.condition_type, |
145 specific_values.condition, |
146 specific_values.condition, |
146 specific_values.priority, id) |
147 specific_values.priority, id) |
147 return transition |
148 return transition |
|
149 |
|
150 divergence_types = [SELECTION_DIVERGENCE, |
|
151 SELECTION_CONVERGENCE, SIMULTANEOUS_DIVERGENCE, SIMULTANEOUS_CONVERGENCE] |
148 |
152 |
149 def GetDivergenceCreationFunction(divergence_type): |
153 def GetDivergenceCreationFunction(divergence_type): |
150 def divergenceCreationFunction(viewer, id, specific_values): |
154 def divergenceCreationFunction(viewer, id, specific_values): |
151 return SFC_Divergence(viewer, divergence_type, |
155 return SFC_Divergence(viewer, divergence_type, |
152 specific_values.connectors, id) |
156 specific_values.connectors, id) |
2058 self.SelectedElement.RefreshModel() |
2062 self.SelectedElement.RefreshModel() |
2059 self.SelectedElement.SetSelected(True) |
2063 self.SelectedElement.SetSelected(True) |
2060 self.SelectedElement.HighlightPoint(pos) |
2064 self.SelectedElement.HighlightPoint(pos) |
2061 self.RefreshBuffer() |
2065 self.RefreshBuffer() |
2062 elif connector is None or self.SelectedElement.GetDragging(): |
2066 elif connector is None or self.SelectedElement.GetDragging(): |
2063 start_connector = self.SelectedElement.GetStartConnected() |
2067 items = self.GetPopupMenuItems() |
2064 start_direction = start_connector.GetDirection() |
|
2065 |
|
2066 items = [] |
|
2067 |
|
2068 if self.CurrentLanguage == "SFC" and start_direction == SOUTH: |
|
2069 items.extend([ |
|
2070 (_(u'Initial Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, True)), |
|
2071 (_(u'Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, False)), |
|
2072 (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, False)), |
|
2073 (_(u'Divergence'), self.GetAddToWireMenuCallBack(self.AddNewDivergence)), |
|
2074 (_(u'Jump'), self.GetAddToWireMenuCallBack(self.AddNewJump)), |
|
2075 ]) |
|
2076 |
|
2077 elif start_direction == EAST: |
|
2078 |
|
2079 if isinstance(start_connector.GetParentBlock(), SFC_Step): |
|
2080 items.append( |
|
2081 (_(u'Action Block'), self.GetAddToWireMenuCallBack(self.AddNewActionBlock)) |
|
2082 ) |
|
2083 else: |
|
2084 items.extend([ |
|
2085 (_(u'Block'), self.GetAddToWireMenuCallBack(self.AddNewBlock)), |
|
2086 (_(u'Variable'), self.GetAddToWireMenuCallBack(self.AddNewVariable, True)), |
|
2087 (_(u'Connection'), self.GetAddToWireMenuCallBack(self.AddNewConnection)), |
|
2088 ]) |
|
2089 |
|
2090 if self.CurrentLanguage != "FBD": |
|
2091 items.append( |
|
2092 (_(u'Contact'), self.GetAddToWireMenuCallBack(self.AddNewContact)) |
|
2093 ) |
|
2094 if self.CurrentLanguage == "LD": |
|
2095 items.extend([ |
|
2096 (_(u'Coil'), self.GetAddToWireMenuCallBack(self.AddNewCoil)), |
|
2097 (_(u'Power Rail'), self.GetAddToWireMenuCallBack(self.AddNewPowerRail)), |
|
2098 ]) |
|
2099 if self.CurrentLanguage == "SFC": |
|
2100 items.append( |
|
2101 (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, True)) |
|
2102 ) |
|
2103 |
|
2104 if len(items) > 0: |
2068 if len(items) > 0: |
2105 if self.Editor.HasCapture(): |
2069 if self.Editor.HasCapture(): |
2106 self.Editor.ReleaseMouse() |
2070 self.Editor.ReleaseMouse() |
2107 |
2071 |
2108 # Popup contextual menu |
2072 # Popup contextual menu |
2354 self.RefreshScrollBars(move_window.x, move_window.y) |
2318 self.RefreshScrollBars(move_window.x, move_window.y) |
2355 |
2319 |
2356 def BlockCompatibility(self, startblock=None, endblock=None, direction = None): |
2320 def BlockCompatibility(self, startblock=None, endblock=None, direction = None): |
2357 return True |
2321 return True |
2358 |
2322 |
|
2323 def GetPopupMenuItems(self): |
|
2324 start_connector = self.SelectedElement.GetStartConnected() |
|
2325 start_direction = start_connector.GetDirection() |
|
2326 startblock = start_connector.GetParentBlock() |
|
2327 items = [] |
|
2328 if isinstance(startblock, SFC_Objects): |
|
2329 startblockname = self.GetBlockName(startblock) |
|
2330 poss_div_types = [] |
|
2331 |
|
2332 SFC_WireMenu_Buttons = { |
|
2333 'SFC_Step': (_(u'Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, False)), |
|
2334 'SFC_Jump': (_(u'Jump'), self.GetAddToWireMenuCallBack(self.AddNewJump)), |
|
2335 'SFC_Transition': (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, False)), |
|
2336 'SFC_ActionBlock': (_(u'Action Block'), self.GetAddToWireMenuCallBack(self.AddNewActionBlock))} |
|
2337 |
|
2338 for endblock in self.SFC_StandardRules.get(startblockname): |
|
2339 if start_direction in endblock: |
|
2340 if endblock[0] in divergence_types: |
|
2341 poss_div_types.append(endblock[0]) |
|
2342 else: |
|
2343 items.append(SFC_WireMenu_Buttons[endblock[0]]) |
|
2344 if len(poss_div_types) > 0: |
|
2345 items.append((_(u'Divergence'), self.GetAddToWireMenuCallBack(self.AddNewDivergence, |
|
2346 poss_div_types))) |
|
2347 elif start_direction == EAST: |
|
2348 items.extend([ |
|
2349 (_(u'Block'), self.GetAddToWireMenuCallBack(self.AddNewBlock)), |
|
2350 (_(u'Connection'), self.GetAddToWireMenuCallBack(self.AddNewConnection))]) |
|
2351 |
|
2352 if self.CurrentLanguage != "FBD": |
|
2353 items.append((_(u'Contact'), self.GetAddToWireMenuCallBack(self.AddNewContact))) |
|
2354 |
|
2355 if self.CurrentLanguage == "LD": |
|
2356 items.extend([ |
|
2357 (_(u'Coil'), self.GetAddToWireMenuCallBack(self.AddNewCoil)), |
|
2358 (_(u'Power Rail'), self.GetAddToWireMenuCallBack(self.AddNewPowerRail))]) |
|
2359 |
|
2360 if self.CurrentLanguage == "SFC": |
|
2361 items.append( |
|
2362 (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, True))) |
|
2363 else: |
|
2364 items.append( |
|
2365 (_(u'Variable'), self.GetAddToWireMenuCallBack(self.AddNewVariable, True))) |
|
2366 return items |
|
2367 |
2359 #------------------------------------------------------------------------------- |
2368 #------------------------------------------------------------------------------- |
2360 # Keyboard event functions |
2369 # Keyboard event functions |
2361 #------------------------------------------------------------------------------- |
2370 #------------------------------------------------------------------------------- |
2362 |
2371 |
2363 ARROW_KEY_MOVE = { |
2372 ARROW_KEY_MOVE = { |
2665 connector = transition.GetConditionConnector() |
2674 connector = transition.GetConditionConnector() |
2666 else: |
2675 else: |
2667 connector = transition.GetConnectors()["inputs"][0] |
2676 connector = transition.GetConnectors()["inputs"][0] |
2668 self.AddNewElement(transition, bbox, wire, connector) |
2677 self.AddNewElement(transition, bbox, wire, connector) |
2669 |
2678 |
2670 def AddNewDivergence(self, bbox, wire=None): |
2679 def AddNewDivergence(self, bbox, poss_div_types = None, wire=None): |
2671 dialog = SFCDivergenceDialog(self.ParentWindow, self.Controler, self.TagName) |
2680 dialog = SFCDivergenceDialog(self.ParentWindow, self.Controler, self.TagName, poss_div_types) |
2672 dialog.SetPreviewFont(self.GetFont()) |
2681 dialog.SetPreviewFont(self.GetFont()) |
2673 dialog.SetMinElementSize((bbox.width, bbox.height)) |
2682 dialog.SetMinElementSize((bbox.width, bbox.height)) |
2674 if dialog.ShowModal() == wx.ID_OK: |
2683 if dialog.ShowModal() == wx.ID_OK: |
2675 id = self.GetNewId() |
2684 id = self.GetNewId() |
2676 values = dialog.GetValues() |
2685 values = dialog.GetValues() |