2015-06-05 06:22:37 +12:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#--!-- coding: utf8 --!--
|
|
|
|
|
2015-06-07 06:29:02 +12:00
|
|
|
from qt import *
|
2015-06-16 03:24:02 +12:00
|
|
|
from random import *
|
2015-06-16 09:15:10 +12:00
|
|
|
from enums import *
|
2015-06-19 01:03:16 +12:00
|
|
|
import os
|
2015-06-07 06:29:02 +12:00
|
|
|
|
2015-06-05 06:22:37 +12:00
|
|
|
def wordCount(text):
|
2015-06-07 06:29:02 +12:00
|
|
|
return len(text.strip().replace(" ", "\n").split("\n")) if text else 0
|
2015-06-05 21:37:01 +12:00
|
|
|
|
|
|
|
def toInt(text):
|
|
|
|
if text:
|
|
|
|
return int(text)
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def toFloat(text):
|
|
|
|
if text:
|
|
|
|
return float(text)
|
|
|
|
else:
|
2015-06-07 06:29:02 +12:00
|
|
|
return 0.
|
|
|
|
|
2015-06-11 07:23:35 +12:00
|
|
|
def toString(text):
|
2015-06-15 22:18:42 +12:00
|
|
|
if text in [None, "None"]:
|
2015-06-11 07:23:35 +12:00
|
|
|
return ""
|
|
|
|
else:
|
|
|
|
return str(text)
|
|
|
|
|
2015-06-07 06:29:02 +12:00
|
|
|
def drawProgress(painter, rect, progress, radius=0):
|
|
|
|
painter.setPen(Qt.NoPen)
|
|
|
|
painter.setBrush(QColor("#dddddd"))
|
|
|
|
painter.drawRoundedRect(rect, radius, radius)
|
|
|
|
|
2015-06-16 09:15:10 +12:00
|
|
|
painter.setBrush(QBrush(colorFromProgress(progress)))
|
|
|
|
|
|
|
|
r2 = QRect(rect)
|
|
|
|
r2.setWidth(r2.width() * min(progress, 1))
|
|
|
|
painter.drawRoundedRect(r2, radius, radius)
|
|
|
|
|
|
|
|
def colorFromProgress(progress):
|
|
|
|
progress = toFloat(progress)
|
2015-06-07 06:29:02 +12:00
|
|
|
c1 = QColor(Qt.red)
|
|
|
|
c2 = QColor(Qt.blue)
|
|
|
|
c3 = QColor(Qt.darkGreen)
|
|
|
|
c4 = QColor("#FFA500")
|
|
|
|
|
|
|
|
if progress < 0.3:
|
2015-06-16 09:15:10 +12:00
|
|
|
return c1
|
2015-06-07 06:29:02 +12:00
|
|
|
elif progress < 0.8:
|
2015-06-16 09:15:10 +12:00
|
|
|
return c2
|
2015-06-07 06:29:02 +12:00
|
|
|
elif progress > 1.2:
|
2015-06-16 09:15:10 +12:00
|
|
|
return c4
|
2015-06-07 06:29:02 +12:00
|
|
|
else:
|
2015-06-16 09:15:10 +12:00
|
|
|
return c3
|
2015-06-07 08:39:43 +12:00
|
|
|
|
|
|
|
def mainWindow():
|
|
|
|
for i in qApp.topLevelWidgets():
|
|
|
|
if i.objectName() == "MainWindow":
|
|
|
|
return i
|
2015-06-10 08:05:03 +12:00
|
|
|
return None
|
|
|
|
|
|
|
|
def iconColor(icon):
|
|
|
|
"Returns a QRgb from a QIcon, assuming its all the same color"
|
2015-06-16 02:35:23 +12:00
|
|
|
px = icon.pixmap(5, 5)
|
|
|
|
if px.width() != 0:
|
|
|
|
return QColor(QImage(px).pixel(2, 2))
|
|
|
|
else:
|
2015-06-18 03:15:13 +12:00
|
|
|
return QColor(Qt.transparent)
|
2015-06-10 10:20:32 +12:00
|
|
|
|
|
|
|
def iconFromColor(color):
|
|
|
|
px = QPixmap(32, 32)
|
|
|
|
px.fill(color)
|
|
|
|
return QIcon(px)
|
|
|
|
|
|
|
|
def iconFromColorString(string):
|
2015-06-16 03:24:02 +12:00
|
|
|
return iconFromColor(QColor(string))
|
|
|
|
|
|
|
|
def randomColor(mix=None):
|
|
|
|
"Generates a random color. If mix (QColor) is given, mixes the random color and mix."
|
|
|
|
r = randint(0, 255)
|
|
|
|
g = randint(0, 255)
|
|
|
|
b = randint(0, 255)
|
|
|
|
|
|
|
|
if mix:
|
|
|
|
r = (r + mix.red()) / 2
|
|
|
|
g = (g + mix.green()) / 2
|
|
|
|
b = (b + mix.blue()) / 2
|
|
|
|
|
2015-06-16 09:15:10 +12:00
|
|
|
return QColor(r, g, b)
|
|
|
|
|
|
|
|
def mixColors(col1, col2, f=.5):
|
|
|
|
f2 = 1-f
|
|
|
|
r = col1.red() * f + col2.red() * f2
|
|
|
|
g = col1.green() * f + col2.green() * f2
|
|
|
|
b = col1.blue() * f + col2.blue() * f2
|
|
|
|
return QColor(r, g, b)
|
|
|
|
|
|
|
|
def outlineItemColors(item):
|
|
|
|
"Takes an OutlineItem and returns a dict of colors."
|
|
|
|
colors = {}
|
|
|
|
mw = mainWindow()
|
|
|
|
|
|
|
|
# POV
|
2015-06-18 03:15:13 +12:00
|
|
|
colors["POV"] = QColor(Qt.transparent)
|
2015-06-16 09:15:10 +12:00
|
|
|
POV = item.data(Outline.POV.value)
|
|
|
|
for i in range(mw.mdlPersos.rowCount()):
|
|
|
|
if mw.mdlPersos.item(i, Perso.ID.value).text() == POV:
|
|
|
|
colors["POV"] = iconColor(mw.mdlPersos.item(i, 0).icon())
|
|
|
|
|
|
|
|
# Label
|
|
|
|
lbl = item.data(Outline.label.value)
|
|
|
|
col = iconColor(mw.mdlLabels.item(toInt(lbl)).icon())
|
|
|
|
if col == Qt.black:
|
|
|
|
# Don't know why, but transparent is rendered as black
|
|
|
|
col = QColor(Qt.transparent)
|
|
|
|
colors["Label"] = col
|
|
|
|
|
|
|
|
# Progress
|
|
|
|
pg = item.data(Outline.goalPercentage.value)
|
|
|
|
colors["Progress"] = colorFromProgress(pg)
|
|
|
|
|
|
|
|
# Compile
|
|
|
|
if item.isCompile() in [0, "0"]:
|
|
|
|
colors["Compile"] = QColor(Qt.gray)
|
|
|
|
else:
|
|
|
|
colors["Compile"] = QColor(Qt.black)
|
|
|
|
|
|
|
|
return colors
|
|
|
|
|
|
|
|
def colorifyPixmap(pixmap, color):
|
|
|
|
# FIXME: ugly
|
|
|
|
p = QPainter(pixmap)
|
|
|
|
p.setCompositionMode(p.CompositionMode_Overlay)
|
|
|
|
p.fillRect(pixmap.rect(), color)
|
2015-06-19 01:03:16 +12:00
|
|
|
return pixmap
|
|
|
|
|
2015-06-19 07:28:47 +12:00
|
|
|
def appPath(suffix=None):
|
|
|
|
p = os.path.realpath(os.path.join(os.path.split(__file__)[0], ".."))
|
|
|
|
if suffix:
|
|
|
|
p = os.path.join(p, suffix)
|
|
|
|
return p
|
2015-06-19 01:03:16 +12:00
|
|
|
|
2015-06-19 07:28:47 +12:00
|
|
|
def writablePath(suffix=None):
|
|
|
|
p = QStandardPaths.writableLocation(QStandardPaths.AppLocalDataLocation)
|
|
|
|
if suffix:
|
|
|
|
p = os.path.join(p, suffix)
|
|
|
|
return p
|
2015-06-19 01:03:16 +12:00
|
|
|
|
|
|
|
def allPaths(suffix=None):
|
|
|
|
paths = []
|
|
|
|
# src directory
|
2015-06-19 07:28:47 +12:00
|
|
|
paths.append(appPath(suffix))
|
2015-06-19 01:03:16 +12:00
|
|
|
# user writable directory
|
2015-06-19 07:28:47 +12:00
|
|
|
paths.append(writablePath(suffix))
|
|
|
|
return paths
|
|
|
|
|
|
|
|
def findBackground(filename):
|
|
|
|
paths = allPaths("resources/backgrounds")
|
|
|
|
for p in paths:
|
|
|
|
lst = os.listdir(p)
|
|
|
|
for l in lst:
|
|
|
|
if l == filename:
|
|
|
|
return os.path.join(p, l)
|