diff --git a/src/mainWindow.py b/src/mainWindow.py index 2b470b7b..8d865581 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -8,7 +8,6 @@ from qt import * from ui.mainWindow import * from ui.helpLabel import helpLabel -from ui.treeOutlineDelegates import * from loadSave import * from enums import * from models.outlineModel import * @@ -138,25 +137,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Outline self.mdlOutline = outlineModel() self.treeRedacOutline.setModel(self.mdlOutline) + self.treePlanOutline.setModelPersos(self.mdlPersos) self.treePlanOutline.setModel(self.mdlOutline) - self.treePlanOutlinePersoDelegate = treeOutlinePersoDelegate(self.mdlPersos) - self.treePlanOutline.setItemDelegateForColumn(Outline.POV.value, self.treePlanOutlinePersoDelegate) - self.treePlanOutlineCompileDelegate = treeOutlineCompileDelegate() - self.treePlanOutline.setItemDelegateForColumn(Outline.compile.value, self.treePlanOutlineCompileDelegate) - self.treePlanOutlineStatusDelegate = treeOutlineStatusDelegate() - self.treePlanOutline.setItemDelegateForColumn(Outline.status.value, self.treePlanOutlineStatusDelegate) - self.treePlanOutlineGoalPercentageDelegate = treeOutlineGoalPercentageDelegate() - self.treePlanOutline.setItemDelegateForColumn(Outline.goalPercentage.value, self.treePlanOutlineGoalPercentageDelegate) - self.cmbPlanPOV.setModels(self.mdlPersos, self.mdlOutline) - - self.treePlanOutline.header().setSectionResizeMode(Outline.title.value, QHeaderView.Stretch) - self.treePlanOutline.header().setSectionResizeMode(Outline.POV.value, QHeaderView.ResizeToContents) - self.treePlanOutline.header().setSectionResizeMode(Outline.status.value, QHeaderView.ResizeToContents) - self.treePlanOutline.header().setSectionResizeMode(Outline.compile.value, QHeaderView.ResizeToContents) - self.treePlanOutline.header().setSectionResizeMode(Outline.wordCount.value, QHeaderView.ResizeToContents) - self.treePlanOutline.header().setSectionResizeMode(Outline.goal.value, QHeaderView.ResizeToContents) - self.treePlanOutline.header().setSectionResizeMode(Outline.goalPercentage.value, QHeaderView.ResizeToContents) self.mprPlan = QDataWidgetMapper() self.mprPlan.setModel(self.mdlOutline) @@ -175,12 +158,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.treeRedacOutline.setSelectionModel(self.treePlanOutline.selectionModel()) - for c in range(1, self.mdlOutline.columnCount()): - self.treeRedacOutline.hideColumn(c) - self.treePlanOutline.hideColumn(c) - for c in [Outline.POV.value, Outline.status.value, Outline.compile.value, Outline.wordCount.value, Outline.goal.value, Outline.goalPercentage.value]: - self.treePlanOutline.showColumn(c) - self.btnRedacAddFolder.clicked.connect(lambda: self.outlineAddItem("folder")) self.btnPlanAddFolder.clicked.connect(lambda: self.outlineAddItem("folder")) self.btnRedacAddScene.clicked.connect(lambda: self.outlineAddItem("scene")) @@ -221,7 +198,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.sldCorkSizeFactor.valueChanged.connect(self.redacEditor.setCorkSizeFactor) self.btnRedacFolderCork.toggled.connect(self.sldCorkSizeFactor.setVisible) - self.btnRedacFolderText.toggled.connect(lambda v: self.redacEditor.setFolderView("text" if v else "cork")) + self.btnRedacFolderText.clicked.connect(lambda v: self.redacEditor.setFolderView("text")) + self.btnRedacFolderCork.clicked.connect(lambda v: self.redacEditor.setFolderView("cork")) + self.btnRedacFolderOutline.clicked.connect(lambda v: self.redacEditor.setFolderView("outline")) #Debug self.mdlFlatData.setVerticalHeaderLabels(["Infos générales", "Summary"]) @@ -249,6 +228,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.cmbPlanPOV.setHidden(idx.internalPointer().isFolder()) 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 outlineAddItem(self, type="folder"): diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index e67828cb..3f31e4da 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -176,8 +176,7 @@ class outlineModel(QAbstractItemModel): def supportedDropActions(self): - return Qt.MoveAction # Qt.CopyAction | - #return Qt.CopyAction | Qt.MoveAction + return Qt.CopyAction | Qt.MoveAction #def canDropMimeData(self, data, action, row, column, parent): #if not data.hasFormat("application/xml"): @@ -276,7 +275,6 @@ class outlineModel(QAbstractItemModel): return self.removeRows(row, 1, parent) def removeRows(self, row, count, parent=QModelIndex()): - print("Removing") if not parent.isValid(): parentItem = self.rootItem else: diff --git a/src/ui/editors/editorWidget.py b/src/ui/editors/editorWidget.py index 7afc7162..4b7ae5b3 100644 --- a/src/ui/editors/editorWidget.py +++ b/src/ui/editors/editorWidget.py @@ -8,7 +8,6 @@ from qt import * from enums import * from ui.editors.editorWidget_ui import * from ui.editors.customTextEdit import * -from ui.editors.corkDelegate import * from functions import * class editorWidget(QWidget, Ui_editorWidget_ui): @@ -28,18 +27,12 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.spellcheck = True self.folderView = "cork" - self.corkView.setResizeMode(QListView.Adjust) - self.corkView.setWrapping(True) - self.corkView.setItemDelegate(corkDelegate()) - self.corkView.setSpacing(5) - self.corkView.setStyleSheet("""QListView { - background:#926239; - }""") - def setFolderView(self, v): oldV = self.folderView if v == "cork": self.folderView = "cork" + elif v == "outline": + self.folderView = "outline" else: self.folderView = "text" @@ -61,7 +54,67 @@ class editorWidget(QWidget, Ui_editorWidget_ui): item = index.internalPointer() - if item.isFolder() and self.folderView == "text": + # 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) + + 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) + addLine() + addSpacer() + self.scroll.setWidget(w) + + elif item.isFolder() and self.folderView == "text": self.stack.setCurrentIndex(1) w = QWidget() @@ -70,44 +123,9 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.txtEdits = [] - 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) - - else: - addScene(child) - addLine() - addTitle(item) addChildren(item) - l.addItem(QSpacerItem(10, 1000, QSizePolicy.Minimum, QSizePolicy.Expanding)) + addSpacer() self.scroll.setWidget(w) elif item.isFolder() and self.folderView == "cork": @@ -115,6 +133,12 @@ class editorWidget(QWidget, Ui_editorWidget_ui): 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.setModel(self._model) + self.outlineView.setRootIndex(self.currentIndex) + else: self.stack.setCurrentIndex(0) diff --git a/src/ui/editors/editorWidget_ui.py b/src/ui/editors/editorWidget_ui.py index fad6945d..ba4030cc 100644 --- a/src/ui/editors/editorWidget_ui.py +++ b/src/ui/editors/editorWidget_ui.py @@ -47,16 +47,19 @@ class Ui_editorWidget_ui(object): self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.cork) self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.corkView = QtWidgets.QListView(self.cork) - self.corkView.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) - self.corkView.setDefaultDropAction(QtCore.Qt.MoveAction) - self.corkView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - self.corkView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - self.corkView.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) - self.corkView.setFlow(QtWidgets.QListView.LeftToRight) + self.corkView = corkView(self.cork) self.corkView.setObjectName("corkView") self.horizontalLayout_3.addWidget(self.corkView) self.stack.addWidget(self.cork) + self.outline = QtWidgets.QWidget() + self.outline.setObjectName("outline") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.outline) + self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.outlineView = outlineView(self.outline) + self.outlineView.setObjectName("outlineView") + self.verticalLayout_3.addWidget(self.outlineView) + self.stack.addWidget(self.outline) self.verticalLayout_2.addWidget(self.stack) self.retranslateUi(editorWidget_ui) @@ -68,3 +71,5 @@ class Ui_editorWidget_ui(object): editorWidget_ui.setWindowTitle(_translate("editorWidget_ui", "Form")) from ui.editors.customTextEdit import customTextEdit +from ui.views.outlineView import outlineView +from ui.views.corkView import corkView diff --git a/src/ui/editors/editorWidget_ui.ui b/src/ui/editors/editorWidget_ui.ui index e2969430..92ed5fb9 100644 --- a/src/ui/editors/editorWidget_ui.ui +++ b/src/ui/editors/editorWidget_ui.ui @@ -68,26 +68,17 @@ 0 - - - QAbstractItemView::DragDrop - - - Qt::MoveAction - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows - - - QAbstractItemView::ScrollPerPixel - - - QListView::LeftToRight - - + + + + + + + + 0 + + + @@ -101,6 +92,16 @@ QTextEdit
ui.editors.customTextEdit.h
+ + outlineView + QTreeView +
ui.views.outlineView.h
+
+ + corkView + QListView +
ui.views.corkView.h
+
diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index 426c5a73..f4a1c6c0 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -703,7 +703,7 @@ class Ui_MainWindow(object): self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget) self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical) self.splitterOutlineV.setObjectName("splitterOutlineV") - self.treePlanOutline = QtWidgets.QTreeView(self.splitterOutlineV) + self.treePlanOutline = outlineView(self.splitterOutlineV) self.treePlanOutline.setDragEnabled(True) self.treePlanOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) self.treePlanOutline.setDefaultDropAction(QtCore.Qt.MoveAction) @@ -800,10 +800,7 @@ class Ui_MainWindow(object): self.verticalLayout_30 = QtWidgets.QVBoxLayout(self.widget) self.verticalLayout_30.setContentsMargins(0, 0, 0, 0) self.verticalLayout_30.setObjectName("verticalLayout_30") - self.treeRedacOutline = QtWidgets.QTreeView(self.widget) - self.treeRedacOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) - self.treeRedacOutline.setDefaultDropAction(QtCore.Qt.MoveAction) - self.treeRedacOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.treeRedacOutline = treeView(self.widget) self.treeRedacOutline.setObjectName("treeRedacOutline") self.verticalLayout_30.addWidget(self.treeRedacOutline) self.horizontalLayout_31 = QtWidgets.QHBoxLayout() @@ -870,6 +867,11 @@ class Ui_MainWindow(object): self.btnRedacFolderCork.setObjectName("btnRedacFolderCork") self.buttonGroup.addButton(self.btnRedacFolderCork) self.horizontalLayout_19.addWidget(self.btnRedacFolderCork) + self.btnRedacFolderOutline = QtWidgets.QPushButton(self.layoutWidget1) + self.btnRedacFolderOutline.setCheckable(True) + self.btnRedacFolderOutline.setObjectName("btnRedacFolderOutline") + self.buttonGroup.addButton(self.btnRedacFolderOutline) + self.horizontalLayout_19.addWidget(self.btnRedacFolderOutline) self.sldCorkSizeFactor = QtWidgets.QSlider(self.layoutWidget1) self.sldCorkSizeFactor.setMinimumSize(QtCore.QSize(100, 0)) self.sldCorkSizeFactor.setMaximumSize(QtCore.QSize(200, 16777215)) @@ -1276,6 +1278,7 @@ class Ui_MainWindow(object): self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Outline")) self.btnRedacFolderText.setText(_translate("MainWindow", "Text")) self.btnRedacFolderCork.setText(_translate("MainWindow", "Cork")) + self.btnRedacFolderOutline.setText(_translate("MainWindow", "Outline")) self.btnRedacFullscreen.setShortcut(_translate("MainWindow", "F11")) self.groupBox_4.setTitle(_translate("MainWindow", "Properties")) self.lblRedacPOV.setText(_translate("MainWindow", "POV")) @@ -1329,9 +1332,11 @@ class Ui_MainWindow(object): self.actSpellcheck.setText(_translate("MainWindow", "Spellcheck")) self.actSpellcheck.setShortcut(_translate("MainWindow", "F8")) -from ui.sldImportance import sldImportance -from ui.chkOutlineCompile import chkOutlineCompile -from ui.editors.editorWidget import editorWidget -from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser from ui.collapsibleGroupBox2 import collapsibleGroupBox2 +from ui.sldImportance import sldImportance +from ui.views.treeView import treeView +from ui.editors.editorWidget import editorWidget +from ui.views.outlineView import outlineView +from ui.chkOutlineCompile import chkOutlineCompile +from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 7e4da4c7..0b23a737 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -1341,7 +1341,7 @@ Qt::Vertical - + true @@ -1549,17 +1549,7 @@ 0 - - - QAbstractItemView::DragDrop - - - Qt::MoveAction - - - QAbstractItemView::ExtendedSelection - - + @@ -1689,6 +1679,19 @@ + + + + Outline + + + true + + + buttonGroup + + + @@ -2324,6 +2327,16 @@
ui.collapsibleGroupBox2.h
1 + + outlineView + QTreeView +
ui.views.outlineView.h
+
+ + treeView + QTreeView +
ui.views.treeView.h
+
diff --git a/src/ui/views/__init__.py b/src/ui/views/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/ui/editors/corkDelegate.py b/src/ui/views/corkDelegate.py similarity index 100% rename from src/ui/editors/corkDelegate.py rename to src/ui/views/corkDelegate.py index 30fa5949..933fec93 100644 --- a/src/ui/editors/corkDelegate.py +++ b/src/ui/views/corkDelegate.py @@ -248,6 +248,18 @@ class corkDelegate(QStyledItemDelegate): #itemRect.right(), iconRect.bottom() + margin) p.drawLine(bottomRect.topLeft(), bottomRect.topRight()) p.restore() + + # Lines + if True: + p.save() + p.setPen(QColor("#EEE")) + fm = QFontMetrics(option.font) + h = fm.lineSpacing() + l = self.mainTextRect.topLeft() + QPoint(0, h) + while self.mainTextRect.contains(l): + p.drawLine(l, QPoint(self.mainTextRect.right(), l.y())) + l.setY(l.y() + h) + p.restore() # Draw status mainRect = self.mainRect @@ -281,18 +293,6 @@ class corkDelegate(QStyledItemDelegate): p.setFont(option.font) p.drawText(self.mainTextRect, Qt.TextWordWrap, fullSummary) - # Lines - if True: - p.save() - p.setPen(QColor("#EEE")) - fm = QFontMetrics(option.font) - h = fm.lineSpacing() - l = self.mainTextRect.topLeft() + QPoint(0, h) - while self.mainTextRect.contains(l): - p.drawLine(l, QPoint(self.mainTextRect.right(), l.y())) - l.setY(l.y() + h) - p.restore() - #Debug #for r in [self.itemRect, self.iconRect, self.titleRect, self.bottomRect, self.mainLineRect, self.mainTextRect]: #p.drawRect(r) \ No newline at end of file diff --git a/src/ui/views/corkView.py b/src/ui/views/corkView.py new file mode 100644 index 00000000..a407a9b7 --- /dev/null +++ b/src/ui/views/corkView.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + + + + +from qt import * +from enums import * +from functions import * +from ui.views.corkDelegate import * +from ui.views.dndView import * + +class corkView(QListView, dndView): + + def __init__(self, parent=None): + QListView.__init__(self, parent) + dndView.__init__(self, parent) + + self.setResizeMode(QListView.Adjust) + self.setWrapping(True) + self.setItemDelegate(corkDelegate()) + self.setSpacing(5) + self.setStyleSheet("""QListView { + background:#926239; + }""") + self.setVerticalScrollMode(self.ScrollPerPixel) + self.setFlow(self.LeftToRight) + self.setSelectionBehavior(self.SelectRows) + + def dragMoveEvent(self, event): + dndView.dragMoveEvent(self, event) + QListView.dragMoveEvent(self, event) \ No newline at end of file diff --git a/src/ui/views/dndView.py b/src/ui/views/dndView.py new file mode 100644 index 00000000..5b73980f --- /dev/null +++ b/src/ui/views/dndView.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + + + + +from qt import * +from enums import * +from functions import * + +class dndView(QAbstractItemView): + + def __init__(self, parent=None): + QAbstractItemView.__init__(self, parent) + self.setDragDropMode(self.DragDrop) + self.setDefaultDropAction(Qt.MoveAction) + self.setSelectionMode(self.ExtendedSelection) + + def dragMoveEvent(self, event): + #return QAbstractItemView.dragMoveEvent(self, event) + #print(a) + if event.keyboardModifiers() & Qt.ControlModifier: + event.setDropAction(Qt.CopyAction) + else: + event.setDropAction(Qt.MoveAction) \ No newline at end of file diff --git a/src/ui/views/outlineView.py b/src/ui/views/outlineView.py new file mode 100644 index 00000000..d1167cc2 --- /dev/null +++ b/src/ui/views/outlineView.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + + + + +from qt import * +from enums import * +from functions import * +from ui.views.treeOutlineDelegates import * +from ui.views.dndView import * + +class outlineView(QTreeView, dndView): + + def __init__(self, parent=None, modelPersos=None): + QTreeView.__init__(self, parent) + dndView.__init__(self, parent) + self.modelPersos = modelPersos + self.header().setStretchLastSection(False) + + def setModelPersos(self, model): + # This is used by treeOutlinePersoDelegate to select character + self.modelPersos = model + + def setModel(self, model): + QTreeView.setModel(self, model) + + # Setting delegates + self.treePlanOutlinePersoDelegate = treeOutlinePersoDelegate(self.modelPersos) + self.setItemDelegateForColumn(Outline.POV.value, self.treePlanOutlinePersoDelegate) + self.treePlanOutlineCompileDelegate = treeOutlineCompileDelegate() + self.setItemDelegateForColumn(Outline.compile.value, self.treePlanOutlineCompileDelegate) + self.treePlanOutlineStatusDelegate = treeOutlineStatusDelegate() + self.setItemDelegateForColumn(Outline.status.value, self.treePlanOutlineStatusDelegate) + self.treePlanOutlineGoalPercentageDelegate = treeOutlineGoalPercentageDelegate() + self.setItemDelegateForColumn(Outline.goalPercentage.value, self.treePlanOutlineGoalPercentageDelegate) + + # Hiding columns + for c in range(1, self.model().columnCount()): + self.hideColumn(c) + for c in [Outline.POV.value, Outline.status.value, Outline.compile.value, + Outline.wordCount.value, Outline.goal.value, Outline.goalPercentage.value]: + self.showColumn(c) + + 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.compile.value, QHeaderView.ResizeToContents) + self.header().setSectionResizeMode(Outline.wordCount.value, QHeaderView.ResizeToContents) + self.header().setSectionResizeMode(Outline.goal.value, QHeaderView.ResizeToContents) + self.header().setSectionResizeMode(Outline.goalPercentage.value, QHeaderView.ResizeToContents) + + def setRootIndex(self, index): + QTreeView.setRootIndex(self, index) + self.treePlanOutlineGoalPercentageDelegate = treeOutlineGoalPercentageDelegate(index) + self.setItemDelegateForColumn(Outline.goalPercentage.value, self.treePlanOutlineGoalPercentageDelegate) + + def dragMoveEvent(self, event): + dndView.dragMoveEvent(self, event) + QTreeView.dragMoveEvent(self, event) + \ No newline at end of file diff --git a/src/ui/treeOutlineDelegates.py b/src/ui/views/treeOutlineDelegates.py similarity index 91% rename from src/ui/treeOutlineDelegates.py rename to src/ui/views/treeOutlineDelegates.py index 2d5a8b29..591354ec 100644 --- a/src/ui/treeOutlineDelegates.py +++ b/src/ui/views/treeOutlineDelegates.py @@ -59,8 +59,15 @@ class treeOutlineCompileDelegate(QStyledItemDelegate): return "" class treeOutlineGoalPercentageDelegate(QStyledItemDelegate): - def __init__(self, parent=None): + def __init__(self, rootIndex=None, parent=None): QStyledItemDelegate.__init__(self, parent) + self.rootIndex = rootIndex + + def sizeHint(self, option, index): + sh = QStyledItemDelegate.sizeHint(self, option, index) + #if sh.width() > 50: + sh.setWidth(100) + return sh def paint(self, painter, option, index): if not index.isValid(): @@ -78,6 +85,8 @@ class treeOutlineGoalPercentageDelegate(QStyledItemDelegate): typ = item.data(Outline.type.value) level = item.level() + if self.rootIndex: + level -= self.rootIndex.internalPointer().level() + 1 margin = 5 height = max(min(option.rect.height() - 2*margin, 12) - 2 * level, 6) diff --git a/src/ui/views/treeView.py b/src/ui/views/treeView.py new file mode 100644 index 00000000..e9d34b72 --- /dev/null +++ b/src/ui/views/treeView.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + + + + +from qt import * +from enums import * +from functions import * +from ui.views.dndView import * + +class treeView(QTreeView, dndView): + + def __init__(self, parent=None): + QTreeView.__init__(self, parent) + dndView.__init__(self, parent) + + + def setModel(self, model): + QTreeView.setModel(self, model) + + # Hiding columns + for c in range(1, self.model().columnCount()): + self.hideColumn(c) + + def dragMoveEvent(self, event): + dndView.dragMoveEvent(self, event) + QTreeView.dragMoveEvent(self, event) \ No newline at end of file diff --git a/test_project/outline.xml b/test_project/outline.xml index 136377dc..84ebbe35 100644 --- a/test_project/outline.xml +++ b/test_project/outline.xml @@ -1,5 +1,5 @@ - + @@ -17,12 +17,13 @@ - + + + + + + - - - - @@ -36,28 +37,24 @@ - - + + - - + + + + + + + - - - - - - - + + - - - - - - + +