mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Viewer: Keyboard shortcuts to change number of columns (Ctrl+[ and Ctrl+])
This commit is contained in:
parent
afcb54df1e
commit
edcdafe536
@ -24,13 +24,14 @@ from read_book.mathjax import apply_mathjax
|
||||
from read_book.paged_mode import (
|
||||
anchor_funcs as paged_anchor_funcs,
|
||||
auto_scroll_action as paged_auto_scroll_action, calc_columns_per_screen,
|
||||
will_columns_per_screen_change, current_cfi,
|
||||
handle_gesture as paged_handle_gesture, handle_shortcut as paged_handle_shortcut,
|
||||
jump_to_cfi as paged_jump_to_cfi, layout as paged_layout,
|
||||
onwheel as paged_onwheel, prepare_for_resize as paged_prepare_for_resize,
|
||||
progress_frac, reset_paged_mode_globals, resize_done as paged_resize_done,
|
||||
current_cfi, get_columns_per_screen_data, handle_gesture as paged_handle_gesture,
|
||||
handle_shortcut as paged_handle_shortcut, jump_to_cfi as paged_jump_to_cfi,
|
||||
layout as paged_layout, onwheel as paged_onwheel,
|
||||
prepare_for_resize as paged_prepare_for_resize, progress_frac,
|
||||
reset_paged_mode_globals, resize_done as paged_resize_done,
|
||||
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
||||
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection
|
||||
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection,
|
||||
will_columns_per_screen_change
|
||||
)
|
||||
from read_book.referencing import (
|
||||
elem_for_ref, end_reference_mode, start_reference_mode
|
||||
@ -100,7 +101,8 @@ class IframeBoss:
|
||||
handlers = {
|
||||
'change_color_scheme': self.change_color_scheme,
|
||||
'change_font_size': self.change_font_size,
|
||||
'viewer_font_size_changed': self.viewer_font_size_changed,
|
||||
'change_number_of_columns': self.change_number_of_columns,
|
||||
'number_of_columns_changed': self.number_of_columns_changed,
|
||||
'change_scroll_speed': self.change_scroll_speed,
|
||||
'display': self.display,
|
||||
'find': self.find,
|
||||
@ -276,9 +278,18 @@ class IframeBoss:
|
||||
# apply_font_size() is a no-op
|
||||
self.relayout_on_font_size_change()
|
||||
|
||||
def viewer_font_size_changed(self, data):
|
||||
opts.base_font_size = data.base_font_size
|
||||
def change_number_of_columns(self, data):
|
||||
if current_layout_mode() is 'flow':
|
||||
return
|
||||
cdata = get_columns_per_screen_data()
|
||||
delta = int(data.delta)
|
||||
if delta is 0:
|
||||
new_val = 0
|
||||
else:
|
||||
new_val = max(1, cdata.cps + delta)
|
||||
opts.columns_per_screen[cdata.which] = new_val
|
||||
self.relayout_on_font_size_change()
|
||||
self.send_message('columns_per_screen_changed', which=cdata.which, cps=new_val)
|
||||
|
||||
def relayout_on_font_size_change(self):
|
||||
if current_layout_mode() is not 'flow' and will_columns_per_screen_change():
|
||||
@ -290,6 +301,10 @@ class IframeBoss:
|
||||
self.update_cfi()
|
||||
self.update_toc_position()
|
||||
|
||||
def number_of_columns_changed(self, data):
|
||||
opts.columns_per_screen = data.columns_per_screen
|
||||
self.relayout_on_font_size_change()
|
||||
|
||||
def change_scroll_speed(self, data):
|
||||
if data.lines_per_sec_auto?:
|
||||
opts.lines_per_sec_auto = data.lines_per_sec_auto
|
||||
|
@ -152,6 +152,11 @@ def calc_columns_per_screen():
|
||||
return cps
|
||||
|
||||
|
||||
def get_columns_per_screen_data():
|
||||
which = 'landscape' if scroll_viewport.width() > scroll_viewport.height() else 'portrait'
|
||||
return {'which': which, 'cps': calc_columns_per_screen()}
|
||||
|
||||
|
||||
def will_columns_per_screen_change():
|
||||
return calc_columns_per_screen() != cols_per_screen
|
||||
|
||||
|
@ -216,6 +216,24 @@ def shortcuts_definition():
|
||||
_('Decrease font size'),
|
||||
),
|
||||
|
||||
'increase_number_of_columns': desc(
|
||||
v"['Ctrl+]']",
|
||||
'ui',
|
||||
_('Increase number of columns'),
|
||||
),
|
||||
|
||||
'decrease_number_of_columns': desc(
|
||||
v"['Ctrl+[']",
|
||||
'ui',
|
||||
_('Decrease number of columns'),
|
||||
),
|
||||
|
||||
'reset_number_of_columns': desc(
|
||||
v"['Ctrl+Alt+c']",
|
||||
'ui',
|
||||
_('Make number of columns automatic'),
|
||||
),
|
||||
|
||||
'toggle_full_screen': desc(
|
||||
v"['F11', 'Ctrl+Shift+F']",
|
||||
'ui',
|
||||
|
@ -237,6 +237,7 @@ class View:
|
||||
'request_size': self.on_request_size,
|
||||
'scroll_to_anchor': self.on_scroll_to_anchor,
|
||||
'selectionchange': self.on_selection_change,
|
||||
'columns_per_screen_changed': self.on_columns_per_screen_changed,
|
||||
'show_chrome': self.show_chrome,
|
||||
'show_footnote': self.on_show_footnote,
|
||||
'update_cfi': self.on_update_cfi,
|
||||
@ -453,6 +454,12 @@ class View:
|
||||
self.toggle_autoscroll()
|
||||
elif data.name.startsWith('switch_color_scheme:'):
|
||||
self.switch_color_scheme(data.name.partition(':')[-1])
|
||||
elif data.name is 'increase_number_of_columns':
|
||||
self.iframe_wrapper.send_message('change_number_of_columns', delta=1)
|
||||
elif data.name is 'decrease_number_of_columns':
|
||||
self.iframe_wrapper.send_message('change_number_of_columns', delta=-1)
|
||||
elif data.name is 'reset_number_of_columns':
|
||||
self.iframe_wrapper.send_message('change_number_of_columns', delta=0)
|
||||
else:
|
||||
self.iframe_wrapper.send_message('handle_navigation_shortcut', name=data.name)
|
||||
|
||||
@ -461,6 +468,12 @@ class View:
|
||||
if ui_operations.selection_changed:
|
||||
ui_operations.selection_changed(data.text)
|
||||
|
||||
def on_columns_per_screen_changed(self, data):
|
||||
sd = get_session_data()
|
||||
cps = sd.get('columns_per_screen') or {}
|
||||
cps[data.which] = int(data.cps)
|
||||
sd.set('columns_per_screen', cps)
|
||||
|
||||
def switch_color_scheme(self, name):
|
||||
get_session_data().set('current_color_scheme', name)
|
||||
ui_operations.redisplay_book()
|
||||
|
Loading…
x
Reference in New Issue
Block a user