2015-06-29 09:46:51 +12:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#--!-- coding: utf8 --!--
|
|
|
|
|
|
|
|
from qt import *
|
|
|
|
from enums import *
|
|
|
|
from functions import *
|
|
|
|
|
|
|
|
class persosModel(QStandardItemModel):
|
|
|
|
|
|
|
|
def __init__(self, parent):
|
|
|
|
QStandardItemModel.__init__(self, 0, 3, parent)
|
|
|
|
self.setHorizontalHeaderLabels([i.name for i in Plot])
|
|
|
|
self.mw = mainWindow()
|
|
|
|
#self._proxy = plotsProxyModel()
|
|
|
|
#self._proxy.setSourceModel(self)
|
|
|
|
|
|
|
|
###############################################################################
|
2015-06-29 20:22:18 +12:00
|
|
|
# PERSOS QUERRIES
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
def name(self, row):
|
|
|
|
return self.item(row, Perso.name.value).text()
|
|
|
|
|
|
|
|
def icon(self, row):
|
|
|
|
return self.item(row, Perso.name.value).icon()
|
|
|
|
|
|
|
|
def ID(self, row):
|
|
|
|
return self.item(row, Perso.ID.value).text()
|
|
|
|
|
|
|
|
def importance(self, row):
|
|
|
|
return self.item(row, Perso.importance.value).text()
|
|
|
|
|
|
|
|
###############################################################################
|
2015-06-29 21:28:34 +12:00
|
|
|
# MODEL QUERRIES
|
2015-06-29 09:46:51 +12:00
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
def getPersosByImportance(self):
|
|
|
|
persos = [[], [], []]
|
|
|
|
for i in range(self.rowCount()):
|
|
|
|
importance = self.item(i, Perso.importance.value).text()
|
|
|
|
ID = self.item(i, Perso.ID.value).text()
|
|
|
|
persos[2-toInt(importance)].append(ID)
|
|
|
|
return persos
|
|
|
|
|
|
|
|
def getPersoNameByID(self, ID):
|
2015-06-29 20:22:18 +12:00
|
|
|
index = self.getIndexFromID(ID)
|
|
|
|
if index.isValid():
|
|
|
|
return self.name(index.row())
|
2015-06-29 09:46:51 +12:00
|
|
|
return None
|
|
|
|
|
|
|
|
def getIndexFromID(self, ID):
|
|
|
|
for i in range(self.rowCount()):
|
|
|
|
_ID = self.item(i, Perso.ID.value).text()
|
|
|
|
if _ID == ID or toInt(_ID) == ID:
|
|
|
|
return self.index(i, 0)
|
|
|
|
return QModelIndex()
|
|
|
|
|
|
|
|
def getPersoColorByID(self, ID):
|
|
|
|
idx = self.getIndexFromID(ID)
|
|
|
|
return self.getPersoColorName(idx)
|
|
|
|
|
|
|
|
def getPersoColorName(self, index):
|
|
|
|
icon = self.item(index.row()).icon()
|
|
|
|
return iconColor(icon).name() if icon else ""
|
|
|
|
|
|
|
|
def currentListIndex(self):
|
|
|
|
i = self.mw.lstPersos.currentIndex()
|
|
|
|
if i .isValid():
|
|
|
|
return i
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
def currentPersoIndex(self):
|
|
|
|
return self.mw.lstPersos.currentPersoIndex()
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# ADDING / REMOVING
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
def addPerso(self):
|
|
|
|
"""Creates a perso by adding a row in mdlPersos
|
|
|
|
and a column in mdlPersosInfos with same ID"""
|
|
|
|
p = QStandardItem(self.tr("New character"))
|
|
|
|
self.setPersoColor(p, randomColor(QColor(Qt.white)))
|
2015-06-29 21:28:34 +12:00
|
|
|
|
2015-06-29 09:46:51 +12:00
|
|
|
pid = self.getUniqueID()
|
|
|
|
self.appendRow([p, QStandardItem(pid), QStandardItem("0")])
|
|
|
|
|
|
|
|
def getUniqueID(self, parent=QModelIndex()):
|
|
|
|
"""Returns an unused perso ID (row 1)."""
|
|
|
|
vals = []
|
|
|
|
for i in range(self.rowCount(parent)):
|
|
|
|
index = self.index(i, Perso.ID.value, parent)
|
|
|
|
if index.isValid() and index.data():
|
|
|
|
vals.append(int(index.data()))
|
|
|
|
|
|
|
|
k = 0
|
|
|
|
while k in vals:
|
|
|
|
k += 1
|
|
|
|
return str(k)
|
|
|
|
|
|
|
|
def removePerso(self):
|
|
|
|
index = self.currentPersoIndex()
|
|
|
|
self.takeRow(index.row())
|
|
|
|
|
|
|
|
def setPersoColor(self, item, color):
|
|
|
|
px = QPixmap(32, 32)
|
|
|
|
px.fill(color)
|
|
|
|
item.setIcon(QIcon(px))
|
|
|
|
|
|
|
|
def chosePersoColor(self):
|
|
|
|
idx = self.currentPersoIndex()
|
|
|
|
item = self.item(idx.row(), Perso.name.value)
|
|
|
|
if item:
|
|
|
|
color = iconColor(item.icon())
|
|
|
|
else:
|
|
|
|
color = Qt.white
|
2015-06-29 20:22:18 +12:00
|
|
|
self.colorDialog = QColorDialog(color, self.mw)
|
2015-06-29 09:46:51 +12:00
|
|
|
color = self.colorDialog.getColor(color)
|
|
|
|
if color.isValid():
|
|
|
|
self.setPersoColor(item, color)
|
|
|
|
self.updatePersoColor(idx)
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# UI
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
def updatePersoColor(self, idx):
|
|
|
|
#idx = self.currentPersoIndex()
|
|
|
|
color = self.getPersoColorName(idx)
|
|
|
|
self.mw.btnPersoColor.setStyleSheet("background:{};".format(color))
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# PERSO INFOS
|
|
|
|
###############################################################################
|
|
|
|
|
2015-06-29 21:28:34 +12:00
|
|
|
def headerData(self, section, orientation, role=Qt.DisplayRole):
|
|
|
|
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
|
|
|
|
if section == Perso.infoName.value:
|
|
|
|
return self.tr("Name")
|
|
|
|
elif section == Perso.infoData.value:
|
|
|
|
return self.tr("Value")
|
|
|
|
else:
|
|
|
|
return Perso(section).name
|
|
|
|
else:
|
|
|
|
return QStandardItemModel.headerData(self, section, orientation, role=Qt.DisplayRole)
|
|
|
|
|
2015-06-29 09:46:51 +12:00
|
|
|
def addPersoInfo(self):
|
2015-06-29 21:28:34 +12:00
|
|
|
perso = self.itemFromIndex(self.currentPersoIndex())
|
|
|
|
row = perso.rowCount()
|
|
|
|
perso.setChild(row, Perso.infoName.value, QStandardItem(""))
|
|
|
|
perso.setChild(row, Perso.infoData.value, QStandardItem(""))
|
|
|
|
|
|
|
|
self.mw.updatePersoInfoView()
|
|
|
|
|
|
|
|
def removePersoInfo(self):
|
|
|
|
perso = self.itemFromIndex(self.currentPersoIndex())
|
|
|
|
|
|
|
|
rm = []
|
|
|
|
for idx in self.mw.tblPersoInfos.selectedIndexes():
|
|
|
|
if not idx.row() in rm:
|
|
|
|
rm.append(idx.row())
|
|
|
|
|
|
|
|
rm.sort()
|
|
|
|
rm.reverse()
|
|
|
|
for r in rm:
|
|
|
|
perso.takeRow(r)
|
|
|
|
|
|
|
|
|