mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-30 23:00:21 -04:00
Add an edit button at the bototm of the notes display panel
This commit is contained in:
parent
992dff8c01
commit
6106cab7ee
@ -5,8 +5,8 @@ import os
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QAbstractItemView, QCheckBox, QDialog, QDialogButtonBox, QFont, QHBoxLayout, QIcon,
|
QAbstractItemView, QCheckBox, QDialog, QDialogButtonBox, QFont, QHBoxLayout, QIcon,
|
||||||
QKeySequence, QLabel, QMenu, QSize, QSplitter, Qt, QTimer, QToolButton, QTreeWidget,
|
QKeySequence, QLabel, QMenu, QPushButton, QSize, QSplitter, Qt, QTimer, QToolButton,
|
||||||
QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal,
|
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal,
|
||||||
)
|
)
|
||||||
|
|
||||||
from calibre import sanitize_file_name
|
from calibre import sanitize_file_name
|
||||||
@ -67,6 +67,7 @@ class ResultsList(QTreeWidget):
|
|||||||
self.currentItemChanged.connect(self.current_item_changed)
|
self.currentItemChanged.connect(self.current_item_changed)
|
||||||
self.number_of_results = 0
|
self.number_of_results = 0
|
||||||
self.item_map = []
|
self.item_map = []
|
||||||
|
self.fi_map = {}
|
||||||
|
|
||||||
def update_item(self, field, item_id):
|
def update_item(self, field, item_id):
|
||||||
nd = current_db().notes_data_for(field, item_id)
|
nd = current_db().notes_data_for(field, item_id)
|
||||||
@ -131,6 +132,11 @@ class ResultsList(QTreeWidget):
|
|||||||
i %= self.number_of_results
|
i %= self.number_of_results
|
||||||
self.setCurrentItem(self.item_map[i])
|
self.setCurrentItem(self.item_map[i])
|
||||||
|
|
||||||
|
def edit_note_for(self, field, item_id):
|
||||||
|
item = self.fi_map.get((field, item_id))
|
||||||
|
if item is not None:
|
||||||
|
self.edit_note(item)
|
||||||
|
|
||||||
def edit_note(self, item):
|
def edit_note(self, item):
|
||||||
r = item.data(0, Qt.ItemDataRole.UserRole)
|
r = item.data(0, Qt.ItemDataRole.UserRole)
|
||||||
if isinstance(r, dict):
|
if isinstance(r, dict):
|
||||||
@ -181,6 +187,7 @@ class ResultsList(QTreeWidget):
|
|||||||
self.delegate.emphasize_text = emphasize_text
|
self.delegate.emphasize_text = emphasize_text
|
||||||
self.number_of_results = 0
|
self.number_of_results = 0
|
||||||
self.item_map = []
|
self.item_map = []
|
||||||
|
self.fi_map = {}
|
||||||
db = current_db()
|
db = current_db()
|
||||||
fm = db.field_metadata
|
fm = db.field_metadata
|
||||||
field_map = {f: {'title': fm[f].get('name') or f, 'matches': []} for f in db.field_supports_notes()}
|
field_map = {f: {'title': fm[f].get('name') or f, 'matches': []} for f in db.field_supports_notes()}
|
||||||
@ -198,6 +205,7 @@ class ResultsList(QTreeWidget):
|
|||||||
for result in entry['matches']:
|
for result in entry['matches']:
|
||||||
item = QTreeWidgetItem(section, [' '], 2)
|
item = QTreeWidgetItem(section, [' '], 2)
|
||||||
self.item_map.append(item)
|
self.item_map.append(item)
|
||||||
|
self.fi_map[(field, result['item_id'])] = item
|
||||||
item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemNeverHasChildren)
|
item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemNeverHasChildren)
|
||||||
item.setData(0, Qt.ItemDataRole.UserRole, result)
|
item.setData(0, Qt.ItemDataRole.UserRole, result)
|
||||||
item.setData(0, Qt.ItemDataRole.UserRole + 1, self.number_of_results)
|
item.setData(0, Qt.ItemDataRole.UserRole + 1, self.number_of_results)
|
||||||
@ -342,6 +350,7 @@ class SearchInput(QWidget):
|
|||||||
class NoteDisplay(QWidget):
|
class NoteDisplay(QWidget):
|
||||||
|
|
||||||
field = item_id = None
|
field = item_id = None
|
||||||
|
edit_requested = pyqtSignal(str, int)
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -355,6 +364,16 @@ class NoteDisplay(QWidget):
|
|||||||
self.html_display = hd = Display(self)
|
self.html_display = hd = Display(self)
|
||||||
l.addWidget(hd)
|
l.addWidget(hd)
|
||||||
|
|
||||||
|
self.edit_button = eb = QPushButton(QIcon.ic('edit_input.png'), _('Edit'))
|
||||||
|
eb.setFocusPolicy(Qt.FocusPolicy.NoFocus)
|
||||||
|
l.addWidget(eb)
|
||||||
|
eb.clicked.connect(self.edit)
|
||||||
|
eb.setVisible(False)
|
||||||
|
|
||||||
|
def edit(self):
|
||||||
|
if self.field and self.item_id:
|
||||||
|
self.edit_requested.emit(self.field, self.item_id)
|
||||||
|
|
||||||
def sizeHint(self):
|
def sizeHint(self):
|
||||||
return QSize(400, 500)
|
return QSize(400, 500)
|
||||||
|
|
||||||
@ -367,9 +386,11 @@ class NoteDisplay(QWidget):
|
|||||||
if field:
|
if field:
|
||||||
self.title.setText('<h2>{}</h2>'.format(self.db.get_item_name(field, item_id) or ''))
|
self.title.setText('<h2>{}</h2>'.format(self.db.get_item_name(field, item_id) or ''))
|
||||||
self.html_display.setHtml(self.db.notes_for(field, item_id))
|
self.html_display.setHtml(self.db.notes_for(field, item_id))
|
||||||
|
self.edit_button.setVisible(True)
|
||||||
else:
|
else:
|
||||||
self.title.setText('')
|
self.title.setText('')
|
||||||
self.html_display.setHtml('')
|
self.html_display.setHtml('')
|
||||||
|
self.edit_button.setVisible(False)
|
||||||
|
|
||||||
def current_result_changed(self, r):
|
def current_result_changed(self, r):
|
||||||
if r is None:
|
if r is None:
|
||||||
@ -413,6 +434,7 @@ class NotesBrowser(Dialog):
|
|||||||
self.notes_display = nd = NoteDisplay(self)
|
self.notes_display = nd = NoteDisplay(self)
|
||||||
rl.current_result_changed.connect(nd.current_result_changed)
|
rl.current_result_changed.connect(nd.current_result_changed)
|
||||||
rl.export_requested.connect(self.export_selected)
|
rl.export_requested.connect(self.export_selected)
|
||||||
|
nd.edit_requested.connect(rl.edit_note_for)
|
||||||
s.addWidget(nd)
|
s.addWidget(nd)
|
||||||
|
|
||||||
self.use_stemmer = us = QCheckBox(_('&Match on related words'))
|
self.use_stemmer = us = QCheckBox(_('&Match on related words'))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user