Fix #2003 (Enclose plugin config widget in a scrollarea)

This commit is contained in:
Kovid Goyal 2023-08-27 09:27:15 +05:30
parent fd25c117c5
commit 6966986ece
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 27 additions and 11 deletions

View File

@ -1,9 +1,13 @@
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import os, sys, zipfile, importlib, enum
import enum
import importlib
import os
import sys
import zipfile
from calibre.constants import numeric_version, iswindows, ismacos
from calibre.constants import ismacos, iswindows, numeric_version
from calibre.ptempfile import PersistentTemporaryFile
if iswindows:
@ -141,8 +145,11 @@ class Plugin: # {{{
True if the user clicks OK, False otherwise. The changes are
automatically applied.
'''
from qt.core import QDialog, QDialogButtonBox, QVBoxLayout, \
QLabel, Qt, QLineEdit
from qt.core import (
QApplication, QDialog, QDialogButtonBox, QLabel, QLineEdit, QScrollArea, Qt,
QVBoxLayout, QSize
)
from calibre.gui2 import gprefs
prefname = 'plugin config dialog:'+self.type + ':' + self.name
@ -164,9 +171,18 @@ class Plugin: # {{{
return False
if config_widget is not None:
v.addWidget(config_widget)
class SA(QScrollArea):
def sizeHint(self):
sz = self.widget().sizeHint()
fw = 2 * self.frameWidth()
return QSize(sz.width() + self.verticalScrollBar().sizeHint().width() + fw, sz.height() + fw)
sa = SA(config_dialog)
sa.setWidget(config_widget)
sa.setWidgetResizable(True)
v.addWidget(sa)
v.addWidget(button_box)
config_dialog.restore_geometry(gprefs, prefname)
if not config_dialog.restore_geometry(gprefs, prefname):
QApplication.instance().ensure_window_on_screen(config_dialog)
config_dialog.exec()
if config_dialog.result() == QDialog.DialogCode.Accepted:
@ -176,8 +192,7 @@ class Plugin: # {{{
else:
self.save_settings(config_widget)
else:
from calibre.customize.ui import plugin_customization, \
customize_plugin
from calibre.customize.ui import customize_plugin, plugin_customization
help_text = self.customization_help(gui=True)
help_text = QLabel(help_text, config_dialog)
help_text.setWordWrap(True)
@ -273,8 +288,9 @@ class Plugin: # {{{
import something
'''
if self.plugin_path is not None:
from calibre.utils.zipfile import ZipFile
from importlib.machinery import EXTENSION_SUFFIXES
from calibre.utils.zipfile import ZipFile
with ZipFile(self.plugin_path) as zf:
extensions = {x.lower() for x in EXTENSION_SUFFIXES}
zip_safe = True

View File

@ -472,6 +472,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
if __name__ == '__main__':
from qt.core import QApplication
app = QApplication([])
from calibre.gui2 import Application
app = Application([])
test_widget('Advanced', 'Plugins')