diff -r e36ba4f15fc8 -r 4931959ea256 Viewer.py --- 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() + +