--- 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: