Edit Book: Add a setting to control icon size for the toolbars (Preferences->Toolbars)

This commit is contained in:
Kovid Goyal 2015-09-17 09:23:03 +05:30
parent c510fdc2c6
commit ec2dfb5d74
6 changed files with 30 additions and 5 deletions

View File

@ -70,6 +70,7 @@ d['templates'] = {}
d['auto_close_tags'] = True d['auto_close_tags'] = True
d['restore_book_state'] = True d['restore_book_state'] = True
d['editor_accepts_drops'] = True d['editor_accepts_drops'] = True
d['toolbar_icon_size'] = 24
del d del d
ucase_map = {l:string.ascii_uppercase[i] for i, l in enumerate(string.ascii_lowercase)} ucase_map = {l:string.ascii_uppercase[i] for i, l in enumerate(string.ascii_lowercase)}

View File

@ -148,6 +148,7 @@ class Boss(QObject):
def preferences(self): def preferences(self):
orig_spell = tprefs['inline_spell_check'] orig_spell = tprefs['inline_spell_check']
orig_size = tprefs['toolbar_icon_size']
p = Preferences(self.gui) p = Preferences(self.gui)
ret = p.exec_() ret = p.exec_()
if p.dictionaries_changed: if p.dictionaries_changed:
@ -158,6 +159,12 @@ class Boss(QObject):
for ed in editors.itervalues(): for ed in editors.itervalues():
if hasattr(ed, 'populate_toolbars'): if hasattr(ed, 'populate_toolbars'):
ed.populate_toolbars() ed.populate_toolbars()
if orig_size != tprefs['toolbar_icon_size']:
for ed in editors.itervalues():
if hasattr(ed, 'bars'):
for bar in ed.bars:
bar.setIconSize(QSize(tprefs['toolbar_icon_size'], tprefs['toolbar_icon_size']))
if ret == p.Accepted: if ret == p.Accepted:
setup_cssutils_serialization() setup_cssutils_serialization()
self.gui.apply_settings() self.gui.apply_settings()

View File

@ -10,7 +10,7 @@ import sys
from functools import partial from functools import partial
from PyQt5.Qt import ( from PyQt5.Qt import (
QMainWindow, Qt, QApplication, pyqtSignal, QLabel, QIcon, QFormLayout, QMainWindow, Qt, QApplication, pyqtSignal, QLabel, QIcon, QFormLayout, QSize,
QDialog, QSpinBox, QCheckBox, QDialogButtonBox, QToolButton, QMenu, QInputDialog) QDialog, QSpinBox, QCheckBox, QDialogButtonBox, QToolButton, QMenu, QInputDialog)
from calibre.gui2 import error_dialog from calibre.gui2 import error_dialog
@ -284,6 +284,7 @@ class Editor(QMainWindow):
for x in self.bars: for x in self.bars:
x.setFloatable(False) x.setFloatable(False)
x.topLevelChanged.connect(self.toolbar_floated) x.topLevelChanged.connect(self.toolbar_floated)
x.setIconSize(QSize(tprefs['toolbar_icon_size'], tprefs['toolbar_icon_size']))
self.restore_state() self.restore_state()
def toolbar_floated(self, floating): def toolbar_floated(self, floating):

View File

@ -11,7 +11,7 @@ from functools import partial
from PyQt5.Qt import ( from PyQt5.Qt import (
QMainWindow, Qt, QApplication, pyqtSignal, QMenu, qDrawShadeRect, QPainter, QMainWindow, Qt, QApplication, pyqtSignal, QMenu, qDrawShadeRect, QPainter,
QImage, QColor, QIcon, QPixmap, QToolButton, QAction, QTextCursor) QImage, QColor, QIcon, QPixmap, QToolButton, QAction, QTextCursor, QSize)
from calibre import prints from calibre import prints
from calibre.constants import DEBUG from calibre.constants import DEBUG
@ -25,7 +25,8 @@ from calibre.gui2.tweak_book.editor.help import help_url
from calibre.gui2.tweak_book.editor.text import TextEdit from calibre.gui2.tweak_book.editor.text import TextEdit
from calibre.utils.icu import utf16_length from calibre.utils.icu import utf16_length
def create_icon(text, palette=None, sz=32, divider=2): def create_icon(text, palette=None, sz=None, divider=2):
sz = sz or tprefs['toolbar_icon_size']
if palette is None: if palette is None:
palette = QApplication.palette() palette = QApplication.palette()
img = QImage(sz, sz, QImage.Format_ARGB32) img = QImage(sz, sz, QImage.Format_ARGB32)
@ -34,7 +35,7 @@ def create_icon(text, palette=None, sz=32, divider=2):
p.setRenderHints(p.TextAntialiasing | p.Antialiasing) p.setRenderHints(p.TextAntialiasing | p.Antialiasing)
qDrawShadeRect(p, img.rect(), palette, fill=QColor('#ffffff'), lineWidth=1, midLineWidth=1) qDrawShadeRect(p, img.rect(), palette, fill=QColor('#ffffff'), lineWidth=1, midLineWidth=1)
f = p.font() f = p.font()
f.setFamily('Liberation Sans'), f.setPixelSize(sz // divider), f.setBold(True) f.setFamily('Liberation Sans'), f.setPixelSize(int(sz // divider)), f.setBold(True)
p.setFont(f), p.setPen(Qt.black) p.setFont(f), p.setPen(Qt.black)
p.drawText(img.rect().adjusted(2, 2, -2, -2), Qt.AlignCenter, text) p.drawText(img.rect().adjusted(2, 2, -2, -2), Qt.AlignCenter, text)
p.end() p.end()
@ -301,6 +302,7 @@ class Editor(QMainWindow):
for x in self.bars: for x in self.bars:
x.setFloatable(False) x.setFloatable(False)
x.topLevelChanged.connect(self.toolbar_floated) x.topLevelChanged.connect(self.toolbar_floated)
x.setIconSize(QSize(tprefs['toolbar_icon_size'], tprefs['toolbar_icon_size']))
def toolbar_floated(self, floating): def toolbar_floated(self, floating):
if not floating: if not floating:

View File

@ -425,6 +425,14 @@ class ToolbarSettings(QWidget):
self.toggle_visibility(False) self.toggle_visibility(False)
self.bars.currentIndexChanged.connect(self.bar_changed) self.bars.currentIndexChanged.connect(self.bar_changed)
self.toolbar_icon_size = ics = QSpinBox(self)
ics.setMinimum(16), ics.setMaximum(128), ics.setSuffix(' px'), ics.setValue(tprefs['toolbar_icon_size'])
ics.setToolTip('<p>' + _('Adjust the size of icons on all toolbars'))
r = l.rowCount()
self.toolbar_icon_size_label = la = QLabel(_('Toolbar &icon size:'))
la.setBuddy(ics)
l.addWidget(la, r, 0), l.addWidget(ics, r, 1)
def read_settings(self, prefs=None): def read_settings(self, prefs=None):
prefs = prefs or tprefs prefs = prefs or tprefs
val = self.original_settings = {} val = self.original_settings = {}
@ -541,9 +549,12 @@ class ToolbarSettings(QWidget):
self.read_settings(tprefs.defaults) self.read_settings(tprefs.defaults)
self.original_settings = o self.original_settings = o
self.build_lists() self.build_lists()
self.toolbar_icon_size.setValue(tprefs.defaults['toolbar_icon_size'])
self.changed_signal.emit() self.changed_signal.emit()
def commit(self): def commit(self):
if self.toolbar_icon_size.value() != tprefs['toolbar_icon_size']:
tprefs['toolbar_icon_size'] = self.toolbar_icon_size.value()
if self.original_settings != self.current_settings: if self.original_settings != self.current_settings:
self.changed = True self.changed = True
with tprefs: with tprefs:

View File

@ -14,7 +14,7 @@ from future_builtins import map
from PyQt5.Qt import ( from PyQt5.Qt import (
QDockWidget, Qt, QLabel, QIcon, QAction, QApplication, QWidget, QEvent, QDockWidget, Qt, QLabel, QIcon, QAction, QApplication, QWidget, QEvent,
QVBoxLayout, QStackedWidget, QTabWidget, QImage, QPixmap, pyqtSignal, QVBoxLayout, QStackedWidget, QTabWidget, QImage, QPixmap, pyqtSignal,
QMenu, QHBoxLayout, QTimer, QUrl) QMenu, QHBoxLayout, QTimer, QUrl, QSize)
from calibre import prints from calibre import prints
from calibre.constants import __appname__, get_version, isosx, DEBUG from calibre.constants import __appname__, get_version, isosx, DEBUG
@ -289,6 +289,8 @@ class Main(MainWindow):
self.setCorner(getattr(Qt, '%s%sCorner' % tuple(map(capitalize, (v, h)))), area) self.setCorner(getattr(Qt, '%s%sCorner' % tuple(map(capitalize, (v, h)))), area)
self.preview.apply_settings() self.preview.apply_settings()
self.live_css.apply_theme() self.live_css.apply_theme()
for bar in (self.global_bar, self.tools_bar, self.plugins_bar):
bar.setIconSize(QSize(tprefs['toolbar_icon_size'], tprefs['toolbar_icon_size']))
def show_status_message(self, msg, timeout=5): def show_status_message(self, msg, timeout=5):
self.status_bar.showMessage(msg, int(timeout*1000)) self.status_bar.showMessage(msg, int(timeout*1000))
@ -609,6 +611,7 @@ class Main(MainWindow):
b = self.addToolBar(text) b = self.addToolBar(text)
b.setObjectName(name) # Needed for saveState b.setObjectName(name) # Needed for saveState
actions[name] = b.toggleViewAction() actions[name] = b.toggleViewAction()
b.setIconSize(QSize(tprefs['toolbar_icon_size'], tprefs['toolbar_icon_size']))
return b return b
self.global_bar = create(_('Book tool bar'), 'global') self.global_bar = create(_('Book tool bar'), 'global')
self.tools_bar = create(_('Tools tool bar'), 'tools') self.tools_bar = create(_('Tools tool bar'), 'tools')