Get rid of the ResizableDialog class

This commit is contained in:
Kovid Goyal 2016-04-20 11:07:15 +05:30
parent 16db1cad28
commit d90586170a
6 changed files with 73 additions and 37 deletions

View File

@ -776,16 +776,15 @@ def decouple(prefix):
class ResizableDialog(QDialog): class ResizableDialog(QDialog):
# This class is present only for backwards compat with third party plugins
# that might use it. Do not use it in new code.
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
QDialog.__init__(self, *args) QDialog.__init__(self, *args)
self.setupUi(self) self.setupUi(self)
desktop = QCoreApplication.instance().desktop() desktop = QCoreApplication.instance().desktop()
geom = desktop.availableGeometry(self) geom = desktop.availableGeometry(self)
nh, nw = geom.height()-25, geom.width()-10 nh, nw = max(550, geom.height()-25), max(700, geom.width()-10)
if nh < 0:
nh = max(800, self.height())
if nw < 0:
nw = max(600, self.height())
nh = min(self.height(), nh) nh = min(self.height(), nh)
nw = min(self.width(), nw) nw = min(self.width(), nw)
self.resize(nw, nh) self.resize(nw, nh)

View File

@ -6,11 +6,10 @@ __docformat__ = 'restructuredtext en'
import shutil import shutil
from PyQt5.Qt import QModelIndex from PyQt5.Qt import QModelIndex, QDialog
from calibre.gui2.convert.single import (Config, sort_formats_by_preference, from calibre.gui2.convert.single import (Config, sort_formats_by_preference,
GroupModel, gprefs, get_output_formats) GroupModel, gprefs, get_output_formats)
from calibre.gui2 import ResizableDialog
from calibre.gui2.convert.look_and_feel import LookAndFeelWidget from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
from calibre.gui2.convert.heuristics import HeuristicsWidget from calibre.gui2.convert.heuristics import HeuristicsWidget
from calibre.gui2.convert.search_and_replace import SearchAndReplaceWidget from calibre.gui2.convert.search_and_replace import SearchAndReplaceWidget
@ -26,7 +25,8 @@ class BulkConfig(Config):
def __init__(self, parent, db, preferred_output_format=None, def __init__(self, parent, db, preferred_output_format=None,
has_saved_settings=True): has_saved_settings=True):
ResizableDialog.__init__(self, parent) QDialog.__init__(self, parent)
self.setupUi(self)
self.setup_output_formats(db, preferred_output_format) self.setup_output_formats(db, preferred_output_format)
self.db = db self.db = db
@ -59,6 +59,8 @@ class BulkConfig(Config):
geom = gprefs.get('convert_bulk_dialog_geom', None) geom = gprefs.get('convert_bulk_dialog_geom', None)
if geom: if geom:
self.restoreGeometry(geom) self.restoreGeometry(geom)
else:
self.resize(self.sizeHint())
def setup_pipeline(self, *args): def setup_pipeline(self, *args):
oidx = self.groups.currentIndex().row() oidx = self.groups.currentIndex().row()
@ -132,12 +134,12 @@ class BulkConfig(Config):
x = w.commit(save_defaults=False) x = w.commit(save_defaults=False)
recs.update(x) recs.update(x)
self._recommendations = recs self._recommendations = recs
ResizableDialog.accept(self) QDialog.accept(self)
def done(self, r): def done(self, r):
if self.isVisible(): if self.isVisible():
gprefs['convert_bulk_dialog_geom'] = \ gprefs['convert_bulk_dialog_geom'] = \
bytearray(self.saveGeometry()) bytearray(self.saveGeometry())
return ResizableDialog.done(self, r) return QDialog.done(self, r)

View File

