72 def paint(self, painter, option, index):
74 if (index.isValid() ==
False):
77 painter.setOpacity(0.6)
78 if(option.state & QStyle.StateFlag.State_Selected):
79 painter.fillRect(option.rect, option.palette.highlight())
80 if (option.state & QStyle.StateFlag.State_MouseOver):
81 painter.setOpacity(0.25)
82 painter.fillRect(option.rect, option.palette.highlight())
83 painter.setOpacity(1.0)
84 painter.setFont(option.font)
85 metrics = QFontMetrics(option.font)
86 regular = QFont(option.font)
87 italics = QFont(option.font)
88 italics.setItalic(
True)
89 icon = QIcon(index.data(CPE.IMAGE))
92 decoratonSize = QSize(option.decorationSize)
93 imageSize = icon.actualSize(option.decorationSize)
95 leftSideThumbnail = (decoratonSize.width()-imageSize.width())/2
96 if (rect.width() < decoratonSize.width()):
97 leftSideThumbnail = max(0, (rect.width()-imageSize.width())/2)
98 topSizeThumbnail = ((rect.height()-imageSize.height())/2)+rect.top()
99 thumbImage = icon.pixmap(imageSizeHighDPI).toImage()
101 painter.drawImage(QRect(int(leftSideThumbnail), int(topSizeThumbnail), int(imageSize.width()), int(imageSize.height())), thumbImage)
103 labelWidth = rect.width()-decoratonSize.width()-(margin*3)
105 if (decoratonSize.width()+(margin*2)< rect.width()):
107 textRect = QRect(decoratonSize.width()+margin, margin+rect.top(), labelWidth, metrics.height())
108 textTitle = metrics.elidedText(str(index.row()+1)+
". "+index.data(CPE.TITLE), Qt.TextElideMode.ElideRight, labelWidth)
109 painter.drawText(textRect, Qt.TextFlag.TextWordWrap, textTitle)
111 if rect.height()/(metrics.lineSpacing()+margin) > 5
or index.data(CPE.KEYWORDS)
is not None:
112 painter.setOpacity(0.6)
113 textRect = QRect(textRect.left(), textRect.bottom()+margin, labelWidth, metrics.height())
114 if textRect.bottom() < rect.bottom():
115 textKeyWords = index.data(CPE.KEYWORDS)
116 if textKeyWords ==
None:
117 textKeyWords = i18n(
"No keywords")
118 painter.setOpacity(0.3)
119 painter.setFont(italics)
120 textKeyWords = metrics.elidedText(textKeyWords, Qt.TextElideMode.ElideRight, labelWidth)
121 painter.drawText(textRect, Qt.TextFlag.TextWordWrap, textKeyWords)
123 painter.setFont(regular)
125 if rect.height()/(metrics.lineSpacing()+margin) > 3:
126 painter.setOpacity(0.6)
127 textRect = QRect(textRect.left(), textRect.bottom()+margin, labelWidth, metrics.height())
128 if textRect.bottom()+metrics.height() < rect.bottom():
129 textLastEdit = index.data(CPE.LASTEDIT)
130 if textLastEdit
is None:
131 textLastEdit = i18n(
"No last edit timestamp")
132 if index.data(CPE.EDITOR)
is not None:
133 textLastEdit +=
" - " + index.data(CPE.EDITOR)
134 if (index.data(CPE.LASTEDIT)
is None)
and (index.data(CPE.EDITOR)
is None):
135 painter.setOpacity(0.3)
136 painter.setFont(italics)
137 textLastEdit = metrics.elidedText(textLastEdit, Qt.TextElideMode.ElideRight, labelWidth)
138 painter.drawText(textRect, Qt.TextFlag.TextWordWrap, textLastEdit)
140 painter.setFont(regular)
142 descRect = QRect(textRect.left(), textRect.bottom()+margin, labelWidth, (rect.bottom()-margin) - (textRect.bottom()+margin))
143 if textRect.bottom()+metrics.height() < rect.bottom():
144 textRect.setBottom(int(textRect.bottom()+(margin/2)))
145 textRect.setLeft(int(textRect.left()-(margin/2)))
146 painter.setOpacity(0.4)
147 painter.drawLine(textRect.bottomLeft(), textRect.bottomRight())
148 painter.setOpacity(1.0)
149 textDescription = index.data(CPE.DESCRIPTION)
150 if textDescription
is None:
151 textDescription = i18n(
"No description")
152 painter.setOpacity(0.3)
153 painter.setFont(italics)
154 linesTotal = floor(descRect.height()/metrics.lineSpacing())
156 textDescription = metrics.elidedText(textDescription, Qt.TextElideMode.ElideRight, labelWidth)
157 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
159 descRect.setHeight(linesTotal*metrics.lineSpacing())
160 totalDescHeight = metrics.boundingRect(descRect, Qt.TextFlag.TextWordWrap, textDescription).height()
161 if totalDescHeight>descRect.height():
162 if totalDescHeight-metrics.lineSpacing()>descRect.height():
163 painter.setOpacity(0.5)
164 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
165 descRect.setHeight((linesTotal-1)*metrics.lineSpacing())
166 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
167 descRect.setHeight((linesTotal-2)*metrics.lineSpacing())
168 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
170 painter.setOpacity(0.75)
171 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
172 descRect.setHeight((linesTotal-1)*metrics.lineSpacing())
173 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
175 painter.drawText(descRect, Qt.TextFlag.TextWordWrap, textDescription)
177 painter.setFont(regular)
183This is a Krita docker called 'Comics Manager'.
185It allows people to create comics project files, load those files, add pages, remove pages, move pages, manage the metadata,
186and finally export the result.
188The logic behind this docker is that it is very easy to get lost in a comics project due to the massive amount of files.
189By having a docker that gives the user quick access to the pages and also allows them to do all of the meta-stuff, like
190meta data, but also reordering the pages, the chaos of managing the project should take up less time, and more time can be focused on actual writing and drawing.