Edit book: Add a shortcut Ctrl+M to merge selected files. Fixes #2053144 [ebook-edit: Keyboard shortcut for merging files](https://bugs.launchpad.net/calibre/+bug/2053144)

This commit is contained in:
Kovid Goyal 2024-02-29 13:11:38 +05:30
parent 275cfd4875
commit 83a6ab947f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 25 additions and 0 deletions

View File

@ -1911,6 +1911,9 @@ class Boss(QObject):
from calibre.gui2.tweak_book.editor.snippets import UserSnippets from calibre.gui2.tweak_book.editor.snippets import UserSnippets
UserSnippets(self.gui).exec() UserSnippets(self.gui).exec()
def merge_files(self):
self.gui.file_list.merge_files()
# Shutdown {{{ # Shutdown {{{
def quit(self): def quit(self):

View File

@ -766,6 +766,22 @@ class FileList(QTreeWidget, OpenWithHandler):
return (category, i) return (category, i)
return (None, -1) return (None, -1)
def merge_files(self):
sel = self.selectedItems()
selected_map = defaultdict(list)
for item in sel:
selected_map[str(item.data(0, CATEGORY_ROLE) or '')].append(str(item.data(0, NAME_ROLE) or ''))
for items in selected_map.values():
items.sort(key=self.index_of_name)
if len(selected_map['text']) > 1:
self.start_merge('text', selected_map['text'])
elif len(selected_map['styles']) > 1:
self.start_merge('styles', selected_map['styles'])
else:
error_dialog(self, _('Cannot merge'), _(
'No files selected. Select two or more HTML files or two or more CSS files in the Files browser before trying to merge'), show=True)
def start_merge(self, category, names): def start_merge(self, category, names):
d = MergeDialog(names, self) d = MergeDialog(names, self)
if d.exec() == QDialog.DialogCode.Accepted and d.ans: if d.exec() == QDialog.DialogCode.Accepted and d.ans:
@ -1264,6 +1280,9 @@ class FileListWidget(QWidget):
def restore_temp_names(self): def restore_temp_names(self):
self.file_list.restore_temp_names() self.file_list.restore_temp_names()
def merge_files(self):
self.file_list.merge_files()
@property @property
def searchable_names(self): def searchable_names(self):
return self.file_list.searchable_names return self.file_list.searchable_names

View File

@ -559,6 +559,9 @@ class Main(MainWindow):
self.action_manage_snippets = treg( self.action_manage_snippets = treg(
'snippets.png', _('Manage &Snippets'), self.boss.manage_snippets, 'manage-snippets', (), _( 'snippets.png', _('Manage &Snippets'), self.boss.manage_snippets, 'manage-snippets', (), _(
'Manage user created Snippets')) 'Manage user created Snippets'))
self.action_merge_files = treg(
'merge.png', _('&Merge files'), self.boss.merge_files, 'merge-files', 'Ctrl+M', _(
'Merge two or more selected files'))
self.plugin_menu_actions = [] self.plugin_menu_actions = []