diff -r d803ba077da0 -r 9106d66bd204 Viewer.py --- a/Viewer.py Wed Mar 18 16:42:12 2009 +0100 +++ b/Viewer.py Thu Mar 19 18:10:12 2009 +0100 @@ -1068,6 +1068,14 @@ elements.append(element) return elements + def SelectAll(self): + if self.SelectedElement is not None: + self.SelectedElement.SetSelected(False) + self.SelectedElement = Graphic_Group(self) + for element in self.GetElements(): + self.SelectedElement.SelectElement(element) + self.SelectedElement.SetSelected(True) + #------------------------------------------------------------------------------- # Popup menu functions #------------------------------------------------------------------------------- @@ -1285,7 +1293,7 @@ if self.Mode == MODE_SELECTION: dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) - if event.ShiftDown() and self.SelectedElement is not None: + if event.ShiftDown() and not event.ControlDown() and self.SelectedElement is not None: element = self.FindElement(pos, True) if element is not None: if isinstance(self.SelectedElement, Graphic_Group): @@ -1487,8 +1495,15 @@ if self.Mode == MODE_SELECTION and self.SelectedElement is not None: if self.Debug: Graphic_Element.OnLeftDClick(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling) - elif event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug): - self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType()) + elif event.ControlDown() and not event.ShiftDown(): + if self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug): + self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType()) + elif event.ControlDown() and event.ShiftDown(): + movex, movey = self.SelectedElement.AdjustToScaling(self.Scaling) + self.SelectedElement.RefreshModel() + self.RefreshBuffer() + if movex != 0 or movey != 0: + self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) else: self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) event.Skip() @@ -1502,8 +1517,8 @@ new_pos = event.GetPosition() xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) - scrollx = max(0, self.StartScreenPos[0] + (new_pos[0] - self.StartMousePos[0]) * self.ViewScale[0] / SCROLLBAR_UNIT) - scrolly = max(0, self.StartScreenPos[1] + (new_pos[1] - self.StartMousePos[1]) * self.ViewScale[1] / SCROLLBAR_UNIT) + scrollx = max(0, self.StartScreenPos[0] - (new_pos[0] - self.StartMousePos[0]) / SCROLLBAR_UNIT) + scrolly = max(0, self.StartScreenPos[1] - (new_pos[1] - self.StartMousePos[1]) / SCROLLBAR_UNIT) if scrollx > xmax or scrolly > ymax: self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax)) self.Scroll(scrollx, scrolly) @@ -2692,8 +2707,10 @@ dc = self.GetLogicalDC() pos = event.GetLogicalPosition(dc) mouse_pos = event.GetPosition() - factor = 0.75 ** rotation - self.SetScale(self.ViewScale[0] * factor, self.ViewScale[1] * factor) + factor = 1.414 ** rotation + xscale = max(0.125, min(self.ViewScale[0] * factor, 8)) + yscale = max(0.125, min(self.ViewScale[0] * factor, 8)) + self.SetScale(xscale, yscale) self.Scroll(round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT, round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT) self.RefreshScrollBars() @@ -2731,17 +2748,17 @@ width, height = self.GetVirtualSize() width = int(max(width, xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0]) height = int(max(height, ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1]) - dc.DrawRectangle(0, 0, width, height) + dc.DrawRectangle(1, 1, width, height) if self.PageSize is not None and not printing: dc.SetPen(self.PagePen) xstart, ystart = self.GetViewStart() window_size = self.GetClientSize() - for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], window_size[0], self.PageSize[0]): - dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, ystart * SCROLLBAR_UNIT, - xstart * SCROLLBAR_UNIT + x + 1, ystart * SCROLLBAR_UNIT + window_size[1]) - for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], window_size[1], self.PageSize[1]): - dc.DrawLine(xstart * SCROLLBAR_UNIT, ystart * SCROLLBAR_UNIT + y + 1, - xstart * SCROLLBAR_UNIT + window_size[0], ystart * SCROLLBAR_UNIT + y + 1) + for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): + dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), + xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0])) + for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): + dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, + int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) # Draw all elements for comment in self.Comments: