From 8d14a2f98d269ede9204774b32a09b2f041f5f74 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 9 Aug 2011 11:24:37 -0600 Subject: [PATCH] Start work on preferences widget to set keyboard shortcuts --- imgsrc/keyboard-prefs.svg | 912 +++++++++++++++++++++ resources/images/keyboard-prefs.png | Bin 0 -> 5571 bytes src/calibre/customize/builtins.py | 15 +- src/calibre/gui2/actions/__init__.py | 34 +- src/calibre/gui2/actions/choose_library.py | 5 +- src/calibre/gui2/actions/device.py | 6 +- src/calibre/gui2/actions/restart.py | 2 +- src/calibre/gui2/keyboard.py | 174 +++- src/calibre/gui2/library/models.py | 2 +- src/calibre/gui2/preferences/keyboard.py | 44 + 10 files changed, 1173 insertions(+), 21 deletions(-) create mode 100644 imgsrc/keyboard-prefs.svg create mode 100644 resources/images/keyboard-prefs.png create mode 100644 src/calibre/gui2/preferences/keyboard.py diff --git a/imgsrc/keyboard-prefs.svg b/imgsrc/keyboard-prefs.svg new file mode 100644 index 0000000000..bcdc07f7b8 --- /dev/null +++ b/imgsrc/keyboard-prefs.svg @@ -0,0 +1,912 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/images/keyboard-prefs.png b/resources/images/keyboard-prefs.png new file mode 100644 index 0000000000000000000000000000000000000000..68b8d7fb88bffc1a9eaaf9cd8df34c41a766920a GIT binary patch literal 5571 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 YST8= len(self.column_to_dc_map): return NONE - if role in (Qt.DisplayRole, Qt.EditRole): + if role in (Qt.DisplayRole, Qt.EditRole, Qt.ToolTipRole): return self.column_to_dc_map[col](index.row()) elif role == Qt.BackgroundRole: if self.id(index) in self.ids_to_highlight_set: diff --git a/src/calibre/gui2/preferences/keyboard.py b/src/calibre/gui2/preferences/keyboard.py new file mode 100644 index 0000000000..ccc3a390d3 --- /dev/null +++ b/src/calibre/gui2/preferences/keyboard.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +from PyQt4.Qt import QVBoxLayout + +from calibre.gui2.preferences import (ConfigWidgetBase, test_widget) +from calibre.gui2.keyboard import ShortcutConfig + +class ConfigWidget(ConfigWidgetBase): + + def genesis(self, gui): + self.gui = gui + self.conf_widget = ShortcutConfig(self) + self.conf_widget.changed_signal.connect(self.changed_signal) + self._layout = l = QVBoxLayout() + self.setLayout(l) + l.addWidget(self.conf_widget) + + def initialize(self): + ConfigWidgetBase.initialize(self) + self.conf_widget.initialize(self.gui.keyboard) + + def restore_defaults(self): + ConfigWidgetBase.restore_defaults(self) + self.conf_widget.restore_defaults() + + def commit(self): + self.conf_widget.commit() + return ConfigWidgetBase.commit(self) + + def refresh_gui(self, gui): + gui.keyboard.finalize() + +if __name__ == '__main__': + from PyQt4.Qt import QApplication + app = QApplication([]) + test_widget('Advanced', 'Keyboard') +