Viewer.py
changeset 64 dd6f693e46a1
parent 61 dc7142ae9438
child 67 3a1b0afdaf84
equal deleted inserted replaced
63:04a02b4b2a57 64:dd6f693e46a1
    20 #
    20 #
    21 #You should have received a copy of the GNU General Public
    21 #You should have received a copy of the GNU General Public
    22 #License along with this library; if not, write to the Free Software
    22 #License along with this library; if not, write to the Free Software
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24 
    24 
    25 from wxPython.wx import *
       
    26 import wx
    25 import wx
    27 
    26 
    28 from plcopen.structures import *
    27 from plcopen.structures import *
    29 
    28 
    30 from Dialogs import *
    29 from Dialogs import *
    36 #-------------------------------------------------------------------------------
    35 #-------------------------------------------------------------------------------
    37 #                       Graphic elements Viewer base class
    36 #                       Graphic elements Viewer base class
    38 #-------------------------------------------------------------------------------
    37 #-------------------------------------------------------------------------------
    39 
    38 
    40 # ID Constants for menu items
    39 # ID Constants for menu items
    41 [wxID_FBDVIEWERCONTEXTUALMENUITEMS0, wxID_FBDVIEWERCONTEXTUALMENUITEMS1,
    40 [ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1,
    42  wxID_FBDVIEWERCONTEXTUALMENUITEMS2, wxID_FBDVIEWERCONTEXTUALMENUITEMS3,
    41  ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3,
    43  wxID_FBDVIEWERCONTEXTUALMENUITEMS5, wxID_FBDVIEWERCONTEXTUALMENUITEMS6,
    42  ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6,
    44  wxID_FBDVIEWERCONTEXTUALMENUITEMS8, wxID_FBDVIEWERCONTEXTUALMENUITEMS9,
    43  ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9,
    45  wxID_FBDVIEWERCONTEXTUALMENUITEMS11,
    44  ID_FBDVIEWERCONTEXTUALMENUITEMS11,
    46 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(9)]
    45 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(9)]
    47 
    46 
    48 
    47 
    49 class ViewerDropTarget(wx.TextDropTarget):
    48 class ViewerDropTarget(wx.TextDropTarget):
    50     
    49     
    83             self.Parent.RefreshScrollBars()
    82             self.Parent.RefreshScrollBars()
    84             self.Parent.Refresh()
    83             self.Parent.Refresh()
    85             
    84             
    86 
    85 
    87 """
    86 """
    88 Class that implements a Viewer based on a wxScrolledWindow for drawing and 
    87 Class that implements a Viewer based on a wx.ScrolledWindow for drawing and 
    89 manipulating graphic elements
    88 manipulating graphic elements
    90 """
    89 """
    91 
    90 
    92 class Viewer(wx.ScrolledWindow):
    91 class Viewer(wx.ScrolledWindow):
    93     
    92     
    94     # Create Contextual Menu items
    93     # Create Contextual Menu items
    95     def _init_coll_ContextualMenu_Items(self, parent):
    94     def _init_coll_ContextualMenu_Items(self, parent):
    96         # Create menu items
    95         # Create menu items
    97         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS0,
    96         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS0,
    98               kind=wx.ITEM_RADIO, text=u'No Modifier')
    97               kind=wx.ITEM_RADIO, text=u'No Modifier')
    99         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS1,
    98         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS1,
   100               kind=wx.ITEM_RADIO, text=u'Negated')
    99               kind=wx.ITEM_RADIO, text=u'Negated')
   101         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS2,
   100         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS2,
   102               kind=wx.ITEM_RADIO, text=u'Rising Edge')
   101               kind=wx.ITEM_RADIO, text=u'Rising Edge')
   103         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS3,
   102         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS3,
   104               kind=wx.ITEM_RADIO, text=u'Falling Edge')
   103               kind=wx.ITEM_RADIO, text=u'Falling Edge')
   105         parent.AppendSeparator()
   104         parent.AppendSeparator()
   106         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS5,
   105         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS5,
   107               kind=wx.ITEM_NORMAL, text=u'Add Wire Segment')
   106               kind=wx.ITEM_NORMAL, text=u'Add Wire Segment')
   108         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS6,
   107         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS6,
   109               kind=wx.ITEM_NORMAL, text=u'Delete Wire Segment')
   108               kind=wx.ITEM_NORMAL, text=u'Delete Wire Segment')
   110         parent.AppendSeparator()
   109         parent.AppendSeparator()
   111         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS8,
   110         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS8,
   112               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   111               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   113         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS9,
   112         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9,
   114               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   113               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   115         parent.AppendSeparator()
   114         parent.AppendSeparator()
   116         parent.Append(help='', id=wxID_FBDVIEWERCONTEXTUALMENUITEMS11,
   115         parent.Append(help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11,
   117               kind=wx.ITEM_NORMAL, text=u'Delete')
   116               kind=wx.ITEM_NORMAL, text=u'Delete')
   118         # Link menu event to corresponding called functions
   117         # Link menu event to corresponding called functions
   119         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   118         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   120               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS0)
   119               id=ID_FBDVIEWERCONTEXTUALMENUITEMS0)
   121         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   120         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   122               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS1)
   121               id=ID_FBDVIEWERCONTEXTUALMENUITEMS1)
   123         self.Bind(wx.EVT_MENU, self.OnRisingEdgeMenu,
   122         self.Bind(wx.EVT_MENU, self.OnRisingEdgeMenu,
   124               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS2)
   123               id=ID_FBDVIEWERCONTEXTUALMENUITEMS2)
   125         self.Bind(wx.EVT_MENU, self.OnFallingEdgeMenu,
   124         self.Bind(wx.EVT_MENU, self.OnFallingEdgeMenu,
   126               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS3)
   125               id=ID_FBDVIEWERCONTEXTUALMENUITEMS3)
   127         self.Bind(wx.EVT_MENU, self.OnAddSegmentMenu,
   126         self.Bind(wx.EVT_MENU, self.OnAddSegmentMenu,
   128               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS5)
   127               id=ID_FBDVIEWERCONTEXTUALMENUITEMS5)
   129         self.Bind(wx.EVT_MENU, self.OnDeleteSegmentMenu,
   128         self.Bind(wx.EVT_MENU, self.OnDeleteSegmentMenu,
   130               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS6)
   129               id=ID_FBDVIEWERCONTEXTUALMENUITEMS6)
   131         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   130         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   132               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS8)
   131               id=ID_FBDVIEWERCONTEXTUALMENUITEMS8)
   133         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   132         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   134               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS9)
   133               id=ID_FBDVIEWERCONTEXTUALMENUITEMS9)
   135         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   134         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   136               id=wxID_FBDVIEWERCONTEXTUALMENUITEMS11)
   135               id=ID_FBDVIEWERCONTEXTUALMENUITEMS11)
   137     
   136     
   138     # Create and initialize Contextual Menu
   137     # Create and initialize Contextual Menu
   139     def _init_menus(self):
   138     def _init_menus(self):
   140         self.ContextualMenu = wx.Menu(title='')
   139         self.ContextualMenu = wx.Menu(title='')
   141         
   140         
   145     def __init__(self, parent, window, controler):
   144     def __init__(self, parent, window, controler):
   146         wx.ScrolledWindow.__init__(self, parent, style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL)
   145         wx.ScrolledWindow.__init__(self, parent, style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL)
   147         self._init_menus()
   146         self._init_menus()
   148         # Adding a rubberband to Viewer
   147         # Adding a rubberband to Viewer
   149         self.rubberBand = RubberBand(drawingSurface=self)
   148         self.rubberBand = RubberBand(drawingSurface=self)
   150         self.SetBackgroundColour(wxColour(255,255,255))
   149         self.SetBackgroundColour(wx.Colour(255,255,255))
   151         self.ResetView()
   150         self.ResetView()
   152         self.Scaling = None
   151         self.Scaling = None
   153         #self.Scaling = (8, 8)
   152         #self.Scaling = (8, 8)
   154         self.DrawGrid = True
   153         self.DrawGrid = True
   155         self.current_id = 0    
   154         self.current_id = 0    
   165         self.Controler = controler
   164         self.Controler = controler
   166         
   165         
   167         self.SetDropTarget(ViewerDropTarget(self))
   166         self.SetDropTarget(ViewerDropTarget(self))
   168         
   167         
   169         # Link Viewer event to corresponding methods
   168         # Link Viewer event to corresponding methods
   170         EVT_PAINT(self, self.OnPaint)
   169         self.Bind(wx.EVT_PAINT, self.OnPaint)
   171         EVT_LEFT_DOWN(self, self.OnViewerLeftDown)
   170         self.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown)
   172         EVT_LEFT_UP(self, self.OnViewerLeftUp)
   171         self.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp)
   173         EVT_LEFT_DCLICK(self, self.OnViewerLeftDClick)
   172         self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
   174         EVT_RIGHT_UP(self, self.OnViewerRightUp)
   173         self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
   175         EVT_MOTION(self, self.OnViewerMotion)
   174         self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
   176         EVT_CHAR(self, self.OnChar)
   175         self.Bind(wx.EVT_CHAR, self.OnChar)
   177         EVT_SCROLLWIN(self, self.OnMoveWindow)
   176         self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
   178         EVT_SIZE(self, self.OnMoveWindow)
   177         self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   179     
   178     
   180     # Returns a new id
   179     # Returns a new id
   181     def GetNewId(self):
   180     def GetNewId(self):
   182         self.current_id += 1
   181         self.current_id += 1
   183         return self.current_id
   182         return self.current_id
   185     # Destructor
   184     # Destructor
   186     def __del__(self):
   185     def __del__(self):
   187         self.ResetView()
   186         self.ResetView()
   188 
   187 
   189     def GetLogicalDC(self):
   188     def GetLogicalDC(self):
   190         dc = wxClientDC(self)
   189         dc = wx.ClientDC(self)
   191         self.DoPrepareDC(dc)
   190         self.DoPrepareDC(dc)
   192         return dc
   191         return dc
   193 
   192 
   194 #-------------------------------------------------------------------------------
   193 #-------------------------------------------------------------------------------
   195 #                         Element management functions
   194 #                         Element management functions
   326             variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"])
   325             variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"])
   327             variable.SetPosition(instance["x"], instance["y"])
   326             variable.SetPosition(instance["x"], instance["y"])
   328             variable.SetSize(instance["width"], instance["height"])
   327             variable.SetSize(instance["width"], instance["height"])
   329             self.AddBlock(variable)
   328             self.AddBlock(variable)
   330             connectors = variable.GetConnectors()
   329             connectors = variable.GetConnectors()
   331             connectors["output"].SetPosition(wxPoint(*instance["connector"]["position"]))
   330             connectors["output"].SetPosition(wx.Point(*instance["connector"]["position"]))
   332             if instance["connector"]["negated"]:
   331             if instance["connector"]["negated"]:
   333                 connectors["output"].SetNegated(True)
   332                 connectors["output"].SetNegated(True)
   334             if instance["connector"]["edge"]:
   333             if instance["connector"]["edge"]:
   335                 connectors["output"].SetEdge(instance["connector"]["edge"])
   334                 connectors["output"].SetEdge(instance["connector"]["edge"])
   336         elif instance["type"] == "output":
   335         elif instance["type"] == "output":
   337             variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"])
   336             variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"])
   338             variable.SetPosition(instance["x"], instance["y"])
   337             variable.SetPosition(instance["x"], instance["y"])
   339             variable.SetSize(instance["width"], instance["height"])
   338             variable.SetSize(instance["width"], instance["height"])
   340             self.AddBlock(variable)
   339             self.AddBlock(variable)
   341             connectors = variable.GetConnectors()
   340             connectors = variable.GetConnectors()
   342             connectors["input"].SetPosition(wxPoint(*instance["connector"]["position"]))
   341             connectors["input"].SetPosition(wx.Point(*instance["connector"]["position"]))
   343             if instance["connector"]["negated"]:
   342             if instance["connector"]["negated"]:
   344                 connectors["input"].SetNegated(True)
   343                 connectors["input"].SetNegated(True)
   345             if instance["connector"]["edge"]:
   344             if instance["connector"]["edge"]:
   346                 connectors["input"].SetEdge(instance["connector"]["edge"])
   345                 connectors["input"].SetEdge(instance["connector"]["edge"])
   347             self.CreateWires(connectors["input"], instance["connector"]["links"], ids)
   346             self.CreateWires(connectors["input"], instance["connector"]["links"], ids)
   349             variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"])
   348             variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"])
   350             variable.SetPosition(instance["x"], instance["y"])
   349             variable.SetPosition(instance["x"], instance["y"])
   351             variable.SetSize(instance["width"], instance["height"])
   350             variable.SetSize(instance["width"], instance["height"])
   352             self.AddBlock(variable)
   351             self.AddBlock(variable)
   353             connectors = variable.GetConnectors()
   352             connectors = variable.GetConnectors()
   354             connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"]))
   353             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   355             connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"]))
   354             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   356             if instance["connectors"]["output"]["negated"]:
   355             if instance["connectors"]["output"]["negated"]:
   357                 connectors["output"].SetNegated(True)
   356                 connectors["output"].SetNegated(True)
   358             if instance["connectors"]["output"]["edge"]:
   357             if instance["connectors"]["output"]["edge"]:
   359                 connectors["output"].SetEdge(instance["connectors"]["output"]["edge"])
   358                 connectors["output"].SetEdge(instance["connectors"]["output"]["edge"])
   360             if instance["connectors"]["input"]["negated"]:
   359             if instance["connectors"]["input"]["negated"]:
   366             connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"])
   365             connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"])
   367             connection.SetPosition(instance["x"], instance["y"])
   366             connection.SetPosition(instance["x"], instance["y"])
   368             connection.SetSize(instance["width"], instance["height"])
   367             connection.SetSize(instance["width"], instance["height"])
   369             self.AddBlock(connection)
   368             self.AddBlock(connection)
   370             connector = connection.GetConnector()
   369             connector = connection.GetConnector()
   371             connector.SetPosition(wxPoint(*instance["connector"]["position"]))
   370             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   372         elif instance["type"] == "connection":
   371         elif instance["type"] == "connection":
   373             connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"])
   372             connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"])
   374             connection.SetPosition(instance["x"], instance["y"])
   373             connection.SetPosition(instance["x"], instance["y"])
   375             connection.SetSize(instance["width"], instance["height"])
   374             connection.SetSize(instance["width"], instance["height"])
   376             self.AddBlock(connection)
   375             self.AddBlock(connection)
   377             connector = connection.GetConnector()
   376             connector = connection.GetConnector()
   378             connector.SetPosition(wxPoint(*instance["connector"]["position"]))
   377             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   379             self.CreateWires(connector, instance["connector"]["links"], ids)
   378             self.CreateWires(connector, instance["connector"]["links"], ids)
   380         elif instance["type"] == "comment":
   379         elif instance["type"] == "comment":
   381             comment = Comment(self, instance["content"], instance["id"])
   380             comment = Comment(self, instance["content"], instance["id"])
   382             comment.SetPosition(instance["x"], instance["y"])
   381             comment.SetPosition(instance["x"], instance["y"])
   383             comment.SetSize(instance["width"], instance["height"])
   382             comment.SetSize(instance["width"], instance["height"])
   386             leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
   385             leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
   387             leftpowerrail.SetPosition(instance["x"], instance["y"])
   386             leftpowerrail.SetPosition(instance["x"], instance["y"])
   388             self.AddBlock(leftpowerrail)
   387             self.AddBlock(leftpowerrail)
   389             connectors = leftpowerrail.GetConnectors()
   388             connectors = leftpowerrail.GetConnectors()
   390             for i, connector in enumerate(instance["connectors"]):
   389             for i, connector in enumerate(instance["connectors"]):
   391                 connectors[i].SetPosition(wxPoint(*connector["position"]))
   390                 connectors[i].SetPosition(wx.Point(*connector["position"]))
   392         elif instance["type"] == "rightPowerRail":
   391         elif instance["type"] == "rightPowerRail":
   393             rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
   392             rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))])
   394             rightpowerrail.SetPosition(instance["x"], instance["y"])
   393             rightpowerrail.SetPosition(instance["x"], instance["y"])
   395             self.AddBlock(rightpowerrail)
   394             self.AddBlock(rightpowerrail)
   396             connectors = rightpowerrail.GetConnectors()
   395             connectors = rightpowerrail.GetConnectors()
   397             for i, connector in enumerate(instance["connectors"]):
   396             for i, connector in enumerate(instance["connectors"]):
   398                 connectors[i].SetPosition(wxPoint(*connector["position"]))
   397                 connectors[i].SetPosition(wx.Point(*connector["position"]))
   399                 self.CreateWires(connectors[i], connector["links"], ids)
   398                 self.CreateWires(connectors[i], connector["links"], ids)
   400         elif instance["type"] == "contact":
   399         elif instance["type"] == "contact":
   401             if instance["negated"]:
   400             if instance["negated"]:
   402                 negated = instance["negated"]
   401                 negated = instance["negated"]
   403             else:
   402             else:
   416                 contact_type = CONTACT_NORMAL
   415                 contact_type = CONTACT_NORMAL
   417             contact = LD_Contact(self, contact_type, instance["name"], instance["id"])
   416             contact = LD_Contact(self, contact_type, instance["name"], instance["id"])
   418             contact.SetPosition(instance["x"], instance["y"])
   417             contact.SetPosition(instance["x"], instance["y"])
   419             self.AddBlock(contact)
   418             self.AddBlock(contact)
   420             connectors = contact.GetConnectors()
   419             connectors = contact.GetConnectors()
   421             connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"]))
   420             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   422             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   421             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   423             connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"]))
   422             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   424         elif instance["type"] == "coil":
   423         elif instance["type"] == "coil":
   425             if instance["negated"]:
   424             if instance["negated"]:
   426                 negated = instance["negated"]
   425                 negated = instance["negated"]
   427             else:
   426             else:
   428                 negated = False
   427                 negated = False
   440                 coil_type = COIL_NORMAL
   439                 coil_type = COIL_NORMAL
   441             coil = LD_Coil(self, coil_type, instance["name"], instance["id"])
   440             coil = LD_Coil(self, coil_type, instance["name"], instance["id"])
   442             coil.SetPosition(instance["x"], instance["y"])
   441             coil.SetPosition(instance["x"], instance["y"])
   443             self.AddBlock(coil)
   442             self.AddBlock(coil)
   444             connectors = coil.GetConnectors()
   443             connectors = coil.GetConnectors()
   445             connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"]))
   444             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   446             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   445             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   447             connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"]))
   446             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   448         elif instance["type"] == "step":
   447         elif instance["type"] == "step":
   449             if instance["initial"]:
   448             if instance["initial"]:
   450                 initial = instance["initial"]
   449                 initial = instance["initial"]
   451             else:
   450             else:
   452                 initial = False
   451                 initial = False
   458                 step.AddOutput()
   457                 step.AddOutput()
   459             if "action" in instance["connectors"]:
   458             if "action" in instance["connectors"]:
   460                 step.AddAction()
   459                 step.AddAction()
   461             connectors = step.GetConnectors()
   460             connectors = step.GetConnectors()
   462             if connectors["input"]:
   461             if connectors["input"]:
   463                 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"]))
   462                 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   464                 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   463                 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   465             if connectors["output"]:
   464             if connectors["output"]:
   466                 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"]))
   465                 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   467             if connectors["action"]:
   466             if connectors["action"]:
   468                 connectors["action"].SetPosition(wxPoint(*instance["connectors"]["action"]["position"]))
   467                 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"]))
   469         elif instance["type"] == "transition":
   468         elif instance["type"] == "transition":
   470             transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"])
   469             transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"])
   471             transition.SetPosition(instance["x"], instance["y"])
   470             transition.SetPosition(instance["x"], instance["y"])
   472             self.AddBlock(transition)
   471             self.AddBlock(transition)
   473             connectors = transition.GetConnectors()
   472             connectors = transition.GetConnectors()
   474             connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"]))
   473             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   475             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   474             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   476             connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"]))
   475             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
       
   476             if instance["condition_type"] == "connection":
       
   477                 self.CreateWires(connectors["connection"], instance["connectors"]["connection"]["links"], ids)
   477         elif instance["type"] in ["selectionDivergence", "selectionConvergence", "simultaneousDivergence", "simultaneousConvergence"]:
   478         elif instance["type"] in ["selectionDivergence", "selectionConvergence", "simultaneousDivergence", "simultaneousConvergence"]:
   478             if instance["type"] == "selectionDivergence":
   479             if instance["type"] == "selectionDivergence":
   479                 divergence = SFC_Divergence(self, SELECTION_DIVERGENCE, 
   480                 divergence = SFC_Divergence(self, SELECTION_DIVERGENCE, 
   480                     len(instance["connectors"]["outputs"]), instance["id"])
   481                     len(instance["connectors"]["outputs"]), instance["id"])
   481             elif instance["type"] == "selectionConvergence":
   482             elif instance["type"] == "selectionConvergence":
   491             divergence.SetSize(instance["width"], instance["height"])
   492             divergence.SetSize(instance["width"], instance["height"])
   492             self.AddBlock(divergence)
   493             self.AddBlock(divergence)
   493             connectors = divergence.GetConnectors()
   494             connectors = divergence.GetConnectors()
   494             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   495             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   495                 connector = connectors["inputs"][i]
   496                 connector = connectors["inputs"][i]
   496                 connector.SetPosition(wxPoint(*input_connector["position"]))
   497                 connector.SetPosition(wx.Point(*input_connector["position"]))
   497                 self.CreateWires(connector, input_connector["links"], ids)
   498                 self.CreateWires(connector, input_connector["links"], ids)
   498             for i, output_connector in enumerate(instance["connectors"]["outputs"]):
   499             for i, output_connector in enumerate(instance["connectors"]["outputs"]):
   499                 connector = connectors["outputs"][i]
   500                 connector = connectors["outputs"][i]
   500                 connector.SetPosition(wxPoint(*output_connector["position"]))
   501                 connector.SetPosition(wx.Point(*output_connector["position"]))
   501         elif instance["type"] == "jump":
   502         elif instance["type"] == "jump":
   502             jump = SFC_Jump(self, instance["target"], instance["id"])
   503             jump = SFC_Jump(self, instance["target"], instance["id"])
   503             jump.SetPosition(instance["x"], instance["y"])
   504             jump.SetPosition(instance["x"], instance["y"])
   504             self.AddBlock(jump)
   505             self.AddBlock(jump)
   505             connector = jump.GetConnector()
   506             connector = jump.GetConnector()
   506             connector.SetPosition(wxPoint(*instance["connector"]["position"]))
   507             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   507             self.CreateWires(connector, instance["connector"]["links"], ids)
   508             self.CreateWires(connector, instance["connector"]["links"], ids)
   508         elif instance["type"] == "actionBlock":
   509         elif instance["type"] == "actionBlock":
   509             actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"])
   510             actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"])
   510             actionBlock.SetPosition(instance["x"], instance["y"])
   511             actionBlock.SetPosition(instance["x"], instance["y"])
   511             actionBlock.SetSize(instance["width"], instance["height"])
   512             actionBlock.SetSize(instance["width"], instance["height"])
   512             self.AddBlock(actionBlock)
   513             self.AddBlock(actionBlock)
   513             connector = actionBlock.GetConnector()
   514             connector = actionBlock.GetConnector()
   514             connector.SetPosition(wxPoint(*instance["connector"]["position"]))
   515             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   515             self.CreateWires(connector, instance["connector"]["links"], ids)
   516             self.CreateWires(connector, instance["connector"]["links"], ids)
   516         else:
   517         else:
   517             if instance["name"] != None:
   518             if instance["name"] != None:
   518                 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]))
   519                 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]))
   519             else:
   520             else:
   522             block.SetSize(instance["width"], instance["height"])
   523             block.SetSize(instance["width"], instance["height"])
   523             self.AddBlock(block)
   524             self.AddBlock(block)
   524             connectors = block.GetConnectors()
   525             connectors = block.GetConnectors()
   525             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   526             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   526                 connector = connectors["inputs"][i]
   527                 connector = connectors["inputs"][i]
   527                 connector.SetPosition(wxPoint(*input_connector["position"]))
   528                 connector.SetPosition(wx.Point(*input_connector["position"]))
   528                 if input_connector["negated"]:
   529                 if input_connector["negated"]:
   529                     connector.SetNegated(True)
   530                     connector.SetNegated(True)
   530                 if input_connector["edge"]:
   531                 if input_connector["edge"]:
   531                     connector.SetEdge(input_connector["edge"])
   532                     connector.SetEdge(input_connector["edge"])
   532                 self.CreateWires(connector, input_connector["links"], ids)
   533                 self.CreateWires(connector, input_connector["links"], ids)
   534                 connector = connectors["outputs"][i]
   535                 connector = connectors["outputs"][i]
   535                 if output_connector["negated"]:
   536                 if output_connector["negated"]:
   536                     connector.SetNegated(True)
   537                     connector.SetNegated(True)
   537                 if output_connector["edge"]:
   538                 if output_connector["edge"]:
   538                     connector.SetEdge(output_connector["edge"])
   539                     connector.SetEdge(output_connector["edge"])
   539                 connector.SetPosition(wxPoint(*output_connector["position"]))
   540                 connector.SetPosition(wx.Point(*output_connector["position"]))
   540     
   541     
   541     def CreateWires(self, start_connector, links, ids):
   542     def CreateWires(self, start_connector, links, ids):
   542         for link in links:
   543         for link in links:
   543             refLocalId = link["refLocalId"]
   544             refLocalId = link["refLocalId"]
   544             if refLocalId != None:
   545             if refLocalId != None:
   547                     if new_instance:
   548                     if new_instance:
   548                         self.loadInstance(new_instance, ids)
   549                         self.loadInstance(new_instance, ids)
   549                 connected = self.FindElementById(refLocalId)
   550                 connected = self.FindElementById(refLocalId)
   550                 if connected:
   551                 if connected:
   551                     points = link["points"]
   552                     points = link["points"]
   552                     end_connector = connected.GetConnector(wxPoint(points[-1][0], points[-1][1]), link["formalParameter"])
   553                     end_connector = connected.GetConnector(wx.Point(points[-1][0], points[-1][1]), link["formalParameter"])
   553                     if end_connector:
   554                     if end_connector:
   554                         wire = Wire(self)
   555                         wire = Wire(self)
   555                         wire.SetPoints(points)
   556                         wire.SetPoints(points)
   556                         start_connector.Connect((wire, 0), False)
   557                         start_connector.Connect((wire, 0), False)
   557                         end_connector.Connect((wire, -1), False)
   558                         end_connector.Connect((wire, -1), False)
   680         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   681         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   681         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   682         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   682         self.PopupMenu(self.ContextualMenu)
   683         self.PopupMenu(self.ContextualMenu)
   683 
   684 
   684     def EditCommentContent(self, comment):
   685     def EditCommentContent(self, comment):
   685         dialog = wxTextEntryDialog(self.Parent, "Edit comment", "Please enter comment text", comment.GetContent(), wxOK|wxCANCEL|wxTE_MULTILINE)
   686         dialog = wx.TextEntryDialog(self.Parent, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE)
   686         if dialog.ShowModal() == wxID_OK:
   687         if dialog.ShowModal() == wx.ID_OK:
   687             value = dialog.GetValue()
   688             value = dialog.GetValue()
   688             comment.SetContent(value)
   689             comment.SetContent(value)
   689             infos = {"content" : value}
   690             infos = {"content" : value}
   690             infos["width"], infos["height"] = comment.GetSize()
   691             infos["width"], infos["height"] = comment.GetSize()
   691             self.Controler.SetCurrentElementEditingCommentInfos(comment.GetId(), infos)
   692             self.Controler.SetCurrentElementEditingCommentInfos(comment.GetId(), infos)
   788         elif self.Mode == MODE_WIRE:
   789         elif self.Mode == MODE_WIRE:
   789             pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
   790             pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
   790             connector = self.FindBlockConnector(pos)
   791             connector = self.FindBlockConnector(pos)
   791             if connector:
   792             if connector:
   792                 if (connector.GetDirection() == EAST):
   793                 if (connector.GetDirection() == EAST):
   793                     wire = Wire(self, [wxPoint(pos.x, pos.y), EAST], [wxPoint(pos.x, pos.y), WEST])
   794                     wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST])
   794                 else:
   795                 else:
   795                     wire = Wire(self, [wxPoint(pos.x, pos.y), WEST], [wxPoint(pos.x, pos.y), EAST])
   796                     wire = Wire(self, [wx.Point(pos.x, pos.y), WEST], [wx.Point(pos.x, pos.y), EAST])
   796                 wire.oldPos = pos
   797                 wire.oldPos = pos
   797                 wire.Handle = (HANDLE_POINT, 0)
   798                 wire.Handle = (HANDLE_POINT, 0)
   798                 wire.ProcessDragging(0, 0)
   799                 wire.ProcessDragging(0, 0)
   799                 wire.Handle = (HANDLE_POINT, 1)
   800                 wire.Handle = (HANDLE_POINT, 1)
   800                 self.AddWire(wire)
   801                 self.AddWire(wire)
   819                     self.Refresh()
   820                     self.Refresh()
   820             else:
   821             else:
   821                 bbox = self.rubberBand.GetCurrentExtent()
   822                 bbox = self.rubberBand.GetCurrentExtent()
   822                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)                
   823                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)                
   823                 if self.Mode == MODE_BLOCK:
   824                 if self.Mode == MODE_BLOCK:
   824                     wxCallAfter(self.AddNewBlock, bbox)
   825                     wx.CallAfter(self.AddNewBlock, bbox)
   825                 elif self.Mode == MODE_VARIABLE:
   826                 elif self.Mode == MODE_VARIABLE:
   826                     wxCallAfter(self.AddNewVariable, bbox)
   827                     wx.CallAfter(self.AddNewVariable, bbox)
   827                 elif self.Mode == MODE_CONNECTION:
   828                 elif self.Mode == MODE_CONNECTION:
   828                     wxCallAfter(self.AddNewConnection, bbox)
   829                     wx.CallAfter(self.AddNewConnection, bbox)
   829                 elif self.Mode == MODE_COMMENT:
   830                 elif self.Mode == MODE_COMMENT:
   830                     wxCallAfter(self.AddNewComment, bbox)
   831                     wx.CallAfter(self.AddNewComment, bbox)
   831                 elif self.Mode == MODE_CONTACT:
   832                 elif self.Mode == MODE_CONTACT:
   832                     wxCallAfter(self.AddNewContact, bbox)
   833                     wx.CallAfter(self.AddNewContact, bbox)
   833                 elif self.Mode == MODE_COIL:
   834                 elif self.Mode == MODE_COIL:
   834                     wxCallAfter(self.AddNewContact, bbox)
   835                     wx.CallAfter(self.AddNewContact, bbox)
   835                 elif self.Mode == MODE_POWERRAIL:
   836                 elif self.Mode == MODE_POWERRAIL:
   836                     wxCallAfter(self.AddNewPowerRail, bbox)
   837                     wx.CallAfter(self.AddNewPowerRail, bbox)
   837                 elif self.Mode == MODE_INITIALSTEP:
   838                 elif self.Mode == MODE_INITIALSTEP:
   838                     wxCallAfter(self.AddNewInitialStep, bbox)
   839                     wx.CallAfter(self.AddNewInitialStep, bbox)
   839                 elif self.Mode == MODE_STEP:
   840                 elif self.Mode == MODE_STEP:
   840                     wxCallAfter(self.AddNewStep, bbox)
   841                     wx.CallAfter(self.AddNewStep, bbox)
   841                 elif self.Mode == MODE_TRANSITION:
   842                 elif self.Mode == MODE_TRANSITION:
   842                     wxCallAfter(self.AddNewTransition, bbox)
   843                     wx.CallAfter(self.AddNewTransition, bbox)
   843                 elif self.Mode == MODE_DIVERGENCE:
   844                 elif self.Mode == MODE_DIVERGENCE:
   844                     wxCallAfter(self.AddNewDivergence, bbox)
   845                     wx.CallAfter(self.AddNewDivergence, bbox)
   845                 elif self.Mode == MODE_JUMP:
   846                 elif self.Mode == MODE_JUMP:
   846                     wxCallAfter(self.AddNewJump, bbox)
   847                     wx.CallAfter(self.AddNewJump, bbox)
   847                 elif self.Mode == MODE_ACTION:
   848                 elif self.Mode == MODE_ACTION:
   848                     wxCallAfter(self.AddNewActionBlock, bbox)
   849                     wx.CallAfter(self.AddNewActionBlock, bbox)
   849         elif self.Mode == MODE_SELECTION and self.SelectedElement:
   850         elif self.Mode == MODE_SELECTION and self.SelectedElement:
   850             self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
   851             self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
   851             wxCallAfter(self.SetCursor, wxNullCursor)
   852             wx.CallAfter(self.SetCursor, wx.NullCursor)
   852             self.ReleaseMouse()
   853             self.ReleaseMouse()
   853             self.Refresh()
   854             self.Refresh()
   854         elif self.Mode == MODE_WIRE and self.SelectedElement:
   855         elif self.Mode == MODE_WIRE and self.SelectedElement:
   855             if self.SelectedElement.EndConnected != None:
   856             if self.SelectedElement.EndConnected != None:
   856                 self.SelectedElement.ResetPoints()
   857                 self.SelectedElement.ResetPoints()
   862             else:
   863             else:
   863                 self.SelectedElement.Delete()
   864                 self.SelectedElement.Delete()
   864                 self.SelectedElement = None
   865                 self.SelectedElement = None
   865             self.Refresh()
   866             self.Refresh()
   866         if not self.SavedMode:
   867         if not self.SavedMode:
   867             wxCallAfter(self.Parent.ResetCurrentMode)
   868             wx.CallAfter(self.Parent.ResetCurrentMode)
   868         event.Skip()
   869         event.Skip()
   869     
   870     
   870     def OnViewerRightUp(self, event):
   871     def OnViewerRightUp(self, event):
   871         pos = event.GetPosition()
   872         pos = event.GetPosition()
   872         element = self.FindElement(pos)
   873         element = self.FindElement(pos)
   874             if self.SelectedElement and self.SelectedElement != element:
   875             if self.SelectedElement and self.SelectedElement != element:
   875                 self.SelectedElement.SetSelected(False)
   876                 self.SelectedElement.SetSelected(False)
   876             self.SelectedElement = element
   877             self.SelectedElement = element
   877             self.SelectedElement.SetSelected(True)
   878             self.SelectedElement.SetSelected(True)
   878             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
   879             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
   879             wxCallAfter(self.SetCursor, wxNullCursor)
   880             wx.CallAfter(self.SetCursor, wx.NullCursor)
   880             self.ReleaseMouse()
   881             self.ReleaseMouse()
   881             self.Refresh()
   882             self.Refresh()
   882         event.Skip()
   883         event.Skip()
   883     
   884     
   884     def OnViewerLeftDClick(self, event):
   885     def OnViewerLeftDClick(self, event):
   902                 self.SelectedElement.OnMotion(event, dc, self.Scaling)
   903                 self.SelectedElement.OnMotion(event, dc, self.Scaling)
   903                 self.SelectedElement.GeneratePoints()
   904                 self.SelectedElement.GeneratePoints()
   904                 self.Refresh()
   905                 self.Refresh()
   905         if (event.Dragging() and self.SelectedElement) or self.rubberBand.IsShown():
   906         if (event.Dragging() and self.SelectedElement) or self.rubberBand.IsShown():
   906             position = event.GetPosition()
   907             position = event.GetPosition()
   907             move_window = wxPoint()
   908             move_window = wx.Point()
   908             window_size = self.GetClientSize()
   909             window_size = self.GetClientSize()
   909             xstart, ystart = self.GetViewStart()
   910             xstart, ystart = self.GetViewStart()
   910             if position.x < SCROLL_ZONE and xstart > 0:
   911             if position.x < SCROLL_ZONE and xstart > 0:
   911                 move_window.x = -1
   912                 move_window.x = -1
   912             elif position.x > window_size[0] - SCROLL_ZONE:
   913             elif position.x > window_size[0] - SCROLL_ZONE:
   923 #-------------------------------------------------------------------------------
   924 #-------------------------------------------------------------------------------
   924 #                          Keyboard event functions
   925 #                          Keyboard event functions
   925 #-------------------------------------------------------------------------------
   926 #-------------------------------------------------------------------------------
   926 
   927 
   927     def OnChar(self, event):
   928     def OnChar(self, event):
   928         xpos, ypos = self.GetScrollPos(wxHORIZONTAL), self.GetScrollPos(wxVERTICAL)
   929         xpos, ypos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL)
   929         xmax = self.GetScrollRange(wxHORIZONTAL) - self.GetScrollThumb(wxHORIZONTAL)
   930         xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
   930         ymax = self.GetScrollRange(wxVERTICAL) - self.GetScrollThumb(wxVERTICAL)
   931         ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL)
   931         keycode = event.GetKeyCode()
   932         keycode = event.GetKeyCode()
   932         if self.Scaling:
   933         if self.Scaling:
   933             scaling = self.Scaling
   934             scaling = self.Scaling
   934         else:
   935         else:
   935             scaling = (8, 8)
   936             scaling = (8, 8)
   936         if keycode == WXK_DELETE and self.SelectedElement:
   937         if keycode == wx.WXK_DELETE and self.SelectedElement:
   937             self.SelectedElement.Clean()
   938             self.SelectedElement.Clean()
   938             self.SelectedElement.Delete()
   939             self.SelectedElement.Delete()
   939             self.SelectedElement = None
   940             self.SelectedElement = None
   940             self.RefreshBuffer()
   941             self.RefreshBuffer()
   941             self.RefreshScrollBars()
   942             self.RefreshScrollBars()
   942             self.Refresh()
   943             self.Refresh()
   943         elif keycode == WXK_LEFT:
   944         elif keycode == wx.WXK_LEFT:
   944             if event.ControlDown() and event.ShiftDown():
   945             if event.ControlDown() and event.ShiftDown():
   945                 self.Scroll(0, ypos)
   946                 self.Scroll(0, ypos)
   946             elif event.ControlDown():
   947             elif event.ControlDown():
   947                 self.Scroll(max(0, xpos - 1), ypos)
   948                 self.Scroll(max(0, xpos - 1), ypos)
   948             elif self.SelectedElement:
   949             elif self.SelectedElement:
   949                 self.SelectedElement.Move(-scaling[0], 0)
   950                 self.SelectedElement.Move(-scaling[0], 0)
   950                 self.RefreshBuffer()
   951                 self.RefreshBuffer()
   951                 self.RefreshScrollBars()
   952                 self.RefreshScrollBars()
   952                 self.Refresh()
   953                 self.Refresh()
   953         elif keycode == WXK_RIGHT:
   954         elif keycode == wx.WXK_RIGHT:
   954             if event.ControlDown() and event.ShiftDown():
   955             if event.ControlDown() and event.ShiftDown():
   955                 self.Scroll(xmax, ypos)
   956                 self.Scroll(xmax, ypos)
   956             elif event.ControlDown():
   957             elif event.ControlDown():
   957                 self.Scroll(min(xpos + 1, xmax), ypos)
   958                 self.Scroll(min(xpos + 1, xmax), ypos)
   958             elif self.SelectedElement:
   959             elif self.SelectedElement:
   959                 self.SelectedElement.Move(scaling[0], 0)
   960                 self.SelectedElement.Move(scaling[0], 0)
   960                 self.RefreshBuffer()
   961                 self.RefreshBuffer()
   961                 self.RefreshScrollBars()
   962                 self.RefreshScrollBars()
   962                 self.Refresh()
   963                 self.Refresh()
   963         elif keycode == WXK_UP:
   964         elif keycode == wx.WXK_UP:
   964             if event.ControlDown() and event.ShiftDown():
   965             if event.ControlDown() and event.ShiftDown():
   965                 self.Scroll(xpos, 0)
   966                 self.Scroll(xpos, 0)
   966             elif event.ControlDown():
   967             elif event.ControlDown():
   967                 self.Scroll(xpos, max(0, ypos - 1))
   968                 self.Scroll(xpos, max(0, ypos - 1))
   968             elif self.SelectedElement:
   969             elif self.SelectedElement:
   969                 self.SelectedElement.Move(0, -scaling[1])
   970                 self.SelectedElement.Move(0, -scaling[1])
   970                 self.RefreshBuffer()
   971                 self.RefreshBuffer()
   971                 self.RefreshScrollBars()
   972                 self.RefreshScrollBars()
   972                 self.Refresh()
   973                 self.Refresh()
   973         elif keycode == WXK_DOWN:
   974         elif keycode == wx.WXK_DOWN:
   974             if event.ControlDown() and event.ShiftDown():
   975             if event.ControlDown() and event.ShiftDown():
   975                 self.Scroll(xpos, ymax)
   976                 self.Scroll(xpos, ymax)
   976             elif event.ControlDown():
   977             elif event.ControlDown():
   977                 self.Scroll(xpos, min(ypos + 1, ymax))
   978                 self.Scroll(xpos, min(ypos + 1, ymax))
   978             elif self.SelectedElement:
   979             elif self.SelectedElement:
   987 
   988 
   988     def AddNewBlock(self, bbox):
   989     def AddNewBlock(self, bbox):
   989         dialog = BlockPropertiesDialog(self.Parent)
   990         dialog = BlockPropertiesDialog(self.Parent)
   990         dialog.SetBlockList(self.Controler.GetBlockTypes())
   991         dialog.SetBlockList(self.Controler.GetBlockTypes())
   991         dialog.SetMinBlockSize((bbox.width, bbox.height))
   992         dialog.SetMinBlockSize((bbox.width, bbox.height))
   992         if dialog.ShowModal() == wxID_OK:
   993         if dialog.ShowModal() == wx.ID_OK:
   993             id = self.GetNewId()
   994             id = self.GetNewId()
   994             values = dialog.GetValues()
   995             values = dialog.GetValues()
   995             if "name" in values:
   996             if "name" in values:
   996                 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"])
   997                 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"])
   997             else:
   998             else:
  1016                 varlist.append((var["Name"], var["Class"], var["Type"]))
  1017                 varlist.append((var["Name"], var["Class"], var["Type"]))
  1017         returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
  1018         returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
  1018         if returntype:
  1019         if returntype:
  1019             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1020             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1020         dialog.SetVariables(varlist)
  1021         dialog.SetVariables(varlist)
  1021         if dialog.ShowModal() == wxID_OK:
  1022         if dialog.ShowModal() == wx.ID_OK:
  1022             id = self.GetNewId()
  1023             id = self.GetNewId()
  1023             values = dialog.GetValues()
  1024             values = dialog.GetValues()
  1024             variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id)
  1025             variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id)
  1025             variable.SetPosition(bbox.x, bbox.y)
  1026             variable.SetPosition(bbox.x, bbox.y)
  1026             variable.SetSize(values["width"], values["height"])
  1027             variable.SetSize(values["width"], values["height"])
  1033         dialog.Destroy()
  1034         dialog.Destroy()
  1034 
  1035 
  1035     def AddNewConnection(self, bbox):
  1036     def AddNewConnection(self, bbox):
  1036         dialog = ConnectionPropertiesDialog(self.Parent)
  1037         dialog = ConnectionPropertiesDialog(self.Parent)
  1037         dialog.SetMinConnectionSize((bbox.width, bbox.height))
  1038         dialog.SetMinConnectionSize((bbox.width, bbox.height))
  1038         if dialog.ShowModal() == wxID_OK:
  1039         if dialog.ShowModal() == wx.ID_OK:
  1039             id = self.GetNewId()
  1040             id = self.GetNewId()
  1040             values = dialog.GetValues()
  1041             values = dialog.GetValues()
  1041             connection = FBD_Connector(self, values["type"], values["name"], id)
  1042             connection = FBD_Connector(self, values["type"], values["name"], id)
  1042             connection.SetPosition(bbox.x, bbox.y)
  1043             connection.SetPosition(bbox.x, bbox.y)
  1043             connection.SetSize(values["width"], values["height"])
  1044             connection.SetSize(values["width"], values["height"])
  1048             self.RefreshScrollBars()
  1049             self.RefreshScrollBars()
  1049             self.Refresh()
  1050             self.Refresh()
  1050         dialog.Destroy()
  1051         dialog.Destroy()
  1051 
  1052 
  1052     def AddNewComment(self, bbox):
  1053     def AddNewComment(self, bbox):
  1053         dialog = wxTextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wxOK|wxCANCEL|wxTE_MULTILINE)
  1054         dialog = wx.TextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE)
  1054         if dialog.ShowModal() == wxID_OK:
  1055         if dialog.ShowModal() == wx.ID_OK:
  1055             value = dialog.GetValue()
  1056             value = dialog.GetValue()
  1056             id = self.GetNewId()
  1057             id = self.GetNewId()
  1057             comment = Comment(self, value, id)
  1058             comment = Comment(self, value, id)
  1058             comment.SetPosition(bbox.x, bbox.y)
  1059             comment.SetPosition(bbox.x, bbox.y)
  1059             min_width, min_height = comment.GetMinSize()
  1060             min_width, min_height = comment.GetMinSize()
  1075                 if var["Class"] != "Output" and var["Type"] == "BOOL":
  1076                 if var["Class"] != "Output" and var["Type"] == "BOOL":
  1076                     varlist.append(var["Name"])
  1077                     varlist.append(var["Name"])
  1077         dialog.SetVariables(varlist)
  1078         dialog.SetVariables(varlist)
  1078         dialog.SetValues({"name":"","type":CONTACT_NORMAL})
  1079         dialog.SetValues({"name":"","type":CONTACT_NORMAL})
  1079         dialog.SetElementSize((bbox.width, bbox.height))
  1080         dialog.SetElementSize((bbox.width, bbox.height))
  1080         if dialog.ShowModal() == wxID_OK:
  1081         if dialog.ShowModal() == wx.ID_OK:
  1081             id = self.GetNewId()
  1082             id = self.GetNewId()
  1082             values = dialog.GetValues()
  1083             values = dialog.GetValues()
  1083             contact = LD_Contact(self, values["type"], values["name"], id)
  1084             contact = LD_Contact(self, values["type"], values["name"], id)
  1084             contact.SetPosition(bbox.x, bbox.y)
  1085             contact.SetPosition(bbox.x, bbox.y)
  1085             contact.SetSize(values["width"], values["height"])
  1086             contact.SetSize(values["width"], values["height"])
  1103         if returntype == "BOOL":
  1104         if returntype == "BOOL":
  1104             varlist.append(self.Controler.GetCurrentElementEditingName())
  1105             varlist.append(self.Controler.GetCurrentElementEditingName())
  1105         dialog.SetVariables(varlist)
  1106         dialog.SetVariables(varlist)
  1106         dialog.SetValues({"name":"","type":COIL_NORMAL})
  1107         dialog.SetValues({"name":"","type":COIL_NORMAL})
  1107         dialog.SetElementSize((bbox.width, bbox.height))
  1108         dialog.SetElementSize((bbox.width, bbox.height))
  1108         if dialog.ShowModal() == wxID_OK:
  1109         if dialog.ShowModal() == wx.ID_OK:
  1109             id = self.GetNewId()
  1110             id = self.GetNewId()
  1110             values = dialog.GetValues()
  1111             values = dialog.GetValues()
  1111             coil = LD_Coil(self, values["type"], values["name"], id)
  1112             coil = LD_Coil(self, values["type"], values["name"], id)
  1112             coil.SetPosition(bbox.x, bbox.y)
  1113             coil.SetPosition(bbox.x, bbox.y)
  1113             coil.SetSize(values["width"], values["height"])
  1114             coil.SetSize(values["width"], values["height"])
  1120         dialog.Destroy()
  1121         dialog.Destroy()
  1121 
  1122 
  1122     def AddNewPowerRail(self, bbox):
  1123     def AddNewPowerRail(self, bbox):
  1123         dialog = LDPowerRailDialog(self.Parent)
  1124         dialog = LDPowerRailDialog(self.Parent)
  1124         dialog.SetMinSize((bbox.width, bbox.height))
  1125         dialog.SetMinSize((bbox.width, bbox.height))
  1125         if dialog.ShowModal() == wxID_OK:
  1126         if dialog.ShowModal() == wx.ID_OK:
  1126             id = self.GetNewId()
  1127             id = self.GetNewId()
  1127             values = dialog.GetValues()
  1128             values = dialog.GetValues()
  1128             powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])])
  1129             powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])])
  1129             powerrail.SetPosition(bbox.x, bbox.y)
  1130             powerrail.SetPosition(bbox.x, bbox.y)
  1130             powerrail.SetSize(values["width"], values["height"])
  1131             powerrail.SetSize(values["width"], values["height"])
  1137         dialog.Destroy()
  1138         dialog.Destroy()
  1138 
  1139 
  1139     def AddNewTransition(self, bbox):
  1140     def AddNewTransition(self, bbox):
  1140         dialog = TransitionContentDialog(self.Parent)
  1141         dialog = TransitionContentDialog(self.Parent)
  1141         dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions())
  1142         dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions())
  1142         if dialog.ShowModal() == wxID_OK:
  1143         if dialog.ShowModal() == wx.ID_OK:
  1143             id = self.GetNewId()
  1144             id = self.GetNewId()
  1144             values = dialog.GetValues()
  1145             values = dialog.GetValues()
  1145             transition = SFC_Transition(self, values["type"], values["value"], id)
  1146             transition = SFC_Transition(self, values["type"], values["value"], id)
  1146             transition.SetPosition(bbox.x, bbox.y)
  1147             transition.SetPosition(bbox.x, bbox.y)
  1147             min_width, min_height = transition.GetMinSize()
  1148             min_width, min_height = transition.GetMinSize()
  1155         dialog.Destroy()
  1156         dialog.Destroy()
  1156 
  1157 
  1157     def AddNewDivergence(self, bbox):
  1158     def AddNewDivergence(self, bbox):
  1158         dialog = DivergenceCreateDialog(self.Parent)
  1159         dialog = DivergenceCreateDialog(self.Parent)
  1159         dialog.SetMinSize((bbox.width, bbox.height))
  1160         dialog.SetMinSize((bbox.width, bbox.height))
  1160         if dialog.ShowModal() == wxID_OK:
  1161         if dialog.ShowModal() == wx.ID_OK:
  1161             id = self.GetNewId()
  1162             id = self.GetNewId()
  1162             values = dialog.GetValues()
  1163             values = dialog.GetValues()
  1163             divergence = SFC_Divergence(self, values["type"], values["number"], id)
  1164             divergence = SFC_Divergence(self, values["type"], values["number"], id)
  1164             divergence.SetPosition(bbox.x, bbox.y)
  1165             divergence.SetPosition(bbox.x, bbox.y)
  1165             min_width, min_height = divergence.GetMinSize()
  1166             min_width, min_height = divergence.GetMinSize()
  1182         dialog.SetBlockList(self.Controler.GetBlockTypes())
  1183         dialog.SetBlockList(self.Controler.GetBlockTypes())
  1183         dialog.SetMinBlockSize(block.GetSize())
  1184         dialog.SetMinBlockSize(block.GetSize())
  1184         values = {"name" : block.GetName(), "type" : block.GetType(), "inputs" : block.GetInputTypes()}
  1185         values = {"name" : block.GetName(), "type" : block.GetType(), "inputs" : block.GetInputTypes()}
  1185         values["extension"] = block.GetExtension()
  1186         values["extension"] = block.GetExtension()
  1186         dialog.SetValues(values)
  1187         dialog.SetValues(values)
  1187         if dialog.ShowModal() == wxID_OK:
  1188         if dialog.ShowModal() == wx.ID_OK:
  1188             values = dialog.GetValues()
  1189             values = dialog.GetValues()
  1189             if "name" in values:
  1190             if "name" in values:
  1190                 block.SetName(values["name"])
  1191                 block.SetName(values["name"])
  1191             block.SetSize(values["width"], values["height"])
  1192             block.SetSize(values["width"], values["height"])
  1192             block.SetType(values["type"], values["extension"])
  1193             block.SetType(values["type"], values["extension"])
  1208         if returntype:
  1209         if returntype:
  1209             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1210             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1210         dialog.SetVariables(varlist)
  1211         dialog.SetVariables(varlist)
  1211         values = {"name" : variable.GetName(), "type" : variable.GetType()}
  1212         values = {"name" : variable.GetName(), "type" : variable.GetType()}
  1212         dialog.SetValues(values)
  1213         dialog.SetValues(values)
  1213         if dialog.ShowModal() == wxID_OK:
  1214         if dialog.ShowModal() == wx.ID_OK:
  1214             old_type = variable.GetType()
  1215             old_type = variable.GetType()
  1215             values = dialog.GetValues()
  1216             values = dialog.GetValues()
  1216             variable.SetName(values["name"])
  1217             variable.SetName(values["name"])
  1217             variable.SetType(values["type"], values["value_type"])
  1218             variable.SetType(values["type"], values["value_type"])
  1218             variable.SetSize(values["width"], values["height"])
  1219             variable.SetSize(values["width"], values["height"])
  1229     def EditConnectionContent(self, connection):
  1230     def EditConnectionContent(self, connection):
  1230         dialog = ConnectionPropertiesDialog(self.Parent)
  1231         dialog = ConnectionPropertiesDialog(self.Parent)
  1231         dialog.SetMinConnectionSize(connection.GetSize())
  1232         dialog.SetMinConnectionSize(connection.GetSize())
  1232         values = {"name" : connection.GetName(), "type" : connection.GetType()}
  1233         values = {"name" : connection.GetName(), "type" : connection.GetType()}
  1233         dialog.SetValues(values)
  1234         dialog.SetValues(values)
  1234         if dialog.ShowModal() == wxID_OK:
  1235         if dialog.ShowModal() == wx.ID_OK:
  1235             old_type = connection.GetType()
  1236             old_type = connection.GetType()
  1236             values = dialog.GetValues()
  1237             values = dialog.GetValues()
  1237             connection.SetName(values["name"])
  1238             connection.SetName(values["name"])
  1238             connection.SetType(values["type"])
  1239             connection.SetType(values["type"])
  1239             connection.SetSize(values["width"], values["height"])
  1240             connection.SetSize(values["width"], values["height"])
  1257                     varlist.append(var["Name"])
  1258                     varlist.append(var["Name"])
  1258         dialog.SetVariables(varlist)
  1259         dialog.SetVariables(varlist)
  1259         values = {"name" : contact.GetName(), "type" : contact.GetType()}
  1260         values = {"name" : contact.GetName(), "type" : contact.GetType()}
  1260         dialog.SetValues(values)
  1261         dialog.SetValues(values)
  1261         dialog.SetElementSize(contact.GetSize())
  1262         dialog.SetElementSize(contact.GetSize())
  1262         if dialog.ShowModal() == wxID_OK:
  1263         if dialog.ShowModal() == wx.ID_OK:
  1263             values = dialog.GetValues()
  1264             values = dialog.GetValues()
  1264             contact.SetName(values["name"])
  1265             contact.SetName(values["name"])
  1265             contact.SetType(values["type"])
  1266             contact.SetType(values["type"])
  1266             contact.SetSize(values["width"], values["height"])
  1267             contact.SetSize(values["width"], values["height"])
  1267             self.RefreshContactModel(contact)
  1268             self.RefreshContactModel(contact)
  1283             varlist.append(self.Controler.GetCurrentElementEditingName())
  1284             varlist.append(self.Controler.GetCurrentElementEditingName())
  1284         dialog.SetVariables(varlist)
  1285         dialog.SetVariables(varlist)
  1285         values = {"name" : coil.GetName(), "type" : coil.GetType()}
  1286         values = {"name" : coil.GetName(), "type" : coil.GetType()}
  1286         dialog.SetValues(values)
  1287         dialog.SetValues(values)
  1287         dialog.SetElementSize(coil.GetSize())
  1288         dialog.SetElementSize(coil.GetSize())
  1288         if dialog.ShowModal() == wxID_OK:
  1289         if dialog.ShowModal() == wx.ID_OK:
  1289             values = dialog.GetValues()
  1290             values = dialog.GetValues()
  1290             coil.SetName(values["name"])
  1291             coil.SetName(values["name"])
  1291             coil.SetType(values["type"])
  1292             coil.SetType(values["type"])
  1292             coil.SetSize(values["width"], values["height"])
  1293             coil.SetSize(values["width"], values["height"])
  1293             self.RefreshContactModel(coil)
  1294             self.RefreshCoilModel(coil)
  1294             self.RefreshBuffer()
  1295             self.RefreshBuffer()
  1295             self.RefreshScrollBars()
  1296             self.RefreshScrollBars()
  1296             self.Refresh()
  1297             self.Refresh()
  1297         dialog.Destroy()
  1298         dialog.Destroy()
  1298 
  1299 
  1299     def EditPowerRailContent(self, powerrail):
  1300     def EditPowerRailContent(self, powerrail):
  1300         dialog = LDPowerRailDialog(self.Parent, powerrail.GetType(), len(powerrail.GetConnectors()))
  1301         dialog = LDPowerRailDialog(self.Parent, powerrail.GetType(), len(powerrail.GetConnectors()))
  1301         dialog.SetMinSize(powerrail.GetSize())
  1302         dialog.SetMinSize(powerrail.GetSize())
  1302         if dialog.ShowModal() == wxID_OK:
  1303         if dialog.ShowModal() == wx.ID_OK:
  1303             old_type = powerrail.GetType()
  1304             old_type = powerrail.GetType()
  1304             values = dialog.GetValues()
  1305             values = dialog.GetValues()
  1305             powerrail.SetType(values["type"], [True for i in xrange(values["number"])])
  1306             powerrail.SetType(values["type"], [True for i in xrange(values["number"])])
  1306             powerrail.SetSize(values["width"], values["height"])
  1307             powerrail.SetSize(values["width"], values["height"])
  1307             if old_type != values["type"]:
  1308             if old_type != values["type"]:
  1311             self.RefreshPowerRailModel(powerrail)
  1312             self.RefreshPowerRailModel(powerrail)
  1312             self.RefreshBuffer()
  1313             self.RefreshBuffer()
  1313             self.RefreshScrollBars()
  1314             self.RefreshScrollBars()
  1314             self.Refresh()
  1315             self.Refresh()
  1315         dialog.Destroy()
  1316         dialog.Destroy()
  1316 ##
  1317 
  1317 ##
  1318 
  1318 ##    def AddNewTransition(self, bbox):
  1319     def EditTransitionContent(self, transition):
  1319 ##        dialog = TransitionContentDialog(self.Parent)
  1320         dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE)
  1320 ##        dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions())
  1321         dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions())
  1321 ##        if dialog.ShowModal() == wxID_OK:
  1322         dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition()})
  1322 ##            id = self.GetNewId()
  1323         dialog.SetElementSize(transition.GetSize())
  1323 ##            values = dialog.GetValues()
  1324         if dialog.ShowModal() == wx.ID_OK:
  1324 ##            transition = SFC_Transition(self, values["type"], values["value"], id)
  1325             values = dialog.GetValues()
  1325 ##            transition.SetPosition(bbox.x, bbox.y)
  1326             transition.SetType(values["type"],values["value"])
  1326 ##            min_width, min_height = transition.GetMinSize()
  1327             transition.RefreshModel()
  1327 ##            transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1328             self.RefreshBuffer()
  1328 ##            self.Blocks.append(transition)
  1329             self.RefreshScrollBars()
  1329 ##            self.Elements.append(transition)
  1330             self.Refresh()
  1330 ##            self.Controler.AddCurrentElementEditingTransition(id)
  1331         dialog.Destroy()
  1331 ##            self.RefreshTransitionModel(transition)
  1332 
  1332 ##            self.RefreshScrollBars()
  1333     def EditJumpContent(self, jump):
  1333 ##            self.Refresh()
  1334         choices = []
  1334 ##        dialog.Destroy()
  1335         for block in self.Blocks:
  1335 ##
  1336             if isinstance(block, SFC_Step):
  1336 ##    def AddNewDivergence(self, bbox):
  1337                 choices.append(block.GetName())
  1337 ##        dialog = DivergenceCreateDialog(self.Parent)
  1338         dialog = wx.SingleChoiceDialog(self.Parent, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL)
  1338 ##        dialog.SetMinSize((bbox.width, bbox.height))
  1339         dialog.SetSelection(choices.index(jump.GetTarget()))
  1339 ##        if dialog.ShowModal() == wxID_OK:
  1340         if dialog.ShowModal() == wx.ID_OK:
  1340 ##            id = self.GetNewId()
  1341             value = dialog.GetStringSelection()
  1341 ##            values = dialog.GetValues()
  1342             jump.SetTarget(value)
  1342 ##            divergence = SFC_Divergence(self, values["type"], values["number"], id)
  1343             jump.RefreshModel()
  1343 ##            divergence.SetPosition(bbox.x, bbox.y)
  1344             self.RefreshBuffer()
  1344 ##            min_width, min_height = divergence.GetMinSize()
  1345             self.RefreshScrollBars()
  1345 ##            divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1346             self.Refresh()
  1346 ##            self.Blocks.append(divergence)
  1347         dialog.Destroy()
  1347 ##            self.Elements.append(divergence)
  1348 
  1348 ##            self.Controler.AddCurrentElementEditingDivergence(id, values["type"])
  1349     def EditActionBlockContent(self, actionblock):
  1349 ##            self.RefreshDivergenceModel(divergence)
  1350         dialog = ActionBlockDialog(self.Parent)
  1350 ##            self.RefreshScrollBars()
  1351         dialog.SetQualifierList(self.Controler.GetQualifierTypes())
  1351 ##            self.Refresh()
  1352         dialog.SetActionList(self.Controler.GetCurrentElementEditingActions())
  1352 ##        dialog.Destroy()
  1353         dialog.SetVariableList(self.Controler.GetCurrentElementEditingInterfaceVars())
       
  1354         dialog.SetValues(actionblock.GetActions())
       
  1355         if dialog.ShowModal() == wx.ID_OK:
       
  1356             actions = dialog.GetValues()
       
  1357             actionblock.SetActions(actions)
       
  1358             actionblock.RefreshModel()
       
  1359             self.RefreshBuffer()
       
  1360             self.RefreshScrollBars()
       
  1361             self.Refresh()
       
  1362         dialog.Destroy()
  1353 
  1363 
  1354 #-------------------------------------------------------------------------------
  1364 #-------------------------------------------------------------------------------
  1355 #                          Model update functions
  1365 #                          Model update functions
  1356 #-------------------------------------------------------------------------------
  1366 #-------------------------------------------------------------------------------
  1357 
  1367 
  1625         event.Skip()
  1635         event.Skip()
  1626 
  1636 
  1627     def OnPaint(self, event):
  1637     def OnPaint(self, event):
  1628         dc = self.GetLogicalDC()
  1638         dc = self.GetLogicalDC()
  1629         dc.Clear()
  1639         dc.Clear()
  1630         dc.SetPen(wxPen(wxColour(230, 230, 230)))
  1640         dc.SetPen(wx.Pen(wx.Colour(230, 230, 230)))
  1631         if self.Scaling and self.DrawGrid:
  1641         if self.Scaling and self.DrawGrid:
  1632             width, height = dc.GetSize()
  1642             width, height = dc.GetSize()
  1633             for i in xrange(1, width / self.Scaling[0] + 1):
  1643             for i in xrange(1, width / self.Scaling[0] + 1):
  1634                 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height)
  1644                 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height)
  1635             for i in xrange(1, height / self.Scaling[1] + 1):
  1645             for i in xrange(1, height / self.Scaling[1] + 1):