Preferences/ShortcutsDialog.py

branch
maintenance
changeset 6646
51eefa621de4
parent 6645
ad476851d7e0
child 6735
31e263d49c04
equal deleted inserted replaced
6603:77189681b787 6646:51eefa621de4
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 # Copyright (c) 2003 - 2018 Detlev Offenbach <detlev@die-offenbachs.de> 3 # Copyright (c) 2003 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 # 4 #
5 5
6 """ 6 """
7 Module implementing a dialog for the configuration of eric6's keyboard 7 Module implementing a dialog for the configuration of eric6's keyboard
8 shortcuts. 8 shortcuts.
35 35
36 objectNameRole = Qt.UserRole 36 objectNameRole = Qt.UserRole
37 noCheckRole = Qt.UserRole + 1 37 noCheckRole = Qt.UserRole + 1
38 objectTypeRole = Qt.UserRole + 2 38 objectTypeRole = Qt.UserRole + 2
39 39
40 def __init__(self, parent=None, name=None, modal=False): 40 def __init__(self, parent=None):
41 """ 41 """
42 Constructor 42 Constructor
43 43
44 @param parent The parent widget of this dialog. (QWidget) 44 @param parent parent widget of this dialog
45 @param name The name of this dialog. (string) 45 @type QWidget
46 @param modal Flag indicating a modal dialog. (boolean)
47 """ 46 """
48 super(ShortcutsDialog, self).__init__(parent) 47 super(ShortcutsDialog, self).__init__(parent)
49 if name:
50 self.setObjectName(name)
51 self.setModal(modal)
52 self.setupUi(self) 48 self.setupUi(self)
53 self.setWindowFlags(Qt.Window) 49 self.setWindowFlags(Qt.Window)
50
51 self.__helpViewer = None
54 52
55 self.shortcutsList.headerItem().setText( 53 self.shortcutsList.headerItem().setText(
56 self.shortcutsList.columnCount(), "") 54 self.shortcutsList.columnCount(), "")
57 self.shortcutsList.header().setSortIndicator(0, Qt.AscendingOrder) 55 self.shortcutsList.header().setSortIndicator(0, Qt.AscendingOrder)
58 56
109 if objectType: 107 if objectType:
110 itm.setData(0, self.objectTypeRole, objectType) 108 itm.setData(0, self.objectTypeRole, objectType)
111 else: 109 else:
112 itm.setData(0, self.objectTypeRole, None) 110 itm.setData(0, self.objectTypeRole, None)
113 111
114 def populate(self): 112 def populate(self, helpViewer=None):
115 """ 113 """
116 Public method to populate the dialog. 114 Public method to populate the dialog.
115
116 @param helpViewer reference to the help window object
117 """ 117 """
118 self.searchEdit.clear() 118 self.searchEdit.clear()
119 self.searchEdit.setFocus() 119 self.searchEdit.setFocus()
120 self.shortcutsList.clear() 120 self.shortcutsList.clear()
121 self.actionButton.setChecked(True) 121 self.actionButton.setChecked(True)
122 122
123 # let the plugin manager create on demand plugin objects 123 self.__helpViewer = helpViewer
124 pm = e5App().getObject("PluginManager") 124
125 pm.initOnDemandPlugins() 125 if helpViewer is None:
126 126 # let the plugin manager create on demand plugin objects
127 # populate the various lists 127 pm = e5App().getObject("PluginManager")
128 self.projectItem = self.__generateCategoryItem(self.tr("Project")) 128 pm.initOnDemandPlugins()
129 for act in e5App().getObject("Project").getActions(): 129
130 self.__generateShortcutItem(self.projectItem, act) 130 # populate the various lists
131 131 self.projectItem = self.__generateCategoryItem(self.tr("Project"))
132 self.uiItem = self.__generateCategoryItem(self.tr("General")) 132 for act in e5App().getObject("Project").getActions():
133 for act in e5App().getObject("UserInterface").getActions('ui'): 133 self.__generateShortcutItem(self.projectItem, act)
134 self.__generateShortcutItem(self.uiItem, act) 134
135 135 self.uiItem = self.__generateCategoryItem(self.tr("General"))
136 self.wizardsItem = self.__generateCategoryItem(self.tr("Wizards")) 136 for act in e5App().getObject("UserInterface").getActions('ui'):
137 for act in e5App().getObject("UserInterface").getActions('wizards'): 137 self.__generateShortcutItem(self.uiItem, act)
138 self.__generateShortcutItem(self.wizardsItem, act) 138
139 139 self.wizardsItem = self.__generateCategoryItem(self.tr("Wizards"))
140 self.debugItem = self.__generateCategoryItem(self.tr("Debug")) 140 for act in e5App().getObject("UserInterface")\
141 for act in e5App().getObject("DebugUI").getActions(): 141 .getActions('wizards'):
142 self.__generateShortcutItem(self.debugItem, act) 142 self.__generateShortcutItem(self.wizardsItem, act)
143 143
144 self.editItem = self.__generateCategoryItem(self.tr("Edit")) 144 self.debugItem = self.__generateCategoryItem(self.tr("Debug"))
145 for act in e5App().getObject("ViewManager").getActions('edit'): 145 for act in e5App().getObject("DebugUI").getActions():
146 self.__generateShortcutItem(self.editItem, act) 146 self.__generateShortcutItem(self.debugItem, act)
147 147
148 self.fileItem = self.__generateCategoryItem(self.tr("File")) 148 self.editItem = self.__generateCategoryItem(self.tr("Edit"))
149 for act in e5App().getObject("ViewManager").getActions('file'): 149 for act in e5App().getObject("ViewManager").getActions('edit'):
150 self.__generateShortcutItem(self.fileItem, act) 150 self.__generateShortcutItem(self.editItem, act)
151 151
152 self.searchItem = self.__generateCategoryItem(self.tr("Search")) 152 self.fileItem = self.__generateCategoryItem(self.tr("File"))
153 for act in e5App().getObject("ViewManager").getActions('search'): 153 for act in e5App().getObject("ViewManager").getActions('file'):
154 self.__generateShortcutItem(self.searchItem, act) 154 self.__generateShortcutItem(self.fileItem, act)
155 155
156 self.viewItem = self.__generateCategoryItem(self.tr("View")) 156 self.searchItem = self.__generateCategoryItem(self.tr("Search"))
157 for act in e5App().getObject("ViewManager").getActions('view'): 157 for act in e5App().getObject("ViewManager").getActions('search'):
158 self.__generateShortcutItem(self.viewItem, act) 158 self.__generateShortcutItem(self.searchItem, act)
159 159
160 self.macroItem = self.__generateCategoryItem(self.tr("Macro")) 160 self.viewItem = self.__generateCategoryItem(self.tr("View"))
161 for act in e5App().getObject("ViewManager").getActions('macro'): 161 for act in e5App().getObject("ViewManager").getActions('view'):
162 self.__generateShortcutItem(self.macroItem, act) 162 self.__generateShortcutItem(self.viewItem, act)
163 163
164 self.bookmarkItem = self.__generateCategoryItem( 164 self.macroItem = self.__generateCategoryItem(self.tr("Macro"))
165 self.tr("Bookmarks")) 165 for act in e5App().getObject("ViewManager").getActions('macro'):
166 for act in e5App().getObject("ViewManager").getActions('bookmark'): 166 self.__generateShortcutItem(self.macroItem, act)
167 self.__generateShortcutItem(self.bookmarkItem, act) 167
168 168 self.bookmarkItem = self.__generateCategoryItem(
169 self.spellingItem = self.__generateCategoryItem( 169 self.tr("Bookmarks"))
170 self.tr("Spelling")) 170 for act in e5App().getObject("ViewManager").getActions('bookmark'):
171 for act in e5App().getObject("ViewManager").getActions('spelling'): 171 self.__generateShortcutItem(self.bookmarkItem, act)
172 self.__generateShortcutItem(self.spellingItem, act) 172
173 173 self.spellingItem = self.__generateCategoryItem(
174 actions = e5App().getObject("ViewManager").getActions('window') 174 self.tr("Spelling"))
175 if actions: 175 for act in e5App().getObject("ViewManager").getActions('spelling'):
176 self.windowItem = self.__generateCategoryItem( 176 self.__generateShortcutItem(self.spellingItem, act)
177 self.tr("Window")) 177
178 for act in actions: 178 actions = e5App().getObject("ViewManager").getActions('window')
179 self.__generateShortcutItem(self.windowItem, act) 179 if actions:
180 180 self.windowItem = self.__generateCategoryItem(
181 self.pluginCategoryItems = [] 181 self.tr("Window"))
182 for category, ref in e5App().getPluginObjects(): 182 for act in actions:
183 if hasattr(ref, "getActions"): 183 self.__generateShortcutItem(self.windowItem, act)
184 categoryItem = self.__generateCategoryItem(category) 184
185 objectType = e5App().getPluginObjectType(category) 185 self.pluginCategoryItems = []
186 for act in ref.getActions(): 186 for category, ref in e5App().getPluginObjects():
187 self.__generateShortcutItem(categoryItem, act, 187 if hasattr(ref, "getActions"):
188 objectType=objectType) 188 categoryItem = self.__generateCategoryItem(category)
189 self.pluginCategoryItems.append(categoryItem) 189 objectType = e5App().getPluginObjectType(category)
190 190 for act in ref.getActions():
191 try: 191 self.__generateShortcutItem(categoryItem, act,
192 dummyHelpViewer = e5App().getObject("DummyHelpViewer") 192 objectType=objectType)
193 self.pluginCategoryItems.append(categoryItem)
194
195 else:
193 self.helpViewerItem = self.__generateCategoryItem( 196 self.helpViewerItem = self.__generateCategoryItem(
194 self.tr("eric6 Web Browser")) 197 self.tr("eric6 Web Browser"))
195 for act in dummyHelpViewer.getActions(): 198 for act in helpViewer.getActions():
196 self.__generateShortcutItem(self.helpViewerItem, act, True) 199 self.__generateShortcutItem(self.helpViewerItem, act, True)
197 except KeyError:
198 # no QtWebKit available
199 pass
200 200
201 self.__resort() 201 self.__resort()
202 self.__resizeColumns() 202 self.__resizeColumns()
203 203
204 self.__editTopItem = None 204 self.__editTopItem = None
390 390
391 def on_buttonBox_accepted(self): 391 def on_buttonBox_accepted(self):
392 """ 392 """
393 Private slot to handle the OK button press. 393 Private slot to handle the OK button press.
394 """ 394 """
395 self.__saveCategoryActions( 395 if self.__helpViewer is None:
396 self.projectItem, 396 self.__saveCategoryActions(
397 e5App().getObject("Project").getActions()) 397 self.projectItem,
398 self.__saveCategoryActions( 398 e5App().getObject("Project").getActions())
399 self.uiItem, 399 self.__saveCategoryActions(
400 e5App().getObject("UserInterface").getActions('ui')) 400 self.uiItem,
401 self.__saveCategoryActions( 401 e5App().getObject("UserInterface").getActions('ui'))
402 self.wizardsItem, 402 self.__saveCategoryActions(
403 e5App().getObject("UserInterface").getActions('wizards')) 403 self.wizardsItem,
404 self.__saveCategoryActions( 404 e5App().getObject("UserInterface").getActions('wizards'))
405 self.debugItem, 405 self.__saveCategoryActions(
406 e5App().getObject("DebugUI").getActions()) 406 self.debugItem,
407 self.__saveCategoryActions( 407 e5App().getObject("DebugUI").getActions())
408 self.editItem, 408 self.__saveCategoryActions(
409 e5App().getObject("ViewManager").getActions('edit')) 409 self.editItem,
410 self.__saveCategoryActions( 410 e5App().getObject("ViewManager").getActions('edit'))
411 self.fileItem, 411 self.__saveCategoryActions(
412 e5App().getObject("ViewManager").getActions('file')) 412 self.fileItem,
413 self.__saveCategoryActions( 413 e5App().getObject("ViewManager").getActions('file'))
414 self.searchItem, 414 self.__saveCategoryActions(
415 e5App().getObject("ViewManager").getActions('search')) 415 self.searchItem,
416 self.__saveCategoryActions( 416 e5App().getObject("ViewManager").getActions('search'))
417 self.viewItem, 417 self.__saveCategoryActions(
418 e5App().getObject("ViewManager").getActions('view')) 418 self.viewItem,
419 self.__saveCategoryActions( 419 e5App().getObject("ViewManager").getActions('view'))
420 self.macroItem, 420 self.__saveCategoryActions(
421 e5App().getObject("ViewManager").getActions('macro')) 421 self.macroItem,
422 self.__saveCategoryActions( 422 e5App().getObject("ViewManager").getActions('macro'))
423 self.bookmarkItem, 423 self.__saveCategoryActions(
424 e5App().getObject("ViewManager").getActions('bookmark')) 424 self.bookmarkItem,
425 self.__saveCategoryActions( 425 e5App().getObject("ViewManager").getActions('bookmark'))
426 self.spellingItem, 426 self.__saveCategoryActions(
427 e5App().getObject("ViewManager").getActions('spelling')) 427 self.spellingItem,
428 428 e5App().getObject("ViewManager").getActions('spelling'))
429 actions = e5App().getObject("ViewManager").getActions('window') 429
430 if actions: 430 actions = e5App().getObject("ViewManager").getActions('window')
431 self.__saveCategoryActions(self.windowItem, actions) 431 if actions:
432 432 self.__saveCategoryActions(self.windowItem, actions)
433 for categoryItem in self.pluginCategoryItems: 433
434 category = categoryItem.text(0) 434 for categoryItem in self.pluginCategoryItems:
435 ref = e5App().getPluginObject(category) 435 category = categoryItem.text(0)
436 if ref is not None and hasattr(ref, "getActions"): 436 ref = e5App().getPluginObject(category)
437 self.__saveCategoryActions(categoryItem, ref.getActions()) 437 if ref is not None and hasattr(ref, "getActions"):
438 438 self.__saveCategoryActions(categoryItem, ref.getActions())
439 try: 439
440 dummyHelpViewer = e5App().getObject("DummyHelpViewer") 440 Shortcuts.saveShortcuts()
441 self.__saveCategoryActions( 441
442 self.helpViewerItem, dummyHelpViewer.getActions()) 442 else:
443 except KeyError: 443 self.__saveCategoryActions(
444 # no QtWebKit available 444 self.helpViewerItem, self.__helpViewer.getActions())
445 pass 445 Shortcuts.saveShortcuts(helpViewer=self.__helpViewer)
446 446
447 Shortcuts.saveShortcuts()
448 Preferences.syncPreferences() 447 Preferences.syncPreferences()
449 448
450 self.updateShortcuts.emit() 449 self.updateShortcuts.emit()
451 self.hide() 450 self.hide()
452 451

eric ide

mercurial