mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use appropriate widgets for editing the new custom comments column types int he book list
This commit is contained in:
parent
a3bb5e2cae
commit
5d8782daa0
@ -3,11 +3,12 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
|
|
||||||
from PyQt5.Qt import Qt, QDialog, QDialogButtonBox
|
from PyQt5.Qt import Qt, QDialog, QDialogButtonBox, QVBoxLayout, QPlainTextEdit, QSize
|
||||||
|
|
||||||
from calibre.gui2 import gprefs, Application
|
from calibre.gui2 import gprefs, Application
|
||||||
from calibre.gui2.dialogs.comments_dialog_ui import Ui_CommentsDialog
|
from calibre.gui2.dialogs.comments_dialog_ui import Ui_CommentsDialog
|
||||||
from calibre.library.comments import comments_to_html
|
from calibre.library.comments import comments_to_html
|
||||||
|
from calibre.gui2.widgets2 import Dialog
|
||||||
|
|
||||||
class CommentsDialog(QDialog, Ui_CommentsDialog):
|
class CommentsDialog(QDialog, Ui_CommentsDialog):
|
||||||
|
|
||||||
@ -48,6 +49,31 @@ class CommentsDialog(QDialog, Ui_CommentsDialog):
|
|||||||
self.save_geometry()
|
self.save_geometry()
|
||||||
return QDialog.closeEvent(self, ev)
|
return QDialog.closeEvent(self, ev)
|
||||||
|
|
||||||
|
|
||||||
|
class PlainTextDialog(Dialog):
|
||||||
|
|
||||||
|
def __init__(self, parent, text, column_name=None):
|
||||||
|
title = _('Edit "{0}"').format(column_name) if column_name else _('Edit text')
|
||||||
|
Dialog.__init__(self, title, 'edit-plain-text-dialog', parent=parent)
|
||||||
|
self.text = text
|
||||||
|
|
||||||
|
def setup_ui(self):
|
||||||
|
self.l = l = QVBoxLayout(self)
|
||||||
|
self._text = QPlainTextEdit(self)
|
||||||
|
l.addWidget(self._text)
|
||||||
|
l.addWidget(self.bb)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def text(self):
|
||||||
|
return self._text.toPlainText()
|
||||||
|
|
||||||
|
@text.setter
|
||||||
|
def text(self, val):
|
||||||
|
self._text.setPlainText(val or '')
|
||||||
|
|
||||||
|
def sizeHint(self):
|
||||||
|
return QSize(600, 400)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app = Application([])
|
app = Application([])
|
||||||
d = CommentsDialog(None, 'testing', 'Comments')
|
d = CommentsDialog(None, 'testing', 'Comments')
|
||||||
|
@ -20,7 +20,7 @@ from calibre.gui2.complete2 import EditWithComplete
|
|||||||
from calibre.utils.date import now, format_date, qt_to_dt, is_date_undefined
|
from calibre.utils.date import now, format_date, qt_to_dt, is_date_undefined
|
||||||
from calibre.utils.config import tweaks
|
from calibre.utils.config import tweaks
|
||||||
from calibre.utils.icu import sort_key
|
from calibre.utils.icu import sort_key
|
||||||
from calibre.gui2.dialogs.comments_dialog import CommentsDialog
|
from calibre.gui2.dialogs.comments_dialog import CommentsDialog, PlainTextDialog
|
||||||
from calibre.gui2.dialogs.template_dialog import TemplateDialog
|
from calibre.gui2.dialogs.template_dialog import TemplateDialog
|
||||||
from calibre.gui2.dialogs.tag_editor import TagEditor
|
from calibre.gui2.dialogs.tag_editor import TagEditor
|
||||||
from calibre.gui2.languages import LanguagesEdit
|
from calibre.gui2.languages import LanguagesEdit
|
||||||
@ -457,11 +457,14 @@ class CcTextDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{
|
|||||||
def createEditor(self, parent, option, index):
|
def createEditor(self, parent, option, index):
|
||||||
m = index.model()
|
m = index.model()
|
||||||
col = m.column_map[index.column()]
|
col = m.column_map[index.column()]
|
||||||
|
key = m.db.field_metadata.key_to_label(col)
|
||||||
|
if m.db.field_metadata[col]['is_multiple']:
|
||||||
editor = EditWithComplete(parent)
|
editor = EditWithComplete(parent)
|
||||||
editor.set_separator(None)
|
editor.set_separator(None)
|
||||||
complete_items = sorted(list(m.db.all_custom(label=m.db.field_metadata.key_to_label(col))),
|
complete_items = sorted(list(m.db.all_custom(label=key)), key=sort_key)
|
||||||
key=sort_key)
|
|
||||||
editor.update_items_cache(complete_items)
|
editor.update_items_cache(complete_items)
|
||||||
|
else:
|
||||||
|
editor = QStyledItemDelegate.createEditor(self, parent, option, index)
|
||||||
return editor
|
return editor
|
||||||
|
|
||||||
def setEditorData(self, editor, index):
|
def setEditorData(self, editor, index):
|
||||||
@ -473,6 +476,32 @@ class CcTextDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{
|
|||||||
model.setData(index, (val), Qt.EditRole)
|
model.setData(index, (val), Qt.EditRole)
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
class CcLongTextDelegate(QStyledItemDelegate): # {{{
|
||||||
|
|
||||||
|
'''
|
||||||
|
Delegate for comments data.
|
||||||
|
'''
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
QStyledItemDelegate.__init__(self, parent)
|
||||||
|
self.document = QTextDocument()
|
||||||
|
|
||||||
|
def createEditor(self, parent, option, index):
|
||||||
|
m = index.model()
|
||||||
|
col = m.column_map[index.column()]
|
||||||
|
if check_key_modifier(Qt.ControlModifier):
|
||||||
|
text = ''
|
||||||
|
else:
|
||||||
|
text = m.db.data[index.row()][m.custom_columns[col]['rec_index']]
|
||||||
|
d = PlainTextDialog(parent, text, column_name=m.custom_columns[col]['name'])
|
||||||
|
if d.exec_() == d.Accepted:
|
||||||
|
m.setData(index, d.text, Qt.EditRole)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def setModelData(self, editor, model, index):
|
||||||
|
model.setData(index, (editor.textbox.html), Qt.EditRole)
|
||||||
|
# }}}
|
||||||
|
|
||||||
class CcNumberDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{
|
class CcNumberDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -17,7 +17,7 @@ from PyQt5.Qt import (
|
|||||||
|
|
||||||
from calibre.constants import islinux
|
from calibre.constants import islinux
|
||||||
from calibre.gui2.library.delegates import (RatingDelegate, PubDateDelegate,
|
from calibre.gui2.library.delegates import (RatingDelegate, PubDateDelegate,
|
||||||
TextDelegate, DateDelegate, CompleteDelegate, CcTextDelegate,
|
TextDelegate, DateDelegate, CompleteDelegate, CcTextDelegate, CcLongTextDelegate,
|
||||||
CcBoolDelegate, CcCommentsDelegate, CcDateDelegate, CcTemplateDelegate,
|
CcBoolDelegate, CcCommentsDelegate, CcDateDelegate, CcTemplateDelegate,
|
||||||
CcEnumDelegate, CcNumberDelegate, LanguagesDelegate)
|
CcEnumDelegate, CcNumberDelegate, LanguagesDelegate)
|
||||||
from calibre.gui2.library.models import BooksModel, DeviceBooksModel
|
from calibre.gui2.library.models import BooksModel, DeviceBooksModel
|
||||||
@ -236,6 +236,7 @@ class BooksView(QTableView): # {{{
|
|||||||
self.publisher_delegate = TextDelegate(self)
|
self.publisher_delegate = TextDelegate(self)
|
||||||
self.text_delegate = TextDelegate(self)
|
self.text_delegate = TextDelegate(self)
|
||||||
self.cc_text_delegate = CcTextDelegate(self)
|
self.cc_text_delegate = CcTextDelegate(self)
|
||||||
|
self.cc_longtext_delegate = CcLongTextDelegate(self)
|
||||||
self.cc_enum_delegate = CcEnumDelegate(self)
|
self.cc_enum_delegate = CcEnumDelegate(self)
|
||||||
self.cc_bool_delegate = CcBoolDelegate(self)
|
self.cc_bool_delegate = CcBoolDelegate(self)
|
||||||
self.cc_comments_delegate = CcCommentsDelegate(self)
|
self.cc_comments_delegate = CcCommentsDelegate(self)
|
||||||
@ -774,6 +775,12 @@ class BooksView(QTableView): # {{{
|
|||||||
delegate.set_format(cc['display'].get('date_format',''))
|
delegate.set_format(cc['display'].get('date_format',''))
|
||||||
self.setItemDelegateForColumn(cm.index(colhead), delegate)
|
self.setItemDelegateForColumn(cm.index(colhead), delegate)
|
||||||
elif cc['datatype'] == 'comments':
|
elif cc['datatype'] == 'comments':
|
||||||
|
ctype = cc['display'].get('interpret_as', 'html')
|
||||||
|
if ctype == 'short-text':
|
||||||
|
self.setItemDelegateForColumn(cm.index(colhead), self.cc_text_delegate)
|
||||||
|
elif ctype in ('long-text', 'markdown'):
|
||||||
|
self.setItemDelegateForColumn(cm.index(colhead), self.cc_longtext_delegate)
|
||||||
|
else:
|
||||||
self.setItemDelegateForColumn(cm.index(colhead), self.cc_comments_delegate)
|
self.setItemDelegateForColumn(cm.index(colhead), self.cc_comments_delegate)
|
||||||
elif cc['datatype'] == 'text':
|
elif cc['datatype'] == 'text':
|
||||||
if cc['is_multiple']:
|
if cc['is_multiple']:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user