mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make groupboxes checkable and refactory tab adding
Instead of checkboxes to enable a set of options, make the groupbox checkable. Changes also to how tabs and widgets are added. This will make subclassing the driver easier
This commit is contained in:
parent
adc9535714
commit
b468713b5c
@ -51,9 +51,8 @@ class KOBOTOUCHConfig(TabbedDeviceConfig):
|
|||||||
self.tab1 = Tab1Config(self, self.device)
|
self.tab1 = Tab1Config(self, self.device)
|
||||||
self.tab2 = Tab2Config(self, self.device)
|
self.tab2 = Tab2Config(self, self.device)
|
||||||
|
|
||||||
extra_tab_pos = self.indexOf(self.extra_tab)
|
self.addDeviceTab(self.tab1, _("Collections, Covers && Uploads"))
|
||||||
last_tab_pos = self.insertTab(extra_tab_pos, self.tab1, _("Collections, Covers && Uploads"))
|
self.addDeviceTab(self.tab2, _('Metadata, On Device && Advanced'))
|
||||||
last_tab_pos = self.insertTab(last_tab_pos + 1, self.tab2, _('Metadata && Advanced'))
|
|
||||||
|
|
||||||
|
|
||||||
def get_pref(self, key):
|
def get_pref(self, key):
|
||||||
@ -133,15 +132,15 @@ class Tab1Config(DeviceConfigTab): # {{{
|
|||||||
|
|
||||||
self.collections_options = CollectionsGroupBox(self, device)
|
self.collections_options = CollectionsGroupBox(self, device)
|
||||||
self.l.addWidget(self.collections_options)
|
self.l.addWidget(self.collections_options)
|
||||||
self.add_widget(self.collections_options)
|
self.addDeviceWidget(self.collections_options)
|
||||||
|
|
||||||
self.covers_options = CoversGroupBox(self, device)
|
self.covers_options = CoversGroupBox(self, device)
|
||||||
self.l.addWidget(self.covers_options)
|
self.l.addWidget(self.covers_options)
|
||||||
self.add_widget(self.covers_options)
|
self.addDeviceWidget(self.covers_options)
|
||||||
|
|
||||||
self.book_uploads_options = BookUploadsGroupBox(self, device)
|
self.book_uploads_options = BookUploadsGroupBox(self, device)
|
||||||
self.l.addWidget(self.book_uploads_options)
|
self.l.addWidget(self.book_uploads_options)
|
||||||
self.add_widget(self.book_uploads_options)
|
self.addDeviceWidget(self.book_uploads_options)
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
class Tab2Config(DeviceConfigTab): # {{{
|
class Tab2Config(DeviceConfigTab): # {{{
|
||||||
@ -154,15 +153,15 @@ class Tab2Config(DeviceConfigTab): # {{{
|
|||||||
|
|
||||||
self.metadata_options = MetadataGroupBox(self, device)
|
self.metadata_options = MetadataGroupBox(self, device)
|
||||||
self.l.addWidget(self.metadata_options)
|
self.l.addWidget(self.metadata_options)
|
||||||
self.add_widget(self.metadata_options)
|
self.addDeviceWidget(self.metadata_options)
|
||||||
|
|
||||||
self.device_list_options = DeviceListGroupBox(self, device)
|
self.device_list_options = DeviceListGroupBox(self, device)
|
||||||
self.l.addWidget(self.device_list_options)
|
self.l.addWidget(self.device_list_options)
|
||||||
self.add_widget(self.device_list_options)
|
self.addDeviceWidget(self.device_list_options)
|
||||||
|
|
||||||
self.advanced_options = AdvancedGroupBox(self, device)
|
self.advanced_options = AdvancedGroupBox(self, device)
|
||||||
self.l.addWidget(self.advanced_options)
|
self.l.addWidget(self.advanced_options)
|
||||||
self.add_widget(self.advanced_options)
|
self.addDeviceWidget(self.advanced_options)
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
@ -204,19 +203,15 @@ class CollectionsGroupBox(DeviceOptionsGroupBox):
|
|||||||
self.options_layout.setObjectName("options_layout")
|
self.options_layout.setObjectName("options_layout")
|
||||||
self.setLayout(self.options_layout)
|
self.setLayout(self.options_layout)
|
||||||
|
|
||||||
self.manage_collections_checkbox = create_checkbox(
|
self.setCheckable(True)
|
||||||
_("Manage Collections"),
|
self.setChecked(device.get_pref('manage_collections'))
|
||||||
_('Create new bookshelves on the Kobo if they do not exist. This is only for firmware V2.0.0 or later.'),
|
self.setToolTip(wrap_msg(_('Create new bookshelves on the Kobo if they do not exist. This is only for firmware V2.0.0 or later.')))
|
||||||
device.get_pref('manage_collections')
|
|
||||||
)
|
|
||||||
self.manage_collections_checkbox.clicked.connect(self.manage_collections_checkbox_clicked)
|
|
||||||
|
|
||||||
self.collections_columns_label = QLabel(_('Collections Columns'))
|
self.collections_columns_label = QLabel(_('Collections Columns'))
|
||||||
self.collections_columns_edit = QLineEdit(self)
|
self.collections_columns_edit = QLineEdit(self)
|
||||||
self.collections_columns_edit.setToolTip(_('The Kobo from firmware V2.0.0 supports bookshelves.'
|
self.collections_columns_edit.setToolTip(_('The Kobo from firmware V2.0.0 supports bookshelves.'
|
||||||
' These are created on the Kobo. ' +
|
' These are created on the Kobo. ' +
|
||||||
'Specify a tags type column for automatic management.'))
|
'Specify a tags type column for automatic management.'))
|
||||||
debug_print("CollectionsGroupBox::__init__ - device.settings()=", device.settings())
|
|
||||||
self.collections_columns_edit.setText(device.get_pref('collections_columns'))
|
self.collections_columns_edit.setText(device.get_pref('collections_columns'))
|
||||||
|
|
||||||
self.create_collections_checkbox = create_checkbox(
|
self.create_collections_checkbox = create_checkbox(
|
||||||
@ -230,18 +225,16 @@ class CollectionsGroupBox(DeviceOptionsGroupBox):
|
|||||||
device.get_pref('delete_empty_collections')
|
device.get_pref('delete_empty_collections')
|
||||||
)
|
)
|
||||||
|
|
||||||
self.options_layout.addWidget(self.manage_collections_checkbox, 0, 0, 1, 1)
|
|
||||||
self.options_layout.addWidget(self.collections_columns_label, 1, 0, 1, 1)
|
self.options_layout.addWidget(self.collections_columns_label, 1, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.collections_columns_edit, 1, 1, 1, 1)
|
self.options_layout.addWidget(self.collections_columns_edit, 1, 1, 1, 1)
|
||||||
self.options_layout.addWidget(self.create_collections_checkbox, 2, 0, 1, 1)
|
self.options_layout.addWidget(self.create_collections_checkbox, 2, 0, 1, 2)
|
||||||
self.options_layout.addWidget(self.delete_empty_collections_checkbox, 2, 1, 1, 1)
|
self.options_layout.addWidget(self.delete_empty_collections_checkbox, 3, 0)#, 1, 2)
|
||||||
self.options_layout.setRowStretch(5, 1)
|
self.options_layout.setRowStretch(5, 1)
|
||||||
|
|
||||||
self.manage_collections_checkbox_clicked(self.manage_collections)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def manage_collections(self):
|
def manage_collections(self):
|
||||||
return self.manage_collections_checkbox.isChecked()
|
return self.isChecked()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def collections_columns(self):
|
def collections_columns(self):
|
||||||
@ -255,29 +248,20 @@ class CollectionsGroupBox(DeviceOptionsGroupBox):
|
|||||||
def delete_empty_collections(self):
|
def delete_empty_collections(self):
|
||||||
return self.delete_empty_collections_checkbox.isChecked()
|
return self.delete_empty_collections_checkbox.isChecked()
|
||||||
|
|
||||||
def manage_collections_checkbox_clicked(self, checked):
|
|
||||||
self.collections_columns_label.setEnabled(checked)
|
|
||||||
self.collections_columns_edit.setEnabled(checked)
|
|
||||||
self.create_collections_checkbox.setEnabled(checked)
|
|
||||||
self.delete_empty_collections_checkbox.setEnabled(checked)
|
|
||||||
|
|
||||||
|
|
||||||
class CoversGroupBox(DeviceOptionsGroupBox):
|
class CoversGroupBox(DeviceOptionsGroupBox):
|
||||||
|
|
||||||
def __init__(self, parent, device):
|
def __init__(self, parent, device):
|
||||||
super(CoversGroupBox, self).__init__(parent, device)
|
super(CoversGroupBox, self).__init__(parent, device)
|
||||||
self.setTitle(_("Covers"))
|
self.setTitle(_("Upload covers"))
|
||||||
|
|
||||||
self.options_layout = QGridLayout()
|
self.options_layout = QGridLayout()
|
||||||
self.options_layout.setObjectName("options_layout")
|
self.options_layout.setObjectName("options_layout")
|
||||||
self.setLayout(self.options_layout)
|
self.setLayout(self.options_layout)
|
||||||
|
|
||||||
self.upload_covers_checkbox = create_checkbox(
|
self.setCheckable(True)
|
||||||
_("Upload covers for books"),
|
self.setChecked(device.get_pref('upload_covers'))
|
||||||
_('Upload cover images from the calibre library when sending books to the device.'),
|
self.setToolTip(wrap_msg(_('Upload cover images from the calibre library when sending books to the device.')))
|
||||||
device.get_pref('upload_covers')
|
|
||||||
)
|
|
||||||
self.upload_covers_checkbox.clicked.connect(self.upload_covers_checkbox_clicked)
|
|
||||||
|
|
||||||
self.upload_grayscale_checkbox = create_checkbox(
|
self.upload_grayscale_checkbox = create_checkbox(
|
||||||
_('Upload Black and White Covers'),
|
_('Upload Black and White Covers'),
|
||||||
@ -291,16 +275,13 @@ class CoversGroupBox(DeviceOptionsGroupBox):
|
|||||||
' This is for firmware versions 2.3.1 and later.'),
|
' This is for firmware versions 2.3.1 and later.'),
|
||||||
device.get_pref('keep_cover_aspect'))
|
device.get_pref('keep_cover_aspect'))
|
||||||
|
|
||||||
self.options_layout.addWidget(self.upload_covers_checkbox, 0, 0, 1, 2)
|
|
||||||
self.options_layout.addWidget(self.keep_cover_aspect_checkbox, 1, 0, 1, 1)
|
self.options_layout.addWidget(self.keep_cover_aspect_checkbox, 1, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.upload_grayscale_checkbox, 1, 1, 1, 1)
|
self.options_layout.addWidget(self.upload_grayscale_checkbox, 2, 0, 1, 1)
|
||||||
self.options_layout.setRowStretch(2, 1)
|
self.options_layout.setRowStretch(3, 1)
|
||||||
|
|
||||||
self.upload_covers_checkbox_clicked(self.upload_covers)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def upload_covers(self):
|
def upload_covers(self):
|
||||||
return self.upload_covers_checkbox.isChecked()
|
return self.isChecked()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def upload_grayscale(self):
|
def upload_grayscale(self):
|
||||||
@ -310,10 +291,6 @@ class CoversGroupBox(DeviceOptionsGroupBox):
|
|||||||
def keep_cover_aspect(self):
|
def keep_cover_aspect(self):
|
||||||
return self.keep_cover_aspect_checkbox.isChecked()
|
return self.keep_cover_aspect_checkbox.isChecked()
|
||||||
|
|
||||||
def upload_covers_checkbox_clicked(self, checked):
|
|
||||||
self.upload_grayscale_checkbox.setEnabled(checked)
|
|
||||||
self.keep_cover_aspect_checkbox.setEnabled(checked)
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceListGroupBox(DeviceOptionsGroupBox):
|
class DeviceListGroupBox(DeviceOptionsGroupBox):
|
||||||
|
|
||||||
@ -349,9 +326,9 @@ class DeviceListGroupBox(DeviceOptionsGroupBox):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.options_layout.addWidget(self.show_recommendations_checkbox, 0, 0, 1, 1)
|
self.options_layout.addWidget(self.show_recommendations_checkbox, 0, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.show_archived_books_checkbox, 0, 1, 1, 1)
|
self.options_layout.addWidget(self.show_archived_books_checkbox, 1, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.show_previews_checkbox, 1, 0, 1, 1)
|
self.options_layout.addWidget(self.show_previews_checkbox, 2, 0, 1, 1)
|
||||||
self.options_layout.setRowStretch(1, 1)
|
self.options_layout.setRowStretch(3, 1)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def show_recommendations(self):
|
def show_recommendations(self):
|
||||||
@ -405,7 +382,7 @@ class AdvancedGroupBox(DeviceOptionsGroupBox):
|
|||||||
self.options_layout.addWidget(self.support_newer_firmware_checkbox, 0, 0, 1, 2)
|
self.options_layout.addWidget(self.support_newer_firmware_checkbox, 0, 0, 1, 2)
|
||||||
self.options_layout.addWidget(self.debugging_title_label, 1, 0, 1, 1)
|
self.options_layout.addWidget(self.debugging_title_label, 1, 0, 1, 1)
|
||||||
self.options_layout.addWidget(self.debugging_title_edit, 1, 1, 1, 1)
|
self.options_layout.addWidget(self.debugging_title_edit, 1, 1, 1, 1)
|
||||||
self.options_layout.setRowStretch(1, 2)
|
self.options_layout.setRowStretch(2, 2)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def support_newer_firmware(self):
|
def support_newer_firmware(self):
|
||||||
@ -420,21 +397,17 @@ class MetadataGroupBox(DeviceOptionsGroupBox):
|
|||||||
|
|
||||||
def __init__(self, parent, device):
|
def __init__(self, parent, device):
|
||||||
super(MetadataGroupBox, self).__init__(parent, device)
|
super(MetadataGroupBox, self).__init__(parent, device)
|
||||||
self.setTitle(_("Metadata Options"))
|
self.setTitle(_("Update metadata on the device"))
|
||||||
|
|
||||||
self.options_layout = QGridLayout()
|
self.options_layout = QGridLayout()
|
||||||
self.options_layout.setObjectName("options_layout")
|
self.options_layout.setObjectName("options_layout")
|
||||||
self.setLayout(self.options_layout)
|
self.setLayout(self.options_layout)
|
||||||
|
|
||||||
self.update_device_metadata_checkbox = create_checkbox(
|
self.setCheckable(True)
|
||||||
_("Update metadata on the device"),
|
self.setChecked(device.get_pref('update_device_metadata'))
|
||||||
_('Update the metadata on the device when it is connected. '
|
self.setToolTip(wrap_msg(_('Update the metadata on the device when it is connected. '
|
||||||
'Be careful when doing this as it will take time and could make the initial connection take a long time.'),
|
'Be careful when doing this as it will take time and could make the initial connection take a long time.')))
|
||||||
device.get_pref('update_device_metadata')
|
|
||||||
)
|
|
||||||
self.options_layout.addWidget(self.update_device_metadata_checkbox, 0, 0, 1, 2)
|
|
||||||
self.update_device_metadata_checkbox.clicked.connect(self.update_device_metadata_checkbox_clicked)
|
|
||||||
|
|
||||||
self.update_series_checkbox = create_checkbox(
|
self.update_series_checkbox = create_checkbox(
|
||||||
_("Set Series information"),
|
_("Set Series information"),
|
||||||
_('The book lists on the Kobo devices can display series information. '
|
_('The book lists on the Kobo devices can display series information. '
|
||||||
@ -443,7 +416,7 @@ class MetadataGroupBox(DeviceOptionsGroupBox):
|
|||||||
'Enable if you wish to set series information.'),
|
'Enable if you wish to set series information.'),
|
||||||
device.get_pref('update_series')
|
device.get_pref('update_series')
|
||||||
)
|
)
|
||||||
self.options_layout.addWidget(self.update_series_checkbox, 1, 0, 1, 2)
|
self.options_layout.addWidget(self.update_series_checkbox, 0, 0, 1, 1)
|
||||||
self.options_layout.setRowStretch(1, 1)
|
self.options_layout.setRowStretch(1, 1)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -452,11 +425,8 @@ class MetadataGroupBox(DeviceOptionsGroupBox):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def update_device_metadata(self):
|
def update_device_metadata(self):
|
||||||
return self.update_series_checkbox.isChecked()
|
return self.isChecked()
|
||||||
|
|
||||||
def update_device_metadata_checkbox_clicked(self, checked):
|
|
||||||
self.update_series_checkbox.setEnabled(checked)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from calibre.gui2 import Application
|
from calibre.gui2 import Application
|
||||||
|
@ -142,6 +142,15 @@ class TabbedDeviceConfig(QTabWidget):
|
|||||||
|
|
||||||
self.setCurrentIndex(0)
|
self.setCurrentIndex(0)
|
||||||
|
|
||||||
|
def addDeviceTab(self, tab, label):
|
||||||
|
'''
|
||||||
|
This is used to add a new tab for the device config. The new tab will always be added
|
||||||
|
as immediately before the "Extra Customization" tab.
|
||||||
|
'''
|
||||||
|
extra_tab_pos = self.indexOf(self.extra_tab)
|
||||||
|
self.insertTab(extra_tab_pos, tab, label)
|
||||||
|
|
||||||
|
|
||||||
def __getattr__(self, attr_name):
|
def __getattr__(self, attr_name):
|
||||||
"If the object doesn't have an attribute, then check each tab."
|
"If the object doesn't have an attribute, then check each tab."
|
||||||
try:
|
try:
|
||||||
@ -243,16 +252,16 @@ class DeviceConfigTab(QWidget): # {{{
|
|||||||
QWidget.__init__(self)
|
QWidget.__init__(self)
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
|
|
||||||
self.widgets = []
|
self.device_widgets = []
|
||||||
|
|
||||||
def add_widget(self, widget):
|
def addDeviceWidget(self, widget):
|
||||||
self.widgets.append(widget)
|
self.device_widgets.append(widget)
|
||||||
|
|
||||||
def __getattr__(self, attr_name):
|
def __getattr__(self, attr_name):
|
||||||
try:
|
try:
|
||||||
return super(DeviceConfigTab, self).__getattr__(attr_name)
|
return super(DeviceConfigTab, self).__getattr__(attr_name)
|
||||||
except AttributeError as ae:
|
except AttributeError as ae:
|
||||||
for awidget in self.widgets:
|
for awidget in self.device_widgets:
|
||||||
try:
|
try:
|
||||||
return getattr(awidget, attr_name)
|
return getattr(awidget, attr_name)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user