Show More
@@ -1,11 +1,14 b'' | |||||
1 | """ Defines miscellaneous Qt-related helper classes and functions. |
|
1 | """ Defines miscellaneous Qt-related helper classes and functions. | |
2 | """ |
|
2 | """ | |
3 |
|
3 | |||
|
4 | # Standard library imports. | |||
|
5 | import inspect | |||
|
6 | ||||
4 | # System library imports. |
|
7 | # System library imports. | |
5 | from PyQt4 import QtCore, QtGui |
|
8 | from PyQt4 import QtCore, QtGui | |
6 |
|
9 | |||
7 | # IPython imports. |
|
10 | # IPython imports. | |
8 | from IPython.utils.traitlets import HasTraits |
|
11 | from IPython.utils.traitlets import HasTraits, TraitType | |
9 |
|
12 | |||
10 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
11 | # Metaclasses |
|
14 | # Metaclasses | |
@@ -14,7 +17,6 b' from IPython.utils.traitlets import HasTraits' | |||||
14 | MetaHasTraits = type(HasTraits) |
|
17 | MetaHasTraits = type(HasTraits) | |
15 | MetaQObject = type(QtCore.QObject) |
|
18 | MetaQObject = type(QtCore.QObject) | |
16 |
|
19 | |||
17 | # You can switch the order of the parents here and it doesn't seem to matter. |
|
|||
18 | class MetaQObjectHasTraits(MetaQObject, MetaHasTraits): |
|
20 | class MetaQObjectHasTraits(MetaQObject, MetaHasTraits): | |
19 | """ A metaclass that inherits from the metaclasses of HasTraits and QObject. |
|
21 | """ A metaclass that inherits from the metaclasses of HasTraits and QObject. | |
20 |
|
22 | |||
@@ -22,7 +24,24 b' class MetaQObjectHasTraits(MetaQObject, MetaHasTraits):' | |||||
22 | QObject. Using SuperQObject instead of QObject is highly recommended. See |
|
24 | QObject. Using SuperQObject instead of QObject is highly recommended. See | |
23 | QtKernelManager for an example. |
|
25 | QtKernelManager for an example. | |
24 | """ |
|
26 | """ | |
25 | pass |
|
27 | def __new__(mcls, name, bases, classdict): | |
|
28 | # FIXME: this duplicates the code from MetaHasTraits. | |||
|
29 | # I don't think a super() call will help me here. | |||
|
30 | for k,v in classdict.iteritems(): | |||
|
31 | if isinstance(v, TraitType): | |||
|
32 | v.name = k | |||
|
33 | elif inspect.isclass(v): | |||
|
34 | if issubclass(v, TraitType): | |||
|
35 | vinst = v() | |||
|
36 | vinst.name = k | |||
|
37 | classdict[k] = vinst | |||
|
38 | cls = MetaQObject.__new__(mcls, name, bases, classdict) | |||
|
39 | return cls | |||
|
40 | ||||
|
41 | def __init__(mcls, name, bases, classdict): | |||
|
42 | # Note: super() did not work, so we explicitly call these. | |||
|
43 | MetaQObject.__init__(mcls, name, bases, classdict) | |||
|
44 | MetaHasTraits.__init__(mcls, name, bases, classdict) | |||
26 |
|
45 | |||
27 | #----------------------------------------------------------------------------- |
|
46 | #----------------------------------------------------------------------------- | |
28 | # Classes |
|
47 | # Classes |
General Comments 0
You need to be logged in to leave comments.
Login now