mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Port: setMargin() reset() QStringList()
setMargin(): QLayout no longer has a setMargin() function, replace with setContentsMargins() reset(): QAbstractListModel no longer has reset(), replace with beginResetModel(), endResetModel() QStringList: No longer exists, a simply python list of strings works instead
This commit is contained in:
parent
5068f62f0f
commit
f1842ae443
@ -6,6 +6,8 @@ from __future__ import (unicode_literals, division, absolute_import,
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
|
||||
# QT5XX: See why mouse wheel is not working in diff view
|
||||
|
||||
# QT5XX: Delete this file after migration is completed
|
||||
|
||||
import os
|
||||
|
@ -216,7 +216,7 @@ class AddAction(InterfaceAction):
|
||||
ids.append(db.import_book(mi, fmts))
|
||||
self.gui.library_view.model().books_added(num)
|
||||
if hasattr(self.gui, 'db_images'):
|
||||
self.gui.db_images.reset()
|
||||
self.gui.db_images.beginResetModel(), self.gui.db_images.endResetModel()
|
||||
self.gui.tags_view.recount()
|
||||
if ids:
|
||||
ids.reverse()
|
||||
@ -384,7 +384,7 @@ class AddAction(InterfaceAction):
|
||||
self.gui.library_view.model().books_added(self._adder.number_of_books_added)
|
||||
self.gui.library_view.set_current_row(0)
|
||||
if hasattr(self.gui, 'db_images'):
|
||||
self.gui.db_images.reset()
|
||||
self.gui.db_images.beginResetModel(), self.gui.db_images.endResetModel()
|
||||
self.gui.tags_view.recount()
|
||||
|
||||
if getattr(self._adder, 'merged_books', False):
|
||||
|
@ -79,7 +79,7 @@ class GenerateCatalogAction(InterfaceAction):
|
||||
if job.failed:
|
||||
return self.gui.job_exception(job)
|
||||
id = self.gui.library_view.model().add_catalog(job.catalog_file_path, job.catalog_title)
|
||||
self.gui.library_view.model().reset()
|
||||
self.gui.library_view.model().beginResetModel(), self.gui.library_view.model().endResetModel()
|
||||
if job.catalog_sync:
|
||||
sync = dynamic.get('catalogs_to_be_synced', set([]))
|
||||
sync.add(id)
|
||||
|
@ -75,7 +75,7 @@ class FetchNewsAction(InterfaceAction):
|
||||
if ids_to_delete:
|
||||
self.gui.library_view.model().delete_books_by_id(ids_to_delete)
|
||||
|
||||
self.gui.library_view.model().reset()
|
||||
self.gui.library_view.model().beginResetModel(), self.gui.library_view.model().endResetModel()
|
||||
sync = self.gui.news_to_be_synced
|
||||
sync.add(id)
|
||||
self.gui.news_to_be_synced = sync
|
||||
|
@ -261,7 +261,7 @@ class AutoAdder(QObject):
|
||||
'Added %(num)d book(s) automatically from %(src)s') %
|
||||
dict(num=count, src=self.worker.path), 2000)
|
||||
if hasattr(gui, 'db_images'):
|
||||
gui.db_images.reset()
|
||||
gui.db_images.beginResetModel(), gui.db_images.endResetModel()
|
||||
|
||||
if needs_rescan:
|
||||
QTimer.singleShot(2000, self.dir_changed)
|
||||
|
@ -26,13 +26,14 @@ class CompleteModel(QAbstractListModel):
|
||||
|
||||
def set_items(self, items):
|
||||
items = [unicode(x.strip()) for x in items]
|
||||
self.beginResetModel()
|
||||
if len(items) < 2500:
|
||||
self.items = sorted(items, key=sort_key)
|
||||
self.sorting = QCompleter.UnsortedModel
|
||||
else:
|
||||
self.items = sorted(items, key=lambda x:x.lower())
|
||||
self.sorting = QCompleter.CaseInsensitivelySortedModel
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def rowCount(self, *args):
|
||||
return len(self.items)
|
||||
|
@ -15,7 +15,6 @@ from PyQt5.Qt import (QLineEdit, QAbstractListModel, Qt, pyqtSignal, QObject,
|
||||
|
||||
from calibre.constants import isosx, get_osx_version
|
||||
from calibre.utils.icu import sort_key, primary_startswith, primary_contains
|
||||
from calibre.gui2 import NONE
|
||||
from calibre.gui2.widgets import EnComboBox, LineEditECM
|
||||
from calibre.utils.config import tweaks
|
||||
|
||||
@ -34,9 +33,10 @@ class CompleteModel(QAbstractListModel): # {{{
|
||||
items = [unicode(x.strip()) for x in items]
|
||||
items = [x for x in items if x]
|
||||
items = tuple(sorted(items, key=self.sort_func))
|
||||
self.beginResetModel()
|
||||
self.all_items = self.current_items = items
|
||||
self.current_prefix = ''
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def set_completion_prefix(self, prefix):
|
||||
old_prefix = self.current_prefix
|
||||
@ -44,14 +44,16 @@ class CompleteModel(QAbstractListModel): # {{{
|
||||
if prefix == old_prefix:
|
||||
return
|
||||
if not prefix:
|
||||
self.beginResetModel()
|
||||
self.current_items = self.all_items
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
return
|
||||
subset = prefix.startswith(old_prefix)
|
||||
universe = self.current_items if subset else self.all_items
|
||||
func = primary_startswith if tweaks['completion_mode'] == 'prefix' else containsq
|
||||
self.beginResetModel()
|
||||
self.current_items = tuple(x for x in universe if func(x, prefix))
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def rowCount(self, *args):
|
||||
return len(self.current_items)
|
||||
@ -62,7 +64,6 @@ class CompleteModel(QAbstractListModel): # {{{
|
||||
return self.current_items[index.row()]
|
||||
except IndexError:
|
||||
pass
|
||||
return NONE
|
||||
|
||||
def index_for_prefix(self, prefix):
|
||||
for i, item in enumerate(self.current_items):
|
||||
|
@ -105,8 +105,14 @@ if pictureflow is not None:
|
||||
return ''
|
||||
|
||||
def reset(self):
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def beginResetModel(self):
|
||||
self.dataChanged.emit()
|
||||
|
||||
def endResetModel(self):
|
||||
pass
|
||||
|
||||
def image(self, index):
|
||||
return self.model.cover(index)
|
||||
|
||||
|
@ -673,7 +673,7 @@ class PluginUpdaterDialog(SizePersistedDialog):
|
||||
return
|
||||
self._uninstall_plugin(display_plugin.name)
|
||||
if self.proxy_model.filter_criteria in [FILTER_INSTALLED, FILTER_UPDATE_AVAILABLE]:
|
||||
self.model.reset()
|
||||
self.model.beginResetModel(), self.model.endResetModel()
|
||||
self._select_and_focus_view()
|
||||
else:
|
||||
self._select_and_focus_view(change_selection=False)
|
||||
@ -755,7 +755,7 @@ class PluginUpdaterDialog(SizePersistedDialog):
|
||||
|
||||
display_plugin.uninstall_plugins = []
|
||||
if self.proxy_model.filter_criteria in [FILTER_NOT_INSTALLED, FILTER_UPDATE_AVAILABLE]:
|
||||
self.model.reset()
|
||||
self.model.beginResetModel(), self.model.endResetModel()
|
||||
self._select_and_focus_view()
|
||||
else:
|
||||
self.model.refresh_plugin(display_plugin)
|
||||
|
@ -57,8 +57,9 @@ class CustomRecipeModel(QAbstractListModel):
|
||||
if x.get('title', False) == title:
|
||||
urn = x.get('id')
|
||||
if urn is not None:
|
||||
self.beginResetModel()
|
||||
self.recipe_model.update_custom_recipe(urn, title, script)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def replace_many_by_title(self, scriptmap):
|
||||
script_urn_map = {}
|
||||
@ -71,16 +72,19 @@ class CustomRecipeModel(QAbstractListModel):
|
||||
script_urn_map.update({urn: (title, script)})
|
||||
|
||||
if script_urn_map:
|
||||
self.beginResetModel()
|
||||
self.recipe_model.update_custom_recipes(script_urn_map)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def add(self, title, script):
|
||||
self.beginResetModel()
|
||||
self.recipe_model.add_custom_recipe(title, script)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def add_many(self, scriptmap):
|
||||
self.beginResetModel()
|
||||
self.recipe_model.add_custom_recipes(scriptmap)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def remove(self, rows):
|
||||
urns = []
|
||||
@ -90,8 +94,9 @@ class CustomRecipeModel(QAbstractListModel):
|
||||
urns.append(urn)
|
||||
except:
|
||||
pass
|
||||
self.beginResetModel()
|
||||
self.recipe_model.remove_custom_recipes(urns)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
class UserProfiles(ResizableDialog, Ui_Dialog):
|
||||
|
||||
|
@ -285,8 +285,9 @@ class FontFamilyDialog(QDialog):
|
||||
for f in files:
|
||||
shutil.copyfile(f, os.path.join(dest, os.path.basename(f)))
|
||||
self.font_scanner.do_scan()
|
||||
self.m.beginResetModel()
|
||||
self.build_font_list()
|
||||
self.m.reset()
|
||||
self.m.endResetModel()
|
||||
self.view.setCurrentIndex(self.m.index(0))
|
||||
if families:
|
||||
for i, val in enumerate(self.families):
|
||||
|
@ -373,8 +373,9 @@ class FilterModel(QSortFilterProxyModel): # {{{
|
||||
except ParseException:
|
||||
ok = False
|
||||
self.search_filter = val
|
||||
self.beginResetModel()
|
||||
self.search_done.emit(ok)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
# }}}
|
||||
|
||||
@ -459,7 +460,7 @@ class JobsButton(QFrame): # {{{
|
||||
if not horizontal:
|
||||
self.layout().setAlignment(self._jobs, Qt.AlignHCenter)
|
||||
self._jobs.setMargin(0)
|
||||
self.layout().setMargin(0)
|
||||
self.layout().setContentsMargins(0, 0, 0, 0)
|
||||
self._jobs.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
self.setCursor(Qt.PointingHandCursor)
|
||||
b = _('Click to see list of jobs')
|
||||
@ -620,12 +621,12 @@ class JobsDialog(QDialog, Ui_JobsDialog):
|
||||
return error_dialog(self, _('No job'),
|
||||
_('No job selected'), show=True)
|
||||
self.model.hide_jobs(rows)
|
||||
self.proxy_model.reset()
|
||||
self.proxy_model.beginResetModel(), self.proxy_model.endResetModel()
|
||||
|
||||
def hide_all(self, *args):
|
||||
self.model.hide_jobs(list(xrange(0,
|
||||
self.model.rowCount(QModelIndex()))))
|
||||
self.proxy_model.reset()
|
||||
self.proxy_model.beginResetModel(), self.proxy_model.endResetModel()
|
||||
|
||||
def show_hidden(self, *args):
|
||||
self.model.show_hidden_jobs()
|
||||
|
@ -278,7 +278,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
self.headers[col] = self.custom_columns[col]['name']
|
||||
|
||||
self.build_data_convertors()
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
self.database_changed.emit(db)
|
||||
self.stop_metadata_backup()
|
||||
self.start_metadata_backup()
|
||||
@ -312,7 +312,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
def close(self):
|
||||
self.db.close()
|
||||
self.db = None
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def add_books(self, paths, formats, metadata, add_duplicates=False,
|
||||
return_ids=False):
|
||||
@ -351,7 +351,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
|
||||
def books_deleted(self):
|
||||
self.count_changed()
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def delete_books(self, indices, permanent=False):
|
||||
ids = map(self.id, indices)
|
||||
@ -410,7 +410,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
self.current_highlighted_idx = 0
|
||||
else:
|
||||
self.current_highlighted_idx = None
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def search(self, text, reset=True):
|
||||
try:
|
||||
@ -437,7 +437,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
return
|
||||
self.last_search = text
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
if self.last_search:
|
||||
# Do not issue search done for the null search. It is used to clear
|
||||
# the search and count records for restrictions
|
||||
@ -460,7 +460,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
self.about_to_be_sorted.emit(self.db.id)
|
||||
self.db.data.incremental_sort([(label, order)])
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
self.sorted_on = (label, order)
|
||||
self.sort_history.insert(0, self.sorted_on)
|
||||
self.sorting_done.emit(self.db.index)
|
||||
@ -469,16 +469,19 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
self.db.refresh(field=None)
|
||||
self.resort(reset=reset)
|
||||
|
||||
def reset(self):
|
||||
def beginResetModel(self):
|
||||
self._clear_caches()
|
||||
QAbstractTableModel.reset(self)
|
||||
QAbstractTableModel.beginResetModel(self)
|
||||
|
||||
def reset(self):
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def resort(self, reset=True):
|
||||
if not self.db:
|
||||
return
|
||||
self.db.multisort(self.sort_history[:tweaks['maximum_resort_levels']])
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def research(self, reset=True):
|
||||
self.search(self.last_search, reset=reset)
|
||||
@ -1251,7 +1254,7 @@ class DeviceBooksModel(BooksModel): # {{{
|
||||
db_items = [self.db[i] for i in db_indices if -1 < i < len(self.db)]
|
||||
self.marked_for_deletion[job] = db_items
|
||||
if rows_are_ids:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
else:
|
||||
for row in rows:
|
||||
indices = self.row_indices(row)
|
||||
@ -1313,7 +1316,7 @@ class DeviceBooksModel(BooksModel): # {{{
|
||||
app_id = getattr(data, 'application_id', None)
|
||||
if app_id is not None and app_id in db_ids:
|
||||
data.in_library = to_what
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def flags(self, index):
|
||||
if self.is_row_marked_for_deletion(index.row()):
|
||||
@ -1350,7 +1353,7 @@ class DeviceBooksModel(BooksModel): # {{{
|
||||
self.map.append(i)
|
||||
self.resort(reset=False)
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
self.last_search = text
|
||||
if self.last_search:
|
||||
self.searched.emit(True)
|
||||
@ -1399,14 +1402,14 @@ class DeviceBooksModel(BooksModel): # {{{
|
||||
if hasattr(keygen, 'db'):
|
||||
keygen.db = None
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def resort(self, reset=True):
|
||||
if self.sorted_on:
|
||||
self.sort(self.column_map.index(self.sorted_on[0]),
|
||||
self.sorted_on[1], reset=False)
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def columnCount(self, parent):
|
||||
if parent and parent.isValid():
|
||||
|
@ -24,12 +24,13 @@ class FieldsModel(FM): # {{{
|
||||
|
||||
def initialize(self):
|
||||
fields = self.plugin.touched_fields
|
||||
self.beginResetModel()
|
||||
self.fields = []
|
||||
for x in fields:
|
||||
if not x.startswith('identifier:') and x not in self.exclude:
|
||||
self.fields.append(x)
|
||||
self.fields.sort(key=lambda x:self.descs.get(x, x))
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def state(self, field, defaults=False):
|
||||
src = self.prefs.defaults if defaults else self.prefs
|
||||
@ -37,8 +38,9 @@ class FieldsModel(FM): # {{{
|
||||
else Qt.Checked)
|
||||
|
||||
def restore_defaults(self):
|
||||
self.beginResetModel()
|
||||
self.overrides = dict([(f, self.state(f, True)) for f in self.fields])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def commit(self):
|
||||
ignored_fields = set([x for x in self.prefs['ignore_fields'] if x not in
|
||||
|
@ -227,8 +227,9 @@ class ResultsModel(QAbstractTableModel): # {{{
|
||||
elif key == 4:
|
||||
key = lambda x: bool(x.comments)
|
||||
|
||||
self.beginResetModel()
|
||||
self.results.sort(key=key, reverse=order==Qt.AscendingOrder)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
# }}}
|
||||
|
||||
@ -658,7 +659,7 @@ class CoversModel(QAbstractListModel): # {{{
|
||||
self.plugin_map[plugin] = [i+1]
|
||||
|
||||
if do_reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def get_item(self, src, pmap, waiting=False):
|
||||
sz = '%dx%d'%(pmap.width(), pmap.height())
|
||||
@ -711,7 +712,7 @@ class CoversModel(QAbstractListModel): # {{{
|
||||
pmap[plugin] = [len(good)-1]
|
||||
self.covers = good
|
||||
self.plugin_map = pmap
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def pointer_from_index(self, index):
|
||||
row = index.row() if hasattr(index, 'row') else index
|
||||
|
@ -714,8 +714,9 @@ class RulesModel(QAbstractListModel): # {{{
|
||||
return (kind, col, rule)
|
||||
|
||||
def add_rule(self, kind, col, rule):
|
||||
self.beginResetModel()
|
||||
self.rules.append((kind, col, rule))
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
return self.index(len(self.rules)-1)
|
||||
|
||||
def replace_rule(self, index, kind, col, r):
|
||||
@ -723,8 +724,9 @@ class RulesModel(QAbstractListModel): # {{{
|
||||
self.dataChanged.emit(index, index)
|
||||
|
||||
def remove_rule(self, index):
|
||||
self.beginResetModel()
|
||||
self.rules.remove(self.rules[index.row()])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def commit(self, prefs):
|
||||
rules = []
|
||||
@ -751,7 +753,8 @@ class RulesModel(QAbstractListModel): # {{{
|
||||
|
||||
def clear(self):
|
||||
self.rules = []
|
||||
self.reset()
|
||||
self.beginResetModel()
|
||||
self.endResetModel()
|
||||
|
||||
def rule_to_html(self, kind, col, rule):
|
||||
trans_kind = 'not found'
|
||||
|
@ -118,11 +118,12 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
|
||||
def make_default(self, index):
|
||||
if index.isValid():
|
||||
self.beginResetModel()
|
||||
row = index.row()
|
||||
for x in self.accounts.values():
|
||||
x[2] = False
|
||||
self.accounts[self.account_order[row]][2] = True
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def add(self):
|
||||
x = _('new email address')
|
||||
@ -132,10 +133,11 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
c += 1
|
||||
y = x + str(c)
|
||||
auto_send = len(self.accounts) < 1
|
||||
self.beginResetModel()
|
||||
self.accounts[y] = ['MOBI, EPUB', auto_send,
|
||||
len(self.account_order) == 0]
|
||||
self.account_order = sorted(self.accounts.keys())
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
return self.index(self.account_order.index(y), 0)
|
||||
|
||||
def remove(self, index):
|
||||
@ -152,7 +154,8 @@ class EmailAccounts(QAbstractTableModel): # {{{
|
||||
if not has_default and self.account_order:
|
||||
self.accounts[self.account_order[0]][2] = True
|
||||
|
||||
self.reset()
|
||||
self.beginResetModel()
|
||||
self.endResetModel()
|
||||
|
||||
# }}}
|
||||
|
||||
|
@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en'
|
||||
|
||||
import textwrap
|
||||
|
||||
from PyQt5.Qt import QComboBox, QStringList, Qt
|
||||
from PyQt5.Qt import QComboBox, Qt
|
||||
|
||||
from calibre.gui2 import config as gui_conf
|
||||
|
||||
@ -32,7 +32,7 @@ class HistoryBox(QComboBox):
|
||||
if val not in history:
|
||||
history.append(val)
|
||||
self.clear()
|
||||
self.addItems(QStringList(history))
|
||||
self.addItems(history)
|
||||
self.setCurrentIndex(self.findText(val, Qt.MatchFixedString))
|
||||
|
||||
def save_history(self, opt_name):
|
||||
|
@ -35,10 +35,11 @@ class DisplayedFields(QAbstractListModel): # {{{
|
||||
self.changed = False
|
||||
|
||||
def initialize(self, use_defaults=False):
|
||||
self.beginResetModel()
|
||||
self.fields = [[x[0], x[1]] for x in
|
||||
get_field_list(self.db.field_metadata,
|
||||
use_defaults=use_defaults)]
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
self.changed = True
|
||||
|
||||
def rowCount(self, *args):
|
||||
@ -469,7 +470,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
return rr
|
||||
|
||||
def refresh_gui(self, gui):
|
||||
gui.library_view.model().reset()
|
||||
m = gui.library_view.model()
|
||||
m.beginResetModel(), m.endResetModel()
|
||||
self.update_font_display()
|
||||
gui.tags_view.reread_collapse_parameters()
|
||||
gui.library_view.refresh_book_details()
|
||||
|
@ -30,11 +30,12 @@ class SourcesModel(QAbstractTableModel): # {{{
|
||||
self.cover_overrides = {}
|
||||
|
||||
def initialize(self):
|
||||
self.beginResetModel()
|
||||
self.plugins = list(all_metadata_plugins())
|
||||
self.plugins.sort(key=attrgetter('name'))
|
||||
self.enabled_overrides = {}
|
||||
self.cover_overrides = {}
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def rowCount(self, parent=None):
|
||||
return len(self.plugins)
|
||||
@ -135,12 +136,13 @@ class SourcesModel(QAbstractTableModel): # {{{
|
||||
self.cover_overrides = {}
|
||||
|
||||
def restore_defaults(self):
|
||||
self.beginResetModel()
|
||||
self.enabled_overrides = dict([(p, (Qt.Unchecked if p.name in
|
||||
default_disabled_plugins else Qt.Checked)) for p in self.plugins])
|
||||
self.cover_overrides = dict([(p,
|
||||
msprefs.defaults['cover_priorities'].get(p.name, 1))
|
||||
for p in self.plugins])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
# }}}
|
||||
|
||||
@ -173,12 +175,13 @@ class FieldsModel(QAbstractListModel): # {{{
|
||||
fields = set()
|
||||
for p in all_metadata_plugins():
|
||||
fields |= p.touched_fields
|
||||
self.beginResetModel()
|
||||
self.fields = []
|
||||
for x in fields:
|
||||
if not x.startswith('identifier:') and x not in self.exclude:
|
||||
self.fields.append(x)
|
||||
self.fields.sort(key=lambda x:self.descs.get(x, x))
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def state(self, field, defaults=False):
|
||||
src = msprefs.defaults if defaults else msprefs
|
||||
@ -201,16 +204,19 @@ class FieldsModel(QAbstractListModel): # {{{
|
||||
return ans | Qt.ItemIsUserCheckable
|
||||
|
||||
def restore_defaults(self):
|
||||
self.beginResetModel()
|
||||
self.overrides = dict([(f, self.state(f, Qt.Checked)) for f in self.fields])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def select_all(self):
|
||||
self.beginResetModel()
|
||||
self.overrides = dict([(f, Qt.Checked) for f in self.fields])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def clear_all(self):
|
||||
self.beginResetModel()
|
||||
self.overrides = dict([(f, Qt.Unchecked) for f in self.fields])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def setData(self, index, val, role):
|
||||
try:
|
||||
@ -239,8 +245,9 @@ class FieldsModel(QAbstractListModel): # {{{
|
||||
else Qt.Checked)
|
||||
|
||||
def select_user_defaults(self):
|
||||
self.beginResetModel()
|
||||
self.overrides = dict([(f, self.user_default_state(f)) for f in self.fields])
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def commit_user_defaults(self):
|
||||
default_ignored_fields = set([x for x in msprefs['user_default_ignore_fields'] if x not in
|
||||
|
@ -37,8 +37,9 @@ class PluginModel(QAbstractItemModel, SearchQueryParser): # {{{
|
||||
|
||||
def toggle_shown_plugins(self, show_only_user_plugins):
|
||||
self.show_only_user_plugins = show_only_user_plugins
|
||||
self.beginResetModel()
|
||||
self.populate()
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def populate(self):
|
||||
self._data = {}
|
||||
@ -311,8 +312,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
except NameConflict as e:
|
||||
return error_dialog(self, _('Already exists'),
|
||||
unicode(e), show=True)
|
||||
self._plugin_model.beginResetModel()
|
||||
self._plugin_model.populate()
|
||||
self._plugin_model.reset()
|
||||
self._plugin_model.endResetModel()
|
||||
self.changed_signal.emit()
|
||||
self.check_for_add_to_toolbars(plugin, previously_installed=plugin.name in installed_plugins)
|
||||
info_dialog(self, _('Success'),
|
||||
@ -371,8 +373,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
|
||||
msg = _('Plugin <b>{0}</b> successfully removed').format(plugin.name)
|
||||
if remove_plugin(plugin):
|
||||
self._plugin_model.beginResetModel()
|
||||
self._plugin_model.populate()
|
||||
self._plugin_model.reset()
|
||||
self._plugin_model.endResetModel()
|
||||
self.changed_signal.emit()
|
||||
info_dialog(self, _('Success'), msg, show=True,
|
||||
show_copy_button=False)
|
||||
@ -390,8 +393,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
mode = FILTER_NOT_INSTALLED if not_installed else FILTER_UPDATE_AVAILABLE
|
||||
d = PluginUpdaterDialog(self.gui, initial_filter=mode)
|
||||
d.exec_()
|
||||
self._plugin_model.beginResetModel()
|
||||
self._plugin_model.populate()
|
||||
self._plugin_model.reset()
|
||||
self._plugin_model.endResetModel()
|
||||
self.changed_signal.emit()
|
||||
if d.do_restart:
|
||||
self.restart_now.emit()
|
||||
|
@ -112,9 +112,10 @@ class AllModel(BaseModel):
|
||||
for name in names:
|
||||
if name is None or name.startswith('---'): continue
|
||||
actions.append(self.name_to_action(name, self.gui))
|
||||
self.beginResetModel()
|
||||
self._data.extend(actions)
|
||||
self._data.sort()
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def remove(self, indices, allowed):
|
||||
rows = [i.row() for i in indices]
|
||||
@ -128,13 +129,15 @@ class AllModel(BaseModel):
|
||||
for i, ac in enumerate(self._data):
|
||||
if i not in remove:
|
||||
ndata.append(ac)
|
||||
self.beginResetModel()
|
||||
self._data = ndata
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def restore_defaults(self):
|
||||
current = gprefs.defaults[self.gprefs_name]
|
||||
self.beginResetModel()
|
||||
self._data = self.get_all_actions(current)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
class CurrentModel(BaseModel):
|
||||
|
||||
@ -172,8 +175,9 @@ class CurrentModel(BaseModel):
|
||||
else:
|
||||
actions.append(ac)
|
||||
|
||||
self.beginResetModel()
|
||||
self._data.extend(actions)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
return reject
|
||||
|
||||
def remove(self, indices):
|
||||
@ -189,8 +193,9 @@ class CurrentModel(BaseModel):
|
||||
for i, ac in enumerate(self._data):
|
||||
if i not in remove:
|
||||
ndata.append(ac)
|
||||
self.beginResetModel()
|
||||
self._data = ndata
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
return rejected
|
||||
|
||||
def commit(self):
|
||||
@ -211,8 +216,9 @@ class CurrentModel(BaseModel):
|
||||
|
||||
def restore_defaults(self):
|
||||
current = gprefs.defaults[self.gprefs_name]
|
||||
self.beginResetModel()
|
||||
self._data = [self.name_to_action(x, self.gui) for x in current]
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
|
||||
class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
|
@ -10,7 +10,7 @@ import re, time
|
||||
from functools import partial
|
||||
|
||||
|
||||
from PyQt5.Qt import QComboBox, Qt, QLineEdit, QStringList, pyqtSlot, QDialog, \
|
||||
from PyQt5.Qt import QComboBox, Qt, QLineEdit, pyqtSlot, QDialog, \
|
||||
pyqtSignal, QCompleter, QAction, QKeySequence, QTimer, \
|
||||
QString, QIcon, QMenu
|
||||
|
||||
@ -108,7 +108,7 @@ class SearchBox2(QComboBox): # {{{
|
||||
for item in config[opt_name]:
|
||||
if item not in items:
|
||||
items.append(item)
|
||||
self.addItems(QStringList(items))
|
||||
self.addItems(items)
|
||||
try:
|
||||
self.line_edit.setPlaceholderText(help_text)
|
||||
except:
|
||||
|
@ -10,7 +10,7 @@ from functools import partial
|
||||
|
||||
from PyQt5.Qt import (
|
||||
Qt, QMenu, QPoint, QIcon, QDialog, QGridLayout, QLabel, QLineEdit, QComboBox,
|
||||
QDialogButtonBox, QSize, QVBoxLayout, QListWidget, QStringList, QRadioButton, QAction)
|
||||
QDialogButtonBox, QSize, QVBoxLayout, QListWidget, QRadioButton, QAction)
|
||||
|
||||
from calibre.gui2 import error_dialog, question_dialog, gprefs
|
||||
from calibre.gui2.dialogs.confirm_delete import confirm
|
||||
@ -30,7 +30,7 @@ class SelectNames(QDialog): # {{{
|
||||
l.addWidget(la)
|
||||
|
||||
self._names = QListWidget(self)
|
||||
self._names.addItems(QStringList(sorted(names, key=sort_key)))
|
||||
self._names.addItems(sorted(names, key=sort_key))
|
||||
self._names.setSelectionMode(self._names.ExtendedSelection)
|
||||
l.addWidget(self._names)
|
||||
|
||||
|
@ -186,7 +186,7 @@ class Matches(QAbstractItemModel):
|
||||
lambda x: sort_key(unicode(self.data_as_text(x, col))),
|
||||
descending)
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
|
||||
class SearchFilter(SearchQueryParser):
|
||||
|
@ -85,7 +85,7 @@ class Matches(QAbstractItemModel):
|
||||
self.cover_pool.abort()
|
||||
self.details_pool.abort()
|
||||
self.total_changed.emit(self.rowCount())
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def add_result(self, result, store_plugin):
|
||||
if result not in self.all_matches:
|
||||
@ -287,7 +287,7 @@ class Matches(QAbstractItemModel):
|
||||
descending)
|
||||
self.reorder_matches()
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
def reorder_matches(self):
|
||||
def keygen(x):
|
||||
|
@ -108,7 +108,7 @@ class BooksModel(QAbstractItemModel):
|
||||
lambda x: sort_key(unicode(self.data_as_text(x, col))),
|
||||
descending)
|
||||
if reset:
|
||||
self.reset()
|
||||
self.beginResetModel(), self.endResetModel()
|
||||
|
||||
|
||||
class SearchFilter(SearchQueryParser):
|
||||
|
@ -563,8 +563,9 @@ class CharModel(QAbstractListModel):
|
||||
self.chars[x] = None
|
||||
for x in reversed(codes):
|
||||
self.chars.insert(row, x)
|
||||
self.beginResetModel()
|
||||
self.chars = [x for x in self.chars if x is not None]
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
tprefs['charmap_favorites'] = list(self.chars)
|
||||
return True
|
||||
|
||||
@ -651,8 +652,9 @@ class CharView(QListView):
|
||||
|
||||
def show_chars(self, name, codes):
|
||||
self.showing_favorites = name == _('Favorites')
|
||||
self._model.beginResetModel()
|
||||
self._model.chars = codes
|
||||
self._model.reset()
|
||||
self._model.endResetModel()
|
||||
self.scrollToTop()
|
||||
|
||||
def mouseMoveEvent(self, ev):
|
||||
@ -687,8 +689,9 @@ class CharView(QListView):
|
||||
|
||||
def restore_defaults(self):
|
||||
del tprefs['charmap_favorites']
|
||||
self.model().beginResetModel()
|
||||
self.model().chars = list(tprefs['charmap_favorites'])
|
||||
self.model().reset()
|
||||
self.model().endResetModel()
|
||||
|
||||
def copy_to_clipboard(self, char_code):
|
||||
c = QApplication.clipboard()
|
||||
@ -702,8 +705,9 @@ class CharView(QListView):
|
||||
elif char_code in existing:
|
||||
existing.remove(char_code)
|
||||
tprefs['charmap_favorites'] = existing
|
||||
self.model().beginResetModel()
|
||||
self.model().chars.remove(char_code)
|
||||
self.model().reset()
|
||||
self.model().endResetModel()
|
||||
|
||||
class CharSelect(Dialog):
|
||||
|
||||
|
@ -894,7 +894,7 @@ class DiffView(QWidget): # {{{
|
||||
self.l = l = QHBoxLayout(self)
|
||||
self.setLayout(l)
|
||||
self.syncpos = 0
|
||||
l.setMargin(0), l.setSpacing(0)
|
||||
l.setContentsMargins(0, 0, 0, 0), l.setSpacing(0)
|
||||
self.view = DiffSplit(self, show_open_in_editor=show_open_in_editor)
|
||||
l.addWidget(self.view)
|
||||
self.add_diff = self.view.add_diff
|
||||
|
@ -150,8 +150,9 @@ class Images(QAbstractListModel):
|
||||
self.image_names.append(name)
|
||||
|
||||
def refresh(self):
|
||||
self.beginResetModel()
|
||||
self.build()
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def rowCount(self, *args):
|
||||
return len(self.image_names)
|
||||
|
@ -417,11 +417,12 @@ class SearchesModel(QAbstractListModel):
|
||||
|
||||
def do_filter(self, text):
|
||||
text = unicode(text)
|
||||
self.beginResetModel()
|
||||
self.filtered_searches = []
|
||||
for i, search in enumerate(self.searches):
|
||||
if primary_contains(text, search['name']):
|
||||
self.filtered_searches.append(i)
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def move_entry(self, row, delta):
|
||||
a, b = row, row + delta
|
||||
@ -433,9 +434,10 @@ class SearchesModel(QAbstractListModel):
|
||||
tprefs['saved_searches'] = self.searches
|
||||
|
||||
def add_searches(self, count=1):
|
||||
self.beginResetModel()
|
||||
self.searches = tprefs['saved_searches']
|
||||
self.filtered_searches.extend(xrange(len(self.searches) - 1, len(self.searches) - 1 - count, -1))
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def remove_searches(self, rows):
|
||||
rows = sorted(set(rows), reverse=True)
|
||||
|
@ -77,9 +77,10 @@ class GlobalUndoHistory(QAbstractListModel):
|
||||
return self.states[self.pos - 1].container
|
||||
|
||||
def open_book(self, container):
|
||||
self.beginResetModel()
|
||||
self.states = [State(container)]
|
||||
self.pos = 0
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
|
||||
def truncate(self):
|
||||
extra = self.states[self.pos+1:]
|
||||
|
@ -20,7 +20,7 @@ from PyQt5.Qt import (
|
||||
|
||||
from calibre import prepare_string_for_xml, human_readable
|
||||
from calibre.ebooks.oeb.polish.utils import lead_text, guess_type
|
||||
from calibre.gui2 import error_dialog, choose_files, choose_save_file, NONE, info_dialog, choose_images
|
||||
from calibre.gui2 import error_dialog, choose_files, choose_save_file, info_dialog, choose_images
|
||||
from calibre.gui2.tweak_book import tprefs, current_container
|
||||
from calibre.utils.icu import primary_sort_key, sort_key, primary_contains
|
||||
from calibre.utils.matcher import get_char, Matcher
|
||||
@ -452,7 +452,7 @@ class QuickOpen(Dialog):
|
||||
Simply type in the characters:
|
||||
{chars}
|
||||
and press Enter.''').format(example=example, chars=chars))
|
||||
hl.setMargin(50), hl.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
|
||||
hl.setContentsMargins(50, 50, 50, 50), hl.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
|
||||
l.addWidget(hl)
|
||||
self.results = Results(self)
|
||||
self.results.setVisible(False)
|
||||
@ -554,15 +554,15 @@ class NamesModel(QAbstractListModel):
|
||||
return QVariant(self.items[index.row()])
|
||||
if role == Qt.DisplayRole:
|
||||
return QVariant('\xa0' * 20)
|
||||
return NONE
|
||||
|
||||
def filter(self, query):
|
||||
query = unicode(query or '')
|
||||
self.beginResetModel()
|
||||
if not query:
|
||||
self.items = tuple((text, None) for text in self.names)
|
||||
else:
|
||||
self.items = tuple(self.matcher(query).iteritems())
|
||||
self.reset()
|
||||
self.endResetModel()
|
||||
self.filtered.emit(not bool(query))
|
||||
|
||||
def find_name(self, name):
|
||||
|
@ -10,7 +10,7 @@ from PyQt5.Qt import (QIcon, QFont, QLabel, QListWidget, QAction,
|
||||
QCursor, QColor, QWidget, QPixmap, QSplitterHandle, QToolButton,
|
||||
QVariant, Qt, pyqtSignal, QRegExp, QSize, QSplitter, QPainter,
|
||||
QLineEdit, QComboBox, QPen, QGraphicsScene, QMenu, QStringListModel,
|
||||
QCompleter, QStringList, QTimer, QRect, QGraphicsView, QByteArray)
|
||||
QCompleter, QTimer, QRect, QGraphicsView, QByteArray)
|
||||
|
||||
from calibre.gui2 import (error_dialog, pixmap_to_data, gprefs,
|
||||
warning_dialog)
|
||||
@ -625,7 +625,7 @@ class HistoryLineEdit(QComboBox): # {{{
|
||||
|
||||
def initialize(self, name):
|
||||
self._name = name
|
||||
self.addItems(QStringList(history.get(self.store_name, [])))
|
||||
self.addItems(history.get(self.store_name, []))
|
||||
self.setEditText('')
|
||||
self.lineEdit().editingFinished.connect(self.save_history)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user