--- a/Viewer.py Wed Jun 04 17:48:26 2008 +0200
+++ b/Viewer.py Mon Jun 23 18:48:49 2008 +0200
@@ -306,6 +306,8 @@
self.Scaling = None
self.DrawGrid = True
self.GridBrush = wx.TRANSPARENT_BRUSH
+ self.PageSize = None
+ self.PagePen = wx.TRANSPARENT_PEN
self.DrawingWire = False
self.current_id = 0
self.TagName = tagname
@@ -324,12 +326,12 @@
self.SetDropTarget(ViewerDropTarget(self))
dc = wx.ClientDC(self)
- font = wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.NORMAL, faceName = faces["mono"])
+ font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"])
dc.SetFont(font)
width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
while width > 260:
faces["size"] -= 1
- font = wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.NORMAL, faceName = faces["mono"])
+ font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName = faces["mono"])
dc.SetFont(font)
width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
self.SetFont(font)
@@ -344,7 +346,7 @@
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
self.Bind(wx.EVT_CHAR, self.OnChar)
- self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
+ #self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
def GetScrolledRect(self, rect):
@@ -374,7 +376,7 @@
def GetLogicalDC(self, buffered=False):
if buffered:
- dc = wx.BufferedPaintDC(self)
+ dc = wx.AutoBufferedPaintDC(self)
else:
dc = wx.ClientDC(self)
dc.SetFont(self.GetFont())
@@ -489,6 +491,13 @@
else:
self.Scaling = None
self.GridBrush = wx.TRANSPARENT_BRUSH
+ page_size = properties["pageSize"]
+ if page_size != (0, 0):
+ self.PageSize = map(int, page_size)
+ self.PagePen = wx.Pen(wx.Colour(180, 180, 180))
+ else:
+ self.PageSize = None
+ self.PagePen = wx.TRANSPARENT_PEN
if refresh:
self.Refresh(False)
@@ -524,14 +533,18 @@
self.Refresh(False)
- def RefreshScrollBars(self):
- xstart, ystart = self.GetViewStart()
- window_size = self.GetClientSize()
+ def GetMaxSize(self):
maxx = maxy = 0
for element in self.GetElements():
bbox = element.GetBoundingBox()
maxx = max(maxx, bbox.x + bbox.width)
maxy = max(maxy, bbox.y + bbox.height)
+ return maxx, maxy
+
+ def RefreshScrollBars(self):
+ xstart, ystart = self.GetViewStart()
+ window_size = self.GetClientSize()
+ maxx, maxy = self.GetMaxSize()
maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0])
maxy = max(maxy + WINDOW_BORDER, ystart * SCROLLBAR_UNIT + window_size[1])
if self.rubberBand.IsShown():
@@ -539,7 +552,8 @@
maxx = max(maxx, extent.x + extent.width)
maxy = max(maxy, extent.y + extent.height)
self.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
- maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, xstart, ystart, True)
+ round(maxx / SCROLLBAR_UNIT), round(maxy / SCROLLBAR_UNIT),
+ xstart, ystart, True)
# Load instance from given informations
def loadInstance(self, instance, ids):
@@ -2320,16 +2334,36 @@
self.RefreshScrollBars()
event.Skip()
- def OnPaint(self, event):
- dc = self.GetLogicalDC(True)
- dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
- dc.Clear()
- dc.BeginDrawing()
- if self.Scaling and self.DrawGrid:
+ def DoDrawing(self, dc, printing = False):
+ if printing:
+ if getattr(dc, "printing", False):
+ font = wx.Font(self.GetFont().GetPointSize(), wx.MODERN, wx.NORMAL, wx.NORMAL)
+ dc.SetFont(font)
+ else:
+ dc.SetFont(self.GetFont())
+ else:
+ dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
+ dc.Clear()
+ dc.BeginDrawing()
+ if self.Scaling is not None and self.DrawGrid and not printing:
dc.SetPen(wx.TRANSPARENT_PEN)
dc.SetBrush(self.GridBrush)
+ xstart, ystart = self.GetViewStart()
+ window_size = self.GetClientSize()
width, height = self.GetVirtualSize()
+ width = max(width, xstart * SCROLLBAR_UNIT + window_size[0])
+ height = max(height, ystart * SCROLLBAR_UNIT + window_size[1])
dc.DrawRectangle(0, 0, 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)
# Draw all elements
for comment in self.Comments:
@@ -2343,11 +2377,15 @@
block.Draw(dc)
if self.SelectedElement:
- self.SelectedElement.Draw(dc)
-
- if self.rubberBand.IsShown():
- self.rubberBand.Draw(dc)
- dc.EndDrawing()
- event.Skip()
-
-
+ self.SelectedElement.Draw(dc)
+
+ if not printing:
+ if self.rubberBand.IsShown():
+ self.rubberBand.Draw(dc)
+ dc.EndDrawing()
+
+ def OnPaint(self, event):
+ self.DoDrawing(self.GetLogicalDC(True))
+ event.Skip()
+
+