1
2
3
4
5
6
7
8
9
10
11 from PyQt4.QtCore import *
12 from PyQt4.QtGui import *
13
14 from plainpagewrapper import *
15
17
18 BACKGROUND_COLOR = QColor(160, 160, 164)
19 MARGIN = 5
20 WIDTH = 0
21 HEIGHT = 0
22
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
37 self.scene().setBackgroundBrush(Viewer.BACKGROUND_COLOR)
38
39
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
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
117
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