Demonstrating some UI issues I'm having
[gc-dialer] / hand_tests / cropped_pies.py
diff --git a/hand_tests/cropped_pies.py b/hand_tests/cropped_pies.py
new file mode 100755 (executable)
index 0000000..62a1ed7
--- /dev/null
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+
+from __future__ import with_statement
+from __future__ import division
+
+import sys
+import logging
+
+from PyQt4 import QtCore
+from PyQt4 import QtGui
+
+
+_moduleLogger = logging.getLogger(__name__)
+
+
+class QPieDisplay(QtGui.QWidget):
+
+       def __init__(self, parent = None, flags = QtCore.Qt.Window):
+               QtGui.QWidget.__init__(self, parent, flags)
+               self._child = None
+               self._size = QtCore.QSize(128, 128)
+               self._canvas = QtGui.QPixmap(self._size)
+               self._mask = QtGui.QBitmap(self._canvas.size())
+               self._mask.fill(QtCore.Qt.color0)
+               self._generate_mask(self._mask)
+               self._canvas.setMask(self._mask)
+
+       def sizeHint(self):
+               return self._size
+
+       def showEvent(self, showEvent):
+               self.setMask(self._mask)
+
+               QtGui.QWidget.showEvent(self, showEvent)
+
+       def paintEvent(self, paintEvent):
+               painter = QtGui.QPainter(self._canvas)
+               painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
+               adjustmentRect = self._canvas.rect().adjusted(0, 0, -1, -1)
+
+               painter.setBrush(self.palette().window())
+               painter.setPen(self.palette().mid().color())
+               painter.drawRect(self._canvas.rect())
+
+               background = self.palette().highlight().color()
+               painter.setPen(QtCore.Qt.NoPen)
+               painter.setBrush(background)
+               painter.drawPie(adjustmentRect, 0, 360 * 16)
+
+               dark = self.palette().mid().color()
+               painter.setPen(QtGui.QPen(dark, 1))
+               painter.setBrush(QtCore.Qt.NoBrush)
+               painter.drawEllipse(adjustmentRect)
+
+               screen = QtGui.QPainter(self)
+               screen.drawPixmap(QtCore.QPoint(0, 0), self._canvas)
+               QtGui.QWidget.paintEvent(self, paintEvent)
+
+       def mousePressEvent(self, mouseEvent):
+               pass
+
+       def mouseReleaseEvent(self, mouseEvent):
+               if self._child is None:
+                       lastMousePos = mouseEvent.pos()
+                       globalButtonPos = self.mapToGlobal(lastMousePos)
+                       self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
+                       self._child.move(globalButtonPos)
+                       self._child.show()
+               else:
+                       self._child.hide()
+                       self._child = None
+
+       def _generate_mask(self, mask):
+               """
+               Specifies on the mask the shape of the pie menu
+               """
+               painter = QtGui.QPainter(mask)
+               painter.setPen(QtCore.Qt.color1)
+               painter.setBrush(QtCore.Qt.color1)
+               painter.drawRect(mask.rect())
+
+class Grid(object):
+
+       def __init__(self):
+               layout = QtGui.QGridLayout()
+               for i in xrange(3):
+                       for k in xrange(3):
+                               button = QtGui.QPushButton("%s,%s" % (i, k))
+                               button.setSizePolicy(QtGui.QSizePolicy(
+                                       QtGui.QSizePolicy.MinimumExpanding,
+                                       QtGui.QSizePolicy.MinimumExpanding,
+                                       QtGui.QSizePolicy.PushButton,
+                               ))
+                               self._create_callback(button)
+                               layout.addWidget(button, i, k)
+
+               centralWidget = QtGui.QWidget()
+               centralWidget.setLayout(layout)
+               centralWidget.setContentsMargins(0, 0, 0, 0)
+
+               self._window = QtGui.QMainWindow()
+               self._window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
+               self._window.setWindowTitle("Buttons!")
+               self._window.setCentralWidget(centralWidget)
+               self._child = None
+
+       def show(self):
+               self._window.show()
+
+       def _create_callback(self, button):
+               button.clicked.connect(lambda: self._on_click(button))
+
+       def _on_click(self, button):
+               if self._child is None:
+                       buttonCorner = pos = QtCore.QPoint(0, 0)
+                       globalButtonPos = button.mapToGlobal(pos)
+                       self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
+                       self._child.move(globalButtonPos)
+                       self._child.show()
+               else:
+                       self._child.hide()
+                       self._child = None
+
+
+if __name__ == "__main__":
+       app = QtGui.QApplication([])
+
+       grid = Grid()
+       grid.show()
+
+       val = app.exec_()
+       sys.exit(val)