Viewer.py
changeset 80 c798a68c5560
parent 71 0578bc212c20
child 90 2245e8776086
--- a/Viewer.py	Thu Aug 23 09:50:35 2007 +0200
+++ b/Viewer.py	Mon Aug 27 17:37:50 2007 +0200
@@ -142,7 +142,8 @@
     
     # Create a new Viewer
     def __init__(self, parent, window, controler):
-        wx.ScrolledWindow.__init__(self, parent, style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL)
+        wx.ScrolledWindow.__init__(self, parent, pos=wx.Point(0, 0), size=wx.Size(0, 0), 
+            style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL)
         self._init_menus()
         # Adding a rubberband to Viewer
         self.rubberBand = RubberBand(drawingSurface=self)
@@ -384,6 +385,7 @@
         elif instance["type"] == "leftPowerRail":
             leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
             leftpowerrail.SetPosition(instance["x"], instance["y"])
+            leftpowerrail.SetSize(instance["width"], instance["height"])
             self.AddBlock(leftpowerrail)
             connectors = leftpowerrail.GetConnectors()
             for i, connector in enumerate(instance["connectors"]):
@@ -391,6 +393,7 @@
         elif instance["type"] == "rightPowerRail":
             rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
             rightpowerrail.SetPosition(instance["x"], instance["y"])
+            rightpowerrail.SetSize(instance["width"], instance["height"])
             self.AddBlock(rightpowerrail)
             connectors = rightpowerrail.GetConnectors()
             for i, connector in enumerate(instance["connectors"]):
@@ -466,7 +469,7 @@
             if connectors["action"]:
                 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"]))
         elif instance["type"] == "transition":
-            transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"])
+            transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["priority"], instance["id"])
             transition.SetPosition(instance["x"], instance["y"])
             self.AddBlock(transition)
             connectors = transition.GetConnectors()
@@ -700,47 +703,54 @@
     def OnNoModifierMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.SelectedElement.SetConnectorNegated(False)
+            self.RefreshBuffer()
         event.Skip()
     
     def OnNegatedMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.SelectedElement.SetConnectorNegated(True)
+            self.RefreshBuffer()
         event.Skip()
 
     def OnRisingEdgeMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.SelectedElement.SetConnectorEdge("rising")
+            self.RefreshBuffer()
         event.Skip()
 
     def OnFallingEdgeMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.SelectedElement.SetConnectorEdge("falling")
+            self.RefreshBuffer()
         event.Skip()
 
     def OnAddSegmentMenu(self, event):
-        if self.SelectedElement and self.IsBlock(self.SelectedElement):
+        if self.SelectedElement and self.IsWire(self.SelectedElement):
             self.SelectedElement.AddSegment()
         event.Skip()
 
     def OnDeleteSegmentMenu(self, event):
-        if self.SelectedElement and self.IsBlock(self.SelectedElement):
+        if self.SelectedElement and self.IsWire(self.SelectedElement):
             self.SelectedElement.DeleteSegment()
         event.Skip()
 
     def OnAddBranchMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.AddDivergenceBranch(self.SelectedElement)
+            self.RefreshBuffer()
         event.Skip()
 
     def OnDeleteBranchMenu(self, event):
         if self.SelectedElement and self.IsBlock(self.SelectedElement):
             self.RemoveDivergenceBranch(self.SelectedElement)
+            self.RefreshBuffer()
         event.Skip()
 
     def OnDeleteMenu(self, event):
         if self.SelectedElement:
             self.SelectedElement.Delete()
             self.SelectedElement = None
+            self.RefreshBuffer()
         event.Skip()
 
 #-------------------------------------------------------------------------------
@@ -813,7 +823,11 @@
             if self.Mode == MODE_SELECTION:
                 elements = self.SearchElements(self.rubberBand.GetCurrentExtent())
                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
-                if len(elements) > 0:
+                if len(elements) == 1:
+                    self.SelectedElement = elements[0]
+                    self.SelectedElement.SetSelected(True)
+                    self.Refresh()
+                elif len(elements) > 1:
                     self.SelectedElement = Graphic_Group(self)
                     self.SelectedElement.SetElements(elements)
                     self.SelectedElement.SetSelected(True)
@@ -869,7 +883,8 @@
         event.Skip()
     
     def OnViewerRightUp(self, event):
-        pos = event.GetPosition()
+        dc = self.GetLogicalDC()
+        pos = event.GetLogicalPosition(dc)
         element = self.FindElement(pos)
         if element:
             if self.SelectedElement and self.SelectedElement != element:
@@ -1186,7 +1201,7 @@
         if dialog.ShowModal() == wx.ID_OK:
             id = self.GetNewId()
             values = dialog.GetValues()
-            transition = SFC_Transition(self, values["type"], values["value"], id)
+            transition = SFC_Transition(self, values["type"], values["value"], values["priority"], 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))
@@ -1397,11 +1412,12 @@
     def EditTransitionContent(self, transition):
         dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE)
         dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions())
-        dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition()})
+        dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()})
         dialog.SetElementSize(transition.GetSize())
         if dialog.ShowModal() == wx.ID_OK:
             values = dialog.GetValues()
             transition.SetType(values["type"],values["value"])
+            transition.SetPriority(values["priority"])
             transition.RefreshModel()
             self.RefreshBuffer()
             self.RefreshScrollBars()
@@ -1521,6 +1537,7 @@
         transitionid = transition.GetId()
         infos = {}
         infos["type"] = transition.GetType()
+        infos["priority"] = transition.GetPriority()
         infos["condition"] = transition.GetCondition()
         infos["x"], infos["y"] = transition.GetPosition()
         infos["width"], infos["height"] = transition.GetSize()
@@ -1710,6 +1727,7 @@
 #-------------------------------------------------------------------------------
 
     def OnMoveWindow(self, event):
+        self.GetBestSize()
         self.RefreshScrollBars()
         event.Skip()