mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-29 00:59:47 +12:00
Using QTreeWidget for plot, finally
This commit is contained in:
parent
28ba9f812d
commit
8d0e83a3b3
|
@ -293,7 +293,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
def changeCurrentPlot(self):
|
def changeCurrentPlot(self):
|
||||||
index = self.lstPlots.currentIndex()
|
index = self.lstPlots.currentPlotIndex()
|
||||||
|
|
||||||
if not index.isValid():
|
if not index.isValid():
|
||||||
self.tabPlot.setEnabled(False)
|
self.tabPlot.setEnabled(False)
|
||||||
|
@ -476,14 +476,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||||
# Plots
|
# Plots
|
||||||
self.lstPlots.setPlotModel(self.mdlPlots)
|
self.lstPlots.setPlotModel(self.mdlPlots)
|
||||||
self.txtPlotFilter.textChanged.connect(self.lstPlots.setFilter)
|
self.txtPlotFilter.textChanged.connect(self.lstPlots.setFilter)
|
||||||
self.lstPlots.currentRowChanged.connect(self.changeCurrentPlot)
|
self.lstPlots.currentItemChanged.connect(self.changeCurrentPlot)
|
||||||
self.lstPlotPerso.setModel(self.mdlPlots)
|
self.lstPlotPerso.setModel(self.mdlPlots)
|
||||||
self.lstSubPlots.setModel(self.mdlPlots)
|
self.lstSubPlots.setModel(self.mdlPlots)
|
||||||
#self.txtSubPlotSummary.setModel(self.mdlPlots)
|
#self.txtSubPlotSummary.setModel(self.mdlPlots)
|
||||||
#self.txtSubPlotSummary.setColumn(1)
|
#self.txtSubPlotSummary.setColumn(1)
|
||||||
self.lstSubPlots.selectionModel().currentChanged.connect(self.changeCurrentSubPlot)
|
self.lstSubPlots.selectionModel().currentChanged.connect(self.changeCurrentSubPlot)
|
||||||
self.btnAddPlot.clicked.connect(self.mdlPlots.addPlot)
|
self.btnAddPlot.clicked.connect(self.mdlPlots.addPlot)
|
||||||
self.btnRmPlot.clicked.connect(lambda: self.mdlPlots.removePlot(self.lstPlots.currentIndex()))
|
self.btnRmPlot.clicked.connect(lambda: self.mdlPlots.removePlot(self.lstPlots.currentPlotIndex()))
|
||||||
self.btnAddSubPlot.clicked.connect(self.mdlPlots.addSubPlot)
|
self.btnAddSubPlot.clicked.connect(self.mdlPlots.addSubPlot)
|
||||||
self.btnRmSubPlot.clicked.connect(self.mdlPlots.removeSubPlot)
|
self.btnRmSubPlot.clicked.connect(self.mdlPlots.removeSubPlot)
|
||||||
self.btnRmPlotPerso.clicked.connect(self.mdlPlots.removePlotPerso)
|
self.btnRmPlotPerso.clicked.connect(self.mdlPlots.removePlotPerso)
|
||||||
|
@ -499,6 +499,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||||
|
|
||||||
self.tabPlot.setEnabled(False)
|
self.tabPlot.setEnabled(False)
|
||||||
|
|
||||||
|
self.lstOutlinePlots.setPlotModel(self.mdlPlots)
|
||||||
|
self.lstOutlinePlots.setShowSubPlot(True)
|
||||||
|
|
||||||
# Outline
|
# Outline
|
||||||
self.treeRedacOutline.setModel(self.mdlOutline)
|
self.treeRedacOutline.setModel(self.mdlOutline)
|
||||||
self.treePlanOutline.setModelPersos(self.mdlPersos)
|
self.treePlanOutline.setModelPersos(self.mdlPersos)
|
||||||
|
|
|
@ -30,7 +30,20 @@ class plotModel(QStandardItemModel):
|
||||||
plots[2-toInt(importance)].append(ID)
|
plots[2-toInt(importance)].append(ID)
|
||||||
return plots
|
return plots
|
||||||
|
|
||||||
def getNameByID(self, ID):
|
def getSubPlotsByID(self, ID):
|
||||||
|
index = self.getIndexFromID(ID)
|
||||||
|
if not index.isValid():
|
||||||
|
return
|
||||||
|
index = index.sibling(index.row(), Plot.subplots.value)
|
||||||
|
item = self.itemFromIndex(index)
|
||||||
|
lst = []
|
||||||
|
for i in range(item.rowCount()):
|
||||||
|
_ID = item.child(i, Plot.ID.value).text()
|
||||||
|
name = item.child(i, Plot.name.value).text()
|
||||||
|
lst.append((_ID, name))
|
||||||
|
return lst
|
||||||
|
|
||||||
|
def getPlotNameByID(self, ID):
|
||||||
for i in range(self.rowCount()):
|
for i in range(self.rowCount()):
|
||||||
_ID = self.item(i, Plot.ID.value).text()
|
_ID = self.item(i, Plot.ID.value).text()
|
||||||
if _ID == ID or toInt(_ID) == ID:
|
if _ID == ID or toInt(_ID) == ID:
|
||||||
|
@ -46,7 +59,7 @@ class plotModel(QStandardItemModel):
|
||||||
return QModelIndex()
|
return QModelIndex()
|
||||||
|
|
||||||
def currentIndex(self):
|
def currentIndex(self):
|
||||||
i = self.mw.lstPlots.selectionModel().currentIndex()
|
i = self.mw.lstPlots.currentIndex()
|
||||||
if i .isValid():
|
if i .isValid():
|
||||||
return i
|
return i
|
||||||
else:
|
else:
|
||||||
|
@ -85,7 +98,7 @@ class plotModel(QStandardItemModel):
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
def addSubPlot(self):
|
def addSubPlot(self):
|
||||||
index = self.mw.lstPlots.currentIndex()
|
index = self.mw.lstPlots.currentPlotIndex()
|
||||||
if not index.isValid():
|
if not index.isValid():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -122,7 +135,7 @@ class plotModel(QStandardItemModel):
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
def addPlotPerso(self, v):
|
def addPlotPerso(self, v):
|
||||||
index = self.mw.lstPlots.currentIndex()
|
index = self.mw.lstPlots.currentPlotIndex()
|
||||||
if index.isValid():
|
if index.isValid():
|
||||||
if not self.item(index.row(), Plot.persos.value):
|
if not self.item(index.row(), Plot.persos.value):
|
||||||
self.setItem(index.row(), Plot.persos.value, QStandardItem())
|
self.setItem(index.row(), Plot.persos.value, QStandardItem())
|
||||||
|
|
|
@ -487,8 +487,10 @@ class Ui_MainWindow(object):
|
||||||
self.groupBox_2.setObjectName("groupBox_2")
|
self.groupBox_2.setObjectName("groupBox_2")
|
||||||
self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.groupBox_2)
|
self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.groupBox_2)
|
||||||
self.verticalLayout_10.setObjectName("verticalLayout_10")
|
self.verticalLayout_10.setObjectName("verticalLayout_10")
|
||||||
self.lstPlots = plotListView(self.groupBox_2)
|
self.lstPlots = plotTreeView(self.groupBox_2)
|
||||||
self.lstPlots.setObjectName("lstPlots")
|
self.lstPlots.setObjectName("lstPlots")
|
||||||
|
self.lstPlots.headerItem().setText(0, "1")
|
||||||
|
self.lstPlots.header().setVisible(False)
|
||||||
self.verticalLayout_10.addWidget(self.lstPlots)
|
self.verticalLayout_10.addWidget(self.lstPlots)
|
||||||
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
|
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
|
||||||
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
|
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
|
||||||
|
@ -715,16 +717,10 @@ class Ui_MainWindow(object):
|
||||||
self.splitterOutlineH = QtWidgets.QSplitter(self.lytTabOutline)
|
self.splitterOutlineH = QtWidgets.QSplitter(self.lytTabOutline)
|
||||||
self.splitterOutlineH.setOrientation(QtCore.Qt.Horizontal)
|
self.splitterOutlineH.setOrientation(QtCore.Qt.Horizontal)
|
||||||
self.splitterOutlineH.setObjectName("splitterOutlineH")
|
self.splitterOutlineH.setObjectName("splitterOutlineH")
|
||||||
self.treeWidget_2 = QtWidgets.QTreeWidget(self.splitterOutlineH)
|
self.lstOutlinePlots = plotTreeView(self.splitterOutlineH)
|
||||||
self.treeWidget_2.setDragEnabled(True)
|
self.lstOutlinePlots.setDragEnabled(True)
|
||||||
self.treeWidget_2.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
|
self.lstOutlinePlots.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
|
||||||
self.treeWidget_2.setObjectName("treeWidget_2")
|
self.lstOutlinePlots.setObjectName("lstOutlinePlots")
|
||||||
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget_2)
|
|
||||||
item_1 = QtWidgets.QTreeWidgetItem(item_0)
|
|
||||||
item_1 = QtWidgets.QTreeWidgetItem(item_0)
|
|
||||||
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget_2)
|
|
||||||
item_1 = QtWidgets.QTreeWidgetItem(item_0)
|
|
||||||
item_1 = QtWidgets.QTreeWidgetItem(item_0)
|
|
||||||
self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH)
|
self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH)
|
||||||
self.layoutWidget.setObjectName("layoutWidget")
|
self.layoutWidget.setObjectName("layoutWidget")
|
||||||
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget)
|
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget)
|
||||||
|
@ -1115,10 +1111,10 @@ class Ui_MainWindow(object):
|
||||||
self.menubar.addAction(self.menuHelp.menuAction())
|
self.menubar.addAction(self.menuHelp.menuAction())
|
||||||
|
|
||||||
self.retranslateUi(MainWindow)
|
self.retranslateUi(MainWindow)
|
||||||
self.tabMain.setCurrentIndex(3)
|
self.tabMain.setCurrentIndex(5)
|
||||||
self.tabSummary.setCurrentIndex(0)
|
self.tabSummary.setCurrentIndex(0)
|
||||||
self.tabPersos.setCurrentIndex(0)
|
self.tabPersos.setCurrentIndex(0)
|
||||||
self.tabPlot.setCurrentIndex(1)
|
self.tabPlot.setCurrentIndex(0)
|
||||||
self.comboBox_2.setCurrentIndex(0)
|
self.comboBox_2.setCurrentIndex(0)
|
||||||
self.stkPlotSummary.setCurrentIndex(0)
|
self.stkPlotSummary.setCurrentIndex(0)
|
||||||
self.tabRedacInfos.setCurrentIndex(0)
|
self.tabRedacInfos.setCurrentIndex(0)
|
||||||
|
@ -1201,16 +1197,6 @@ class Ui_MainWindow(object):
|
||||||
self.comboBox_2.setItemText(2, _translate("MainWindow", "Full"))
|
self.comboBox_2.setItemText(2, _translate("MainWindow", "Full"))
|
||||||
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabPlot), _translate("MainWindow", "Plots"))
|
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabPlot), _translate("MainWindow", "Plots"))
|
||||||
self.tabMain.setTabText(self.tabMain.indexOf(self.tab_5), _translate("MainWindow", "Context"))
|
self.tabMain.setTabText(self.tabMain.indexOf(self.tab_5), _translate("MainWindow", "Context"))
|
||||||
self.treeWidget_2.headerItem().setText(0, _translate("MainWindow", "Scenes list"))
|
|
||||||
__sortingEnabled = self.treeWidget_2.isSortingEnabled()
|
|
||||||
self.treeWidget_2.setSortingEnabled(False)
|
|
||||||
self.treeWidget_2.topLevelItem(0).setText(0, _translate("MainWindow", "Intrigue général"))
|
|
||||||
self.treeWidget_2.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "Scène 1"))
|
|
||||||
self.treeWidget_2.topLevelItem(0).child(1).setText(0, _translate("MainWindow", "Scène 2"))
|
|
||||||
self.treeWidget_2.topLevelItem(1).setText(0, _translate("MainWindow", "Intrigue secondaire"))
|
|
||||||
self.treeWidget_2.topLevelItem(1).child(0).setText(0, _translate("MainWindow", "Scène 1"))
|
|
||||||
self.treeWidget_2.topLevelItem(1).child(1).setText(0, _translate("MainWindow", "Scène 2"))
|
|
||||||
self.treeWidget_2.setSortingEnabled(__sortingEnabled)
|
|
||||||
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Outline"))
|
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Outline"))
|
||||||
self.btnRedacFolderText.setText(_translate("MainWindow", "Text"))
|
self.btnRedacFolderText.setText(_translate("MainWindow", "Text"))
|
||||||
self.btnRedacFolderCork.setText(_translate("MainWindow", "Index cards"))
|
self.btnRedacFolderCork.setText(_translate("MainWindow", "Index cards"))
|
||||||
|
@ -1272,12 +1258,12 @@ class Ui_MainWindow(object):
|
||||||
self.actSettings.setText(_translate("MainWindow", "Settings"))
|
self.actSettings.setText(_translate("MainWindow", "Settings"))
|
||||||
self.actSettings.setShortcut(_translate("MainWindow", "F8"))
|
self.actSettings.setShortcut(_translate("MainWindow", "F8"))
|
||||||
|
|
||||||
from ui.views.textEditView import textEditView
|
|
||||||
from ui.views.basicItemView import basicItemView
|
|
||||||
from ui.views.lineEditView import lineEditView
|
|
||||||
from ui.views.plotListView import plotListView
|
|
||||||
from ui.views.outlineView import outlineView
|
from ui.views.outlineView import outlineView
|
||||||
from ui.editors.editorWidget import editorWidget
|
from ui.editors.editorWidget import editorWidget
|
||||||
from ui.views.metadataView import metadataView
|
from ui.views.metadataView import metadataView
|
||||||
from ui.sldImportance import sldImportance
|
from ui.views.lineEditView import lineEditView
|
||||||
|
from ui.views.basicItemView import basicItemView
|
||||||
from ui.views.treeView import treeView
|
from ui.views.treeView import treeView
|
||||||
|
from ui.views.plotTreeView import plotTreeView
|
||||||
|
from ui.views.textEditView import textEditView
|
||||||
|
from ui.sldImportance import sldImportance
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabMain">
|
<widget class="QTabWidget" name="tabMain">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>3</number>
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="documentMode">
|
<property name="documentMode">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -916,7 +916,16 @@
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||||
<item>
|
<item>
|
||||||
<widget class="plotListView" name="lstPlots"/>
|
<widget class="plotTreeView" name="lstPlots">
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">1</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||||
|
@ -975,7 +984,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QTabWidget" name="tabPlot">
|
<widget class="QTabWidget" name="tabPlot">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="documentMode">
|
<property name="documentMode">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -1326,48 +1335,13 @@
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QTreeWidget" name="treeWidget_2">
|
<widget class="plotTreeView" name="lstOutlinePlots">
|
||||||
<property name="dragEnabled">
|
<property name="dragEnabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="dragDropMode">
|
<property name="dragDropMode">
|
||||||
<enum>QAbstractItemView::DragOnly</enum>
|
<enum>QAbstractItemView::DragOnly</enum>
|
||||||
</property>
|
</property>
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string>Scenes list</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Intrigue général</string>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Scène 1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Scène 2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Intrigue secondaire</string>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Scène 1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Scène 2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</item>
|
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="layoutWidget">
|
<widget class="QWidget" name="layoutWidget">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_14">
|
<layout class="QVBoxLayout" name="verticalLayout_14">
|
||||||
|
@ -2198,9 +2172,9 @@
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>plotListView</class>
|
<class>plotTreeView</class>
|
||||||
<extends>QListWidget</extends>
|
<extends>QTreeWidget</extends>
|
||||||
<header>ui.views.plotListView.h</header>
|
<header>ui.views.plotTreeView.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -1,113 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#--!-- coding: utf8 --!--
|
|
||||||
|
|
||||||
from qt import *
|
|
||||||
from enums import *
|
|
||||||
from functions import *
|
|
||||||
import settings
|
|
||||||
|
|
||||||
class plotListView(QListWidget):
|
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
|
||||||
QListWidget.__init__(self, parent)
|
|
||||||
self._model = None
|
|
||||||
self._catRow = [-1, -1, -1]
|
|
||||||
self._catCheckedState = [True, True, True]
|
|
||||||
self._filter = ""
|
|
||||||
self._lastID = 1
|
|
||||||
self._updating = False
|
|
||||||
|
|
||||||
self.currentItemChanged.connect(self._currentItemChanged)
|
|
||||||
|
|
||||||
def setPlotModel(self, model):
|
|
||||||
self._model = model
|
|
||||||
self._model.dataChanged.connect(self.updateMaybe)
|
|
||||||
self._model.rowsInserted.connect(self.updateMaybe2)
|
|
||||||
self._model.rowsRemoved.connect(self.updateMaybe2)
|
|
||||||
self.updateItems()
|
|
||||||
|
|
||||||
def setFilter(self, text):
|
|
||||||
self._filter = text
|
|
||||||
self.updateItems()
|
|
||||||
|
|
||||||
def updateMaybe(self, topLeft, bottomRight):
|
|
||||||
if topLeft.parent() != QModelIndex():
|
|
||||||
return
|
|
||||||
|
|
||||||
if topLeft.column() <= Plot.name.value <= bottomRight.column():
|
|
||||||
# Update name
|
|
||||||
self.updateNames()
|
|
||||||
|
|
||||||
elif topLeft.column() <= Plot.importance.value <= bottomRight.column():
|
|
||||||
# Importance changed
|
|
||||||
self.updateItems()
|
|
||||||
|
|
||||||
def updateMaybe2(self, parent, first, last):
|
|
||||||
"Rows inserted or removed"
|
|
||||||
if parent == QModelIndex():
|
|
||||||
self.updateItems()
|
|
||||||
|
|
||||||
def updateNames(self):
|
|
||||||
for i in range(self.count()):
|
|
||||||
ID = self.item(i).data(Qt.UserRole)
|
|
||||||
if ID:
|
|
||||||
name = self._model.getNameByID(ID)
|
|
||||||
self.item(i).setText(name)
|
|
||||||
|
|
||||||
def updateItems(self):
|
|
||||||
self._updating = True
|
|
||||||
self.clear()
|
|
||||||
plots = self._model.getPlotsByImportance()
|
|
||||||
|
|
||||||
h = [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")]
|
|
||||||
for i in range(3):
|
|
||||||
b = QPushButton(h[i])
|
|
||||||
b.setCheckable(True)
|
|
||||||
#b.setFlat(True)
|
|
||||||
b.setChecked(self._catCheckedState[i])
|
|
||||||
b.toggled.connect(self.updateCatState)
|
|
||||||
if self._catCheckedState[i]:
|
|
||||||
b.setStyleSheet("background:#e6e6ff; color:darkBlue; border-radius:0px; font:bold;")
|
|
||||||
else:
|
|
||||||
b.setStyleSheet("background:#EEE; color:333; border-radius:0px; font:bold;")
|
|
||||||
self.addItem(h[i])
|
|
||||||
self.setItemWidget(self.item(self.count()-1), b)
|
|
||||||
self._catRow[i] = self.count()-1
|
|
||||||
|
|
||||||
if self._catCheckedState[i]:
|
|
||||||
for ID in plots[i]:
|
|
||||||
name = self._model.getNameByID(ID)
|
|
||||||
if not self._filter.lower() in name.lower():
|
|
||||||
continue
|
|
||||||
item = QListWidgetItem(name)
|
|
||||||
item.setData(Qt.UserRole, ID)
|
|
||||||
self.addItem(item)
|
|
||||||
|
|
||||||
self.setCurrentItem(self.getItemByID(self._lastID))
|
|
||||||
self._updating = False
|
|
||||||
|
|
||||||
def updateCatState(self):
|
|
||||||
for i in range(3):
|
|
||||||
row = self._catRow[i]
|
|
||||||
b = self.itemWidget(self.item(row))
|
|
||||||
self._catCheckedState[i] = b.isChecked()
|
|
||||||
self.updateItems()
|
|
||||||
|
|
||||||
def _currentItemChanged(self, current, previous):
|
|
||||||
if self._updating:
|
|
||||||
return
|
|
||||||
|
|
||||||
if current.data(Qt.UserRole):
|
|
||||||
self._lastID = current.data(Qt.UserRole)
|
|
||||||
|
|
||||||
def getItemByID(self, ID):
|
|
||||||
for i in range(self.count()):
|
|
||||||
if self.item(i).data(Qt.UserRole) == ID:
|
|
||||||
return self.item(i)
|
|
||||||
|
|
||||||
def currentIndex(self):
|
|
||||||
ID = None
|
|
||||||
if self.currentItem():
|
|
||||||
ID = self.currentItem().data(Qt.UserRole)
|
|
||||||
|
|
||||||
return self._model.getIndexFromID(ID)
|
|
133
src/ui/views/plotTreeView.py
Normal file
133
src/ui/views/plotTreeView.py
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
#--!-- coding: utf8 --!--
|
||||||
|
|
||||||
|
from qt import *
|
||||||
|
from enums import *
|
||||||
|
from functions import *
|
||||||
|
import settings
|
||||||
|
|
||||||
|
class plotTreeView(QTreeWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
QTreeWidget.__init__(self, parent)
|
||||||
|
self._model = None
|
||||||
|
self._catRow = [-1, -1, -1]
|
||||||
|
self._filter = ""
|
||||||
|
self._lastID = -1
|
||||||
|
self._updating = False
|
||||||
|
self._showSubPlot = False
|
||||||
|
self.setRootIsDecorated(False)
|
||||||
|
self.setIndentation(10)
|
||||||
|
|
||||||
|
self.setColumnCount(1)
|
||||||
|
self._rootItem = QTreeWidgetItem()
|
||||||
|
self.insertTopLevelItem(0, self._rootItem)
|
||||||
|
#self.currentItemChanged.connect(self._currentItemChanged)
|
||||||
|
|
||||||
|
def setShowSubPlot(self, v):
|
||||||
|
self._showSubPlot = v
|
||||||
|
self.updateItems()
|
||||||
|
|
||||||
|
def setPlotModel(self, model):
|
||||||
|
self._model = model
|
||||||
|
self._model.dataChanged.connect(self.updateMaybe)
|
||||||
|
self._model.rowsInserted.connect(self.updateMaybe2)
|
||||||
|
self._model.rowsRemoved.connect(self.updateMaybe2)
|
||||||
|
self.updateItems()
|
||||||
|
|
||||||
|
def setFilter(self, text):
|
||||||
|
self._filter = text
|
||||||
|
self.updateItems()
|
||||||
|
|
||||||
|
def updateMaybe(self, topLeft, bottomRight):
|
||||||
|
if topLeft.parent() != QModelIndex():
|
||||||
|
return
|
||||||
|
|
||||||
|
if topLeft.column() <= Plot.name.value <= bottomRight.column():
|
||||||
|
# Update name
|
||||||
|
self.updateNames()
|
||||||
|
|
||||||
|
elif topLeft.column() <= Plot.importance.value <= bottomRight.column():
|
||||||
|
# Importance changed
|
||||||
|
self.updateItems()
|
||||||
|
|
||||||
|
def updateMaybe2(self, parent, first, last):
|
||||||
|
"Rows inserted or removed"
|
||||||
|
if parent == QModelIndex():
|
||||||
|
self.updateItems()
|
||||||
|
|
||||||
|
def updateNames(self):
|
||||||
|
for i in range(self.topLevelItemCount()):
|
||||||
|
item = self.topLevelItem(i)
|
||||||
|
|
||||||
|
for c in range(item.childCount()):
|
||||||
|
sub = item.child(c)
|
||||||
|
ID = sub.data(0, Qt.UserRole)
|
||||||
|
if ID:
|
||||||
|
name = self._model.getPlotNameByID(ID)
|
||||||
|
sub.setText(0, name)
|
||||||
|
|
||||||
|
def updateItems(self):
|
||||||
|
if not self._model:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.currentItem():
|
||||||
|
self._lastID = self.currentItem().data(0, Qt.UserRole)
|
||||||
|
|
||||||
|
self._updating = True
|
||||||
|
self.clear()
|
||||||
|
plots = self._model.getPlotsByImportance()
|
||||||
|
|
||||||
|
h = [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")]
|
||||||
|
for i in range(3):
|
||||||
|
cat = QTreeWidgetItem(self, [h[i]])
|
||||||
|
cat.setBackground(0, QBrush(QColor(Qt.blue).lighter(190)))
|
||||||
|
cat.setForeground(0, QBrush(Qt.darkBlue))
|
||||||
|
cat.setTextAlignment(0, Qt.AlignCenter)
|
||||||
|
f = cat.font(0)
|
||||||
|
f.setBold(True)
|
||||||
|
cat.setFont(0, f)
|
||||||
|
self.addTopLevelItem(cat)
|
||||||
|
#cat.setChildIndicatorPolicy(cat.DontShowIndicator)
|
||||||
|
|
||||||
|
for ID in plots[i]:
|
||||||
|
name = self._model.getPlotNameByID(ID)
|
||||||
|
if not self._filter.lower() in name.lower():
|
||||||
|
continue
|
||||||
|
item = QTreeWidgetItem(cat, [name])
|
||||||
|
item.setData(0, Qt.UserRole, ID)
|
||||||
|
|
||||||
|
if self._showSubPlot:
|
||||||
|
|
||||||
|
f = item.font(0)
|
||||||
|
f.setBold(True)
|
||||||
|
item.setFont(0, f)
|
||||||
|
|
||||||
|
for subID, name in self._model.getSubPlotsByID(ID):
|
||||||
|
sub = QTreeWidgetItem(item, [name])
|
||||||
|
sub.setData(0, Qt.UserRole, "{}:{}".format(ID, subID))
|
||||||
|
|
||||||
|
if ID == self._lastID:
|
||||||
|
self.setCurrentItem(item)
|
||||||
|
|
||||||
|
self.expandAll()
|
||||||
|
self._updating = False
|
||||||
|
|
||||||
|
def getItemByID(self, ID):
|
||||||
|
for i in range(self.topLevelItemCount()):
|
||||||
|
if self.topLevelItem(i).data(0, Qt.UserRole) == ID:
|
||||||
|
return self.topLevelItem(i)
|
||||||
|
|
||||||
|
def currentPlotIndex(self):
|
||||||
|
ID = None
|
||||||
|
if self.currentItem():
|
||||||
|
ID = self.currentItem().data(0, Qt.UserRole)
|
||||||
|
|
||||||
|
return self._model.getIndexFromID(ID)
|
||||||
|
|
||||||
|
def mouseDoubleClickEvent(self, event):
|
||||||
|
item = self.currentItem()
|
||||||
|
# Catching double clicks to forbid collapsing of toplevel items
|
||||||
|
if item.parent():
|
||||||
|
QTreeWidget.mouseDoubleClickEvent(self, event)
|
||||||
|
|
Loading…
Reference in a new issue