Fixing the alarm handler as a tool
[gc-dialer] / hand_tests / cropped_pies.py
1 #!/usr/bin/env python
2
3 from __future__ import with_statement
4 from __future__ import division
5
6 import sys
7 import logging
8
9 from PyQt4 import QtCore
10 from PyQt4 import QtGui
11
12
13 _moduleLogger = logging.getLogger(__name__)
14
15
16 class QPieDisplay(QtGui.QWidget):
17
18         def __init__(self, parent = None, flags = QtCore.Qt.Window):
19                 QtGui.QWidget.__init__(self, parent, flags)
20                 self._child = None
21                 self._size = QtCore.QSize(128, 128)
22                 self._canvas = QtGui.QPixmap(self._size)
23                 self._mask = QtGui.QBitmap(self._canvas.size())
24                 self._mask.fill(QtCore.Qt.color0)
25                 self._generate_mask(self._mask)
26                 self._canvas.setMask(self._mask)
27
28         def sizeHint(self):
29                 return self._size
30
31         def showEvent(self, showEvent):
32                 self.setMask(self._mask)
33
34                 QtGui.QWidget.showEvent(self, showEvent)
35
36         def paintEvent(self, paintEvent):
37                 painter = QtGui.QPainter(self._canvas)
38                 painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
39                 adjustmentRect = self._canvas.rect().adjusted(0, 0, -1, -1)
40
41                 painter.setBrush(self.palette().window())
42                 painter.setPen(self.palette().mid().color())
43                 painter.drawRect(self._canvas.rect())
44
45                 background = self.palette().highlight().color()
46                 painter.setPen(QtCore.Qt.NoPen)
47                 painter.setBrush(background)
48                 painter.drawPie(adjustmentRect, 0, 360 * 16)
49
50                 dark = self.palette().mid().color()
51                 painter.setPen(QtGui.QPen(dark, 1))
52                 painter.setBrush(QtCore.Qt.NoBrush)
53                 painter.drawEllipse(adjustmentRect)
54
55                 screen = QtGui.QPainter(self)
56                 screen.drawPixmap(QtCore.QPoint(0, 0), self._canvas)
57                 QtGui.QWidget.paintEvent(self, paintEvent)
58
59         def mousePressEvent(self, mouseEvent):
60                 pass
61
62         def mouseReleaseEvent(self, mouseEvent):
63                 if self._child is None:
64                         lastMousePos = mouseEvent.pos()
65                         globalButtonPos = self.mapToGlobal(lastMousePos)
66                         self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
67                         self._child.move(globalButtonPos)
68                         self._child.show()
69                 else:
70                         self._child.hide()
71                         self._child = None
72
73         def _generate_mask(self, mask):
74                 """
75                 Specifies on the mask the shape of the pie menu
76                 """
77                 painter = QtGui.QPainter(mask)
78                 painter.setPen(QtCore.Qt.color1)
79                 painter.setBrush(QtCore.Qt.color1)
80                 painter.drawRect(mask.rect())
81
82 class Grid(object):
83
84         def __init__(self):
85                 layout = QtGui.QGridLayout()
86                 for i in xrange(3):
87                         for k in xrange(3):
88                                 button = QtGui.QPushButton("%s,%s" % (i, k))
89                                 button.setSizePolicy(QtGui.QSizePolicy(
90                                         QtGui.QSizePolicy.MinimumExpanding,
91                                         QtGui.QSizePolicy.MinimumExpanding,
92                                         QtGui.QSizePolicy.PushButton,
93                                 ))
94                                 self._create_callback(button)
95                                 layout.addWidget(button, i, k)
96
97                 centralWidget = QtGui.QWidget()
98                 centralWidget.setLayout(layout)
99                 centralWidget.setContentsMargins(0, 0, 0, 0)
100
101                 self._window = QtGui.QMainWindow()
102                 self._window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
103                 self._window.setWindowTitle("Buttons!")
104                 self._window.setCentralWidget(centralWidget)
105                 self._child = None
106
107         def show(self):
108                 self._window.show()
109
110         def _create_callback(self, button):
111                 button.clicked.connect(lambda: self._on_click(button))
112
113         def _on_click(self, button):
114                 if self._child is None:
115                         buttonCorner = pos = QtCore.QPoint(0, 0)
116                         globalButtonPos = button.mapToGlobal(pos)
117                         self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
118                         self._child.move(globalButtonPos)
119                         self._child.show()
120                 else:
121                         self._child.hide()
122                         self._child = None
123
124
125 if __name__ == "__main__":
126         app = QtGui.QApplication([])
127
128         grid = Grid()
129         grid.show()
130
131         val = app.exec_()
132         sys.exit(val)