WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.py

branch
QtWebEngine
changeset 4763
8ad353f31184
parent 4631
5c1a96925da4
child 5389
9b1c800daff3
equal deleted inserted replaced
4762:ea40955a0937 4763:8ad353f31184
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the GreaseMonkey scripts configuration dialog.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import pyqtSlot, Qt, QUrl
13 from PyQt5.QtGui import QDesktopServices
14 from PyQt5.QtWidgets import QDialog, QListWidgetItem
15
16 from E5Gui import E5MessageBox
17
18 from .Ui_GreaseMonkeyConfigurationDialog import \
19 Ui_GreaseMonkeyConfigurationDialog
20
21 import UI.PixmapCache
22
23
24 class GreaseMonkeyConfigurationDialog(
25 QDialog, Ui_GreaseMonkeyConfigurationDialog):
26 """
27 Class implementing the GreaseMonkey scripts configuration dialog.
28 """
29 ScriptVersionRole = Qt.UserRole
30 ScriptDescriptionRole = Qt.UserRole + 1
31 ScriptRole = Qt.UserRole + 2
32
33 def __init__(self, manager, parent=None):
34 """
35 Constructor
36
37 @param manager reference to the manager object (GreaseMonkeyManager)
38 @param parent reference to the parent widget (QWidget)
39 """
40 super(GreaseMonkeyConfigurationDialog, self).__init__(parent)
41 self.setupUi(self)
42 self.setWindowFlags(Qt.Window)
43
44 self.iconLabel.setPixmap(
45 UI.PixmapCache.getPixmap("greaseMonkey48.png"))
46
47 self.__manager = manager
48
49 self.__loadScripts()
50
51 self.scriptsList.removeItemRequested.connect(self.__removeItem)
52 self.scriptsList.itemChanged.connect(self.__itemChanged)
53
54 @pyqtSlot()
55 def on_openDirectoryButton_clicked(self):
56 """
57 Private slot to open the GreaseMonkey scripts directory.
58 """
59 QDesktopServices.openUrl(
60 QUrl.fromLocalFile(self.__manager.scriptsDirectory()))
61
62 @pyqtSlot(str)
63 def on_downloadLabel_linkActivated(self, link):
64 """
65 Private slot to open the greasyfork.org web site.
66
67 @param link URL (string)
68 """
69 from WebBrowser.WebBrowserWindow import WebBrowserWindow
70 if not link or "userscript.org" in link:
71 # userscript.org is down, default to Greasy Fork.
72 link = "https://greasyfork.org/"
73 WebBrowserWindow.mainWindow().newTab(QUrl(link))
74 self.close()
75
76 @pyqtSlot(QListWidgetItem)
77 def on_scriptsList_itemDoubleClicked(self, item):
78 """
79 Private slot to show information about the selected script.
80
81 @param item reference to the double clicked item (QListWidgetItem)
82 """
83 script = self.__getScript(item)
84 if script is not None:
85 from .GreaseMonkeyConfigurationScriptInfoDialog import \
86 GreaseMonkeyConfigurationScriptInfoDialog
87 infoDlg = GreaseMonkeyConfigurationScriptInfoDialog(script, self)
88 infoDlg.exec_()
89
90 def __loadScripts(self):
91 """
92 Private method to load all the available scripts.
93 """
94 for script in self.__manager.allScripts():
95 itm = QListWidgetItem(
96 UI.PixmapCache.getIcon("greaseMonkeyScript.png"),
97 script.name(), self.scriptsList)
98 itm.setData(
99 GreaseMonkeyConfigurationDialog.ScriptVersionRole,
100 script.version())
101 itm.setData(
102 GreaseMonkeyConfigurationDialog.ScriptDescriptionRole,
103 script.description())
104 itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable)
105 if script.isEnabled():
106 itm.setCheckState(Qt.Checked)
107 else:
108 itm.setCheckState(Qt.Unchecked)
109 itm.setData(GreaseMonkeyConfigurationDialog.ScriptRole, script)
110 self.scriptsList.addItem(itm)
111
112 self.scriptsList.sortItems()
113
114 itemMoved = True
115 while itemMoved:
116 itemMoved = False
117 for row in range(self.scriptsList.count()):
118 topItem = self.scriptsList.item(row)
119 bottomItem = self.scriptsList.item(row + 1)
120 if topItem is None or bottomItem is None:
121 continue
122
123 if topItem.checkState() == Qt.Unchecked and \
124 bottomItem.checkState == Qt.Checked:
125 itm = self.scriptsList.takeItem(row + 1)
126 self.scriptsList.insertItem(row, itm)
127 itemMoved = True
128
129 def __getScript(self, itm):
130 """
131 Private method to get the script for the given item.
132
133 @param itm item to get script for (QListWidgetItem)
134 @return reference to the script object (GreaseMonkeyScript)
135 """
136 if itm is None:
137 return None
138
139 script = itm.data(GreaseMonkeyConfigurationDialog.ScriptRole)
140 return script
141
142 def __removeItem(self, itm):
143 """
144 Private slot to remove a script item.
145
146 @param itm item to be removed (QListWidgetItem)
147 """
148 script = self.__getScript(itm)
149 if script is None:
150 return
151
152 removeIt = E5MessageBox.yesNo(
153 self,
154 self.tr("Remove Script"),
155 self.tr(
156 """<p>Are you sure you want to remove <b>{0}</b>?</p>""")
157 .format(script.name()))
158 if removeIt and self.__manager.removeScript(script):
159 self.scriptsList.takeItem(self.scriptsList.row(itm))
160 del itm
161
162 def __itemChanged(self, itm):
163 """
164 Private slot to handle changes of a script item.
165
166 @param itm changed item (QListWidgetItem)
167 """
168 script = self.__getScript(itm)
169 if script is None:
170 return
171
172 if itm.checkState() == Qt.Checked:
173 self.__manager.enableScript(script)
174 else:
175 self.__manager.disableScript(script)

eric ide

mercurial