From 10ec22ec121e0b297615294c36a87fb30c2bd15d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 14 Jun 2011 09:45:57 -0600 Subject: [PATCH 1/3] ... --- src/calibre/gui2/widgets.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index dd8d876005..0ada112caf 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -5,15 +5,15 @@ Miscellaneous widgets used in the GUI ''' import re, traceback -from PyQt4.Qt import QIcon, QFont, QLabel, QListWidget, QAction, \ - QListWidgetItem, QTextCharFormat, QApplication, \ - QSyntaxHighlighter, QCursor, QColor, QWidget, \ - QPixmap, QSplitterHandle, QToolButton, \ - QAbstractListModel, QVariant, Qt, SIGNAL, pyqtSignal, \ - QRegExp, QSettings, QSize, QSplitter, \ - QPainter, QLineEdit, QComboBox, QPen, QGraphicsScene, \ - QMenu, QStringListModel, QCompleter, QStringList, \ - QTimer, QRect, QFontDatabase, QGraphicsView +from PyQt4.Qt import (QIcon, QFont, QLabel, QListWidget, QAction, + QListWidgetItem, QTextCharFormat, QApplication, + QSyntaxHighlighter, QCursor, QColor, QWidget, + QPixmap, QSplitterHandle, QToolButton, + QAbstractListModel, QVariant, Qt, SIGNAL, pyqtSignal, + QRegExp, QSettings, QSize, QSplitter, + QPainter, QLineEdit, QComboBox, QPen, QGraphicsScene, + QMenu, QStringListModel, QCompleter, QStringList, + QTimer, QRect, QFontDatabase, QGraphicsView) from calibre.gui2 import NONE, error_dialog, pixmap_to_data, gprefs from calibre.gui2.filename_pattern_ui import Ui_Form @@ -21,8 +21,8 @@ from calibre import fit_image from calibre.ebooks import BOOK_EXTENSIONS from calibre.utils.config import prefs, XMLConfig, tweaks from calibre.gui2.progress_indicator import ProgressIndicator as _ProgressIndicator -from calibre.gui2.dnd import dnd_has_image, dnd_get_image, dnd_get_files, \ - IMAGE_EXTENSIONS, dnd_has_extension, DownloadDialog +from calibre.gui2.dnd import (dnd_has_image, dnd_get_image, dnd_get_files, + IMAGE_EXTENSIONS, dnd_has_extension, DownloadDialog) history = XMLConfig('history') @@ -1179,3 +1179,4 @@ class Splitter(QSplitter): # }}} + From 728e8483c99c723df455c3ebab375e5c4bd84e40 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 14 Jun 2011 09:50:18 -0600 Subject: [PATCH 2/3] Clean up widgets.py --- src/calibre/gui2/widgets.py | 59 ++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 0ada112caf..96fbafe4d5 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -26,7 +26,7 @@ from calibre.gui2.dnd import (dnd_has_image, dnd_get_image, dnd_get_files, history = XMLConfig('history') -class ProgressIndicator(QWidget): +class ProgressIndicator(QWidget): # {{{ def __init__(self, *args): QWidget.__init__(self, *args) @@ -57,8 +57,9 @@ class ProgressIndicator(QWidget): def stop(self): self.pi.stopAnimation() self.setVisible(False) +# }}} -class FilenamePattern(QWidget, Ui_Form): +class FilenamePattern(QWidget, Ui_Form): # {{{ changed_signal = pyqtSignal() @@ -148,8 +149,9 @@ class FilenamePattern(QWidget, Ui_Form): return pat +# }}} -class FormatList(QListWidget): +class FormatList(QListWidget): # {{{ DROPABBLE_EXTENSIONS = BOOK_EXTENSIONS formats_dropped = pyqtSignal(object, object) delete_format = pyqtSignal() @@ -188,6 +190,8 @@ class FormatList(QListWidget): else: return QListWidget.keyPressEvent(self, event) +# }}} + class ImageDropMixin(object): # {{{ ''' Adds support for dropping images onto widgets and a context menu for @@ -262,7 +266,7 @@ class ImageDropMixin(object): # {{{ pixmap_to_data(pmap)) # }}} -class ImageView(QWidget, ImageDropMixin): +class ImageView(QWidget, ImageDropMixin): # {{{ BORDER_WIDTH = 1 cover_changed = pyqtSignal(object) @@ -314,8 +318,9 @@ class ImageView(QWidget, ImageDropMixin): p.drawRect(target) #p.drawRect(self.rect()) p.end() +# }}} -class CoverView(QGraphicsView, ImageDropMixin): +class CoverView(QGraphicsView, ImageDropMixin): # {{{ cover_changed = pyqtSignal(object) @@ -333,7 +338,9 @@ class CoverView(QGraphicsView, ImageDropMixin): self.scene.addPixmap(pmap) self.setScene(self.scene) -class FontFamilyModel(QAbstractListModel): +# }}} + +class FontFamilyModel(QAbstractListModel): # {{{ def __init__(self, *args): QAbstractListModel.__init__(self, *args) @@ -371,7 +378,9 @@ class FontFamilyModel(QAbstractListModel): def index_of(self, family): return self.families.index(family.strip()) +# }}} +# BasicList {{{ class BasicListItem(QListWidgetItem): def __init__(self, text, user_data=None): @@ -404,9 +413,9 @@ class BasicList(QListWidget): def items(self): for i in range(self.count()): yield self.item(i) +# }}} - -class LineEditECM(object): +class LineEditECM(object): # {{{ ''' Extend the context menu of a QLineEdit to include more actions. @@ -449,8 +458,9 @@ class LineEditECM(object): from calibre.utils.icu import capitalize self.setText(capitalize(unicode(self.text()))) +# }}} -class EnLineEdit(LineEditECM, QLineEdit): +class EnLineEdit(LineEditECM, QLineEdit): # {{{ ''' Enhanced QLineEdit. @@ -459,9 +469,9 @@ class EnLineEdit(LineEditECM, QLineEdit): ''' pass +# }}} - -class ItemsCompleter(QCompleter): +class ItemsCompleter(QCompleter): # {{{ ''' A completer object that completes a list of tags. It is used in conjunction @@ -486,8 +496,9 @@ class ItemsCompleter(QCompleter): model = QStringListModel(items, self) self.setModel(model) +# }}} -class CompleteLineEdit(EnLineEdit): +class CompleteLineEdit(EnLineEdit): # {{{ ''' A QLineEdit that can complete parts of text separated by separator. @@ -550,8 +561,9 @@ class CompleteLineEdit(EnLineEdit): self.setText(complete_text_pat % (before_text[:cursor_pos - prefix_len], text, self.separator, after_text)) self.setCursorPosition(cursor_pos - prefix_len + len(text) + len_extra) +# }}} -class EnComboBox(QComboBox): +class EnComboBox(QComboBox): # {{{ ''' Enhanced QComboBox. @@ -575,7 +587,9 @@ class EnComboBox(QComboBox): idx = 0 self.setCurrentIndex(idx) -class CompleteComboBox(EnComboBox): +# }}} + +class CompleteComboBox(EnComboBox): # {{{ def __init__(self, *args): EnComboBox.__init__(self, *args) @@ -590,8 +604,9 @@ class CompleteComboBox(EnComboBox): def set_space_before_sep(self, space_before): self.lineEdit().set_space_before_sep(space_before) +# }}} -class HistoryLineEdit(QComboBox): +class HistoryLineEdit(QComboBox): # {{{ lost_focus = pyqtSignal() @@ -638,7 +653,9 @@ class HistoryLineEdit(QComboBox): QComboBox.focusOutEvent(self, e) self.lost_focus.emit() -class ComboBoxWithHelp(QComboBox): +# }}} + +class ComboBoxWithHelp(QComboBox): # {{{ ''' A combobox where item 0 is help text. CurrentText will return '' for item 0. Be sure to always fetch the text with currentText. Don't use the signals @@ -685,8 +702,9 @@ class ComboBoxWithHelp(QComboBox): QComboBox.hidePopup(self) self.set_state() +# }}} -class EncodingComboBox(QComboBox): +class EncodingComboBox(QComboBox): # {{{ ''' A combobox that holds text encodings support by Python. This is only populated with the most @@ -709,8 +727,9 @@ class EncodingComboBox(QComboBox): for item in self.ENCODINGS: self.addItem(item) +# }}} -class PythonHighlighter(QSyntaxHighlighter): +class PythonHighlighter(QSyntaxHighlighter): # {{{ Rules = [] Formats = {} @@ -948,6 +967,9 @@ class PythonHighlighter(QSyntaxHighlighter): QSyntaxHighlighter.rehighlight(self) QApplication.restoreOverrideCursor() +# }}} + +# Splitter {{{ class SplitterHandle(QSplitterHandle): double_clicked = pyqtSignal(object) @@ -1179,4 +1201,5 @@ class Splitter(QSplitter): # }}} +# }}} From d22000fc1b9e72fdb06cc195e29662a1655e4fba Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 14 Jun 2011 10:31:10 -0600 Subject: [PATCH 3/3] Add entry to Preferences menu to get new plugins --- src/calibre/gui2/actions/preferences.py | 8 ++++++++ src/calibre/gui2/dialogs/plugin_updater.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/actions/preferences.py b/src/calibre/gui2/actions/preferences.py index 1ebd4ea6ba..c3bf9bbe8b 100644 --- a/src/calibre/gui2/actions/preferences.py +++ b/src/calibre/gui2/actions/preferences.py @@ -24,6 +24,8 @@ class PreferencesAction(InterfaceAction): pm.addAction(QIcon(I('config.png')), _('Change calibre behavior'), self.do_config) pm.addAction(QIcon(I('wizard.png')), _('Run welcome wizard'), self.gui.run_wizard) + pm.addAction(QIcon(I('plugins/plugin_updater.png')), + _('Get plugins to enhance calibre'), self.get_plugins) if not DEBUG: pm.addSeparator() ac = pm.addAction(QIcon(I('debug.png')), _('Restart in debug mode'), @@ -36,6 +38,12 @@ class PreferencesAction(InterfaceAction): for x in (self.gui.preferences_action, self.qaction): x.triggered.connect(self.do_config) + def get_plugins(self): + from calibre.gui2.dialogs.plugin_updater import (PluginUpdaterDialog, + FILTER_NOT_INSTALLED) + d = PluginUpdaterDialog(self.gui, + initial_filter=FILTER_NOT_INSTALLED) + d.exec_() def do_config(self, checked=False, initial_plugin=None, close_after_initial=False): diff --git a/src/calibre/gui2/dialogs/plugin_updater.py b/src/calibre/gui2/dialogs/plugin_updater.py index 5e0da6aca2..3656d908da 100644 --- a/src/calibre/gui2/dialogs/plugin_updater.py +++ b/src/calibre/gui2/dialogs/plugin_updater.py @@ -480,7 +480,7 @@ class PluginUpdaterDialog(SizePersistedDialog): self.setWindowTitle(_('Check for user plugin updates')) layout = QVBoxLayout(self) self.setLayout(layout) - title_layout = ImageTitleLayout(self, 'images/plugin_updater.png', _('User Plugin Status')) + title_layout = ImageTitleLayout(self, 'plugins/plugin_updater.png', _('User Plugin Status')) layout.addLayout(title_layout) header_layout = QHBoxLayout()