Viewer.py
changeset 331 9106d66bd204
parent 330 d803ba077da0
child 332 555124c752ec
equal deleted inserted replaced
330:d803ba077da0 331:9106d66bd204
  1066         for element in self.GetElements():
  1066         for element in self.GetElements():
  1067             if element.IsInSelection(bbox):
  1067             if element.IsInSelection(bbox):
  1068                 elements.append(element)
  1068                 elements.append(element)
  1069         return elements
  1069         return elements
  1070 
  1070 
       
  1071     def SelectAll(self):
       
  1072         if self.SelectedElement is not None:
       
  1073             self.SelectedElement.SetSelected(False)
       
  1074         self.SelectedElement = Graphic_Group(self)
       
  1075         for element in self.GetElements():
       
  1076             self.SelectedElement.SelectElement(element)
       
  1077         self.SelectedElement.SetSelected(True)
       
  1078     
  1071 #-------------------------------------------------------------------------------
  1079 #-------------------------------------------------------------------------------
  1072 #                           Popup menu functions
  1080 #                           Popup menu functions
  1073 #-------------------------------------------------------------------------------
  1081 #-------------------------------------------------------------------------------
  1074 
  1082 
  1075     def PopupBlockMenu(self, connector = None):
  1083     def PopupBlockMenu(self, connector = None):
  1283 
  1291 
  1284     def OnViewerLeftDown(self, event):
  1292     def OnViewerLeftDown(self, event):
  1285         if self.Mode == MODE_SELECTION:
  1293         if self.Mode == MODE_SELECTION:
  1286             dc = self.GetLogicalDC()
  1294             dc = self.GetLogicalDC()
  1287             pos = event.GetLogicalPosition(dc)
  1295             pos = event.GetLogicalPosition(dc)
  1288             if event.ShiftDown() and self.SelectedElement is not None:
  1296             if event.ShiftDown() and not event.ControlDown() and self.SelectedElement is not None:
  1289                 element = self.FindElement(pos, True)
  1297                 element = self.FindElement(pos, True)
  1290                 if element is not None:
  1298                 if element is not None:
  1291                     if isinstance(self.SelectedElement, Graphic_Group):
  1299                     if isinstance(self.SelectedElement, Graphic_Group):
  1292                         self.SelectedElement.SetSelected(False)
  1300                         self.SelectedElement.SetSelected(False)
  1293                         self.SelectedElement.SelectElement(element)
  1301                         self.SelectedElement.SelectElement(element)
  1485     
  1493     
  1486     def OnViewerLeftDClick(self, event):
  1494     def OnViewerLeftDClick(self, event):
  1487         if self.Mode == MODE_SELECTION and self.SelectedElement is not None:
  1495         if self.Mode == MODE_SELECTION and self.SelectedElement is not None:
  1488             if self.Debug:
  1496             if self.Debug:
  1489                 Graphic_Element.OnLeftDClick(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling)
  1497                 Graphic_Element.OnLeftDClick(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling)
  1490             elif event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug):
  1498             elif event.ControlDown() and not event.ShiftDown():
  1491                 self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
  1499                 if self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug):
       
  1500                     self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
       
  1501             elif event.ControlDown() and event.ShiftDown():
       
  1502                 movex, movey = self.SelectedElement.AdjustToScaling(self.Scaling)
       
  1503                 self.SelectedElement.RefreshModel()
       
  1504                 self.RefreshBuffer()
       
  1505                 if movex != 0 or movey != 0:
       
  1506                     self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1492             else:
  1507             else:
  1493                 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1508                 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1494         event.Skip()
  1509         event.Skip()
  1495     
  1510     
  1496     def OnViewerMotion(self, event):
  1511     def OnViewerMotion(self, event):
  1500         if event.MiddleIsDown():
  1515         if event.MiddleIsDown():
  1501             if self.StartMousePos is not None and self.StartScreenPos is not None:
  1516             if self.StartMousePos is not None and self.StartScreenPos is not None:
  1502                 new_pos = event.GetPosition()
  1517                 new_pos = event.GetPosition()
  1503                 xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
  1518                 xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
  1504                 ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL)
  1519                 ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL)
  1505                 scrollx = max(0, self.StartScreenPos[0] + (new_pos[0] - self.StartMousePos[0]) * self.ViewScale[0] / SCROLLBAR_UNIT)
  1520                 scrollx = max(0, self.StartScreenPos[0] - (new_pos[0] - self.StartMousePos[0]) / SCROLLBAR_UNIT)
  1506                 scrolly = max(0, self.StartScreenPos[1] + (new_pos[1] - self.StartMousePos[1]) * self.ViewScale[1] / SCROLLBAR_UNIT)
  1521                 scrolly = max(0, self.StartScreenPos[1] - (new_pos[1] - self.StartMousePos[1]) / SCROLLBAR_UNIT)
  1507                 if scrollx > xmax or scrolly > ymax:
  1522                 if scrollx > xmax or scrolly > ymax:
  1508                     self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax))
  1523                     self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax))
  1509                     self.Scroll(scrollx, scrolly)
  1524                     self.Scroll(scrollx, scrolly)
  1510                 else:
  1525                 else:
  1511                     self.Scroll(scrollx, scrolly)
  1526                     self.Scroll(scrollx, scrolly)
  2690                 self.Scroll(xp, y)
  2705                 self.Scroll(xp, y)
  2691             elif event.ControlDown():
  2706             elif event.ControlDown():
  2692                 dc = self.GetLogicalDC()
  2707                 dc = self.GetLogicalDC()
  2693                 pos = event.GetLogicalPosition(dc)
  2708                 pos = event.GetLogicalPosition(dc)
  2694                 mouse_pos = event.GetPosition()
  2709                 mouse_pos = event.GetPosition()
  2695                 factor = 0.75 ** rotation
  2710                 factor = 1.414 ** rotation
  2696                 self.SetScale(self.ViewScale[0] * factor, self.ViewScale[1] * factor)
  2711                 xscale = max(0.125, min(self.ViewScale[0] * factor, 8))
       
  2712                 yscale = max(0.125, min(self.ViewScale[0] * factor, 8))
       
  2713                 self.SetScale(xscale, yscale)
  2697                 self.Scroll(round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT,
  2714                 self.Scroll(round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT,
  2698                             round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT)
  2715                             round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT)
  2699                 self.RefreshScrollBars()
  2716                 self.RefreshScrollBars()
  2700                 self.RefreshVisibleElements()
  2717                 self.RefreshVisibleElements()
  2701                 self.Refresh()
  2718                 self.Refresh()
  2729             xstart, ystart = self.GetViewStart()
  2746             xstart, ystart = self.GetViewStart()
  2730             window_size = self.GetClientSize()
  2747             window_size = self.GetClientSize()
  2731             width, height = self.GetVirtualSize()
  2748             width, height = self.GetVirtualSize()
  2732             width = int(max(width, xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0])
  2749             width = int(max(width, xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0])
  2733             height = int(max(height, ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1])
  2750             height = int(max(height, ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1])
  2734             dc.DrawRectangle(0, 0, width, height)
  2751             dc.DrawRectangle(1, 1, width, height)
  2735         if self.PageSize is not None and not printing:
  2752         if self.PageSize is not None and not printing:
  2736             dc.SetPen(self.PagePen)
  2753             dc.SetPen(self.PagePen)
  2737             xstart, ystart = self.GetViewStart()
  2754             xstart, ystart = self.GetViewStart()
  2738             window_size = self.GetClientSize()
  2755             window_size = self.GetClientSize()
  2739             for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], window_size[0], self.PageSize[0]):
  2756             for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]):
  2740                 dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, ystart * SCROLLBAR_UNIT, 
  2757                 dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), 
  2741                             xstart * SCROLLBAR_UNIT + x + 1, ystart * SCROLLBAR_UNIT + window_size[1])
  2758                             xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0]))
  2742             for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], window_size[1], self.PageSize[1]):
  2759             for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]):
  2743                 dc.DrawLine(xstart * SCROLLBAR_UNIT, ystart * SCROLLBAR_UNIT + y + 1, 
  2760                 dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, 
  2744                             xstart * SCROLLBAR_UNIT + window_size[0], ystart * SCROLLBAR_UNIT + y + 1)
  2761                             int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1)
  2745         
  2762         
  2746         # Draw all elements
  2763         # Draw all elements
  2747         for comment in self.Comments:
  2764         for comment in self.Comments:
  2748             if comment != self.SelectedElement and (comment.IsVisible() or printing):
  2765             if comment != self.SelectedElement and (comment.IsVisible() or printing):
  2749                 comment.Draw(dc)
  2766                 comment.Draw(dc)