editors/Viewer.py
changeset 1584 431f4ef34bde
parent 1581 2295fdc5c271
child 1586 e17406dd4f06
equal deleted inserted replaced
1583:d91356480df9 1584:431f4ef34bde
    41 SCROLLBAR_UNIT = 10
    41 SCROLLBAR_UNIT = 10
    42 WINDOW_BORDER = 10
    42 WINDOW_BORDER = 10
    43 SCROLL_ZONE = 10
    43 SCROLL_ZONE = 10
    44 
    44 
    45 CURSORS = None
    45 CURSORS = None
       
    46 SFC_Objects = (SFC_Step, SFC_ActionBlock, SFC_Transition, SFC_Divergence, SFC_Jump)
    46 
    47 
    47 def ResetCursors():
    48 def ResetCursors():
    48     global CURSORS
    49     global CURSORS
    49     if CURSORS == None:
    50     if CURSORS == None:
    50         CURSORS = [wx.NullCursor,
    51         CURSORS = [wx.NullCursor,
   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()