Package mcbase :: Package libs :: Package reportviewer :: Module viewer
[hide private]
[frames] | no frames]

Source Code for Module mcbase.libs.reportviewer.viewer

  1  # -*- coding: utf-8 -*- 
  2   
  3  ########################################################################## 
  4  # viewer.py 
  5  # 
  6  # Gösterim ekranı 
  7  # 
  8  # (C) 2007 Likya Yazılım ve Bilişim Hizmetleri Ltd. Şti. 
  9  ########################################################################## 
 10   
 11  from PyQt4.QtCore import * 
 12  from PyQt4.QtGui import * 
 13   
 14  from plainpagewrapper import * 
 15   
16 -class Viewer(QGraphicsView):
17 18 BACKGROUND_COLOR = QColor(160, 160, 164) 19 MARGIN = 5 20 WIDTH = 0 21 HEIGHT = 0 22
23 - def __init__(self, parent):
24 ''' 25 Gösterim ekranı için toolbarı oluşturur. 26 ''' 27 QGraphicsView.__init__(self, parent) 28 29 self.setScene(QGraphicsScene(self)) 30 self.setCacheMode(QGraphicsView.CacheBackground) 31 self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) 32 self.setResizeAnchor(QGraphicsView.AnchorViewCenter) 33 self.setDragMode(QGraphicsView.ScrollHandDrag) 34 self.setViewportUpdateMode(QGraphicsView.SmartViewportUpdate) 35 36 # Zemin rengini değiştiriyoruz. 37 self.scene().setBackgroundBrush(Viewer.BACKGROUND_COLOR) 38 39 # Görünümdeki sayfalar. 40 self._pages = []
41
42 - def clearPages(self):
43 ''' 44 Tüm sayfaları siler. 45 ''' 46 for page in self._pages: 47 self.scene().removeItem(page) 48 49 self._pages = []
50
51 - def addPages(self, pageSource):
52 ''' 53 Gerektiği kadar sayfayı ekler. 54 ''' 55 for pageNumber in xrange(pageSource.numberOfPages()): 56 pageWrapper = PlainPageWrapper(pageSource) 57 pageWrapper.setPageNumber(pageNumber) 58 self.scene().addItem(pageWrapper) 59 self._pages.append(pageWrapper)
60
61 - def gotoPage(self, pageNumber):
62 ''' 63 İstenilen sayfanın başına gider. 64 ''' 65 pageNumber = max(pageNumber, 1) 66 pageNumber = min(pageNumber, len(self._pages)) 67 68 page = self._pages[pageNumber - 1] 69 pos = page.scenePos() 70 71 width = self.viewport().width() 72 height = self.viewport().height() 73 74 pos.setX(pos.x() + width / 2.0 - Viewer.MARGIN) 75 pos.setY(pos.y() + height / 2.0 - Viewer.MARGIN) 76 77 self.centerOn(pos) 78 79 self.emit(SIGNAL('setPageNumberText(int)'), pageNumber)
80
81 - def layoutPages(self):
82 ''' 83 Rapor sayfalarını ilgili layout'a göre düzgünce yerleştirir. 84 ''' 85 x = Viewer.MARGIN 86 y = Viewer.MARGIN 87 88 for page in self._pages: 89 page.setPos(x, y) 90 91 y += page.height()
92
93 - def textItems(self):
94 ''' 95 Görünüm içerisindeki yazı alanlarını döndürür. 96 ''' 97 return filter(lambda x: isinstance(x, QGraphicsTextItem), self.scene().items())
98
99 - def adjustContentsSize(self):
100 ''' 101 Nesnelerin kapladığı alana göre scroll barları yeniden ayarlar. 102 ''' 103 itemsBoundingRect = self.scene().itemsBoundingRect() 104 105 margin = Viewer.MARGIN 106 scrollBarWidth = self.verticalScrollBar().width() 107 self.scene().setSceneRect(itemsBoundingRect.adjusted(-margin, -margin, margin, 0))
108
109 - def resizeEvent(self, e):
110 ''' 111 Scroll view'in boyu değiştiğinde, görünümü ortalar. 112 ''' 113 QGraphicsView.resizeEvent(self, e) 114 115 Viewer.WIDTH = self.viewport().width() - Viewer.MARGIN 116 Viewer.HEIGHT = self.viewport().height() - Viewer.MARGIN
117
118 - def scrollContentsBy(self, dx, dy):
119 ''' 120 Rapor sürüklendiğinde sayfa numarasını günceller. 121 ''' 122 QGraphicsView.scrollContentsBy(self, dx, dy) 123 124 width = self.viewport().width() 125 height = self.viewport().height() 126 127 x = width / 2.0 128 y = height / 2.0 129 130 for item in self.items(x, y): 131 if hasattr(item, 'pageNumber'): 132 self.emit(SIGNAL('setPageNumberText(int)'), item.pageNumber() + 1)
133