mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-28 03:00:59 +12:00
UI improvements
This commit is contained in:
parent
3aac8aabff
commit
3800a553be
|
@ -14,18 +14,25 @@ SOURCES += ../src/loadSave.py
|
|||
SOURCES += ../src/mainWindow.py
|
||||
SOURCES += ../src/settingsWindow.py
|
||||
|
||||
SOURCES += ../src/models/outlineModel.py
|
||||
SOURCES += ../src/models/persosProxyModel.py
|
||||
SOURCES += ../src/models/plotModel.py
|
||||
|
||||
SOURCES += ../src/ui/helpLabel.py
|
||||
SOURCES += ../src/ui/sldImportance.py
|
||||
SOURCES += ../src/ui/welcome.py
|
||||
|
||||
SOURCES += ../src/ui/editors/editorWidget.py
|
||||
SOURCES += ../src/ui/editors/fullScreenEditor.py
|
||||
SOURCES += ../src/ui/editors/textFormat.py
|
||||
|
||||
SOURCES += ../src/ui/views/corkDelegate.py
|
||||
SOURCES += ../src/ui/views/outlineDelegates.py
|
||||
SOURCES += ../src/ui/views/outlineBasics.py
|
||||
SOURCES += ../src/ui/views/cmbOutlineLabelChoser.py
|
||||
SOURCES += ../src/ui/views/cmbOutlinePersoChoser.py
|
||||
SOURCES += ../src/ui/views/cmbOutlineStatusChoser.py
|
||||
SOURCES += ../src/ui/views/treeView.py
|
||||
SOURCES += ../src/ui/views/lineEditView.py
|
||||
SOURCES += ../src/ui/views/textEditView.py
|
||||
SOURCES += ../src/ui/views/plotTreeView.py
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -124,7 +124,7 @@ def outlineItemColors(item):
|
|||
colors["Progress"] = colorFromProgress(pg)
|
||||
|
||||
# Compile
|
||||
if item.isCompile() in [0, "0"]:
|
||||
if item.compile() in [0, "0"]:
|
||||
colors["Compile"] = QColor(Qt.gray)
|
||||
else:
|
||||
colors["Compile"] = QColor(Qt.black)
|
||||
|
|
|
@ -387,10 +387,10 @@ class outlineItem():
|
|||
#print("Data: ", column, role)
|
||||
|
||||
if role == Qt.DisplayRole or role == Qt.EditRole:
|
||||
if column == Outline.compile.value:
|
||||
return self.data(column, Qt.CheckStateRole)
|
||||
#if column == Outline.compile.value:
|
||||
#return self.data(column, Qt.CheckStateRole)
|
||||
|
||||
elif Outline(column) in self._data:
|
||||
if Outline(column) in self._data:
|
||||
return self._data[Outline(column)]
|
||||
|
||||
else:
|
||||
|
@ -411,6 +411,10 @@ class outlineItem():
|
|||
#return QBrush(Qt.gray)
|
||||
|
||||
elif role == Qt.CheckStateRole and column == Outline.compile.value:
|
||||
#print(self.title(), self.compile())
|
||||
#if self._data[Outline(column)] and not self.compile():
|
||||
#return Qt.PartiallyChecked
|
||||
#else:
|
||||
return self._data[Outline(column)]
|
||||
|
||||
elif role == Qt.FontRole:
|
||||
|
@ -459,6 +463,9 @@ class outlineItem():
|
|||
wc = wordCount(data)
|
||||
self.setData(Outline.wordCount.value, wc)
|
||||
|
||||
if column == Outline.compile.value:
|
||||
self.emitDataChanged(cols=[Outline.title.value, Outline.compile.value], recursive=True)
|
||||
|
||||
if updateWordCount:
|
||||
self.updateWordCount()
|
||||
|
||||
|
@ -527,17 +534,22 @@ class outlineItem():
|
|||
else:
|
||||
return QModelIndex()
|
||||
|
||||
def emitDataChanged(self, cols=None):
|
||||
def emitDataChanged(self, cols=None, recursive=False):
|
||||
idx = self.index()
|
||||
if idx and self._model:
|
||||
if not cols:
|
||||
# Emit data changed for the whole item (all columns)
|
||||
self._model.dataChanged.emit(idx, self.index(len(Outline)))
|
||||
|
||||
else:
|
||||
# Emit only for the specified columns
|
||||
for c in cols:
|
||||
self._model.dataChanged.emit(self.index(c), self.index(c))
|
||||
|
||||
if recursive:
|
||||
for c in self.children():
|
||||
c.emitDataChanged(cols, recursive=True)
|
||||
|
||||
def removeChild(self, row):
|
||||
self.childItems.pop(row)
|
||||
|
||||
|
@ -559,8 +571,13 @@ class outlineItem():
|
|||
def isText(self):
|
||||
return self._data[Outline.type] == "txt"
|
||||
|
||||
def isCompile(self):
|
||||
return Outline.compile in self._data and self._data[Outline.compile]
|
||||
def compile(self):
|
||||
if self._data[Outline.compile] in ["0", 0]:
|
||||
return False
|
||||
elif self.parent():
|
||||
return self.parent().compile()
|
||||
else:
|
||||
return True # rootItem always compile
|
||||
|
||||
def title(self):
|
||||
if Outline.title in self._data:
|
||||
|
|
|
@ -23,44 +23,48 @@ class outlineBasics(QAbstractItemView):
|
|||
|
||||
if event.button() == Qt.RightButton:
|
||||
|
||||
self.menu = self.makePopupMenu()
|
||||
self.menu.popup(event.globalPos())
|
||||
|
||||
def makePopupMenu(self):
|
||||
index = self.currentIndex()
|
||||
sel = self.getSelection()
|
||||
clipboard = qApp.clipboard()
|
||||
|
||||
self.menu = QMenu(self)
|
||||
menu = QMenu(self)
|
||||
|
||||
# Add / remove items
|
||||
self.actAddFolder = QAction(QIcon.fromTheme("folder-new"), qApp.translate("outlineBasics", "New Folder"), self.menu)
|
||||
self.actAddFolder = QAction(QIcon.fromTheme("folder-new"), qApp.translate("outlineBasics", "New Folder"), menu)
|
||||
self.actAddFolder.triggered.connect(self.addFolder)
|
||||
self.menu.addAction(self.actAddFolder)
|
||||
menu.addAction(self.actAddFolder)
|
||||
|
||||
self.actAddText = QAction(QIcon.fromTheme("document-new"), qApp.translate("outlineBasics", "New Text"), self.menu)
|
||||
self.actAddText = QAction(QIcon.fromTheme("document-new"), qApp.translate("outlineBasics", "New Text"), menu)
|
||||
self.actAddText.triggered.connect(self.addText)
|
||||
self.menu.addAction(self.actAddText)
|
||||
menu.addAction(self.actAddText)
|
||||
|
||||
self.actDelete = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "Delete"), self.menu)
|
||||
self.actDelete = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "Delete"), menu)
|
||||
self.actDelete.triggered.connect(self.delete)
|
||||
self.menu.addAction(self.actDelete)
|
||||
menu.addAction(self.actDelete)
|
||||
|
||||
self.menu.addSeparator()
|
||||
menu.addSeparator()
|
||||
|
||||
# Copy, cut, paste
|
||||
self.actCopy = QAction(QIcon.fromTheme("edit-copy"), qApp.translate("outlineBasics", "Copy"), self.menu)
|
||||
self.actCopy = QAction(QIcon.fromTheme("edit-copy"), qApp.translate("outlineBasics", "Copy"), menu)
|
||||
self.actCopy.triggered.connect(self.copy)
|
||||
self.menu.addAction(self.actCopy)
|
||||
menu.addAction(self.actCopy)
|
||||
|
||||
self.actCut = QAction(QIcon.fromTheme("edit-cut"), qApp.translate("outlineBasics", "Cut"), self.menu)
|
||||
self.actCut = QAction(QIcon.fromTheme("edit-cut"), qApp.translate("outlineBasics", "Cut"), menu)
|
||||
self.actCut.triggered.connect(self.cut)
|
||||
self.menu.addAction(self.actCut)
|
||||
menu.addAction(self.actCut)
|
||||
|
||||
self.actPaste = QAction(QIcon.fromTheme("edit-paste"), qApp.translate("outlineBasics", "Paste"), self.menu)
|
||||
self.actPaste = QAction(QIcon.fromTheme("edit-paste"), qApp.translate("outlineBasics", "Paste"), menu)
|
||||
self.actPaste.triggered.connect(self.paste)
|
||||
self.menu.addAction(self.actPaste)
|
||||
menu.addAction(self.actPaste)
|
||||
|
||||
self.menu.addSeparator()
|
||||
menu.addSeparator()
|
||||
|
||||
# POV
|
||||
self.menuPOV = QMenu(qApp.translate("outlineBasics", "Set POV"), self.menu)
|
||||
self.menuPOV = QMenu(qApp.translate("outlineBasics", "Set POV"), menu)
|
||||
mw = mainWindow()
|
||||
a = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "None"), self.menuPOV)
|
||||
a.triggered.connect(lambda: self.setPOV(""))
|
||||
|
@ -88,10 +92,10 @@ class outlineBasics(QAbstractItemView):
|
|||
menus[2-imp].addAction(a)
|
||||
|
||||
mpr.mapped.connect(self.setPOV)
|
||||
self.menu.addMenu(self.menuPOV)
|
||||
menu.addMenu(self.menuPOV)
|
||||
|
||||
# Status
|
||||
self.menuStatus = QMenu(qApp.translate("outlineBasics", "Set Status"), self.menu)
|
||||
self.menuStatus = QMenu(qApp.translate("outlineBasics", "Set Status"), menu)
|
||||
#a = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "None"), self.menuStatus)
|
||||
#a.triggered.connect(lambda: self.setStatus(""))
|
||||
#self.menuStatus.addAction(a)
|
||||
|
@ -104,10 +108,10 @@ class outlineBasics(QAbstractItemView):
|
|||
mpr.setMapping(a, i)
|
||||
self.menuStatus.addAction(a)
|
||||
mpr.mapped.connect(self.setStatus)
|
||||
self.menu.addMenu(self.menuStatus)
|
||||
menu.addMenu(self.menuStatus)
|
||||
|
||||
# Labels
|
||||
self.menuLabel = QMenu(qApp.translate("outlineBasics", "Set Label"), self.menu)
|
||||
self.menuLabel = QMenu(qApp.translate("outlineBasics", "Set Label"), menu)
|
||||
mpr = QSignalMapper(self.menuLabel)
|
||||
for i in range(mw.mdlLabels.rowCount()):
|
||||
a = QAction(mw.mdlLabels.item(i, 0).icon(),
|
||||
|
@ -117,9 +121,8 @@ class outlineBasics(QAbstractItemView):
|
|||
mpr.setMapping(a, i)
|
||||
self.menuLabel.addAction(a)
|
||||
mpr.mapped.connect(self.setLabel)
|
||||
self.menu.addMenu(self.menuLabel)
|
||||
menu.addMenu(self.menuLabel)
|
||||
|
||||
self.menu.popup(event.globalPos())
|
||||
|
||||
if len(sel) > 0 and index.isValid() and not index.internalPointer().isFolder() \
|
||||
or not clipboard.mimeData().hasFormat("application/xml"):
|
||||
|
@ -137,6 +140,8 @@ class outlineBasics(QAbstractItemView):
|
|||
self.menuStatus.setEnabled(False)
|
||||
self.menuLabel.setEnabled(False)
|
||||
|
||||
return menu
|
||||
|
||||
def addFolder(self):
|
||||
self.addItem("folder")
|
||||
|
||||
|
|
|
@ -29,6 +29,54 @@ class treeView(QTreeView, dndView, outlineBasics):
|
|||
self.titleDelegate = treeTitleDelegate()
|
||||
self.setItemDelegateForColumn(Outline.title.value, self.titleDelegate)
|
||||
|
||||
def makePopupMenu(self):
|
||||
menu = outlineBasics.makePopupMenu(self)
|
||||
first = menu.actions()[0]
|
||||
|
||||
|
||||
if len(self.selectedIndexes()) != 0:
|
||||
index = self.currentIndex()
|
||||
item = index.internalPointer()
|
||||
self.actExpand = QAction(self.tr("Expand {}").format(item.title()), menu)
|
||||
self.actExpand.triggered.connect(self.expandCurrentIndex)
|
||||
menu.insertAction(first, self.actExpand)
|
||||
|
||||
self.actCollapse = QAction(self.tr("Collapse {}").format(item.title()), menu)
|
||||
self.actCollapse.triggered.connect(self.collapseCurrentIndex)
|
||||
menu.insertAction(first, self.actCollapse)
|
||||
|
||||
menu.insertSeparator(first)
|
||||
|
||||
self.actExpandAll = QAction(self.tr("Expand All"), menu)
|
||||
self.actExpandAll.triggered.connect(self.expandAll)
|
||||
menu.insertAction(first, self.actExpandAll)
|
||||
|
||||
self.actCollapseAll = QAction(self.tr("Collapse All"), menu)
|
||||
self.actCollapseAll.triggered.connect(self.collapseAll)
|
||||
menu.insertAction(first, self.actCollapseAll)
|
||||
|
||||
menu.insertSeparator(first)
|
||||
|
||||
return menu
|
||||
|
||||
def expandCurrentIndex(self, index=None):
|
||||
if index is None or type(index) == bool:
|
||||
index = self.currentIndex()
|
||||
|
||||
self.expand(index)
|
||||
for i in range(self.model().rowCount(index)):
|
||||
idx = self.model().index(i, 0, index)
|
||||
self.expandCurrentIndex(index=idx)
|
||||
|
||||
def collapseCurrentIndex(self, index=None):
|
||||
if index is None or type(index) == bool:
|
||||
index = self.currentIndex()
|
||||
|
||||
self.collapse(index)
|
||||
for i in range(self.model().rowCount(index)):
|
||||
idx = self.model().index(i, 0, index)
|
||||
self.collapseCurrentIndex(index=idx)
|
||||
|
||||
def dragMoveEvent(self, event):
|
||||
dndView.dragMoveEvent(self, event)
|
||||
QTreeView.dragMoveEvent(self, event)
|
||||
|
|
Loading…
Reference in a new issue