@ -8,9 +8,9 @@ __docformat__ = 'restructuredtext en'
import cPickle, shutil import cPickle, shutil
from PyQt5.Qt import QAbstractListModel, Qt, QFont, QModelIndex from PyQt5.Qt import QAbstractListModel, Qt, QFont, QModelIndex, QDialog, QCoreApplication, QSize
from calibre.gui2 import ResizableDialog, gprefs from calibre.gui2 import gprefs
from calibre.ebooks.conversion.config import (GuiRecommendations, save_specifics, from calibre.ebooks.conversion.config import (GuiRecommendations, save_specifics,
load_specifics) load_specifics)
from calibre.gui2.convert.single_ui import Ui_Dialog from calibre.gui2.convert.single_ui import Ui_Dialog
@ -127,7 +127,7 @@ def get_input_format_for_book(db, book_id, pref):
return input_format, input_formats return input_format, input_formats
class Config(ResizableDialog, Ui_Dialog): class Config(QDialog, Ui_Dialog):
''' '''
Configuration dialog for single book conversion. If accepted, has the Configuration dialog for single book conversion. If accepted, has the
following important attributes following important attributes
@ -142,7 +142,8 @@ class Config(ResizableDialog, Ui_Dialog):
def __init__(self, parent, db, book_id, def __init__(self, parent, db, book_id,
preferred_input_format=None, preferred_output_format=None): preferred_input_format=None, preferred_output_format=None):
ResizableDialog.__init__(self, parent) QDialog.__init__(self, parent)
self.setupUi(self)
self.opt_individual_saved_settings.setVisible(False) self.opt_individual_saved_settings.setVisible(False)
self.db, self.book_id = db, book_id self.db, self.book_id = db, book_id
@ -162,6 +163,14 @@ class Config(ResizableDialog, Ui_Dialog):
geom = gprefs.get('convert_single_dialog_geom', None) geom = gprefs.get('convert_single_dialog_geom', None)
if geom: if geom:
self.restoreGeometry(geom) self.restoreGeometry(geom)
else:
self.resize(self.sizeHint())
def sizeHint(self):
desktop = QCoreApplication.instance().desktop()
geom = desktop.availableGeometry(self)
nh, nw = max(300, geom.height()-50), max(400, geom.width()-70)
return QSize(nw, nh)
def restore_defaults(self): def restore_defaults(self):
delete_specifics(self.db, self.book_id) delete_specifics(self.db, self.book_id)
@ -277,17 +286,17 @@ class Config(ResizableDialog, Ui_Dialog):
recs['gui_preferred_input_format'] = self.input_format recs['gui_preferred_input_format'] = self.input_format
save_specifics(self.db, self.book_id, recs) save_specifics(self.db, self.book_id, recs)
self.break_cycles() self.break_cycles()
ResizableDialog.accept(self) QDialog.accept(self)
def reject(self): def reject(self):
self.break_cycles() self.break_cycles()
ResizableDialog.reject(self) QDialog.reject(self)
def done(self, r): def done(self, r):
if self.isVisible(): if self.isVisible():
gprefs['convert_single_dialog_geom'] = \ gprefs['convert_single_dialog_geom'] = \
bytearray(self.saveGeometry()) bytearray(self.saveGeometry())
return ResizableDialog.done(self, r) return QDialog.done(self, r)
def break_cycles(self): def break_cycles(self):
for i in range(self.stack.count()): for i in range(self.stack.count()):

View File

@ -8,12 +8,14 @@ __docformat__ = 'restructuredtext en'
import os, sys, importlib import os, sys, importlib
from PyQt5.Qt import QDialog, QCoreApplication, QSize
from calibre.customize.ui import config from calibre.customize.ui import config
from calibre.gui2.dialogs.catalog_ui import Ui_Dialog from calibre.gui2.dialogs.catalog_ui import Ui_Dialog
from calibre.gui2 import dynamic, ResizableDialog, info_dialog from calibre.gui2 import dynamic, info_dialog
from calibre.customize.ui import catalog_plugins from calibre.customize.ui import catalog_plugins
class Catalog(ResizableDialog, Ui_Dialog): class Catalog(QDialog, Ui_Dialog):
''' Catalog Dialog builder''' ''' Catalog Dialog builder'''
@ -22,7 +24,8 @@ class Catalog(ResizableDialog, Ui_Dialog):
from calibre import prints as info from calibre import prints as info
from PyQt5.uic import compileUi from PyQt5.uic import compileUi
ResizableDialog.__init__(self, parent) QDialog.__init__(self, parent)
self.setupUi(self)
self.dbspec, self.ids = dbspec, ids self.dbspec, self.ids = dbspec, ids
# Display the number of books we've been passed # Display the number of books we've been passed
@ -124,6 +127,14 @@ class Catalog(ResizableDialog, Ui_Dialog):
geom = dynamic.get('catalog_window_geom', None) geom = dynamic.get('catalog_window_geom', None)
if geom is not None: if geom is not None:
self.restoreGeometry(bytes(geom)) self.restoreGeometry(bytes(geom))
else:
self.resize(self.sizeHint())
def sizeHint(self):
desktop = QCoreApplication.instance().desktop()
geom = desktop.availableGeometry(self)
nh, nw = max(300, geom.height()-50), max(400, geom.width()-70)
return QSize(nw, nh)
def show_plugin_tab(self, idx): def show_plugin_tab(self, idx):
cf = unicode(self.format.currentText()).lower() cf = unicode(self.format.currentText()).lower()
@ -180,7 +191,7 @@ class Catalog(ResizableDialog, Ui_Dialog):
def accept(self): def accept(self):
self.save_catalog_settings() self.save_catalog_settings()
return ResizableDialog.accept(self) return QDialog.accept(self)
def help(self): def help(self):
''' '''
@ -207,4 +218,4 @@ class Catalog(ResizableDialog, Ui_Dialog):
def reject(self): def reject(self):
dynamic.set('catalog_window_geom', bytearray(self.saveGeometry())) dynamic.set('catalog_window_geom', bytearray(self.saveGeometry()))
ResizableDialog.reject(self) QDialog.reject(self)

