2015-06-22 04:13:14 +12:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#--!-- coding: utf8 --!--
|
|
|
|
|
|
|
|
from qt import *
|
|
|
|
from enums import *
|
|
|
|
from functions import *
|
2015-06-22 23:11:45 +12:00
|
|
|
from models.plotsProxyModel import *
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
class plotModel(QStandardItemModel):
|
|
|
|
|
2015-06-25 06:32:50 +12:00
|
|
|
def __init__(self, parent):
|
|
|
|
QStandardItemModel.__init__(self, 0, 3, parent)
|
2015-06-22 04:13:14 +12:00
|
|
|
self.setHorizontalHeaderLabels([i.name for i in Plot])
|
|
|
|
self.mw = mainWindow()
|
2015-06-22 23:11:45 +12:00
|
|
|
#self._proxy = plotsProxyModel()
|
|
|
|
#self._proxy.setSourceModel(self)
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
self.updatePlotPersoButton()
|
|
|
|
self.mw.mdlPersos.dataChanged.connect(self.updatePlotPersoButton)
|
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
####################################################################################################
|
|
|
|
# QUERIES #
|
|
|
|
####################################################################################################
|
|
|
|
|
|
|
|
def getPlotsByImportance(self):
|
|
|
|
plots = [[], [], []]
|
|
|
|
for i in range(self.rowCount()):
|
|
|
|
importance = self.item(i, Plot.importance.value).text()
|
|
|
|
ID = self.item(i, Plot.ID.value).text()
|
|
|
|
plots[2-toInt(importance)].append(ID)
|
|
|
|
return plots
|
|
|
|
|
2015-06-23 06:30:43 +12:00
|
|
|
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):
|
2015-06-22 23:11:45 +12:00
|
|
|
for i in range(self.rowCount()):
|
|
|
|
_ID = self.item(i, Plot.ID.value).text()
|
|
|
|
if _ID == ID or toInt(_ID) == ID:
|
|
|
|
name = self.item(i, Plot.name.value).text()
|
|
|
|
return name
|
|
|
|
return None
|
|
|
|
|
|
|
|
def getIndexFromID(self, ID):
|
|
|
|
for i in range(self.rowCount()):
|
|
|
|
_ID = self.item(i, Plot.ID.value).text()
|
|
|
|
if _ID == ID or toInt(_ID) == ID:
|
|
|
|
return self.index(i, 0)
|
|
|
|
return QModelIndex()
|
|
|
|
|
|
|
|
def currentIndex(self):
|
2015-06-23 06:30:43 +12:00
|
|
|
i = self.mw.lstPlots.currentIndex()
|
2015-06-22 23:11:45 +12:00
|
|
|
if i .isValid():
|
|
|
|
return i
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
####################################################################################################
|
|
|
|
# ADDING / REMOVING #
|
|
|
|
####################################################################################################
|
|
|
|
|
2015-06-22 04:13:14 +12:00
|
|
|
def addPlot(self):
|
|
|
|
p = QStandardItem(self.tr("New plot"))
|
|
|
|
_id = QStandardItem(self.getUniqueID())
|
|
|
|
importance = QStandardItem(str(0))
|
2015-06-22 23:11:45 +12:00
|
|
|
self.appendRow([p, _id, importance, QStandardItem("Persos"),
|
|
|
|
QStandardItem(), QStandardItem(), QStandardItem("Subplots")])
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
def getUniqueID(self, parent=QModelIndex()):
|
|
|
|
"Returns an unused ID"
|
|
|
|
parentItem = self.itemFromIndex(parent)
|
|
|
|
vals = []
|
|
|
|
for i in range(self.rowCount(parent)):
|
|
|
|
index = self.index(i, Plot.ID.value, parent)
|
|
|
|
#item = self.item(i, Plot.ID.value)
|
|
|
|
if index.isValid() and index.data():
|
|
|
|
vals.append(int(index.data()))
|
|
|
|
|
|
|
|
k = 0
|
|
|
|
while k in vals: k += 1
|
|
|
|
return str(k)
|
|
|
|
|
|
|
|
def removePlot(self, index):
|
|
|
|
self.takeRow(index.row())
|
2015-06-22 23:11:45 +12:00
|
|
|
|
|
|
|
####################################################################################################
|
|
|
|
# SUBPLOTS #
|
|
|
|
####################################################################################################
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
def addSubPlot(self):
|
2015-06-23 06:30:43 +12:00
|
|
|
index = self.mw.lstPlots.currentPlotIndex()
|
2015-06-22 23:11:45 +12:00
|
|
|
if not index.isValid():
|
2015-06-22 04:13:14 +12:00
|
|
|
return
|
2015-06-22 23:11:45 +12:00
|
|
|
|
2015-06-22 04:13:14 +12:00
|
|
|
parent = index.sibling(index.row(), Plot.subplots.value)
|
2015-06-22 23:11:45 +12:00
|
|
|
parentItem = self.item(index.row(), Plot.subplots.value)
|
|
|
|
|
|
|
|
if not parentItem:
|
|
|
|
return
|
|
|
|
|
2015-06-22 04:13:14 +12:00
|
|
|
p = QStandardItem(self.tr("New subplot"))
|
|
|
|
_id = QStandardItem(self.getUniqueID(parent))
|
|
|
|
summary = QStandardItem()
|
2015-06-22 23:11:45 +12:00
|
|
|
|
|
|
|
# Don't know why, if summary is in third position, then drag/drop deletes it...
|
|
|
|
parentItem.appendRow([p, _id, QStandardItem(), summary])
|
2015-06-23 07:07:38 +12:00
|
|
|
|
|
|
|
# Select last index
|
|
|
|
self.mw.lstSubPlots.setCurrentIndex(parent.child(self.rowCount(parent)-1, 0))
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
def removeSubPlot(self):
|
|
|
|
index = self.mw.lstSubPlots.currentIndex()
|
|
|
|
if not index.isValid():
|
|
|
|
return
|
|
|
|
parent = index.parent()
|
|
|
|
parentItem = self.itemFromIndex(parent)
|
|
|
|
parentItem.takeRow(index.row())
|
2015-06-22 23:11:45 +12:00
|
|
|
|
|
|
|
def flags(self, index):
|
|
|
|
parent = index.parent()
|
|
|
|
if parent.isValid(): # this is a subitem
|
|
|
|
return Qt.ItemIsEnabled | Qt.ItemIsEditable | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled
|
|
|
|
else:
|
|
|
|
return QStandardItemModel.flags(self, index)
|
|
|
|
|
|
|
|
####################################################################################################
|
|
|
|
# PLOT PERSOS #
|
|
|
|
####################################################################################################
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
def addPlotPerso(self, v):
|
2015-06-23 06:30:43 +12:00
|
|
|
index = self.mw.lstPlots.currentPlotIndex()
|
2015-06-22 23:11:45 +12:00
|
|
|
if index.isValid():
|
|
|
|
if not self.item(index.row(), Plot.persos.value):
|
|
|
|
self.setItem(index.row(), Plot.persos.value, QStandardItem())
|
|
|
|
|
|
|
|
item = self.item(index.row(), Plot.persos.value)
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
# We check that the PersoID is not in the list yet
|
|
|
|
for i in range(item.rowCount()):
|
|
|
|
if item.child(i).text() == str(v):
|
|
|
|
return
|
|
|
|
|
|
|
|
item.appendRow(QStandardItem(str(v)))
|
|
|
|
|
|
|
|
def removePlotPerso(self):
|
|
|
|
index = self.mw.lstPlotPerso.currentIndex()
|
|
|
|
if not index.isValid():
|
|
|
|
return
|
|
|
|
parent = index.parent()
|
|
|
|
parentItem = self.itemFromIndex(parent)
|
|
|
|
parentItem.takeRow(index.row())
|
|
|
|
|
|
|
|
def updatePlotPersoButton(self):
|
2015-06-25 06:41:23 +12:00
|
|
|
menu = QMenu(self.mw)
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
menus = []
|
|
|
|
for i in [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")]:
|
|
|
|
m = QMenu(i, menu)
|
|
|
|
menus.append(m)
|
|
|
|
menu.addMenu(m)
|
|
|
|
|
|
|
|
mpr = QSignalMapper(menu)
|
|
|
|
for i in range(self.mw.mdlPersos.rowCount()):
|
|
|
|
if self.mw.mdlPersos.item(i, Perso.ID.value):
|
|
|
|
a = QAction(self.mw.mdlPersos.item(i, Perso.name.value).text(), menu)
|
|
|
|
a.triggered.connect(mpr.map)
|
|
|
|
mpr.setMapping(a, int(self.mw.mdlPersos.item(i, Perso.ID.value).text()))
|
|
|
|
|
|
|
|
imp = self.mw.mdlPersos.item(i, Perso.importance.value)
|
|
|
|
if imp:
|
|
|
|
imp = toInt(imp.text())
|
|
|
|
else:
|
|
|
|
imp = 0
|
|
|
|
|
|
|
|
menus[2-imp].addAction(a)
|
|
|
|
|
|
|
|
mpr.mapped.connect(self.addPlotPerso)
|
|
|
|
self.mw.btnAddPlotPerso.setMenu(menu)
|
2015-06-22 23:11:45 +12:00
|
|
|
|
|
|
|
####################################################################################################
|
|
|
|
# PROXY MODEL (UNUSED) #
|
|
|
|
####################################################################################################
|
2015-06-22 04:13:14 +12:00
|
|
|
|
|
|
|
def viewModel(self):
|
|
|
|
"Returns proxy model if any, else self"
|
2015-06-22 23:11:45 +12:00
|
|
|
if self._proxy:
|
|
|
|
return self._proxy
|
|
|
|
else:
|
|
|
|
return self
|
2015-06-22 04:13:14 +12:00
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
def toSource(self, index):
|
|
|
|
if self._proxy:
|
|
|
|
return self._proxy.mapToSource(index)
|
2015-06-22 04:13:14 +12:00
|
|
|
else:
|
2015-06-22 23:11:45 +12:00
|
|
|
return index
|