FBDViewer.py
changeset 3 86ccc89d7b0b
parent 2 93bc4c2cf376
child 5 f8652b073e84
equal deleted inserted replaced
2:93bc4c2cf376 3:86ccc89d7b0b
    75         elif self.Mode in [MODE_BLOCK,MODE_VARIABLE,MODE_CONNECTION,MODE_COMMENT]:
    75         elif self.Mode in [MODE_BLOCK,MODE_VARIABLE,MODE_CONNECTION,MODE_COMMENT]:
    76             self.rubberBand.Reset()
    76             self.rubberBand.Reset()
    77             self.rubberBand.OnLeftDown(event, self.Scaling)
    77             self.rubberBand.OnLeftDown(event, self.Scaling)
    78         elif self.Mode == MODE_WIRE:
    78         elif self.Mode == MODE_WIRE:
    79             pos = GetScaledEventPosition(event, self.Scaling)
    79             pos = GetScaledEventPosition(event, self.Scaling)
    80             wire = Wire(self, [wxPoint(pos.x, pos.y), EAST], [wxPoint(pos.x, pos.y), WEST])
    80             connector = self.FindBlockConnector(pos)
    81             wire.oldPos = pos
    81             if connector:
    82             wire.Handle = (HANDLE_POINT, 0)
    82                 if (connector.GetDirection() == EAST):
    83             wire.ProcessDragging(0, 0)
    83                     wire = Wire(self, [wxPoint(pos.x, pos.y), EAST], [wxPoint(pos.x, pos.y), WEST])
    84             wire.Handle = (HANDLE_POINT, 1)
    84                 else:
    85             self.Wires.append(wire)
    85                     wire = Wire(self, [wxPoint(pos.x, pos.y), WEST], [wxPoint(pos.x, pos.y), EAST])
    86             self.Elements.append(wire)
    86                 wire.oldPos = pos
    87             if self.SelectedElement:
    87                 wire.Handle = (HANDLE_POINT, 0)
       
    88                 wire.ProcessDragging(0, 0)
       
    89                 wire.Handle = (HANDLE_POINT, 1)
       
    90                 self.Wires.append(wire)
       
    91                 self.Elements.append(wire)
       
    92                 if self.SelectedElement:
       
    93                     self.SelectedElement.SetSelected(False)
       
    94                 self.SelectedElement = wire
       
    95             elif self.SelectedElement:
    88                 self.SelectedElement.SetSelected(False)
    96                 self.SelectedElement.SetSelected(False)
    89             self.SelectedElement = wire
    97                 self.SelectedElement = None
    90             self.Refresh()
    98             self.Refresh()
    91         event.Skip()
    99         event.Skip()
    92 
   100 
    93     def OnViewerLeftUp(self, event):
   101     def OnViewerLeftUp(self, event):
    94         if self.rubberBand.IsShown():
   102         if self.rubberBand.IsShown():
   120             self.SelectedElement.OnLeftUp(event, self.Scaling)
   128             self.SelectedElement.OnLeftUp(event, self.Scaling)
   121             wxCallAfter(self.SetCursor, wxNullCursor)
   129             wxCallAfter(self.SetCursor, wxNullCursor)
   122             self.ReleaseMouse()
   130             self.ReleaseMouse()
   123             self.Refresh()
   131             self.Refresh()
   124         elif self.Mode == MODE_WIRE and self.SelectedElement:
   132         elif self.Mode == MODE_WIRE and self.SelectedElement:
   125             self.SelectedElement.ResetPoints()
   133             pos = GetScaledEventPosition(event, self.Scaling)
   126             self.SelectedElement.OnMotion(event, self.Scaling)
   134             connector = self.FindBlockConnector(pos, False)
   127             self.SelectedElement.GeneratePoints()
   135             if connector and connector != self.SelectedElement.StartConnected:
   128             self.SelectedElement.RefreshModel()
   136                 self.SelectedElement.ResetPoints()
   129             self.SelectedElement.SetSelected(True)
   137                 self.SelectedElement.OnMotion(event, self.Scaling)
   130             self.Refresh()
   138                 self.SelectedElement.GeneratePoints()
       
   139                 self.SelectedElement.RefreshModel()
       
   140                 self.SelectedElement.SetSelected(True)
       
   141             else:
       
   142                 self.SelectedElement.Delete()
       
   143                 self.SelectedElement = None
       
   144             self.Refresh()
       
   145         if not self.SavedMode:
       
   146             wxCallAfter(self.Parent.ResetCurrentMode)
   131         event.Skip()
   147         event.Skip()
   132     
   148     
   133     def OnViewerRightUp(self, event):
   149     def OnViewerRightUp(self, event):
   134         pos = event.GetPosition()
   150         pos = event.GetPosition()
   135         element = self.FindElement(pos)
   151         element = self.FindElement(pos)
   155             self.rubberBand.OnMotion(event, self.Scaling)
   171             self.rubberBand.OnMotion(event, self.Scaling)
   156         elif self.Mode == MODE_SELECTION and self.SelectedElement:
   172         elif self.Mode == MODE_SELECTION and self.SelectedElement:
   157             self.SelectedElement.OnMotion(event, self.Scaling)
   173             self.SelectedElement.OnMotion(event, self.Scaling)
   158             self.Refresh()
   174             self.Refresh()
   159         elif self.Mode == MODE_WIRE and self.SelectedElement:
   175         elif self.Mode == MODE_WIRE and self.SelectedElement:
   160             self.SelectedElement.ResetPoints()
   176             pos = GetScaledEventPosition(event, self.Scaling)
   161             self.SelectedElement.OnMotion(event, self.Scaling)
   177             connector = self.FindBlockConnector(pos, False)
   162             self.SelectedElement.GeneratePoints()
   178             if not connector or self.SelectedElement.EndConnected == None:
   163             self.Refresh()
   179                 self.SelectedElement.ResetPoints()
       
   180                 self.SelectedElement.OnMotion(event, self.Scaling)
       
   181                 self.SelectedElement.GeneratePoints()
       
   182                 self.Refresh()
   164         event.Skip()
   183         event.Skip()
   165 
   184 
   166 #-------------------------------------------------------------------------------
   185 #-------------------------------------------------------------------------------
   167 #                          Keyboard event functions
   186 #                          Keyboard event functions
   168 #-------------------------------------------------------------------------------
   187 #-------------------------------------------------------------------------------
   207             block.SetSize(values["width"], values["height"])
   226             block.SetSize(values["width"], values["height"])
   208             self.Blocks.append(block)
   227             self.Blocks.append(block)
   209             self.Elements.append(block)
   228             self.Elements.append(block)
   210             self.Controler.AddCurrentElementEditingBlock(id)
   229             self.Controler.AddCurrentElementEditingBlock(id)
   211             self.RefreshBlockModel(block)
   230             self.RefreshBlockModel(block)
   212             self.Parent.RefreshProjectTree()
       
   213             self.Refresh()
   231             self.Refresh()
   214         dialog.Destroy()
   232         dialog.Destroy()
   215     
   233     
   216     def AddNewVariable(self, bbox):
   234     def AddNewVariable(self, bbox):
   217         dialog = VariablePropertiesDialog(self.Parent)
   235         dialog = VariablePropertiesDialog(self.Parent)
   233             variable.SetSize(values["width"], values["height"])
   251             variable.SetSize(values["width"], values["height"])
   234             self.Blocks.append(variable)
   252             self.Blocks.append(variable)
   235             self.Elements.append(variable)
   253             self.Elements.append(variable)
   236             self.Controler.AddCurrentElementEditingVariable(id, values["type"])
   254             self.Controler.AddCurrentElementEditingVariable(id, values["type"])
   237             self.RefreshVariableModel(variable)
   255             self.RefreshVariableModel(variable)
   238             self.Parent.RefreshProjectTree()
       
   239             self.Refresh()
   256             self.Refresh()
   240         dialog.Destroy()
   257         dialog.Destroy()
   241 
   258 
   242     def AddNewConnection(self, bbox):
   259     def AddNewConnection(self, bbox):
   243         dialog = ConnectionPropertiesDialog(self.Parent)
   260         dialog = ConnectionPropertiesDialog(self.Parent)
   250             connection.SetSize(values["width"], values["height"])
   267             connection.SetSize(values["width"], values["height"])
   251             self.Blocks.append(connection)
   268             self.Blocks.append(connection)
   252             self.Elements.append(connection)
   269             self.Elements.append(connection)
   253             self.Controler.AddCurrentElementEditingConnection(id, values["type"])
   270             self.Controler.AddCurrentElementEditingConnection(id, values["type"])
   254             self.RefreshConnectionModel(connection)
   271             self.RefreshConnectionModel(connection)
   255             self.Parent.RefreshProjectTree()
       
   256             self.Refresh()
   272             self.Refresh()
   257         dialog.Destroy()
   273         dialog.Destroy()
   258 
   274 
   259     def AddNewComment(self, bbox):
   275     def AddNewComment(self, bbox):
   260         dialog = wxTextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wxOK|wxCANCEL|wxTE_MULTILINE)
   276         dialog = wxTextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wxOK|wxCANCEL|wxTE_MULTILINE)
   283         self.Blocks.remove(block)
   299         self.Blocks.remove(block)
   284         self.Elements.remove(block)
   300         self.Elements.remove(block)
   285         self.Controler.RemoveCurrentElementEditingInstance(block.GetId())
   301         self.Controler.RemoveCurrentElementEditingInstance(block.GetId())
   286         for wire in wires:
   302         for wire in wires:
   287             wire.RefreshModel()
   303             wire.RefreshModel()
   288         self.Parent.RefreshProjectTree()
       
   289 
   304 
   290     def DeleteVariable(self, variable):
   305     def DeleteVariable(self, variable):
   291         wires = []
   306         wires = []
   292         if self.SelectedElement.GetType() == INPUT:
   307         if variable.GetType() == INPUT:
   293             connector = variable.GetConnector()
   308             connector = variable.GetConnector()
   294             wires.extend([wire[0] for wire in connector.GetWires()])
   309             wires.extend([wire[0] for wire in connector.GetWires()])
   295         variable.Clean()
   310         variable.Clean()
   296         self.Blocks.remove(variable)
   311         self.Blocks.remove(variable)
   297         self.Elements.remove(variable)
   312         self.Elements.remove(variable)
   298         self.Controler.RemoveCurrentElementEditingInstance(variable.GetId())
   313         self.Controler.RemoveCurrentElementEditingInstance(variable.GetId())
   299         for wire in wires:
   314         for wire in wires:
   300             wire.RefreshModel()
   315             wire.RefreshModel()
   301         self.Parent.RefreshProjectTree()
       
   302 
   316 
   303     def DeleteConnection(self, connection):
   317     def DeleteConnection(self, connection):
   304         wires = []
   318         wires = []
   305         if self.SelectedElement.GetType() == CONTINUATION:
   319         if connection.GetType() == CONTINUATION:
   306             connector = connection.GetConnector()
   320             connector = connection.GetConnector()
   307             wires.extend([wire[0] for wire in connector.GetWires()])
   321             wires.extend([wire[0] for wire in connector.GetWires()])
   308         connection.Clean()
   322         connection.Clean()
   309         self.Blocks.remove(connection)
   323         self.Blocks.remove(connection)
   310         self.Elements.remove(connection)
   324         self.Elements.remove(connection)
   311         self.Controler.RemoveCurrentElementEditingInstance(connection.GetId())
   325         self.Controler.RemoveCurrentElementEditingInstance(connection.GetId())
   312         for wire in wires:
   326         for wire in wires:
   313             wire.RefreshModel()
   327             wire.RefreshModel()
   314         self.Parent.RefreshProjectTree()
       
   315 
   328 
   316     def DeleteComment(self, comment):
   329     def DeleteComment(self, comment):
   317         self.Elements.remove(comment)
   330         self.Elements.remove(comment)
   318         self.Controler.RemoveCurrentElementEditingInstance(comment.GetId())
   331         self.Controler.RemoveCurrentElementEditingInstance(comment.GetId())
   319 
   332 
   320     def DeleteWire(self, wire):
   333     def DeleteWire(self, wire):
   321         connected = wire.GetConnected()
   334         connected = wire.GetConnected()
   322         self.SelectedElement.Clean()
   335         wire.Clean()
   323         self.Wires.remove(wire)
   336         self.Wires.remove(wire)
   324         self.Elements.remove(wire)
   337         self.Elements.remove(wire)
   325         for connector in connected:
   338         for connector in connected:
   326             connector.RefreshParentBlock()
   339             connector.RefreshParentBlock()
   327 
   340 
   341             if "name" in values:
   354             if "name" in values:
   342                 block.SetName(values["name"])
   355                 block.SetName(values["name"])
   343             block.SetExtension(values["extension"])
   356             block.SetExtension(values["extension"])
   344             block.SetSize(values["width"], values["height"])
   357             block.SetSize(values["width"], values["height"])
   345             block.SetType(values["type"])
   358             block.SetType(values["type"])
       
   359             self.RefreshBlockModel(block)
       
   360             self.Refresh()
       
   361         dialog.Destroy()
       
   362 
       
   363     def EditVariableContent(self, variable):
       
   364         dialog = VariablePropertiesDialog(self.Parent)
       
   365         dialog.SetMinVariableSize(variable.GetSize())
       
   366         varlist = []
       
   367         vars = self.Controler.GetCurrentElementEditingInterfaceVars()
       
   368         if vars:
       
   369             for var in vars:
       
   370                 varlist.append((var["Name"], var["Class"], var["Type"]))
       
   371         returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
       
   372         if returntype:
       
   373             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
       
   374         dialog.SetVariables(varlist)
       
   375         values = {"name" : variable.GetName(), "type" : variable.GetType()}
       
   376         dialog.SetValues(values)
       
   377         if dialog.ShowModal() == wxID_OK:
       
   378             old_type = variable.GetType()
       
   379             values = dialog.GetValues()
       
   380             variable.SetName(values["name"])
       
   381             variable.SetType(values["type"], values["value_type"])
       
   382             variable.SetSize(values["width"], values["height"])
       
   383             if old_type != values["type"]:
       
   384                 id = variable.GetId()
       
   385                 self.Controler.RemoveCurrentElementEditingInstance(id)
       
   386                 self.Controler.AddCurrentElementEditingVariable(id, values["type"])
       
   387             self.RefreshVariableModel(variable)
   346             self.Refresh()
   388             self.Refresh()
   347         dialog.Destroy()
   389         dialog.Destroy()
   348 
   390 
   349 #-------------------------------------------------------------------------------
   391 #-------------------------------------------------------------------------------
   350 #                          Create New Block Dialog
   392 #                          Create New Block Dialog
   657         self.MinVariableSize = size
   699         self.MinVariableSize = size
   658 
   700 
   659     def SetVariables(self, vars):
   701     def SetVariables(self, vars):
   660         self.VarList = vars
   702         self.VarList = vars
   661         self.RefreshNameList()
   703         self.RefreshNameList()
       
   704 
       
   705     def SetValues(self, values):
       
   706         for name, value in values.items():
       
   707             if name == "type":
       
   708                 if value == INPUT:
       
   709                     self.Class.SetStringSelection("Input")
       
   710                 if value == OUTPUT:
       
   711                     self.Class.SetStringSelection("Output")
       
   712                 if value == INOUT:
       
   713                     self.Class.SetStringSelection("InOut")
       
   714             elif name == "name":
       
   715                 self.Name.SetStringSelection(value)
       
   716         self.RefreshPreview()
   662         
   717         
   663     def GetValues(self):
   718     def GetValues(self):
   664         values = {}
   719         values = {}
   665         classtype = self.Class.GetStringSelection()
   720         classtype = self.Class.GetStringSelection()
   666         if classtype == "Input":
   721         if classtype == "Input":