mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
E-book viewer: Allow quick saving and loading of viewer settings as 'themes'. Fixes #1024611 ([Enhancements] Ebook viewer : Display profiles)
This commit is contained in:
parent
d681396a15
commit
408e205ec7
@ -10,10 +10,11 @@ __docformat__ = 'restructuredtext en'
|
|||||||
import zipfile
|
import zipfile
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from PyQt4.Qt import QFont, QVariant, QDialog, Qt, QColor, QColorDialog
|
from PyQt4.Qt import (QFont, QVariant, QDialog, Qt, QColor, QColorDialog,
|
||||||
|
QMenu, QInputDialog)
|
||||||
|
|
||||||
from calibre.constants import iswindows, isxp
|
from calibre.constants import iswindows, isxp
|
||||||
from calibre.utils.config import Config, StringConfig
|
from calibre.utils.config import Config, StringConfig, JSONConfig
|
||||||
from calibre.gui2.shortcuts import ShortcutConfig
|
from calibre.gui2.shortcuts import ShortcutConfig
|
||||||
from calibre.gui2.viewer.config_ui import Ui_Dialog
|
from calibre.gui2.viewer.config_ui import Ui_Dialog
|
||||||
from calibre.utils.localization import get_language
|
from calibre.utils.localization import get_language
|
||||||
@ -112,8 +113,55 @@ class ConfigDialog(QDialog, Ui_Dialog):
|
|||||||
self.hyphenate_default_lang.setVisible(False)
|
self.hyphenate_default_lang.setVisible(False)
|
||||||
self.hyphenate_label.setVisible(False)
|
self.hyphenate_label.setVisible(False)
|
||||||
|
|
||||||
|
self.themes = JSONConfig('viewer_themes')
|
||||||
|
self.save_theme_button.clicked.connect(self.save_theme)
|
||||||
|
self.load_theme_button.m = m = QMenu()
|
||||||
|
self.load_theme_button.setMenu(m)
|
||||||
|
m.triggered.connect(self.load_theme)
|
||||||
|
self.delete_theme_button.m = m = QMenu()
|
||||||
|
self.delete_theme_button.setMenu(m)
|
||||||
|
m.triggered.connect(self.delete_theme)
|
||||||
|
|
||||||
opts = config().parse()
|
opts = config().parse()
|
||||||
self.load_options(opts)
|
self.load_options(opts)
|
||||||
|
self.init_load_themes()
|
||||||
|
|
||||||
|
def save_theme(self):
|
||||||
|
themename, ok = QInputDialog.getText(self, _('Theme name'),
|
||||||
|
_('Choose a name for this theme'))
|
||||||
|
if not ok: return
|
||||||
|
themename = unicode(themename).strip()
|
||||||
|
if not themename: return
|
||||||
|
c = config('')
|
||||||
|
c.add_opt('theme_name_xxx', default=themename)
|
||||||
|
self.save_options(c)
|
||||||
|
self.themes['theme_'+themename] = c.src
|
||||||
|
self.init_load_themes()
|
||||||
|
self.theming_message.setText(_('Saved settings as the theme named: %s')%
|
||||||
|
themename)
|
||||||
|
|
||||||
|
def init_load_themes(self):
|
||||||
|
for x in ('load', 'delete'):
|
||||||
|
m = getattr(self, '%s_theme_button'%x).menu()
|
||||||
|
m.clear()
|
||||||
|
for x in self.themes.iterkeys():
|
||||||
|
title = x[len('theme_'):]
|
||||||
|
ac = m.addAction(title)
|
||||||
|
ac.theme_id = x
|
||||||
|
|
||||||
|
def load_theme(self, ac):
|
||||||
|
theme = ac.theme_id
|
||||||
|
raw = self.themes[theme]
|
||||||
|
self.load_options(config(raw).parse())
|
||||||
|
self.theming_message.setText(_('Loaded settings from the theme %s')%
|
||||||
|
theme[len('theme_'):])
|
||||||
|
|
||||||
|
def delete_theme(self, ac):
|
||||||
|
theme = ac.theme_id
|
||||||
|
del self.themes[theme]
|
||||||
|
self.init_load_themes()
|
||||||
|
self.theming_message.setText(_('Deleted the theme named: %s')%
|
||||||
|
theme[len('theme_'):])
|
||||||
|
|
||||||
def restore_defaults(self):
|
def restore_defaults(self):
|
||||||
opts = config('').parse()
|
opts = config('').parse()
|
||||||
@ -193,11 +241,10 @@ class ConfigDialog(QDialog, Ui_Dialog):
|
|||||||
' first complete that, by clicking outside the '
|
' first complete that, by clicking outside the '
|
||||||
' shortcut editing box.'), show=True)
|
' shortcut editing box.'), show=True)
|
||||||
return
|
return
|
||||||
self.save_options()
|
self.save_options(config())
|
||||||
return QDialog.accept(self, *args)
|
return QDialog.accept(self, *args)
|
||||||
|
|
||||||
def save_options(self):
|
def save_options(self, c):
|
||||||
c = config()
|
|
||||||
c.set('serif_family', unicode(self.serif_family.currentFont().family()))
|
c.set('serif_family', unicode(self.serif_family.currentFont().family()))
|
||||||
c.set('sans_family', unicode(self.sans_family.currentFont().family()))
|
c.set('sans_family', unicode(self.sans_family.currentFont().family()))
|
||||||
c.set('mono_family', unicode(self.mono_family.currentFont().family()))
|
c.set('mono_family', unicode(self.mono_family.currentFont().family()))
|
||||||
@ -230,4 +277,3 @@ class ConfigDialog(QDialog, Ui_Dialog):
|
|||||||
c.set(x+'_margin', int(getattr(self, 'opt_%s_margin'%x).value()))
|
c.set(x+'_margin', int(getattr(self, 'opt_%s_margin'%x).value()))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,6 +18,16 @@
|
|||||||
<normaloff>:/images/config.png</normaloff>:/images/config.png</iconset>
|
<normaloff>:/images/config.png</normaloff>:/images/config.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QTabWidget" name="tabs">
|
<widget class="QTabWidget" name="tabs">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
@ -627,16 +637,131 @@ QToolBox::tab:hover {
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_4">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>&Theming</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QFormLayout" name="formLayout_7">
|
||||||
|
<property name="fieldGrowthPolicy">
|
||||||
|
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_23">
|
||||||
|
<property name="text">
|
||||||
|
<string>You can save and load the viewer settings as <i>themes</i></string>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
<spacer name="verticalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="standardButtons">
|
<property name="sizeHint" stdset="0">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults</set>
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
</property>
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_15">
|
||||||
|
<property name="text">
|
||||||
|
<string>Save current settings as a theme:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>save_theme_button</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QToolButton" name="save_theme_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Save</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/save.png</normaloff>:/images/save.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_20">
|
||||||
|
<property name="text">
|
||||||
|
<string>Load a previously saved theme:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>load_theme_button</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QToolButton" name="load_theme_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Load</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/document_open.png</normaloff>:/images/document_open.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="popupMode">
|
||||||
|
<enum>QToolButton::InstantPopup</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_21">
|
||||||
|
<property name="text">
|
||||||
|
<string>Delete a saved theme:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QToolButton" name="delete_theme_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/trash.png</normaloff>:/images/trash.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="popupMode">
|
||||||
|
<enum>QToolButton::InstantPopup</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="theming_message">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user