diff --git a/src/mainWindow.py b/src/mainWindow.py
index bafc540b..5a8e070f 100644
--- a/src/mainWindow.py
+++ b/src/mainWindow.py
@@ -166,7 +166,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treePlanOutline.setModel(self.mdlOutline)
self.cmbPlanPOV.setModels(self.mdlPersos, self.mdlOutline)
-
+ self.redacEditor.setModel(self.mdlOutline)
+
self.mprPlan = QDataWidgetMapper()
self.mprPlan.setModel(self.mdlOutline)
mapping = [
@@ -214,15 +215,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treeRedacOutline.selectionModel().currentChanged.connect(self.cmbRedacLabel.setCurrentModelIndex)
self.treeRedacOutline.selectionModel().currentChanged.connect(self.cmbRedacStatus.setCurrentModelIndex)
self.treeRedacOutline.selectionModel().currentChanged.connect(self.chkRedacCompile.setCurrentModelIndex)
- self.treeRedacOutline.selectionModel().currentChanged.connect(self.redacEditor.setCurrentModelIndex)
+ #self.treeRedacOutline.selectionModel().currentChanged.connect(self.redacEditor.setCurrentModelIndex)
+ self.treeRedacOutline.selectionModel().selectionChanged.connect(self.redacEditor.setView)
self.treeRedacOutline.selectionModel().currentChanged.connect(self.redacEditor.txtRedacText.setCurrentModelIndex)
self.tabMain.currentChanged.connect(self.mprOutline.submit)
- self.treeRedacOutline.selectionModel().currentChanged.connect(self.outlineSelectionChanged)
- self.treeRedacOutline.selectionModel().currentChanged.connect(self.outlineSelectionChanged)
- self.treePlanOutline.selectionModel().currentChanged.connect(self.outlineSelectionChanged)
- self.treePlanOutline.selectionModel().currentChanged.connect(self.outlineSelectionChanged)
+ self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged)
+ self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged)
+ self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged)
+ self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged)
self.sldCorkSizeFactor.valueChanged.connect(self.redacEditor.setCorkSizeFactor)
self.btnRedacFolderCork.toggled.connect(self.sldCorkSizeFactor.setVisible)
@@ -256,12 +258,21 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# OUTLINE #
####################################################################################################
- def outlineSelectionChanged(self, idx):
- if idx.isValid():
- self.btnRedacFolderText.setHidden(not idx.internalPointer().isFolder())
- self.btnRedacFolderCork.setHidden(not idx.internalPointer().isFolder())
- self.btnRedacFolderOutline.setHidden(not idx.internalPointer().isFolder())
- self.sldCorkSizeFactor.setHidden(not idx.internalPointer().isFolder())
+ def outlineSelectionChanged(self):
+ if len(self.treeRedacOutline.selectionModel().selection().indexes()) == 0:
+ hidden = False
+ else:
+ idx = self.treeRedacOutline.currentIndex()
+ if idx.isValid():
+ hidden = not idx.internalPointer().isFolder()
+ else:
+ hidden = False
+
+
+ self.btnRedacFolderText.setHidden(hidden)
+ self.btnRedacFolderCork.setHidden(hidden)
+ self.btnRedacFolderOutline.setHidden(hidden)
+ self.sldCorkSizeFactor.setHidden(hidden)
def outlineRemoveItems(self):
for idx in self.treeRedacOutline.selectedIndexes():
diff --git a/src/ui/editors/editorWidget.py b/src/ui/editors/editorWidget.py
index c515c0ec..96faf90e 100644
--- a/src/ui/editors/editorWidget.py
+++ b/src/ui/editors/editorWidget.py
@@ -18,7 +18,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
- self.currentIndex = None
+ self.currentIndex = QModelIndex()
self.txtEdits = []
self.scroll.setBackgroundRole(QPalette.Base)
self.toggledSpellcheck.connect(self.txtRedacText.toggleSpellcheck)
@@ -27,6 +27,10 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
self.spellcheck = True
self.folderView = "cork"
+ def setModel(self, model):
+ self._model = model
+ self.setView()
+
def setFolderView(self, v):
oldV = self.folderView
if v == "cork":
@@ -42,113 +46,126 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
def setCorkSizeFactor(self, v):
self.corkView.itemDelegate().setCorkSizeFactor(v)
r = self.corkView.rootIndex()
- for c in range(r.row()):
+
+ if r.isValid():
+ count = r.internalPointer().childCount()
+ else:
+ count = self._model.rootItem.childCount()
+
+ for c in range(count):
self.corkView.itemDelegate().sizeHintChanged.emit(r.child(c, 0))
- def setCurrentModelIndex(self, index):
+ def setView(self):
+ index = mainWindow().treeRedacOutline.currentIndex()
- if index.isValid():
-
- self.currentIndex = index
- self._model = index.model()
-
+ # Couting the number of other selected items
+ sel = []
+ for i in mainWindow().treeRedacOutline.selectionModel().selection().indexes():
+ if i.column() != 0: continue
+ if i not in sel: sel.append(i)
+
+ if len(sel) != 0:
item = index.internalPointer()
+ else:
+ index = QModelIndex()
+ item = self._model.rootItem
- # Couting the number of selected items
- sel = [index]
- for i in mainWindow().treeRedacOutline.selectionModel().selection().indexes():
- if i.column() != 0: continue
- if i not in sel: sel.append(i)
+ def addTitle(itm):
+ edt = customTextEdit(self, html="{t}".format(l=min(itm.level()+1, 5), t=itm.title()), autoResize=True)
+ edt.setFrameShape(QFrame.NoFrame)
+ self.txtEdits.append(edt)
+ l.addWidget(edt)
+
+ def addLine():
+ line = QFrame(self.scene)
+ line.setFrameShape(QFrame.HLine)
+ line.setFrameShadow(QFrame.Sunken)
+ l.addWidget(line)
+
+ def addScene(itm):
+ edt = customTextEdit(self, index=itm.index(), spellcheck=self.spellcheck, dict=self.currentDict, autoResize=True)
+ edt.setFrameShape(QFrame.NoFrame)
+ edt.setStatusTip(itm.path())
+ self.toggledSpellcheck.connect(edt.toggleSpellcheck)
+ self.dictChanged.connect(edt.setDict)
+ #edt.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ self.txtEdits.append(edt)
+ l.addWidget(edt)
+
+ def addChildren(itm):
+ for c in range(itm.childCount()):
+ child = itm.child(c)
- def addTitle(itm):
- edt = customTextEdit(self, html="{t}".format(l=min(itm.level()+1, 5), t=itm.title()), autoResize=True)
- edt.setFrameShape(QFrame.NoFrame)
- self.txtEdits.append(edt)
- l.addWidget(edt)
-
- def addLine():
- line = QFrame(self.scene)
- line.setFrameShape(QFrame.HLine)
- line.setFrameShadow(QFrame.Sunken)
- l.addWidget(line)
-
- def addScene(itm):
- edt = customTextEdit(self, index=itm.index(), spellcheck=self.spellcheck, dict=self.currentDict, autoResize=True)
- edt.setFrameShape(QFrame.NoFrame)
- edt.setStatusTip(itm.path())
- self.toggledSpellcheck.connect(edt.toggleSpellcheck)
- self.dictChanged.connect(edt.setDict)
- #edt.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
- self.txtEdits.append(edt)
- l.addWidget(edt)
-
- def addChildren(itm):
- for c in range(itm.childCount()):
- child = itm.child(c)
+ if child.isFolder():
+ addTitle(child)
+ addChildren(child)
- if child.isFolder():
- addTitle(child)
- addChildren(child)
-
- else:
- addScene(child)
- addLine()
-
- def addSpacer():
- l.addItem(QSpacerItem(10, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding))
-
- # Display multiple selected items
- if len(sel) > 1 and False: # Buggy and not very useful, skip
- self.stack.setCurrentIndex(1)
- w = QWidget()
- l = QVBoxLayout(w)
- self.txtEdits = []
- for idx in sel:
- sItem = idx.internalPointer()
- addTitle(sItem)
- if sItem.isFolder():
- addChildren(sItem)
- else:
- addScene(sItem)
+ else:
+ addScene(child)
addLine()
- addSpacer()
- self.scroll.setWidget(w)
-
- elif item.isFolder() and self.folderView == "text":
- self.stack.setCurrentIndex(1)
-
- w = QWidget()
- l = QVBoxLayout(w)
- #self.scroll.setWidgetResizable(False)
-
- self.txtEdits = []
-
- addTitle(item)
- addChildren(item)
- addSpacer()
- self.scroll.setWidget(w)
-
- elif item.isFolder() and self.folderView == "cork":
- self.stack.setCurrentIndex(2)
- self.corkView.setModel(self._model)
- self.corkView.setRootIndex(self.currentIndex)
-
- elif item.isFolder() and self.folderView == "outline":
- self.stack.setCurrentIndex(3)
- self.outlineView.setModelPersos(mainWindow().mdlPersos)
- self.outlineView.setModelLabels(mainWindow().mdlLabels)
- self.outlineView.setModelStatus(mainWindow().mdlStatus)
- self.outlineView.setModel(self._model)
- self.outlineView.setRootIndex(self.currentIndex)
-
- else:
- self.stack.setCurrentIndex(0)
+
+ def addSpacer():
+ l.addItem(QSpacerItem(10, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding))
- self._model.dataChanged.connect(self.modelDataChanged)
- self.updateStatusBar()
+ # Display multiple selected items
+ if len(sel) > 1 and False: # Buggy and not very useful, skip
+ self.stack.setCurrentIndex(1)
+ w = QWidget()
+ l = QVBoxLayout(w)
+ self.txtEdits = []
+ for idx in sel:
+ sItem = idx.internalPointer()
+ addTitle(sItem)
+ if sItem.isFolder():
+ addChildren(sItem)
+ else:
+ addScene(sItem)
+ addLine()
+ addSpacer()
+ self.scroll.setWidget(w)
+
+ elif item.isFolder() and self.folderView == "text":
+ self.stack.setCurrentIndex(1)
+
+ w = QWidget()
+ l = QVBoxLayout(w)
+ #self.scroll.setWidgetResizable(False)
+
+ self.txtEdits = []
+
+ addTitle(item)
+ addChildren(item)
+ addSpacer()
+ self.scroll.setWidget(w)
+
+ elif item.isFolder() and self.folderView == "cork":
+ self.stack.setCurrentIndex(2)
+ self.corkView.setModel(self._model)
+ self.corkView.setRootIndex(index)
+
+ elif item.isFolder() and self.folderView == "outline":
+ self.stack.setCurrentIndex(3)
+ self.outlineView.setModelPersos(mainWindow().mdlPersos)
+ self.outlineView.setModelLabels(mainWindow().mdlLabels)
+ self.outlineView.setModelStatus(mainWindow().mdlStatus)
+ self.outlineView.setModel(self._model)
+ self.outlineView.setRootIndex(index)
else:
- self.currentIndex = None
+ self.stack.setCurrentIndex(0)
+
+ self._model.dataChanged.connect(self.modelDataChanged)
+ self.updateStatusBar()
+
+
+ def setCurrentModelIndex(self, index=None):
+ if index.isValid():
+ self.currentIndex = index
+ self._model = index.model()
+ else:
+ self.currentIndex = QModelIndex()
+
+ self.setView()
def modelDataChanged(self, topLeft, bottomRight):
if not self.currentIndex:
diff --git a/src/ui/views/outlineView.py b/src/ui/views/outlineView.py
index d3616abc..1692bc6c 100644
--- a/src/ui/views/outlineView.py
+++ b/src/ui/views/outlineView.py
@@ -62,6 +62,7 @@ class outlineView(QTreeView, dndView, outlineBasics):
self.header().setSectionResizeMode(Outline.title.value, QHeaderView.Stretch)
self.header().setSectionResizeMode(Outline.POV.value, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.status.value, QHeaderView.ResizeToContents)
+ self.header().setSectionResizeMode(Outline.label.value, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.compile.value, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.wordCount.value, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.goal.value, QHeaderView.ResizeToContents)
diff --git a/src/ui/views/treeOutlineDelegates.py b/src/ui/views/treeOutlineDelegates.py
index d9a238b6..6b49b324 100644
--- a/src/ui/views/treeOutlineDelegates.py
+++ b/src/ui/views/treeOutlineDelegates.py
@@ -49,6 +49,18 @@ class treeOutlinePersoDelegate(QStyledItemDelegate):
return self.mdlPersos.item(i, Perso.name.value).text()
return ""
+ def paint(self, painter, option, index):
+ #option.rect.setWidth(option.rect.width() - 18)
+ QStyledItemDelegate.paint(self, painter, option, index)
+ #option.rect.setWidth(option.rect.width() + 18)
+
+ if index.isValid() and index.internalPointer().data(Outline.POV.value) not in ["", None]:
+ opt = QStyleOptionComboBox()
+ opt.rect = option.rect
+ r = qApp.style().subControlRect(QStyle.CC_ComboBox, opt, QStyle.SC_ComboBoxArrow)
+ option.rect = r
+ qApp.style().drawPrimitive(QStyle.PE_IndicatorArrowDown, option, painter)
+
class treeOutlineCompileDelegate(QStyledItemDelegate):
@@ -86,7 +98,7 @@ class treeOutlineGoalPercentageDelegate(QStyledItemDelegate):
typ = item.data(Outline.type.value)
level = item.level()
- if self.rootIndex:
+ if self.rootIndex and self.rootIndex.isValid():
level -= self.rootIndex.internalPointer().level() + 1
margin = 5
@@ -150,6 +162,16 @@ class treeOutlineStatusDelegate(QStyledItemDelegate):
except:
return ""
+ def paint(self, painter, option, index):
+ QStyledItemDelegate.paint(self, painter, option, index)
+
+ if index.isValid() and index.internalPointer().data(Outline.status.value) not in ["", None, "0"]:
+ opt = QStyleOptionComboBox()
+ opt.rect = option.rect
+ r = qApp.style().subControlRect(QStyle.CC_ComboBox, opt, QStyle.SC_ComboBoxArrow)
+ option.rect = r
+ qApp.style().drawPrimitive(QStyle.PE_IndicatorArrowDown, option, painter)
+
class treeOutlineLabelDelegate(QStyledItemDelegate):
@@ -157,18 +179,25 @@ class treeOutlineLabelDelegate(QStyledItemDelegate):
QStyledItemDelegate.__init__(self, parent)
self.mdlLabels = mdlLabels
- #def sizeHint(self, option, index):
- #s = QStyledItemDelegate.sizeHint(self, option, index)
- #if s.width() > 200:
- #s.setWidth(200)
- #elif s.width() < 100:
- #s.setWidth(100)
- #return s + QSize(18, 0)
+ def sizeHint(self, option, index):
+ d = index.internalPointer().data(index.column(), Qt.DisplayRole)
+ if not d:
+ d = 0
+ item = self.mdlLabels.item(int(d), 0)
+ idx = self.mdlLabels.indexFromItem(item)
+ opt = QStyleOptionViewItem(option)
+ self.initStyleOption(opt, idx)
+ s = qApp.style().sizeFromContents(QStyle.CT_ItemViewItem, opt, QSize())
+ if s.width() > 150:
+ s.setWidth(150)
+ elif s.width() < 50:
+ s.setWidth(50)
+ return s + QSize(18, 0)
def createEditor(self, parent, option, index):
item = index.internalPointer()
editor = QComboBox(parent)
- editor.setAutoFillBackground(True)
+ #editor.setAutoFillBackground(True)
editor.setFrame(False)
return editor
@@ -201,4 +230,12 @@ class treeOutlineLabelDelegate(QStyledItemDelegate):
self.initStyleOption(opt, self.mdlLabels.indexFromItem(lbl))
qApp.style().drawControl(QStyle.CE_ItemViewItem, opt, painter)
+
+ # Drop down indicator
+ if index.isValid() and index.internalPointer().data(Outline.label.value) not in ["", None, "0"]:
+ opt = QStyleOptionComboBox()
+ opt.rect = option.rect
+ r = qApp.style().subControlRect(QStyle.CC_ComboBox, opt, QStyle.SC_ComboBoxArrow)
+ option.rect = r
+ qApp.style().drawPrimitive(QStyle.PE_IndicatorArrowDown, option, painter)
\ No newline at end of file
diff --git a/test_project/outline.xml b/test_project/outline.xml
index aebd1836..d1e580bb 100644
--- a/test_project/outline.xml
+++ b/test_project/outline.xml
@@ -1,7 +1,7 @@
-
-
+
+
@@ -37,7 +37,7 @@
-
+
@@ -51,13 +51,13 @@
-
+
-
+
-
+