diff -r dae55dd9ee14 -r fc23e1f415d8 Viewer.py --- a/Viewer.py Mon Jul 09 11:10:14 2007 +0200 +++ b/Viewer.py Tue Jul 10 09:52:53 2007 +0200 @@ -274,7 +274,7 @@ connector = connection.GetConnector() connector.SetPosition(wxPoint(*instance["connector"]["position"])) elif instance["type"] == "connection": - connection = FBD_Connection(self, CONNECTOR, instance["name"], instance["id"]) + connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"]) connection.SetPosition(instance["x"], instance["y"]) connection.SetSize(instance["width"], instance["height"]) self.Blocks.append(connection) @@ -874,9 +874,9 @@ id = self.GetNewId() values = dialog.GetValues() if "name" in values: - block = FBD_Block(self, values["type"], values["name"], id, values["extension"]) + block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"]) else: - block = FBD_Block(self, values["type"], "", id, values["extension"]) + block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"]) block.SetPosition(bbox.x, bbox.y) block.SetSize(values["width"], values["height"]) self.Blocks.append(block) @@ -952,7 +952,7 @@ varlist.append(var["Name"]) dialog.SetVariables(varlist) dialog.SetValues({"name":"","type":CONTACT_NORMAL}) - dialog.SetElementSize(bbox.width, bbox.height) + dialog.SetElementSize((bbox.width, bbox.height)) if dialog.ShowModal() == wxID_OK: id = self.GetNewId() values = dialog.GetValues() @@ -979,7 +979,7 @@ varlist.append(self.Controler.GetCurrentElementEditingName()) dialog.SetVariables(varlist) dialog.SetValues({"name":"","type":COIL_NORMAL}) - dialog.SetElementSize(bbox.width, bbox.height) + dialog.SetElementSize((bbox.width, bbox.height)) if dialog.ShowModal() == wxID_OK: id = self.GetNewId() values = dialog.GetValues() @@ -1043,209 +1043,6 @@ self.Refresh() dialog.Destroy() -#------------------------------------------------------------------------------- -# Model update functions -#------------------------------------------------------------------------------- - - def RefreshBlockModel(self, block): - blockid = block.GetId() - infos = {} - infos["type"] = block.GetType() - infos["name"] = block.GetName() - infos["x"], infos["y"] = block.GetPosition() - infos["width"], infos["height"] = block.GetSize() - infos["connectors"] = block.GetConnectors() - self.Controler.SetCurrentElementEditingBlockInfos(blockid, infos) - - def RefreshVariableModel(self, variable): - variableid = variable.GetId() - infos = {} - infos["name"] = variable.GetName() - infos["x"], infos["y"] = variable.GetPosition() - infos["width"], infos["height"] = variable.GetSize() - infos["connectors"] = variable.GetConnectors() - self.Controler.SetCurrentElementEditingVariableInfos(variableid, infos) - - def RefreshConnectionModel(self, connection): - connectionid = connection.GetId() - infos = {} - infos["name"] = connection.GetName() - infos["x"], infos["y"] = connection.GetPosition() - infos["width"], infos["height"] = connection.GetSize() - infos["connector"] = connection.GetConnector() - self.Controler.SetCurrentElementEditingConnectionInfos(connectionid, infos) - - def RefreshCommentModel(self, comment): - commentid = comment.GetId() - infos = {} - infos["content"] = comment.GetContent() - infos["x"], infos["y"] = comment.GetPosition() - infos["width"], infos["height"] = comment.GetSize() - self.Controler.SetCurrentElementEditingCommentInfos(commentid, infos) - - def RefreshPowerRailModel(self, powerrail): - powerrailid = powerrail.GetId() - infos = {} - infos["x"], infos["y"] = powerrail.GetPosition() - infos["width"], infos["height"] = powerrail.GetSize() - infos["connectors"] = powerrail.GetConnectors() - self.Controler.SetCurrentElementEditingPowerRailInfos(powerrailid, infos) - - def RefreshContactModel(self, contact): - contactid = contact.GetId() - infos = {} - infos["name"] = contact.GetName() - infos["type"] = contact.GetType() - infos["x"], infos["y"] = contact.GetPosition() - infos["width"], infos["height"] = contact.GetSize() - infos["connectors"] = contact.GetConnectors() - self.Controler.SetCurrentElementEditingContactInfos(contactid, infos) - - def RefreshCoilModel(self, coil): - coilid = coil.GetId() - infos = {} - infos["name"] = coil.GetName() - infos["type"] = coil.GetType() - infos["x"], infos["y"] = coil.GetPosition() - infos["width"], infos["height"] = coil.GetSize() - infos["connectors"] = coil.GetConnectors() - self.Controler.SetCurrentElementEditingCoilInfos(coilid, infos) - - def RefreshStepModel(self, step): - stepid = step.GetId() - infos = {} - infos["name"] = step.GetName() - infos["initial"] = step.GetInitial() - infos["x"], infos["y"] = step.GetPosition() - infos["width"], infos["height"] = step.GetSize() - infos["connectors"] = step.GetConnectors() - self.Controler.SetCurrentElementEditingStepInfos(stepid, infos) - - def RefreshTransitionModel(self, transition): - transitionid = transition.GetId() - infos = {} - infos["type"] = transition.GetType() - infos["condition"] = transition.GetCondition() - infos["x"], infos["y"] = transition.GetPosition() - infos["width"], infos["height"] = transition.GetSize() - infos["connectors"] = transition.GetConnectors() - self.Controler.SetCurrentElementEditingTransitionInfos(transitionid, infos) - - def RefreshDivergenceModel(self, divergence): - divergenceid = divergence.GetId() - infos = {} - infos["x"], infos["y"] = divergence.GetPosition() - infos["width"], infos["height"] = divergence.GetSize() - infos["connectors"] = divergence.GetConnectors() - self.Controler.SetCurrentElementEditingDivergenceInfos(divergenceid, infos) - - def RefreshJumpModel(self, jump): - jumpid = jump.GetId() - infos = {} - infos["target"] = jump.GetTarget() - infos["x"], infos["y"] = jump.GetPosition() - infos["width"], infos["height"] = jump.GetSize() - infos["connector"] = jump.GetConnector() - self.Controler.SetCurrentElementEditingJumpInfos(jumpid, infos) - - def RefreshActionBlockModel(self, actionblock): - actionblockid = actionblock.GetId() - infos = {} - infos["actions"] = actionblock.GetActions() - infos["x"], infos["y"] = actionblock.GetPosition() - infos["width"], infos["height"] = actionblock.GetSize() - infos["connector"] = actionblock.GetConnector() - self.Controler.SetCurrentElementEditingActionBlockInfos(actionblockid, infos) - - -#------------------------------------------------------------------------------- -# Model delete functions -#------------------------------------------------------------------------------- - - - def DeleteBlock(self, block): - elements = [] - for output in block.GetConnectors()["outputs"]: - for element in output.GetConnectedBlocks(): - if element not in elements: - elements.append(element) - block.Clean() - self.Blocks.remove(block) - self.Elements.remove(block) - self.Controler.RemoveCurrentElementEditingInstance(block.GetId()) - for element in elements: - element.RefreshModel() - - def DeleteVariable(self, variable): - connectors = variable.GetConnectors() - if connectors["output"]: - elements = connectors["output"].GetConnectedBlocks() - else: - elements = [] - variable.Clean() - self.Blocks.remove(variable) - self.Elements.remove(variable) - self.Controler.RemoveCurrentElementEditingInstance(variable.GetId()) - for element in elements: - element.RefreshModel() - - def DeleteConnection(self, connection): - if connection.GetType() == CONTINUATION: - elements = connection.GetConnector().GetConnectedBlocks() - else: - elements = [] - connection.Clean() - self.Blocks.remove(connection) - self.Elements.remove(connection) - self.Controler.RemoveCurrentElementEditingInstance(connection.GetId()) - for element in elements: - element.RefreshModel() - - def DeleteComment(self, comment): - self.Elements.remove(comment) - self.Controler.RemoveCurrentElementEditingInstance(comment.GetId()) - - def DeleteWire(self, wire): - connected = wire.GetConnected() - wire.Clean() - self.Wires.remove(wire) - self.Elements.remove(wire) - for connector in connected: - connector.RefreshParentBlock() - - def DeleteContact(self, contact): - connectors = contact.GetConnectors() - elements = connectors["output"].GetConnectedBlocks() - contact.Clean() - self.Blocks.remove(contact) - self.Elements.remove(contact) - self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) - for element in elements: - element.RefreshModel() - - def DeleteCoil(self, coil): - connectors = coil.GetConnectors() - elements = connectors["output"].GetConnectedBlocks() - coil.Clean() - self.Blocks.remove(coil) - self.Elements.remove(coil) - self.Controler.RemoveCurrentElementEditingInstance(coil.GetId()) - for element in elements: - element.RefreshModel() - - def DeletePowerRail(self, powerrail): - elements = [] - if powerrail.GetType() == LEFTRAIL: - for connector in powerrail.GetConnectors(): - for element in connector.GetConnectedBlocks(): - if element not in elements: - elements.append(element) - powerrrail.Clean() - self.Blocks.remove(powerrrail) - self.Elements.remove(powerrrail) - self.Controler.RemoveCurrentElementEditingInstance(powerrrail.GetId()) - for element in elements: - element.RefreshModel() #------------------------------------------------------------------------------- # Edit element content functions @@ -1255,7 +1052,7 @@ dialog = BlockPropertiesDialog(self.Parent) dialog.SetBlockList(self.Controler.GetBlockTypes()) dialog.SetMinBlockSize(block.GetSize()) - values = {"name" : block.GetName(), "type" : block.GetType()} + values = {"name" : block.GetName(), "type" : block.GetType(), "inputs" : block.GetInputTypes()} values["extension"] = block.GetExtension() dialog.SetValues(values) if dialog.ShowModal() == wxID_OK: @@ -1296,6 +1093,384 @@ self.Refresh() dialog.Destroy() + def EditConnectionContent(self, connection): + dialog = ConnectionPropertiesDialog(self.Parent) + dialog.SetMinConnectionSize(connection.GetSize()) + values = {"name" : connection.GetName(), "type" : connection.GetType()} + dialog.SetValues(values) + if dialog.ShowModal() == wxID_OK: + old_type = connection.GetType() + values = dialog.GetValues() + connection.SetName(values["name"]) + connection.SetType(values["type"]) + connection.SetSize(values["width"], values["height"]) + if old_type != values["type"]: + id = connection.GetId() + self.Controler.RemoveCurrentElementEditingInstance(id) + self.Controler.AddCurrentElementEditingConnection(id, values["type"]) + self.RefreshConnectionModel(connection) + self.Refresh() + dialog.Destroy() + + def EditContactContent(self, contact): + dialog = LDElementDialog(self.Parent, "contact") + varlist = [] + vars = self.Controler.GetCurrentElementEditingInterfaceVars() + if vars: + for var in vars: + if var["Class"] != "Output" and var["Type"] == "BOOL": + varlist.append(var["Name"]) + dialog.SetVariables(varlist) + values = {"name" : contact.GetName(), "type" : contact.GetType()} + dialog.SetValues(values) + dialog.SetElementSize(contact.GetSize()) + if dialog.ShowModal() == wxID_OK: + values = dialog.GetValues() + contact.SetName(values["name"]) + contact.SetType(values["type"]) + contact.SetSize(values["width"], values["height"]) + self.RefreshContactModel(contact) + self.Refresh() + dialog.Destroy() + + def EditCoilContent(self, coil): + dialog = LDElementDialog(self.Parent, "coil") + varlist = [] + vars = self.Controler.GetCurrentElementEditingInterfaceVars() + if vars: + for var in vars: + if var["Class"] != "Input" and var["Type"] == "BOOL": + varlist.append(var["Name"]) + returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType() + if returntype == "BOOL": + varlist.append(self.Controler.GetCurrentElementEditingName()) + dialog.SetVariables(varlist) + values = {"name" : coil.GetName(), "type" : coil.GetType()} + dialog.SetValues(values) + dialog.SetElementSize(contact.GetSize()) + if dialog.ShowModal() == wxID_OK: + values = dialog.GetValues() + coil.SetName(values["name"]) + coil.SetType(values["type"]) + coil.SetSize(values["width"], values["height"]) + self.RefreshContactModel(coil) + self.Refresh() + dialog.Destroy() + + def EditPowerRailContent(self, powerrail): + dialog = LDPowerRailDialog(self.Parent, powerrail.GetType(), len(powerrail.GetConnectors())) + dialog.SetMinSize(powerrail.GetSize()) + if dialog.ShowModal() == wxID_OK: + old_type = powerrail.GetType() + values = dialog.GetValues() + powerrail.SetType(values["type"]) + powerrail.SetSize(values["width"], values["height"]) + if old_type != values["type"]: + id = powerrail.GetId() + self.Controler.RemoveCurrentElementEditingInstance(id) + self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) + self.RefreshPowerRailModel(powerrail) + self.Refresh() + dialog.Destroy() + + + def AddNewTransition(self, bbox): + dialog = TransitionContentDialog(self.Parent) + dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) + if dialog.ShowModal() == wxID_OK: + id = self.GetNewId() + values = dialog.GetValues() + transition = SFC_Transition(self, values["type"], values["value"], id) + transition.SetPosition(bbox.x, bbox.y) + min_width, min_height = transition.GetMinSize() + transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) + self.Blocks.append(transition) + self.Elements.append(transition) + self.Controler.AddCurrentElementEditingTransition(id) + self.RefreshTransitionModel(transition) + self.Refresh() + dialog.Destroy() + + def AddNewDivergence(self, bbox): + dialog = DivergenceCreateDialog(self.Parent) + dialog.SetMinSize((bbox.width, bbox.height)) + if dialog.ShowModal() == wxID_OK: + id = self.GetNewId() + values = dialog.GetValues() + divergence = SFC_Divergence(self, values["type"], values["number"], id) + divergence.SetPosition(bbox.x, bbox.y) + min_width, min_height = divergence.GetMinSize() + divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) + self.Blocks.append(divergence) + self.Elements.append(divergence) + self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) + self.RefreshDivergenceModel(divergence) + self.Refresh() + dialog.Destroy() + +#------------------------------------------------------------------------------- +# Model update functions +#------------------------------------------------------------------------------- + + def RefreshBlockModel(self, block): + blockid = block.GetId() + infos = {} + infos["type"] = block.GetType() + infos["name"] = block.GetName() + infos["x"], infos["y"] = block.GetPosition() + infos["width"], infos["height"] = block.GetSize() + infos["connectors"] = block.GetConnectors() + self.Controler.SetCurrentElementEditingBlockInfos(blockid, infos) + + def RefreshVariableModel(self, variable): + variableid = variable.GetId() + infos = {} + infos["name"] = variable.GetName() + infos["x"], infos["y"] = variable.GetPosition() + infos["width"], infos["height"] = variable.GetSize() + infos["connectors"] = variable.GetConnectors() + self.Controler.SetCurrentElementEditingVariableInfos(variableid, infos) + + def RefreshConnectionModel(self, connection): + connectionid = connection.GetId() + infos = {} + infos["name"] = connection.GetName() + infos["x"], infos["y"] = connection.GetPosition() + infos["width"], infos["height"] = connection.GetSize() + infos["connector"] = connection.GetConnector() + self.Controler.SetCurrentElementEditingConnectionInfos(connectionid, infos) + + def RefreshCommentModel(self, comment): + commentid = comment.GetId() + infos = {} + infos["content"] = comment.GetContent() + infos["x"], infos["y"] = comment.GetPosition() + infos["width"], infos["height"] = comment.GetSize() + self.Controler.SetCurrentElementEditingCommentInfos(commentid, infos) + + def RefreshPowerRailModel(self, powerrail): + powerrailid = powerrail.GetId() + infos = {} + infos["x"], infos["y"] = powerrail.GetPosition() + infos["width"], infos["height"] = powerrail.GetSize() + infos["connectors"] = powerrail.GetConnectors() + self.Controler.SetCurrentElementEditingPowerRailInfos(powerrailid, infos) + + def RefreshContactModel(self, contact): + contactid = contact.GetId() + infos = {} + infos["name"] = contact.GetName() + infos["type"] = contact.GetType() + infos["x"], infos["y"] = contact.GetPosition() + infos["width"], infos["height"] = contact.GetSize() + infos["connectors"] = contact.GetConnectors() + self.Controler.SetCurrentElementEditingContactInfos(contactid, infos) + + def RefreshCoilModel(self, coil): + coilid = coil.GetId() + infos = {} + infos["name"] = coil.GetName() + infos["type"] = coil.GetType() + infos["x"], infos["y"] = coil.GetPosition() + infos["width"], infos["height"] = coil.GetSize() + infos["connectors"] = coil.GetConnectors() + self.Controler.SetCurrentElementEditingCoilInfos(coilid, infos) + + def RefreshStepModel(self, step): + stepid = step.GetId() + infos = {} + infos["name"] = step.GetName() + infos["initial"] = step.GetInitial() + infos["x"], infos["y"] = step.GetPosition() + infos["width"], infos["height"] = step.GetSize() + infos["connectors"] = step.GetConnectors() + self.Controler.SetCurrentElementEditingStepInfos(stepid, infos) + + def RefreshTransitionModel(self, transition): + transitionid = transition.GetId() + infos = {} + infos["type"] = transition.GetType() + infos["condition"] = transition.GetCondition() + infos["x"], infos["y"] = transition.GetPosition() + infos["width"], infos["height"] = transition.GetSize() + infos["connectors"] = transition.GetConnectors() + self.Controler.SetCurrentElementEditingTransitionInfos(transitionid, infos) + + def RefreshDivergenceModel(self, divergence): + divergenceid = divergence.GetId() + infos = {} + infos["x"], infos["y"] = divergence.GetPosition() + infos["width"], infos["height"] = divergence.GetSize() + infos["connectors"] = divergence.GetConnectors() + self.Controler.SetCurrentElementEditingDivergenceInfos(divergenceid, infos) + + def RefreshJumpModel(self, jump): + jumpid = jump.GetId() + infos = {} + infos["target"] = jump.GetTarget() + infos["x"], infos["y"] = jump.GetPosition() + infos["width"], infos["height"] = jump.GetSize() + infos["connector"] = jump.GetConnector() + self.Controler.SetCurrentElementEditingJumpInfos(jumpid, infos) + + def RefreshActionBlockModel(self, actionblock): + actionblockid = actionblock.GetId() + infos = {} + infos["actions"] = actionblock.GetActions() + infos["x"], infos["y"] = actionblock.GetPosition() + infos["width"], infos["height"] = actionblock.GetSize() + infos["connector"] = actionblock.GetConnector() + self.Controler.SetCurrentElementEditingActionBlockInfos(actionblockid, infos) + + +#------------------------------------------------------------------------------- +# Model delete functions +#------------------------------------------------------------------------------- + + + def DeleteBlock(self, block): + elements = [] + for output in block.GetConnectors()["outputs"]: + for element in output.GetConnectedBlocks(): + if element not in elements: + elements.append(element) + block.Clean() + self.Blocks.remove(block) + self.Elements.remove(block) + self.Controler.RemoveCurrentElementEditingInstance(block.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteVariable(self, variable): + connectors = variable.GetConnectors() + if connectors["output"]: + elements = connectors["output"].GetConnectedBlocks() + else: + elements = [] + variable.Clean() + self.Blocks.remove(variable) + self.Elements.remove(variable) + self.Controler.RemoveCurrentElementEditingInstance(variable.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteConnection(self, connection): + if connection.GetType() == CONTINUATION: + elements = connection.GetConnector().GetConnectedBlocks() + else: + elements = [] + connection.Clean() + self.Blocks.remove(connection) + self.Elements.remove(connection) + self.Controler.RemoveCurrentElementEditingInstance(connection.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteComment(self, comment): + self.Elements.remove(comment) + self.Controler.RemoveCurrentElementEditingInstance(comment.GetId()) + + def DeleteWire(self, wire): + if wire in self.Wires: + connected = wire.GetConnected() + wire.Clean() + self.Wires.remove(wire) + self.Elements.remove(wire) + for connector in connected: + connector.RefreshParentBlock() + + def DeleteContact(self, contact): + connectors = contact.GetConnectors() + elements = connectors["output"].GetConnectedBlocks() + contact.Clean() + self.Blocks.remove(contact) + self.Elements.remove(contact) + self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteCoil(self, coil): + connectors = coil.GetConnectors() + elements = connectors["output"].GetConnectedBlocks() + coil.Clean() + self.Blocks.remove(coil) + self.Elements.remove(coil) + self.Controler.RemoveCurrentElementEditingInstance(coil.GetId()) + for element in elements: + element.RefreshModel() + + def DeletePowerRail(self, powerrail): + elements = [] + if powerrail.GetType() == LEFTRAIL: + for connector in powerrail.GetConnectors(): + for element in connector.GetConnectedBlocks(): + if element not in elements: + elements.append(element) + powerrrail.Clean() + self.Blocks.remove(powerrrail) + self.Elements.remove(powerrrail) + self.Controler.RemoveCurrentElementEditingInstance(powerrrail.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteStep(self, step): + elements = [] + connectors = step.GetConnectors() + if connectors["output"]: + for element in connectors["output"].GetConnectedBlocks(): + if element not in elements: + elements.append(element) + if connectors["action"]: + for element in connectors["action"].GetConnectedBlocks(): + if element not in elements: + elements.append(element) + step.Clean() + self.Blocks.remove(step) + self.Elements.remove(step) + self.Controler.RemoveCurrentElementEditingInstance(step.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteTransition(self, transition): + elements = [] + connectors = transition.GetConnectors() + if connectors["output"]: + for element in connectors["output"].GetConnectedBlocks(): + if element not in elements: + elements.append(element) + transition.Clean() + self.Blocks.remove(transition) + self.Elements.remove(transition) + self.Controler.RemoveCurrentElementEditingInstance(transition.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteDivergence(self, divergence): + elements = [] + connectors = divergence.GetConnectors() + for output in connectors["outputs"]: + for element in output.GetConnectedBlocks(): + if element not in elements: + elements.append(element) + divergence.Clean() + self.Blocks.remove(divergence) + self.Elements.remove(divergence) + self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId()) + for element in elements: + element.RefreshModel() + + def DeleteJump(self, jump): + jump.Clean() + self.Blocks.remove(jump) + self.Elements.remove(jump) + self.Controler.RemoveCurrentElementEditingInstance(jump.GetId()) + + def DeleteActionBlock(self, actionblock): + actionblock.Clean() + self.Blocks.remove(actionblock) + self.Elements.remove(actionblock) + self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId()) + #------------------------------------------------------------------------------- # Editing functions