2acd797cb516e13233db32061297031a0968648b
[gc-dialer] / hand_tests / double_disconnect.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 PYSIDE = False
10 DISCONNECT_ON_DELETE = False
11
12 if PYSIDE:
13         import PySide.QtCore as QtCore
14         import PySide.QtGui as QtGui
15 else:
16         import PyQt4.QtCore as QtCore
17         import PyQt4.QtGui as QtGui
18
19
20 _moduleLogger = logging.getLogger(__name__)
21
22
23 class Signaller(QtCore.QObject):
24
25         if PYSIDE:
26                 s1 = QtCore.Signal()
27                 s2 = QtCore.Signal()
28         else:
29                 s1 = QtCore.pyqtSignal()
30                 s2 = QtCore.pyqtSignal()
31
32
33 class Window(object):
34
35         def __init__(self, s):
36                 self._window = QtGui.QMainWindow()
37                 self._window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
38                 self._window.setWindowTitle("Demo!")
39                 if DISCONNECT_ON_DELETE:
40                         self._window.destroyed.connect(self._on_destroyed)
41
42                 self._s = s
43                 self._s.s1.connect(self._on_signal)
44                 self._s.s2.connect(self._on_signal)
45
46         def show(self):
47                 self._window.show()
48
49         def _on_signal(self):
50                 print "Signal!"
51                 self._window.setWindowTitle("Signaled!")
52
53         def _on_destroyed(self, obj = None):
54                 print "Main window destroyed"
55                 self._s.s1.disconnect(self._on_signal)
56                 self._s.s2.disconnect(self._on_signal)
57
58
59 if __name__ == "__main__":
60         app = QtGui.QApplication([])
61
62         s = Signaller()
63         w = Window(s)
64         w.show()
65
66         val = app.exec_()
67         del w
68
69         print "s1"
70         s.s1.emit()
71         print "s2"
72         s.s2.emit()
73
74         print "Exiting"
75         sys.exit(val)