View File

@ -9,14 +9,14 @@ from threading import Thread
from PyQt5.Qt import Qt, QDialog, QGridLayout, QVBoxLayout, QFont, QLabel, \ from PyQt5.Qt import Qt, QDialog, QGridLayout, QVBoxLayout, QFont, QLabel, \
pyqtSignal, QDialogButtonBox, QInputDialog, QLineEdit, \ pyqtSignal, QDialogButtonBox, QInputDialog, QLineEdit, \
QDateTime, QCompleter QDateTime, QCompleter, QCoreApplication, QSize
from calibre.gui2.dialogs.metadata_bulk_ui import Ui_MetadataBulkDialog from calibre.gui2.dialogs.metadata_bulk_ui import Ui_MetadataBulkDialog
from calibre.gui2.dialogs.tag_editor import TagEditor from calibre.gui2.dialogs.tag_editor import TagEditor
from calibre.ebooks.metadata import string_to_authors, authors_to_string, title_sort from calibre.ebooks.metadata import string_to_authors, authors_to_string, title_sort
from calibre.ebooks.metadata.book.formatter import SafeFormat from calibre.ebooks.metadata.book.formatter import SafeFormat
from calibre.gui2.custom_column_widgets import populate_metadata_page from calibre.gui2.custom_column_widgets import populate_metadata_page
from calibre.gui2 import error_dialog, ResizableDialog, UNDEFINED_QDATETIME, \ from calibre.gui2 import error_dialog, UNDEFINED_QDATETIME, \
gprefs, question_dialog, FunctionDispatcher gprefs, question_dialog, FunctionDispatcher
from calibre.gui2.progress_indicator import ProgressIndicator from calibre.gui2.progress_indicator import ProgressIndicator
from calibre.gui2.metadata.basic_widgets import CalendarWidget from calibre.gui2.metadata.basic_widgets import CalendarWidget
@ -292,7 +292,7 @@ class MyBlockingBusy(QDialog): # {{{
# }}} # }}}
class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
s_r_functions = {'' : lambda x: x, s_r_functions = {'' : lambda x: x,
_('Lower Case') : lambda x: icu_lower(x), _('Lower Case') : lambda x: icu_lower(x),
@ -311,8 +311,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
] ]
def __init__(self, window, rows, model, tab, refresh_books): def __init__(self, window, rows, model, tab, refresh_books):
ResizableDialog.__init__(self, window) QDialog.__init__(self, window)
Ui_MetadataBulkDialog.__init__(self) self.setupUi(self)
self.model = model self.model = model
self.db = model.db self.db = model.db
self.refresh_book_list.setChecked(gprefs['refresh_book_list_on_bulk_edit']) self.refresh_book_list.setChecked(gprefs['refresh_book_list_on_bulk_edit'])
@ -380,6 +380,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
geom = gprefs.get('bulk_metadata_window_geometry', None) geom = gprefs.get('bulk_metadata_window_geometry', None)
if geom is not None: if geom is not None:
self.restoreGeometry(bytes(geom)) self.restoreGeometry(bytes(geom))
else:
self.resize(self.sizeHint())
ct = gprefs.get('bulk_metadata_window_tab', 0) ct = gprefs.get('bulk_metadata_window_tab', 0)
self.central_widget.setCurrentIndex(ct) self.central_widget.setCurrentIndex(ct)
self.languages.init_langs(self.db) self.languages.init_langs(self.db)
@ -390,6 +392,12 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
self.button_config_cover_gen.clicked.connect(self.customize_cover_generation) self.button_config_cover_gen.clicked.connect(self.customize_cover_generation)
self.exec_() self.exec_()
def sizeHint(self):
desktop = QCoreApplication.instance().desktop()
geom = desktop.availableGeometry(self)
nh, nw = max(300, geom.height()-50), max(400, geom.width()-70)
return QSize(nw, nh)
def customize_cover_generation(self): def customize_cover_generation(self):
from calibre.gui2.covers import CoverSettingsDialog from calibre.gui2.covers import CoverSettingsDialog
d = CoverSettingsDialog(parent=self) d = CoverSettingsDialog(parent=self)
@ -942,7 +950,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
def reject(self): def reject(self):
self.save_state() self.save_state()
ResizableDialog.reject(self) QDialog.reject(self)
def accept(self): def accept(self):
self.save_state() self.save_state()

