manuskript/manuskript/ui/views/metadataView.py
2018-01-29 10:30:41 -07:00

128 lines
4.6 KiB
Python

#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtWidgets import QWidget, QAbstractItemView
from PyQt5.QtCore import QModelIndex
from manuskript.enums import Outline
from manuskript.ui.views.metadataView_ui import Ui_metadataView
from manuskript.ui import style
class metadataView(QWidget, Ui_metadataView):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self._lastIndexes = None
self.txtSummarySentence.setColumn(Outline.summarySentence)
self.txtSummaryFull.setColumn(Outline.summaryFull)
self.txtNotes.setColumn(Outline.notes)
self.revisions.setEnabled(False)
self.txtSummarySentence.setStyleSheet(style.lineEditSS())
self.txtSummaryFull.setStyleSheet(style.transparentSS() +
style.simpleScrollBarV())
self.txtNotes.setStyleSheet(style.transparentSS() +
style.simpleScrollBarV())
self.revisions.setStyleSheet(style.simpleScrollBarV())
def setModels(self, mdlOutline, mdlCharacter, mdlLabels, mdlStatus):
self.properties.setModels(mdlOutline, mdlCharacter, mdlLabels, mdlStatus)
self.txtSummarySentence.setModel(mdlOutline)
self.txtSummaryFull.setModel(mdlOutline)
self.txtNotes.setModel(mdlOutline)
self.revisions.setModel(mdlOutline)
def getIndexes(self, sourceView):
"""Returns a list of indexes from list of QItemSelectionRange"""
indexes = []
for i in sourceView.selection().indexes():
if i.column() != 0:
continue
if i not in indexes:
indexes.append(i)
return indexes
def selectionChanged(self):
if isinstance(self.sender(), QAbstractItemView):
selectionModel = self.sender().selectionModel()
else:
selectionModel = self.sender()
indexes = self.getIndexes(selectionModel)
if self._lastIndexes == indexes:
return
# No item selected
if len(indexes) == 0:
self.setEnabled(False)
self.revisions.setEnabled(False)
self.txtSummarySentence.setCurrentModelIndex(QModelIndex())
self.txtSummaryFull.setCurrentModelIndex(QModelIndex())
self.txtNotes.setCurrentModelIndex(QModelIndex())
# One item selected
elif len(indexes) == 1:
self.setEnabled(True)
idx = indexes[0]
self.txtSummarySentence.setEnabled(True)
self.txtSummaryFull.setEnabled(True)
self.txtNotes.setEnabled(True)
self.txtSummarySentence.setCurrentModelIndex(idx)
self.txtSummaryFull.setCurrentModelIndex(idx)
self.txtNotes.setCurrentModelIndex(idx)
self.revisions.setEnabled(True)
self.revisions.setCurrentModelIndex(idx)
# Multiple items selected
else:
self.setEnabled(True)
# Behavior 1:
# We disable the text areas when multiple indexes are selected
self.txtSummarySentence.setEnabled(False)
self.txtSummaryFull.setEnabled(False)
self.txtNotes.setEnabled(False)
self.txtSummarySentence.setCurrentModelIndex(QModelIndex())
self.txtSummaryFull.setCurrentModelIndex(QModelIndex())
self.txtNotes.setCurrentModelIndex(QModelIndex())
# Behavior 2:
# Allow edition of multiple indexes.
# Bug: Multiple selections of items sometimes gets Notes/references
# field to be erased. See #10 on github.
#self.txtSummarySentence.setCurrentModelIndexes(indexes)
#self.txtSummaryFull.setCurrentModelIndexes(indexes)
#self.txtNotes.setCurrentModelIndexes(indexes)
self.revisions.setEnabled(False)
self.properties.selectionChanged(selectionModel)
self._lastIndexes = indexes
def setDict(self, d):
self.txtNotes.setDict(d)
self.txtSummaryFull.setDict(d)
def toggleSpellcheck(self, v):
self.txtNotes.toggleSpellcheck(v)
self.txtSummaryFull.toggleSpellcheck(v)
def saveState(self):
return [
self.grpProperties.saveState(),
self.grpSummary.saveState(),
self.grpNotes.saveState(),
self.grpRevisions.saveState(),
self.revisions.saveState()
]
def restoreState(self, state):
self.grpProperties.restoreState(state[0])
self.grpSummary.restoreState(state[1])
self.grpNotes.restoreState(state[2])
self.grpRevisions.restoreState(state[3])