eric7/Preferences/ShortcutsDialog.py

branch
eric7
changeset 8356
68ec9c3d4de5
parent 8318
962bce857696
child 8358
144a6b854f70
equal deleted inserted replaced
8355:8a7677a63c8d 8356:68ec9c3d4de5
12 12
13 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt 13 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt
14 from PyQt6.QtGui import QKeySequence 14 from PyQt6.QtGui import QKeySequence
15 from PyQt6.QtWidgets import QHeaderView, QDialog, QTreeWidgetItem 15 from PyQt6.QtWidgets import QHeaderView, QDialog, QTreeWidgetItem
16 16
17 from E5Gui.E5Application import e5App 17 from E5Gui.EricApplication import ericApp
18 from E5Gui import E5MessageBox 18 from E5Gui import EricMessageBox
19 19
20 from .Ui_ShortcutsDialog import Ui_ShortcutsDialog 20 from .Ui_ShortcutsDialog import Ui_ShortcutsDialog
21 21
22 import Preferences 22 import Preferences
23 from Preferences import Shortcuts 23 from Preferences import Shortcuts
90 noCheck=False, objectType=""): 90 noCheck=False, objectType=""):
91 """ 91 """
92 Private method to generate a keyboard shortcut item. 92 Private method to generate a keyboard shortcut item.
93 93
94 @param category reference to the category item (QTreeWidgetItem) 94 @param category reference to the category item (QTreeWidgetItem)
95 @param action reference to the keyboard action (E5Action) 95 @param action reference to the keyboard action (EricAction)
96 @param noCheck flag indicating that no uniqueness check should 96 @param noCheck flag indicating that no uniqueness check should
97 be performed (boolean) 97 be performed (boolean)
98 @param objectType type of the object (string). Objects of the same 98 @param objectType type of the object (string). Objects of the same
99 type are not checked for duplicate shortcuts. 99 type are not checked for duplicate shortcuts.
100 """ 100 """
123 123
124 self.__helpViewer = helpViewer 124 self.__helpViewer = helpViewer
125 125
126 if helpViewer is None: 126 if helpViewer is None:
127 # let the plugin manager create on demand plugin objects 127 # let the plugin manager create on demand plugin objects
128 pm = e5App().getObject("PluginManager") 128 pm = ericApp().getObject("PluginManager")
129 pm.initOnDemandPlugins() 129 pm.initOnDemandPlugins()
130 130
131 # populate the various lists 131 # populate the various lists
132 self.projectItem = self.__generateCategoryItem(self.tr("Project")) 132 self.projectItem = self.__generateCategoryItem(self.tr("Project"))
133 for act in e5App().getObject("Project").getActions(): 133 for act in ericApp().getObject("Project").getActions():
134 self.__generateShortcutItem(self.projectItem, act) 134 self.__generateShortcutItem(self.projectItem, act)
135 135
136 self.uiItem = self.__generateCategoryItem(self.tr("General")) 136 self.uiItem = self.__generateCategoryItem(self.tr("General"))
137 for act in e5App().getObject("UserInterface").getActions('ui'): 137 for act in ericApp().getObject("UserInterface").getActions('ui'):
138 self.__generateShortcutItem(self.uiItem, act) 138 self.__generateShortcutItem(self.uiItem, act)
139 139
140 self.wizardsItem = self.__generateCategoryItem(self.tr("Wizards")) 140 self.wizardsItem = self.__generateCategoryItem(self.tr("Wizards"))
141 for act in ( 141 for act in (
142 e5App().getObject("UserInterface").getActions('wizards') 142 ericApp().getObject("UserInterface").getActions('wizards')
143 ): 143 ):
144 self.__generateShortcutItem(self.wizardsItem, act) 144 self.__generateShortcutItem(self.wizardsItem, act)
145 145
146 self.debugItem = self.__generateCategoryItem(self.tr("Debug")) 146 self.debugItem = self.__generateCategoryItem(self.tr("Debug"))
147 for act in e5App().getObject("DebugUI").getActions(): 147 for act in ericApp().getObject("DebugUI").getActions():
148 self.__generateShortcutItem(self.debugItem, act) 148 self.__generateShortcutItem(self.debugItem, act)
149 149
150 self.editItem = self.__generateCategoryItem(self.tr("Edit")) 150 self.editItem = self.__generateCategoryItem(self.tr("Edit"))
151 for act in e5App().getObject("ViewManager").getActions('edit'): 151 for act in ericApp().getObject("ViewManager").getActions('edit'):
152 self.__generateShortcutItem(self.editItem, act) 152 self.__generateShortcutItem(self.editItem, act)
153 153
154 self.fileItem = self.__generateCategoryItem(self.tr("File")) 154 self.fileItem = self.__generateCategoryItem(self.tr("File"))
155 for act in e5App().getObject("ViewManager").getActions('file'): 155 for act in ericApp().getObject("ViewManager").getActions('file'):
156 self.__generateShortcutItem(self.fileItem, act) 156 self.__generateShortcutItem(self.fileItem, act)
157 157
158 self.searchItem = self.__generateCategoryItem(self.tr("Search")) 158 self.searchItem = self.__generateCategoryItem(self.tr("Search"))
159 for act in e5App().getObject("ViewManager").getActions('search'): 159 for act in ericApp().getObject("ViewManager").getActions('search'):
160 self.__generateShortcutItem(self.searchItem, act) 160 self.__generateShortcutItem(self.searchItem, act)
161 161
162 self.viewItem = self.__generateCategoryItem(self.tr("View")) 162 self.viewItem = self.__generateCategoryItem(self.tr("View"))
163 for act in e5App().getObject("ViewManager").getActions('view'): 163 for act in ericApp().getObject("ViewManager").getActions('view'):
164 self.__generateShortcutItem(self.viewItem, act) 164 self.__generateShortcutItem(self.viewItem, act)
165 165
166 self.macroItem = self.__generateCategoryItem(self.tr("Macro")) 166 self.macroItem = self.__generateCategoryItem(self.tr("Macro"))
167 for act in e5App().getObject("ViewManager").getActions('macro'): 167 for act in ericApp().getObject("ViewManager").getActions('macro'):
168 self.__generateShortcutItem(self.macroItem, act) 168 self.__generateShortcutItem(self.macroItem, act)
169 169
170 self.bookmarkItem = self.__generateCategoryItem( 170 self.bookmarkItem = self.__generateCategoryItem(
171 self.tr("Bookmarks")) 171 self.tr("Bookmarks"))
172 for act in e5App().getObject("ViewManager").getActions('bookmark'): 172 for act in ericApp().getObject("ViewManager").getActions('bookmark'):
173 self.__generateShortcutItem(self.bookmarkItem, act) 173 self.__generateShortcutItem(self.bookmarkItem, act)
174 174
175 self.spellingItem = self.__generateCategoryItem( 175 self.spellingItem = self.__generateCategoryItem(
176 self.tr("Spelling")) 176 self.tr("Spelling"))
177 for act in e5App().getObject("ViewManager").getActions('spelling'): 177 for act in ericApp().getObject("ViewManager").getActions('spelling'):
178 self.__generateShortcutItem(self.spellingItem, act) 178 self.__generateShortcutItem(self.spellingItem, act)
179 179
180 actions = e5App().getObject("ViewManager").getActions('window') 180 actions = ericApp().getObject("ViewManager").getActions('window')
181 if actions: 181 if actions:
182 self.windowItem = self.__generateCategoryItem( 182 self.windowItem = self.__generateCategoryItem(
183 self.tr("Window")) 183 self.tr("Window"))
184 for act in actions: 184 for act in actions:
185 self.__generateShortcutItem(self.windowItem, act) 185 self.__generateShortcutItem(self.windowItem, act)
186 186
187 self.pluginCategoryItems = [] 187 self.pluginCategoryItems = []
188 for category, ref in e5App().getPluginObjects(): 188 for category, ref in ericApp().getPluginObjects():
189 if hasattr(ref, "getActions"): 189 if hasattr(ref, "getActions"):
190 categoryItem = self.__generateCategoryItem(category) 190 categoryItem = self.__generateCategoryItem(category)
191 objectType = e5App().getPluginObjectType(category) 191 objectType = ericApp().getPluginObjectType(category)
192 for act in ref.getActions(): 192 for act in ref.getActions():
193 self.__generateShortcutItem(categoryItem, act, 193 self.__generateShortcutItem(categoryItem, act,
194 objectType=objectType) 194 objectType=objectType)
195 self.pluginCategoryItems.append(categoryItem) 195 self.pluginCategoryItems.append(categoryItem)
196 196
323 for col in [1, 2]: 323 for col in [1, 2]:
324 # check against primary, then alternative binding 324 # check against primary, then alternative binding
325 itmseq = itm.text(col) 325 itmseq = itm.text(col)
326 # step 1: check if shortcut is already allocated 326 # step 1: check if shortcut is already allocated
327 if keystr == itmseq: 327 if keystr == itmseq:
328 res = E5MessageBox.yesNo( 328 res = EricMessageBox.yesNo(
329 self, 329 self,
330 self.tr("Edit shortcuts"), 330 self.tr("Edit shortcuts"),
331 self.tr( 331 self.tr(
332 """<p><b>{0}</b> has already been""" 332 """<p><b>{0}</b> has already been"""
333 """ allocated to the <b>{1}</b> action. """ 333 """ allocated to the <b>{1}</b> action. """
334 """Remove this binding?</p>""") 334 """Remove this binding?</p>""")
335 .format(keystr, itm.text(0)), 335 .format(keystr, itm.text(0)),
336 icon=E5MessageBox.Warning) 336 icon=EricMessageBox.Warning)
337 if res: 337 if res:
338 itm.setText(col, "") 338 itm.setText(col, "")
339 return True 339 return True
340 else: 340 else:
341 return False 341 return False
343 if not itmseq: 343 if not itmseq:
344 continue 344 continue
345 345
346 # step 2: check if shortcut hides an already allocated 346 # step 2: check if shortcut hides an already allocated
347 if itmseq.startswith("{0}+".format(keystr)): 347 if itmseq.startswith("{0}+".format(keystr)):
348 res = E5MessageBox.yesNo( 348 res = EricMessageBox.yesNo(
349 self, 349 self,
350 self.tr("Edit shortcuts"), 350 self.tr("Edit shortcuts"),
351 self.tr( 351 self.tr(
352 """<p><b>{0}</b> hides the <b>{1}</b>""" 352 """<p><b>{0}</b> hides the <b>{1}</b>"""
353 """ action. Remove this binding?</p>""") 353 """ action. Remove this binding?</p>""")
354 .format(keystr, itm.text(0)), 354 .format(keystr, itm.text(0)),
355 icon=E5MessageBox.Warning) 355 icon=EricMessageBox.Warning)
356 if res: 356 if res:
357 itm.setText(col, "") 357 itm.setText(col, "")
358 return True 358 return True
359 else: 359 else:
360 return False 360 return False
361 361
362 # step 3: check if shortcut is hidden by an 362 # step 3: check if shortcut is hidden by an
363 # already allocated 363 # already allocated
364 if keystr.startswith("{0}+".format(itmseq)): 364 if keystr.startswith("{0}+".format(itmseq)):
365 res = E5MessageBox.yesNo( 365 res = EricMessageBox.yesNo(
366 self, 366 self,
367 self.tr("Edit shortcuts"), 367 self.tr("Edit shortcuts"),
368 self.tr( 368 self.tr(
369 """<p><b>{0}</b> is hidden by the """ 369 """<p><b>{0}</b> is hidden by the """
370 """<b>{1}</b> action. """ 370 """<b>{1}</b> action. """
371 """Remove this binding?</p>""") 371 """Remove this binding?</p>""")
372 .format(keystr, itm.text(0)), 372 .format(keystr, itm.text(0)),
373 icon=E5MessageBox.Warning) 373 icon=EricMessageBox.Warning)
374 if res: 374 if res:
375 itm.setText(col, "") 375 itm.setText(col, "")
376 return True 376 return True
377 else: 377 else:
378 return False 378 return False
382 def __saveCategoryActions(self, category, actions): 382 def __saveCategoryActions(self, category, actions):
383 """ 383 """
384 Private method to save the actions for a category. 384 Private method to save the actions for a category.
385 385
386 @param category reference to the category item (QTreeWidgetItem) 386 @param category reference to the category item (QTreeWidgetItem)
387 @param actions list of actions for the category (list of E5Action) 387 @param actions list of actions for the category (list of EricAction)
388 """ 388 """
389 for index in range(category.childCount()): 389 for index in range(category.childCount()):
390 itm = category.child(index) 390 itm = category.child(index)
391 txt = itm.data(0, self.objectNameRole) 391 txt = itm.data(0, self.objectNameRole)
392 for act in actions: 392 for act in actions:
401 Private slot to handle the OK button press. 401 Private slot to handle the OK button press.
402 """ 402 """
403 if self.__helpViewer is None: 403 if self.__helpViewer is None:
404 self.__saveCategoryActions( 404 self.__saveCategoryActions(
405 self.projectItem, 405 self.projectItem,
406 e5App().getObject("Project").getActions()) 406 ericApp().getObject("Project").getActions())
407 self.__saveCategoryActions( 407 self.__saveCategoryActions(
408 self.uiItem, 408 self.uiItem,
409 e5App().getObject("UserInterface").getActions('ui')) 409 ericApp().getObject("UserInterface").getActions('ui'))
410 self.__saveCategoryActions( 410 self.__saveCategoryActions(
411 self.wizardsItem, 411 self.wizardsItem,
412 e5App().getObject("UserInterface").getActions('wizards')) 412 ericApp().getObject("UserInterface").getActions('wizards'))
413 self.__saveCategoryActions( 413 self.__saveCategoryActions(
414 self.debugItem, 414 self.debugItem,
415 e5App().getObject("DebugUI").getActions()) 415 ericApp().getObject("DebugUI").getActions())
416 self.__saveCategoryActions( 416 self.__saveCategoryActions(
417 self.editItem, 417 self.editItem,
418 e5App().getObject("ViewManager").getActions('edit')) 418 ericApp().getObject("ViewManager").getActions('edit'))
419 self.__saveCategoryActions( 419 self.__saveCategoryActions(
420 self.fileItem, 420 self.fileItem,
421 e5App().getObject("ViewManager").getActions('file')) 421 ericApp().getObject("ViewManager").getActions('file'))
422 self.__saveCategoryActions( 422 self.__saveCategoryActions(
423 self.searchItem, 423 self.searchItem,
424 e5App().getObject("ViewManager").getActions('search')) 424 ericApp().getObject("ViewManager").getActions('search'))
425 self.__saveCategoryActions( 425 self.__saveCategoryActions(
426 self.viewItem, 426 self.viewItem,
427 e5App().getObject("ViewManager").getActions('view')) 427 ericApp().getObject("ViewManager").getActions('view'))
428 self.__saveCategoryActions( 428 self.__saveCategoryActions(
429 self.macroItem, 429 self.macroItem,
430 e5App().getObject("ViewManager").getActions('macro')) 430 ericApp().getObject("ViewManager").getActions('macro'))
431 self.__saveCategoryActions( 431 self.__saveCategoryActions(
432 self.bookmarkItem, 432 self.bookmarkItem,
433 e5App().getObject("ViewManager").getActions('bookmark')) 433 ericApp().getObject("ViewManager").getActions('bookmark'))
434 self.__saveCategoryActions( 434 self.__saveCategoryActions(
435 self.spellingItem, 435 self.spellingItem,
436 e5App().getObject("ViewManager").getActions('spelling')) 436 ericApp().getObject("ViewManager").getActions('spelling'))
437 437
438 actions = e5App().getObject("ViewManager").getActions('window') 438 actions = ericApp().getObject("ViewManager").getActions('window')
439 if actions: 439 if actions:
440 self.__saveCategoryActions(self.windowItem, actions) 440 self.__saveCategoryActions(self.windowItem, actions)
441 441
442 for categoryItem in self.pluginCategoryItems: 442 for categoryItem in self.pluginCategoryItems:
443 category = categoryItem.text(0) 443 category = categoryItem.text(0)
444 ref = e5App().getPluginObject(category) 444 ref = ericApp().getPluginObject(category)
445 if ref is not None and hasattr(ref, "getActions"): 445 if ref is not None and hasattr(ref, "getActions"):
446 self.__saveCategoryActions(categoryItem, ref.getActions()) 446 self.__saveCategoryActions(categoryItem, ref.getActions())
447 447
448 Shortcuts.saveShortcuts() 448 Shortcuts.saveShortcuts()
449 449

eric ide

mercurial