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:
Kovid Goyal 2014-04-11 21:41:59 +05:30
parent 5068f62f0f
commit f1842ae443
34 changed files with 148 additions and 92 deletions

View File

@ -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

View File

@ -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):

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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):

View File

@ -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)

View File

@ -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)

View File

@ -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):

View File

@ -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):

View File

@ -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()

View File

@ -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():

View File

@ -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

View File

@ -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

View File

@ -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'

View File

@ -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()
# }}}

View File

@ -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):

View File

@ -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()

View File

@ -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

View File

@ -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()

View File

@ -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):

View File

@ -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:

View File

@ -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)

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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:]

View File

@ -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):

View File

@ -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)