diff -r a6ff2b3fcc25 -r 2245e8776086 Viewer.py --- a/Viewer.py Mon Sep 10 16:12:29 2007 +0200 +++ b/Viewer.py Mon Sep 10 18:16:07 2007 +0200 @@ -49,38 +49,38 @@ def __init__(self, parent): wx.TextDropTarget.__init__(self) - self.Parent = parent + self.ParentWindow = parent def OnDropText(self, x, y, data): values = eval(data) if values[1] in ["function", "functionBlock", "program"]: - id = self.Parent.GetNewId() - block = FBD_Block(self.Parent, values[0], values[2], id) + id = self.ParentWindow.GetNewId() + block = FBD_Block(self.ParentWindow, values[0], values[2], id) block.SetPosition(x, y) width, height = block.GetMinSize() block.SetSize(width, height) - self.Parent.AddBlock(block) - self.Parent.Controler.AddCurrentElementEditingBlock(id) - self.Parent.RefreshBlockModel(block) - self.Parent.RefreshScrollBars() - self.Parent.Refresh() + self.ParentWindow.AddBlock(block) + self.ParentWindow.Controler.AddCurrentElementEditingBlock(id) + self.ParentWindow.RefreshBlockModel(block) + self.ParentWindow.RefreshScrollBars() + self.ParentWindow.Update() elif values[1] != "location": - id = self.Parent.GetNewId() + id = self.ParentWindow.GetNewId() if values[1] == "Output": var_type = OUTPUT elif values[1] == "InOut": var_type = INPUT else: var_type = INPUT - variable = FBD_Variable(self.Parent, var_type, values[0], values[2], id) + variable = FBD_Variable(self.ParentWindow, var_type, values[0], values[2], id) variable.SetPosition(x, y) width, height = variable.GetMinSize() variable.SetSize(width, height) - self.Parent.AddBlock(variable) - self.Parent.Controler.AddCurrentElementEditingVariable(id, var_type) - self.Parent.RefreshVariableModel(variable) - self.Parent.RefreshScrollBars() - self.Parent.Refresh() + self.ParentWindow.AddBlock(variable) + self.ParentWindow.Controler.AddCurrentElementEditingVariable(id, var_type) + self.ParentWindow.RefreshVariableModel(variable) + self.ParentWindow.RefreshScrollBars() + self.ParentWindow.Update() """ @@ -161,7 +161,7 @@ self.Mode = MODE_SELECTION self.SavedMode = False - self.Parent = window + self.ParentWindow = window self.Controler = controler self.SetDropTarget(ViewerDropTarget(self)) @@ -174,8 +174,9 @@ self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp) self.Bind(wx.EVT_MOTION, self.OnViewerMotion) self.Bind(wx.EVT_CHAR, self.OnChar) - self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow) - self.Bind(wx.EVT_SIZE, self.OnMoveWindow) + if wx.VERSION < (2, 7, 0): + self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow) + self.Bind(wx.EVT_SIZE, self.OnMoveWindow) # Returns a new id def GetNewId(self): @@ -186,8 +187,12 @@ def __del__(self): self.ResetView() - def GetLogicalDC(self): - dc = wx.ClientDC(self) + def GetLogicalDC(self, buffered=False): + if buffered: + dc = wx.BufferedPaintDC(self) + else: + dc = wx.ClientDC(self) + dc.SetFont(wx.NORMAL_FONT) self.DoPrepareDC(dc) return dc @@ -265,17 +270,17 @@ if self.Mode != MODE_SELECTION and self.SelectedElement: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) # Return current drawing mode def GetDrawingMode(self): - return self.Parent.GetDrawingMode() + return self.ParentWindow.GetDrawingMode() # Buffer the last model state def RefreshBuffer(self): self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() #------------------------------------------------------------------------------- # Refresh functions @@ -298,7 +303,7 @@ if instance: self.loadInstance(instance, ids) self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) def RefreshScrollBars(self): xstart, ystart = self.GetViewStart() @@ -518,10 +523,25 @@ connector.SetPosition(wx.Point(*instance["connector"]["position"])) self.CreateWires(connector, instance["connector"]["links"], ids) else: + connectors = {"inputs" : [], "outputs" : []} + for input in instance["connectors"]["inputs"]: + if input["negated"]: + connectors["inputs"].append((input["name"], None, "negated")) + elif input["edge"]: + connectors["inputs"].append((input["name"], None, input["edge"])) + else: + connectors["inputs"].append((input["name"], None, "none")) + for output in instance["connectors"]["outputs"]: + if output["negated"]: + connectors["outputs"].append((output["name"], None, "negated")) + elif output["edge"]: + connectors["outputs"].append((output["name"], None, output["edge"])) + else: + connectors["outputs"].append((output["name"], None, "none")) if instance["name"] != None: - block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"])) - else: - block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"])) + block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors) + else: + block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors) block.SetPosition(instance["x"], instance["y"]) block.SetSize(instance["width"], instance["height"]) self.AddBlock(block) @@ -685,17 +705,6 @@ self.ContextualMenu.FindItemByPosition(9).Enable(False) self.PopupMenu(self.ContextualMenu) - def EditCommentContent(self, comment): - dialog = wx.TextEntryDialog(self.Parent, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE) - if dialog.ShowModal() == wx.ID_OK: - value = dialog.GetValue() - comment.SetContent(value) - infos = {"content" : value} - infos["width"], infos["height"] = comment.GetSize() - self.Controler.SetCurrentElementEditingCommentInfos(comment.GetId(), infos) - self.Refresh() - dialog.Destroy() - #------------------------------------------------------------------------------- # Menu items functions #------------------------------------------------------------------------------- @@ -783,11 +792,11 @@ if self.SelectedElement and self.SelectedElement != element: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) if element: self.SelectedElement = element self.SelectedElement.OnLeftDown(event, dc, self.Scaling) - self.Refresh() + self.Refresh(False) else: self.rubberBand.Reset() self.rubberBand.OnLeftDown(event, dc, self.Scaling) @@ -815,7 +824,7 @@ elif self.SelectedElement: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerLeftUp(self, event): @@ -826,12 +835,12 @@ if len(elements) == 1: self.SelectedElement = elements[0] self.SelectedElement.SetSelected(True) - self.Refresh() + self.Refresh(False) elif len(elements) > 1: self.SelectedElement = Graphic_Group(self) self.SelectedElement.SetElements(elements) self.SelectedElement.SetSelected(True) - self.Refresh() + self.Refresh(False) else: bbox = self.rubberBand.GetCurrentExtent() self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) @@ -864,8 +873,7 @@ elif self.Mode == MODE_SELECTION and self.SelectedElement: self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) - self.ReleaseMouse() - self.Refresh() + self.Refresh(False) elif self.Mode == MODE_WIRE and self.SelectedElement: if self.SelectedElement.EndConnected != None: self.SelectedElement.ResetPoints() @@ -877,9 +885,9 @@ else: self.SelectedElement.Delete() self.SelectedElement = None - self.Refresh() + self.Refresh(False) if not self.SavedMode: - wx.CallAfter(self.Parent.ResetCurrentMode) + wx.CallAfter(self.ParentWindow.ResetCurrentMode) event.Skip() def OnViewerRightUp(self, event): @@ -894,21 +902,21 @@ self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) self.ReleaseMouse() - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerLeftDClick(self, event): if self.Mode == MODE_SELECTION and self.SelectedElement: self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerMotion(self, event): if self.rubberBand.IsShown(): self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling) elif self.Mode == MODE_SELECTION and self.SelectedElement: - self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) - self.Refresh() + if self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling): + self.Refresh(False) elif self.Mode == MODE_WIRE and self.SelectedElement: dc = self.GetLogicalDC() pos = GetScaledEventPosition(event, dc, self.Scaling) @@ -917,7 +925,7 @@ self.SelectedElement.ResetPoints() self.SelectedElement.OnMotion(event, dc, self.Scaling) self.SelectedElement.GeneratePoints() - self.Refresh() + self.Refresh(False) event.Skip() def UpdateScrollPos(self, event): @@ -957,7 +965,7 @@ self.SelectedElement = None self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_LEFT: if event.ControlDown() and event.ShiftDown(): self.Scroll(0, ypos) @@ -968,7 +976,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_RIGHT: if event.ControlDown() and event.ShiftDown(): self.Scroll(xmax, ypos) @@ -979,7 +987,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_UP: if event.ControlDown() and event.ShiftDown(): self.Scroll(xpos, 0) @@ -990,7 +998,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_DOWN: if event.ControlDown() and event.ShiftDown(): self.Scroll(xpos, ymax) @@ -1001,14 +1009,14 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) #------------------------------------------------------------------------------- # Model adding functions #------------------------------------------------------------------------------- def AddNewBlock(self, bbox): - dialog = BlockPropertiesDialog(self.Parent) + dialog = BlockPropertiesDialog(self.ParentWindow) dialog.SetBlockList(self.Controler.GetBlockTypes()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetPouElementNames(self.Controler.GetCurrentElementEditingVariables()) @@ -1027,12 +1035,12 @@ self.RefreshBlockModel(block) self.RefreshBuffer() self.RefreshScrollBars() - self.Parent.RefreshEditor() - self.Refresh() + self.ParentWindow.RefreshEditor() + self.Refresh(False) dialog.Destroy() def AddNewVariable(self, bbox): - dialog = VariablePropertiesDialog(self.Parent) + dialog = VariablePropertiesDialog(self.ParentWindow) dialog.SetMinVariableSize((bbox.width, bbox.height)) varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() @@ -1055,11 +1063,11 @@ self.RefreshVariableModel(variable) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewConnection(self, bbox): - dialog = ConnectionPropertiesDialog(self.Parent) + dialog = ConnectionPropertiesDialog(self.ParentWindow) dialog.SetMinConnectionSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1072,11 +1080,11 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewComment(self, bbox): - dialog = wx.TextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE) + dialog = wx.TextEntryDialog(self.ParentWindow, "Add a new comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetValue() id = self.GetNewId() @@ -1089,11 +1097,11 @@ self.RefreshCommentModel(comment) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewContact(self, bbox): - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1114,11 +1122,11 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewCoil(self, bbox): - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1142,11 +1150,11 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewPowerRail(self, bbox): - dialog = LDPowerRailDialog(self.Parent) + dialog = LDPowerRailDialog(self.ParentWindow) dialog.SetMinSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1159,11 +1167,11 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewStep(self, bbox, initial = False): - dialog = StepContentDialog(self.Parent, initial) + dialog = StepContentDialog(self.ParentWindow, initial) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) @@ -1192,11 +1200,11 @@ self.RefreshStepModel(step) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewTransition(self, bbox): - dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) + dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1210,11 +1218,11 @@ self.RefreshTransitionModel(transition) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewDivergence(self, bbox): - dialog = DivergenceCreateDialog(self.Parent) + dialog = DivergenceCreateDialog(self.ParentWindow) dialog.SetMinSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1228,7 +1236,7 @@ self.RefreshDivergenceModel(divergence) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() @@ -1237,7 +1245,7 @@ #------------------------------------------------------------------------------- def EditBlockContent(self, block): - dialog = BlockPropertiesDialog(self.Parent) + dialog = BlockPropertiesDialog(self.ParentWindow) dialog.SetBlockList(self.Controler.GetBlockTypes()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetPouElementNames(self.Controler.GetCurrentElementEditingVariables()) @@ -1254,11 +1262,11 @@ self.RefreshBlockModel(block) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditVariableContent(self, variable): - dialog = VariablePropertiesDialog(self.Parent) + dialog = VariablePropertiesDialog(self.ParentWindow) dialog.SetMinVariableSize(variable.GetSize()) varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() @@ -1285,11 +1293,11 @@ self.RefreshVariableModel(variable) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditConnectionContent(self, connection): - dialog = ConnectionPropertiesDialog(self.Parent) + dialog = ConnectionPropertiesDialog(self.ParentWindow) dialog.SetMinConnectionSize(connection.GetSize()) values = {"name" : connection.GetName(), "type" : connection.GetType()} dialog.SetValues(values) @@ -1306,11 +1314,11 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditContactContent(self, contact): - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1329,11 +1337,11 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditCoilContent(self, coil): - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1355,11 +1363,11 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditPowerRailContent(self, powerrail): - dialog = LDPowerRailDialog(self.Parent, powerrail.GetType(), len(powerrail.GetConnectors())) + dialog = LDPowerRailDialog(self.ParentWindow, powerrail.GetType(), len(powerrail.GetConnectors())) dialog.SetMinSize(powerrail.GetSize()) if dialog.ShowModal() == wx.ID_OK: old_type = powerrail.GetType() @@ -1373,11 +1381,11 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditStepContent(self, step): - dialog = StepContentDialog(self.Parent, step.GetInitial()) + dialog = StepContentDialog(self.ParentWindow, step.GetInitial()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) @@ -1407,10 +1415,10 @@ step.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) def EditTransitionContent(self, transition): - dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) + dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()}) dialog.SetElementSize(transition.GetSize()) @@ -1421,7 +1429,7 @@ transition.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditJumpContent(self, jump): @@ -1429,7 +1437,7 @@ for block in self.Blocks: if isinstance(block, SFC_Step): choices.append(block.GetName()) - dialog = wx.SingleChoiceDialog(self.Parent, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) + dialog = wx.SingleChoiceDialog(self.ParentWindow, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) dialog.SetSelection(choices.index(jump.GetTarget())) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetStringSelection() @@ -1437,11 +1445,11 @@ jump.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditActionBlockContent(self, actionblock): - dialog = ActionBlockDialog(self.Parent) + dialog = ActionBlockDialog(self.ParentWindow) dialog.SetQualifierList(self.Controler.GetQualifierTypes()) dialog.SetActionList(self.Controler.GetCurrentElementEditingActions()) dialog.SetVariableList(self.Controler.GetCurrentElementEditingInterfaceVars()) @@ -1452,7 +1460,18 @@ actionblock.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) + dialog.Destroy() + + def EditCommentContent(self, comment): + dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE) + if dialog.ShowModal() == wx.ID_OK: + value = dialog.GetValue() + comment.SetContent(value) + comment.RefreshModel() + self.RefreshBuffer() + self.RefreshScrollBars() + self.Refresh(False) dialog.Destroy() #------------------------------------------------------------------------------- @@ -1587,7 +1606,7 @@ self.Controler.RemoveCurrentElementEditingInstance(block.GetId()) for element in elements: element.RefreshModel() - wx.CallAfter(self.Parent.RefreshEditor) + wx.CallAfter(self.ParentWindow.RefreshEditor) def DeleteVariable(self, variable): connectors = variable.GetConnectors() @@ -1732,9 +1751,10 @@ event.Skip() def OnPaint(self, event): - dc = self.GetLogicalDC() + dc = self.GetLogicalDC(True) dc.Clear() dc.SetPen(wx.Pen(wx.Colour(230, 230, 230))) + dc.BeginDrawing() if self.Scaling and self.DrawGrid: width, height = dc.GetSize() for i in xrange(1, width / self.Scaling[0] + 1): @@ -1753,7 +1773,8 @@ if self.SelectedElement: self.SelectedElement.Draw(dc) if self.rubberBand.IsShown(): - self.rubberBand.Draw() + self.rubberBand.Draw(dc) + dc.EndDrawing() event.Skip()