eric6/Toolbox/PyQt4ImportHook.py

Sun, 01 Sep 2019 17:43:03 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Sep 2019 17:43:03 +0200
branch
without_py2_and_pyqt4
changeset 7196
ab0a91b82b37
parent 7192
a22eee00b052
permissions
-rw-r--r--

Removed support for QtWebKit and the old web rowser.

3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6645
ad476851d7e0 Updated copyright for 2019.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6365
diff changeset
3 # Copyright (c) 2014 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3991
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
6 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
7 Module implementing an import hook converting PyQt5 imports to PyQt4 imports.
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
8 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
9
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
10 from __future__ import unicode_literals
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
11
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
12 import sys
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
13 import importlib
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
14
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
15
7196
ab0a91b82b37 Removed support for QtWebKit and the old web rowser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7192
diff changeset
16 # TODO: get rid of this class and module
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
17 class PyQt4Importer(object):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
18 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
19 Class implementing an importer converting PyQt5 imports to PyQt4
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
20 imports.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
21 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
22 def __init__(self):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
23 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
24 Constructor
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
25 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
26 self.__path = None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
27
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
28 def find_module(self, fullname, path=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
29 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
30 Public method returning the module loader.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
31
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
32 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
33 @param path path to resolve the module name (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
34 @return module loader object
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
35 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
36 if fullname.startswith("PyQt5"):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
37 self.__path = path
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
38 return self
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
39
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
40 return None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
41
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
42 @staticmethod
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
43 def QComboBox_currentData(other, role=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
44 """
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
45 Static method to emulate the currentData method of Qt5.
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
46
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
47 @param other reference to the combo box to get the user data of
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
48 @type QComboBox
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
49 @param role role of which data should be retrieved
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
50 @type int
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
51 @return stored data at current selection
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
52 @rtype any
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
53 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
54 import PyQt4.Qt
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
55 if role is None:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
56 role = PyQt4.Qt.Qt.UserRole
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
57
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
58 idx = other.currentIndex()
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
59 return other.itemData(idx, role)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
60
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
61 def load_module(self, fullname):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
62 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
63 Public method to load a module.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
64
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
65 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
66 @return reference to the loaded module (module)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
67 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
68 if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
69 newname = "PyQt4.QtGui"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
70 elif fullname in ["PyQt5.QtWebKitWidgets"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
71 newname = "PyQt4.QtWebKit"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
72 else:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
73 newname = fullname.replace("PyQt5", "PyQt4")
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
74
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
75 module = importlib.import_module(newname)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
76 sys.modules[fullname] = module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
77 if fullname == "PyQt5.QtCore":
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
78 import PyQt4.QtGui
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
79 module.qInstallMessageHandler = module.qInstallMsgHandler
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
80 module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
81 module.QItemSelection = PyQt4.QtGui.QItemSelection
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
82 module.QSortFilterProxyModel = \
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
83 PyQt4.QtGui.QSortFilterProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
84 module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
85 module.QStringListModel = PyQt4.QtGui.QStringListModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
86
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
87 PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
88 return module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
89
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 try:
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
91 if "--pyqt4" in sys.argv:
3937
607dd5b0079b Refined the PyQt4 compatibility stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3936
diff changeset
92 sys.argv.remove("--pyqt4")
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
93 # fake a failed PyQt5 import
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
94 raise ImportError
4289
6c1ab651c9ce Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
95 import PyQt5 # __IGNORE_WARNING__
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 except ImportError:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 sys.meta_path.insert(0, PyQt4Importer())

eric ide

mercurial