mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add a context menu to the viewer highlights panel
This commit is contained in:
parent
78cd807494
commit
36fd18c621
@ -9,8 +9,8 @@ from functools import lru_cache
|
|||||||
from itertools import chain
|
from itertools import chain
|
||||||
from PyQt5.Qt import (
|
from PyQt5.Qt import (
|
||||||
QColor, QFont, QHBoxLayout, QIcon, QImage, QItemSelectionModel, QKeySequence,
|
QColor, QFont, QHBoxLayout, QIcon, QImage, QItemSelectionModel, QKeySequence,
|
||||||
QLabel, QPainter, QPainterPath, QPixmap, QPushButton, QRect, QSizePolicy, Qt,
|
QLabel, QMenu, QPainter, QPainterPath, QPixmap, QPushButton, QRect, QSizePolicy,
|
||||||
QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal
|
Qt, QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal
|
||||||
)
|
)
|
||||||
|
|
||||||
from calibre.constants import (
|
from calibre.constants import (
|
||||||
@ -146,9 +146,12 @@ class Highlights(QTreeWidget):
|
|||||||
current_highlight_changed = pyqtSignal(object)
|
current_highlight_changed = pyqtSignal(object)
|
||||||
delete_requested = pyqtSignal()
|
delete_requested = pyqtSignal()
|
||||||
edit_requested = pyqtSignal()
|
edit_requested = pyqtSignal()
|
||||||
|
edit_notes_requested = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QTreeWidget.__init__(self, parent)
|
QTreeWidget.__init__(self, parent)
|
||||||
|
self.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||||
|
self.customContextMenuRequested.connect(self.show_context_menu)
|
||||||
self.default_decoration = QIcon(I('blank.png'))
|
self.default_decoration = QIcon(I('blank.png'))
|
||||||
self.setHeaderHidden(True)
|
self.setHeaderHidden(True)
|
||||||
self.num_of_items = 0
|
self.num_of_items = 0
|
||||||
@ -161,6 +164,23 @@ class Highlights(QTreeWidget):
|
|||||||
self.section_font = QFont(self.font())
|
self.section_font = QFont(self.font())
|
||||||
self.section_font.setItalic(True)
|
self.section_font.setItalic(True)
|
||||||
|
|
||||||
|
def show_context_menu(self, point):
|
||||||
|
index = self.indexAt(point)
|
||||||
|
h = index.data(Qt.UserRole)
|
||||||
|
self.context_menu = m = QMenu(self)
|
||||||
|
if h is not None:
|
||||||
|
m.addAction(QIcon(I('edit_input.png')), _('Modify this highlight'), self.edit_requested.emit)
|
||||||
|
m.addAction(QIcon(I('trash.png')), ngettext(
|
||||||
|
'Delete this highlight', 'Delete selected highlights', len(self.selectedItems())
|
||||||
|
), self.delete_requested.emit)
|
||||||
|
if h.get('notes'):
|
||||||
|
m.addAction(QIcon(I('modified.png')), _('Edit notes for this highlight'), self.edit_notes_requested.emit)
|
||||||
|
m.addSeparator()
|
||||||
|
m.addAction(_('Expand all'), self.expandAll)
|
||||||
|
m.addAction(_('Collapse all'), self.collapseAll)
|
||||||
|
self.context_menu.popup(self.mapToGlobal(point))
|
||||||
|
return True
|
||||||
|
|
||||||
def current_item_changed(self, current, previous):
|
def current_item_changed(self, current, previous):
|
||||||
self.current_highlight_changed.emit(current.data(0, Qt.UserRole) if current is not None else None)
|
self.current_highlight_changed.emit(current.data(0, Qt.UserRole) if current is not None else None)
|
||||||
|
|
||||||
@ -397,6 +417,7 @@ class HighlightsPanel(QWidget):
|
|||||||
h.jump_to_highlight.connect(self.jump_to_highlight)
|
h.jump_to_highlight.connect(self.jump_to_highlight)
|
||||||
h.delete_requested.connect(self.remove_highlight)
|
h.delete_requested.connect(self.remove_highlight)
|
||||||
h.edit_requested.connect(self.edit_highlight)
|
h.edit_requested.connect(self.edit_highlight)
|
||||||
|
h.edit_notes_requested.connect(self.edit_notes)
|
||||||
h.current_highlight_changed.connect(self.current_highlight_changed)
|
h.current_highlight_changed.connect(self.current_highlight_changed)
|
||||||
self.load = h.load
|
self.load = h.load
|
||||||
self.refresh = h.refresh
|
self.refresh = h.refresh
|
||||||
@ -467,6 +488,9 @@ class HighlightsPanel(QWidget):
|
|||||||
return self.no_selected_highlight()
|
return self.no_selected_highlight()
|
||||||
self.request_highlight_action.emit(h['uuid'], 'edit')
|
self.request_highlight_action.emit(h['uuid'], 'edit')
|
||||||
|
|
||||||
|
def edit_notes(self):
|
||||||
|
self.notes_display.edit_notes()
|
||||||
|
|
||||||
def remove_highlight(self):
|
def remove_highlight(self):
|
||||||
highlights = tuple(self.highlights.selected_highlights)
|
highlights = tuple(self.highlights.selected_highlights)
|
||||||
if not highlights:
|
if not highlights:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user