mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Edit metadata: Comments editor: Add a shortcut (Ctrl+L) to insert a link. Fixes #1927008 [feature request: keybinding for "Insert link or image"](https://bugs.launchpad.net/calibre/+bug/1927008)
This commit is contained in:
parent
93e3ddab91
commit
dd3179734d
@ -241,6 +241,7 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
|
|||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QTextEdit.__init__(self, parent)
|
QTextEdit.__init__(self, parent)
|
||||||
|
self.insert_link_shortcut = QKeySequence('Ctrl+l', QKeySequence.SequenceFormat.PortableText)
|
||||||
self.setTabChangesFocus(True)
|
self.setTabChangesFocus(True)
|
||||||
self.document().setDefaultStyleSheet(css() + '\n\nli { margin-top: 0.5ex; margin-bottom: 0.5ex; }')
|
self.document().setDefaultStyleSheet(css() + '\n\nli { margin-top: 0.5ex; margin-bottom: 0.5ex; }')
|
||||||
font = self.font()
|
font = self.font()
|
||||||
@ -255,44 +256,47 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
|
|||||||
self._parent = weakref.ref(parent)
|
self._parent = weakref.ref(parent)
|
||||||
self.comments_pat = re.compile(r'<!--.*?-->', re.DOTALL)
|
self.comments_pat = re.compile(r'<!--.*?-->', re.DOTALL)
|
||||||
|
|
||||||
for rec in (
|
def r(name, icon, text, checkable=False, shortcut=None):
|
||||||
('bold', 'format-text-bold', _('Bold'), True),
|
|
||||||
('italic', 'format-text-italic', _('Italic'), True),
|
|
||||||
('underline', 'format-text-underline', _('Underline'), True),
|
|
||||||
('strikethrough', 'format-text-strikethrough', _('Strikethrough'), True),
|
|
||||||
('superscript', 'format-text-superscript', _('Superscript'), True),
|
|
||||||
('subscript', 'format-text-subscript', _('Subscript'), True),
|
|
||||||
('ordered_list', 'format-list-ordered', _('Ordered list'), True),
|
|
||||||
('unordered_list', 'format-list-unordered', _('Unordered list'), True),
|
|
||||||
|
|
||||||
('align_left', 'format-justify-left', _('Align left'), True),
|
|
||||||
('align_center', 'format-justify-center', _('Align center'), True),
|
|
||||||
('align_right', 'format-justify-right', _('Align right'), True),
|
|
||||||
('align_justified', 'format-justify-fill', _('Align justified'), True),
|
|
||||||
('undo', 'edit-undo', _('Undo'), ),
|
|
||||||
('redo', 'edit-redo', _('Redo'), ),
|
|
||||||
('remove_format', 'edit-clear', _('Remove formatting'), ),
|
|
||||||
('copy', 'edit-copy', _('Copy'), ),
|
|
||||||
('paste', 'edit-paste', _('Paste'), ),
|
|
||||||
('paste_and_match_style', 'edit-paste', _('Paste and match style'), ),
|
|
||||||
('cut', 'edit-cut', _('Cut'), ),
|
|
||||||
('indent', 'format-indent-more', _('Increase indentation'), ),
|
|
||||||
('outdent', 'format-indent-less', _('Decrease indentation'), ),
|
|
||||||
('select_all', 'edit-select-all', _('Select all'), ),
|
|
||||||
|
|
||||||
('color', 'format-text-color', _('Foreground color')),
|
|
||||||
('background', 'format-fill-color', _('Background color')),
|
|
||||||
('insert_link', 'insert-link', _('Insert link or image'),),
|
|
||||||
('insert_hr', 'format-text-hr', _('Insert separator'),),
|
|
||||||
('clear', 'trash', _('Clear')),
|
|
||||||
):
|
|
||||||
name, icon, text = rec[:3]
|
|
||||||
checkable = len(rec) == 4
|
|
||||||
ac = QAction(QIcon(I(icon + '.png')), text, self)
|
ac = QAction(QIcon(I(icon + '.png')), text, self)
|
||||||
if checkable:
|
if checkable:
|
||||||
ac.setCheckable(checkable)
|
ac.setCheckable(checkable)
|
||||||
setattr(self, 'action_'+name, ac)
|
setattr(self, 'action_'+name, ac)
|
||||||
ac.triggered.connect(getattr(self, 'do_' + name))
|
ac.triggered.connect(getattr(self, 'do_' + name))
|
||||||
|
if shortcut is not None:
|
||||||
|
sc = shortcut if isinstance(shortcut, QKeySequence) else QKeySequence(shortcut)
|
||||||
|
ac.setShortcut(sc)
|
||||||
|
ac.setToolTip(text + f' [{sc.toString(QKeySequence.SequenceFormat.NativeText)}]')
|
||||||
|
self.addAction(ac)
|
||||||
|
|
||||||
|
r('bold', 'format-text-bold', _('Bold'), True, QKeySequence.StandardKey.Bold)
|
||||||
|
r('italic', 'format-text-italic', _('Italic'), True, QKeySequence.StandardKey.Italic)
|
||||||
|
r('underline', 'format-text-underline', _('Underline'), True, QKeySequence.StandardKey.Underline)
|
||||||
|
r('strikethrough', 'format-text-strikethrough', _('Strikethrough'), True)
|
||||||
|
r('superscript', 'format-text-superscript', _('Superscript'), True)
|
||||||
|
r('subscript', 'format-text-subscript', _('Subscript'), True)
|
||||||
|
r('ordered_list', 'format-list-ordered', _('Ordered list'), True)
|
||||||
|
r('unordered_list', 'format-list-unordered', _('Unordered list'), True)
|
||||||
|
|
||||||
|
r('align_left', 'format-justify-left', _('Align left'), True)
|
||||||
|
r('align_center', 'format-justify-center', _('Align center'), True)
|
||||||
|
r('align_right', 'format-justify-right', _('Align right'), True)
|
||||||
|
r('align_justified', 'format-justify-fill', _('Align justified'), True)
|
||||||
|
r('undo', 'edit-undo', _('Undo'), shortcut=QKeySequence.StandardKey.Undo)
|
||||||
|
r('redo', 'edit-redo', _('Redo'), shortcut=QKeySequence.StandardKey.Redo)
|
||||||
|
r('remove_format', 'edit-clear', _('Remove formatting'))
|
||||||
|
r('copy', 'edit-copy', _('Copy'), shortcut=QKeySequence.StandardKey.Copy)
|
||||||
|
r('paste', 'edit-paste', _('Paste'), shortcut=QKeySequence.StandardKey.Paste)
|
||||||
|
r('paste_and_match_style', 'edit-paste', _('Paste and match style'))
|
||||||
|
r('cut', 'edit-cut', _('Cut'), shortcut=QKeySequence.StandardKey.Cut)
|
||||||
|
r('indent', 'format-indent-more', _('Increase indentation'))
|
||||||
|
r('outdent', 'format-indent-less', _('Decrease indentation'))
|
||||||
|
r('select_all', 'edit-select-all', _('Select all'), shortcut=QKeySequence.StandardKey.SelectAll)
|
||||||
|
|
||||||
|
r('color', 'format-text-color', _('Foreground color'))
|
||||||
|
r('background', 'format-fill-color', _('Background color'))
|
||||||
|
r('insert_link', 'insert-link', _('Insert link or image'), shortcut=self.insert_link_shortcut)
|
||||||
|
r('insert_hr', 'format-text-hr', _('Insert separator'),)
|
||||||
|
r('clear', 'trash', _('Clear'))
|
||||||
|
|
||||||
self.action_block_style = QAction(QIcon(I('format-text-heading.png')),
|
self.action_block_style = QAction(QIcon(I('format-text-heading.png')),
|
||||||
_('Style text block'), self)
|
_('Style text block'), self)
|
||||||
@ -332,21 +336,6 @@ class EditorWidget(QTextEdit, LineEditECM): # {{{
|
|||||||
self.textChanged.connect(self.data_changed)
|
self.textChanged.connect(self.data_changed)
|
||||||
self.update_cursor_position_actions()
|
self.update_cursor_position_actions()
|
||||||
|
|
||||||
def keyPressEvent(self, ev):
|
|
||||||
if ev.matches(QKeySequence.StandardKey.Bold):
|
|
||||||
ev.accept()
|
|
||||||
self.action_bold.toggle(), self.action_bold.trigger()
|
|
||||||
return
|
|
||||||
if ev.matches(QKeySequence.StandardKey.Italic):
|
|
||||||
ev.accept()
|
|
||||||
self.action_italic.toggle(), self.action_italic.trigger()
|
|
||||||
return
|
|
||||||
if ev.matches(QKeySequence.StandardKey.Underline):
|
|
||||||
ev.accept()
|
|
||||||
self.action_underline.toggle(), self.action_underline.trigger()
|
|
||||||
return
|
|
||||||
return QTextEdit.keyPressEvent(self, ev)
|
|
||||||
|
|
||||||
def update_clipboard_actions(self, copy_available):
|
def update_clipboard_actions(self, copy_available):
|
||||||
self.action_copy.setEnabled(copy_available)
|
self.action_copy.setEnabled(copy_available)
|
||||||
self.action_cut.setEnabled(copy_available)
|
self.action_cut.setEnabled(copy_available)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user