editors/Viewer.py
changeset 1204 8a620b460b49
parent 1203 4399ddd024e5
child 1205 638d1d430d24
equal deleted inserted replaced
1203:4399ddd024e5 1204:8a620b460b49
   737         return dc
   737         return dc
   738     
   738     
   739     def RefreshRect(self, rect, eraseBackground=True):
   739     def RefreshRect(self, rect, eraseBackground=True):
   740         self.Editor.RefreshRect(rect, eraseBackground)
   740         self.Editor.RefreshRect(rect, eraseBackground)
   741     
   741     
       
   742     def RefreshEditor(self):
       
   743         self.Editor.Thaw()
       
   744         self.Editor.Refresh()
       
   745     
   742     def Scroll(self, x, y):
   746     def Scroll(self, x, y):
       
   747         if self.Debug and wx.Platform == '__WXMSW__':
       
   748             self.Editor.Freeze()
   743         self.Editor.Scroll(x, y)
   749         self.Editor.Scroll(x, y)
       
   750         if self.Debug:
       
   751             if wx.Platform == '__WXMSW__':
       
   752                 wx.CallAfter(self.RefreshEditor)
       
   753             else:
       
   754                 self.Editor.Refresh()
   744     
   755     
   745     def GetScrollPos(self, orientation):
   756     def GetScrollPos(self, orientation):
   746         return self.Editor.GetScrollPos(orientation)
   757         return self.Editor.GetScrollPos(orientation)
   747     
   758     
   748     def GetScrollRange(self, orientation):
   759     def GetScrollRange(self, orientation):
   993         else:
  1004         else:
   994             self.PageSize = None
  1005             self.PageSize = None
   995             self.PagePen = wx.TRANSPARENT_PEN
  1006             self.PagePen = wx.TRANSPARENT_PEN
   996         if refresh:
  1007         if refresh:
   997             self.RefreshVisibleElements()
  1008             self.RefreshVisibleElements()
   998             self.Refresh(False)
  1009             self.Editor.Refresh(False)
   999         
  1010         
  1000         
  1011         
  1001 #-------------------------------------------------------------------------------
  1012 #-------------------------------------------------------------------------------
  1002 #                          Refresh functions
  1013 #                          Refresh functions
  1003 #-------------------------------------------------------------------------------
  1014 #-------------------------------------------------------------------------------
  1106                         self.AddDataConsumer(iec_path.upper(), block)
  1117                         self.AddDataConsumer(iec_path.upper(), block)
  1107 
  1118 
  1108         self.Inhibit(False)
  1119         self.Inhibit(False)
  1109         self.RefreshVisibleElements()
  1120         self.RefreshVisibleElements()
  1110         self.ShowHighlights()
  1121         self.ShowHighlights()
  1111         self.Refresh(False)
  1122         self.Editor.Refresh(False)
  1112     
  1123     
  1113     def GetPreviousSteps(self, connectors):
  1124     def GetPreviousSteps(self, connectors):
  1114         steps = []
  1125         steps = []
  1115         for connector in connectors:
  1126         for connector in connectors:
  1116             for wire, handle in connector.GetWires():
  1127             for wire, handle in connector.GetWires():
  1521 
  1532 
  1522     def OnAlignLeftMenu(self, event):
  1533     def OnAlignLeftMenu(self, event):
  1523         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1534         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1524             self.SelectedElement.AlignElements(ALIGN_LEFT, None)
  1535             self.SelectedElement.AlignElements(ALIGN_LEFT, None)
  1525             self.RefreshBuffer()
  1536             self.RefreshBuffer()
  1526             self.Refresh(False)
  1537             self.Editor.Refresh(False)
  1527     
  1538     
  1528     def OnAlignCenterMenu(self, event):
  1539     def OnAlignCenterMenu(self, event):
  1529         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1540         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1530             self.SelectedElement.AlignElements(ALIGN_CENTER, None)
  1541             self.SelectedElement.AlignElements(ALIGN_CENTER, None)
  1531             self.RefreshBuffer()
  1542             self.RefreshBuffer()
  1532             self.Refresh(False)
  1543             self.Editor.Refresh(False)
  1533     
  1544     
  1534     def OnAlignRightMenu(self, event):
  1545     def OnAlignRightMenu(self, event):
  1535         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1546         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1536             self.SelectedElement.AlignElements(ALIGN_RIGHT, None)
  1547             self.SelectedElement.AlignElements(ALIGN_RIGHT, None)
  1537             self.RefreshBuffer()
  1548             self.RefreshBuffer()
  1538             self.Refresh(False)
  1549             self.Editor.Refresh(False)
  1539     
  1550     
  1540     def OnAlignTopMenu(self, event):
  1551     def OnAlignTopMenu(self, event):
  1541         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1552         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1542             self.SelectedElement.AlignElements(None, ALIGN_TOP)
  1553             self.SelectedElement.AlignElements(None, ALIGN_TOP)
  1543             self.RefreshBuffer()
  1554             self.RefreshBuffer()
  1544             self.Refresh(False)
  1555             self.Editor.Refresh(False)
  1545     
  1556     
  1546     def OnAlignMiddleMenu(self, event):
  1557     def OnAlignMiddleMenu(self, event):
  1547         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1558         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1548             self.SelectedElement.AlignElements(None, ALIGN_MIDDLE)
  1559             self.SelectedElement.AlignElements(None, ALIGN_MIDDLE)
  1549             self.RefreshBuffer()
  1560             self.RefreshBuffer()
  1550             self.Refresh(False)
  1561             self.Editor.Refresh(False)
  1551     
  1562     
  1552     def OnAlignBottomMenu(self, event):
  1563     def OnAlignBottomMenu(self, event):
  1553         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1564         if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group):
  1554             self.SelectedElement.AlignElements(None, ALIGN_BOTTOM)
  1565             self.SelectedElement.AlignElements(None, ALIGN_BOTTOM)
  1555             self.RefreshBuffer()
  1566             self.RefreshBuffer()
  1556             self.Refresh(False)
  1567             self.Editor.Refresh(False)
  1557         
  1568         
  1558     def OnNoModifierMenu(self, event):
  1569     def OnNoModifierMenu(self, event):
  1559         if self.SelectedElement is not None and self.IsBlock(self.SelectedElement):
  1570         if self.SelectedElement is not None and self.IsBlock(self.SelectedElement):
  1560             self.SelectedElement.SetConnectorNegated(False)
  1571             self.SelectedElement.SetConnectorNegated(False)
  1561             self.SelectedElement.Refresh()
  1572             self.SelectedElement.Refresh()
  1611     def OnDeleteMenu(self, event):
  1622     def OnDeleteMenu(self, event):
  1612         if self.SelectedElement is not None:
  1623         if self.SelectedElement is not None:
  1613             self.SelectedElement.Delete()
  1624             self.SelectedElement.Delete()
  1614             self.SelectedElement = None
  1625             self.SelectedElement = None
  1615             self.RefreshBuffer()
  1626             self.RefreshBuffer()
  1616             self.Refresh(False)
  1627             self.Editor.Refresh(False)
  1617 
  1628 
  1618     def OnClearExecutionOrderMenu(self, event):
  1629     def OnClearExecutionOrderMenu(self, event):
  1619         self.Controler.ClearEditedElementExecutionOrder(self.TagName)
  1630         self.Controler.ClearEditedElementExecutionOrder(self.TagName)
  1620         self.RefreshBuffer()
  1631         self.RefreshBuffer()
  1621         self.RefreshView()
  1632         self.RefreshView()
  1971                     self.Scroll(scrollx, scrolly)
  1982                     self.Scroll(scrollx, scrolly)
  1972                 else:
  1983                 else:
  1973                     self.Scroll(scrollx, scrolly)
  1984                     self.Scroll(scrollx, scrolly)
  1974                     self.RefreshScrollBars()
  1985                     self.RefreshScrollBars()
  1975                 self.RefreshVisibleElements()
  1986                 self.RefreshVisibleElements()
  1976                 if self.Debug:
       
  1977                     self.Refresh()
       
  1978         else:
  1987         else:
  1979             if not event.Dragging():
  1988             if not event.Dragging():
  1980                 highlighted = self.FindElement(event, connectors=False) 
  1989                 highlighted = self.FindElement(event, connectors=False) 
  1981                 if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1990                 if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1982                     self.HighlightedElement.SetHighlighted(False)
  1991                     self.HighlightedElement.SetHighlighted(False)
  2158         self.Controler.AddEditedElementVariable(self.GetTagName(), id, var_class)
  2167         self.Controler.AddEditedElementVariable(self.GetTagName(), id, var_class)
  2159         self.RefreshVariableModel(variable)
  2168         self.RefreshVariableModel(variable)
  2160         self.RefreshBuffer()
  2169         self.RefreshBuffer()
  2161         self.RefreshScrollBars()
  2170         self.RefreshScrollBars()
  2162         self.RefreshVisibleElements()
  2171         self.RefreshVisibleElements()
  2163         self.Refresh(False)
  2172         self.Editor.Refresh(False)
  2164 
  2173 
  2165 #-------------------------------------------------------------------------------
  2174 #-------------------------------------------------------------------------------
  2166 #                          Model adding functions
  2175 #                          Model adding functions
  2167 #-------------------------------------------------------------------------------
  2176 #-------------------------------------------------------------------------------
  2168 
  2177 
  3313     def OnScrollWindow(self, event):
  3322     def OnScrollWindow(self, event):
  3314         if self.Editor.HasCapture() and self.StartMousePos:
  3323         if self.Editor.HasCapture() and self.StartMousePos:
  3315             return
  3324             return
  3316         if wx.Platform == '__WXMSW__':
  3325         if wx.Platform == '__WXMSW__':
  3317             wx.CallAfter(self.RefreshVisibleElements)
  3326             wx.CallAfter(self.RefreshVisibleElements)
       
  3327             self.Editor.Freeze()
       
  3328             wx.CallAfter(self.RefreshEditor)
  3318         elif event.GetOrientation() == wx.HORIZONTAL:
  3329         elif event.GetOrientation() == wx.HORIZONTAL:
  3319             self.RefreshVisibleElements(xp = event.GetPosition())
  3330             self.RefreshVisibleElements(xp = event.GetPosition())
  3320         else:
  3331         else:
  3321             self.RefreshVisibleElements(yp = event.GetPosition())
  3332             self.RefreshVisibleElements(yp = event.GetPosition())
  3322         
  3333         
  3323         # Handle scroll in debug to fully redraw area and ensuring
  3334         # Handle scroll in debug to fully redraw area and ensuring
  3324         # instance path is fully draw without flickering
  3335         # instance path is fully draw without flickering
  3325         if self.Debug:
  3336         if self.Debug and wx.Platform != '__WXMSW__':
  3326             x, y = self.GetViewStart()
  3337             x, y = self.GetViewStart()
  3327             if event.GetOrientation() == wx.HORIZONTAL:
  3338             if event.GetOrientation() == wx.HORIZONTAL:
  3328                 self.Scroll(event.GetPosition(), y)
  3339                 self.Scroll(event.GetPosition(), y)
  3329             else:
  3340             else:
  3330                 self.Scroll(x, event.GetPosition())
  3341                 self.Scroll(x, event.GetPosition())
  3331             self.Refresh()
       
  3332         else:
  3342         else:
  3333             event.Skip()
  3343             event.Skip()
  3334 
  3344 
  3335     def OnScrollStop(self, event):
  3345     def OnScrollStop(self, event):
  3336         self.RefreshScrollBars()
  3346         self.RefreshScrollBars()
  3342             if event.ShiftDown():
  3352             if event.ShiftDown():
  3343                 x, y = self.GetViewStart()
  3353                 x, y = self.GetViewStart()
  3344                 xp = max(0, min(x - rotation * 3, self.Editor.GetVirtualSize()[0] / self.Editor.GetScrollPixelsPerUnit()[0]))
  3354                 xp = max(0, min(x - rotation * 3, self.Editor.GetVirtualSize()[0] / self.Editor.GetScrollPixelsPerUnit()[0]))
  3345                 self.RefreshVisibleElements(xp = xp)
  3355                 self.RefreshVisibleElements(xp = xp)
  3346                 self.Scroll(xp, y)
  3356                 self.Scroll(xp, y)
  3347                 if self.Debug:
       
  3348                     self.Refresh()
       
  3349             elif event.ControlDown():
  3357             elif event.ControlDown():
  3350                 dc = self.GetLogicalDC()
  3358                 dc = self.GetLogicalDC()
  3351                 self.SetScale(self.CurrentScale + rotation, mouse_event = event)
  3359                 self.SetScale(self.CurrentScale + rotation, mouse_event = event)
  3352                 self.ParentWindow.RefreshDisplayMenu()
  3360                 self.ParentWindow.RefreshDisplayMenu()
  3353             else:
  3361             else:
  3354                 x, y = self.GetViewStart()
  3362                 x, y = self.GetViewStart()
  3355                 yp = max(0, min(y - rotation * 3, self.Editor.GetVirtualSize()[1] / self.Editor.GetScrollPixelsPerUnit()[1]))
  3363                 yp = max(0, min(y - rotation * 3, self.Editor.GetVirtualSize()[1] / self.Editor.GetScrollPixelsPerUnit()[1]))
  3356                 self.RefreshVisibleElements(yp = yp)
  3364                 self.RefreshVisibleElements(yp = yp)
  3357                 self.Scroll(x, yp)
  3365                 self.Scroll(x, yp)
  3358                 if self.Debug:
  3366             
  3359                     self.Refresh()
       
  3360         
       
  3361     def OnMoveWindow(self, event):
  3367     def OnMoveWindow(self, event):
  3362         self.RefreshScrollBars()
  3368         self.RefreshScrollBars()
  3363         self.RefreshVisibleElements()
  3369         self.RefreshVisibleElements()
  3364         event.Skip()
  3370         event.Skip()
  3365 
  3371