View File

@ -11,13 +11,13 @@ import os, errno
from datetime import datetime from datetime import datetime
from PyQt5.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, from PyQt5.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton,
QGridLayout, pyqtSignal, QDialogButtonBox, QScrollArea, QFont, QGridLayout, pyqtSignal, QDialogButtonBox, QScrollArea, QFont, QCoreApplication,
QTabWidget, QIcon, QToolButton, QSplitter, QGroupBox, QSpacerItem, QTabWidget, QIcon, QToolButton, QSplitter, QGroupBox, QSpacerItem,
QSizePolicy, QFrame, QSize, QKeySequence, QMenu, QShortcut) QSizePolicy, QFrame, QSize, QKeySequence, QMenu, QShortcut, QDialog)
from calibre.constants import isosx from calibre.constants import isosx
from calibre.ebooks.metadata import authors_to_string, string_to_authors from calibre.ebooks.metadata import authors_to_string, string_to_authors
from calibre.gui2 import ResizableDialog, error_dialog, gprefs, pixmap_to_data from calibre.gui2 import error_dialog, gprefs, pixmap_to_data
from calibre.gui2.metadata.basic_widgets import (TitleEdit, AuthorsEdit, from calibre.gui2.metadata.basic_widgets import (TitleEdit, AuthorsEdit,
AuthorSortEdit, TitleSortEdit, SeriesEdit, SeriesIndexEdit, IdentifiersEdit, AuthorSortEdit, TitleSortEdit, SeriesEdit, SeriesIndexEdit, IdentifiersEdit,
RatingEdit, PublisherEdit, TagsEdit, FormatsManager, Cover, CommentsEdit, RatingEdit, PublisherEdit, TagsEdit, FormatsManager, Cover, CommentsEdit,
@ -44,7 +44,7 @@ class ScrollArea(QScrollArea):
if widget is not None: if widget is not None:
self.setWidget(widget) self.setWidget(widget)
class MetadataSingleDialogBase(ResizableDialog): class MetadataSingleDialogBase(QDialog):
view_format = pyqtSignal(object, object) view_format = pyqtSignal(object, object)
cc_two_column = tweaks['metadata_single_use_2_cols_for_custom_fields'] cc_two_column = tweaks['metadata_single_use_2_cols_for_custom_fields']
@ -59,11 +59,10 @@ class MetadataSingleDialogBase(ResizableDialog):
self.metadata_before_fetch = None self.metadata_before_fetch = None
self.editing_multiple = editing_multiple self.editing_multiple = editing_multiple
self.comments_edit_state_at_apply = {} self.comments_edit_state_at_apply = {}
ResizableDialog.__init__(self, parent) QDialog.__init__(self, parent)
self.setupUi()
def setupUi(self, *args): # {{{ def setupUi(self, *args): # {{{
self.resize(990, 670)
self.download_shortcut = QShortcut(self) self.download_shortcut = QShortcut(self)
self.download_shortcut.setKey(QKeySequence('Ctrl+D', self.download_shortcut.setKey(QKeySequence('Ctrl+D',
QKeySequence.PortableText)) QKeySequence.PortableText))
@ -116,8 +115,16 @@ class MetadataSingleDialogBase(ResizableDialog):
geom = gprefs.get('metasingle_window_geometry3', None) geom = gprefs.get('metasingle_window_geometry3', None)
if geom is not None: if geom is not None:
self.restoreGeometry(bytes(geom)) self.restoreGeometry(bytes(geom))
else:
self.resize(self.sizeHint())
# }}} # }}}
def sizeHint(self):
desktop = QCoreApplication.instance().desktop()
geom = desktop.availableGeometry(self)
nh, nw = max(300, geom.height()-50), max(400, geom.width()-70)
return QSize(nw, nh)
def create_basic_metadata_widgets(self): # {{{ def create_basic_metadata_widgets(self): # {{{
self.basic_metadata_widgets = [] self.basic_metadata_widgets = []
@ -584,11 +591,11 @@ class MetadataSingleDialogBase(ResizableDialog):
yes_icon='dot_red.png', no_icon='dot_green.png', yes_icon='dot_red.png', no_icon='dot_green.png',
default_yes=False, skip_dialog_name='edit-metadata-single-confirm-ok-on-multiple'): default_yes=False, skip_dialog_name='edit-metadata-single-confirm-ok-on-multiple'):
return self.do_one(delta=1, apply_changes=False) return self.do_one(delta=1, apply_changes=False)
ResizableDialog.accept(self) QDialog.accept(self)
def reject(self): def reject(self):
self.save_state() self.save_state()
ResizableDialog.reject(self) QDialog.reject(self)
def save_state(self): def save_state(self):
try: try: