graphics/SFC_Objects.py
changeset 213 4931959ea256
parent 204 5eb48c97f6e5
child 231 fc2d6cbb8b39
--- a/graphics/SFC_Objects.py	Wed Jun 04 17:48:26 2008 +0200
+++ b/graphics/SFC_Objects.py	Mon Jun 23 18:48:49 2008 +0200
@@ -46,7 +46,7 @@
     # Create a new step
     def __init__(self, parent, name, initial = False, id = None):
         Graphic_Element.__init__(self, parent)
-        self.Name = name
+        self.SetName(name)
         self.Initial = initial
         self.Id = id
         self.Size = wx.Size(SFC_STEP_DEFAULT_SIZE[0], SFC_STEP_DEFAULT_SIZE[1])
@@ -109,6 +109,10 @@
         if self.Action:
             self.Action.UnConnect(delete = self.Parent.GetDrawingMode() == FREEDRAWING_MODE)
     
+    # Refresh the size of text for name
+    def RefreshNameSize(self):
+        self.NameSize = self.Parent.GetTextExtent(self.Name)
+    
     # Add output connector to step
     def AddInput(self):
         if not self.Input:
@@ -244,6 +248,7 @@
     # Changes the step name
     def SetName(self, name):
         self.Name = name
+        self.RefreshNameSize()
 
     # Returns the step name
     def GetName(self):
@@ -459,14 +464,19 @@
         Graphic_Element.Draw(self, dc)
         dc.SetPen(wx.BLACK_PEN)
         dc.SetBrush(wx.WHITE_BRUSH)
+        
+        if getattr(dc, "printing", False):
+            name_size = dc.GetTextExtent(self.Name)
+        else:
+            name_size = self.NameSize
+        
         # Draw two rectangles for representing the step
         dc.DrawRectangle(self.Pos.x, self.Pos.y, self.Size[0] + 1, self.Size[1] + 1)
         if self.Initial:
             dc.DrawRectangle(self.Pos.x + 2, self.Pos.y + 2, self.Size[0] - 3, self.Size[1] - 3)
         # Draw step name
-        namewidth, nameheight = dc.GetTextExtent(self.Name)
-        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - namewidth) / 2,
-                    self.Pos.y + (self.Size[1] - nameheight) / 2)
+        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - name_size[0]) / 2,
+                    self.Pos.y + (self.Size[1] - name_size[1]) / 2)
         # Draw input and output connectors
         if self.Input:
             self.Input.Draw(dc)
@@ -815,6 +825,18 @@
         Graphic_Element.Draw(self, dc)
         dc.SetPen(wx.BLACK_PEN)
         dc.SetBrush(wx.BLACK_BRUSH)
+        
+        if getattr(dc, "printing", False):
+            if self.Type != "connection":
+                condition_size = dc.GetTextExtent(self.Condition)
+            if self.Priority != 0:
+                priority_size = dc.GetTextExtent(str(self.Priority))
+        else:
+            if self.Type != "connection":
+                condition_size = self.ConditionSize
+            if self.Priority != 0:
+                priority_size = self.PrioritySize
+        
         # Draw plain rectangle for representing the transition
         dc.DrawRectangle(self.Pos.x, 
                          self.Pos.y + (self.Size[1] - SFC_TRANSITION_SIZE[1])/2, 
@@ -824,17 +846,15 @@
         dc.DrawLine(vertical_line_x, self.Pos.y, vertical_line_x, self.Pos.y + self.Size[1] + 1) 
         # Draw transition condition
         if self.Type != "connection":
-            text_width, text_height = self.ConditionSize
             if self.Condition != "":
                 condition = self.Condition
             else:
                 condition = "Transition"
             dc.DrawText(condition, self.Pos.x + self.Size[0] + 5,
-                        self.Pos.y + (self.Size[1] - text_height) / 2)
+                        self.Pos.y + (self.Size[1] - condition_size[1]) / 2)
         # Draw priority number
         if self.Priority != 0:
-            priority_width, priority_height = self.PrioritySize
-            dc.DrawText(str(self.Priority), self.Pos.x, self.Pos.y - self.PrioritySize[1] - 2)
+            dc.DrawText(str(self.Priority), self.Pos.x, self.Pos.y - priority_size[1] - 2)
         # Draw input and output connectors
         self.Input.Draw(dc)
         self.Output.Draw(dc)
@@ -1283,7 +1303,7 @@
     # Create a new jump
     def __init__(self, parent, target, id = None):
         Graphic_Element.__init__(self, parent)
-        self.Target = target
+        self.SetTarget(target)
         self.Id = id
         self.Size = wx.Size(SFC_JUMP_SIZE[0], SFC_JUMP_SIZE[1])
         # Create an input and output connector
@@ -1329,6 +1349,10 @@
     def Clean(self):
         self.Input.UnConnect(delete = self.Parent.GetDrawingMode() == FREEDRAWING_MODE)
     
+    # Refresh the size of text for target
+    def RefreshTargetSize(self):
+        self.TargetSize = self.Parent.GetTextExtent(self.Target)
+    
     # Refresh the jump bounding box
     def RefreshBoundingBox(self):
         text_width, text_height = self.Parent.GetTextExtent(self.Target)
@@ -1372,6 +1396,7 @@
     # Changes the jump target
     def SetTarget(self, target):
         self.Target = target
+        self.RefreshTargetSize()
         self.RefreshBoundingBox()
     
     # Returns the jump target
@@ -1462,6 +1487,12 @@
         Graphic_Element.Draw(self, dc)
         dc.SetPen(wx.BLACK_PEN)
         dc.SetBrush(wx.BLACK_BRUSH)
+        
+        if getattr(dc, "printing", False):
+            target_size = dc.GetTextExtent(self.Target)
+        else:
+            target_size = self.TargetSize
+        
         # Draw plain rectangle for representing the divergence
         dc.DrawLine(self.Pos.x + self.Size[0] / 2, self.Pos.y, self.Pos.x + self.Size[0] / 2, self.Pos.y + self.Size[1])
         points = [wx.Point(self.Pos.x, self.Pos.y),
@@ -1469,9 +1500,8 @@
                   wx.Point(self.Pos.x + self.Size[0], self.Pos.y),
                   wx.Point(self.Pos.x + self.Size[0] / 2, self.Pos.y + self.Size[1])]
         dc.DrawPolygon(points)
-        text_width, text_height = dc.GetTextExtent(self.Target)
         dc.DrawText(self.Target, self.Pos.x + self.Size[0] + 2,
-                    self.Pos.y + (self.Size[1] - text_height) / 2)
+                    self.Pos.y + (self.Size[1] - target_size[1]) / 2)
         # Draw input connector
         if self.Input:
             self.Input.Draw(dc)