File indexing completed on 2024-05-19 04:07:54

0001 /*
0002     SPDX-FileCopyrightText: 2015 Jakob Gruber <jakob.gruber@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "streakitem.h"
0008 
0009 #include "src/constants.h"
0010 #include "src/logic/settings.h"
0011 
0012 StreakItem::StreakItem(int x, int y, QSharedPointer<Picmi> game, QGraphicsItem *parent) :
0013     QGraphicsTextItem(parent), ReloadableItem(x, y), m_game(game)
0014 {
0015     setEnabled(false);
0016     setZValue(ZVALUE_STREAKTEXT);
0017     setFont(Renderer::instance()->getFont(Renderer::Regular));
0018 
0019     connect(Settings::instance(), &Settings::settingChanged,
0020             this, &StreakItem::settingChanged);
0021 }
0022 
0023 void StreakItem::settingChanged(Settings::SettingsType type)
0024 {
0025     switch (type) {
0026     case Settings::FontColorSolved:
0027     case Settings::FontColorUnsolved: setFontColors(); break;
0028     default: break;
0029     }
0030 }
0031 
0032 void StreakItem::setFontColors()
0033 {
0034     m_color_solved = Settings::instance()->fontColorSolved();
0035     m_color_unsolved = Settings::instance()->fontColorUnsolved();
0036     refresh();
0037 }
0038 
0039 int StreakItem::padding(int tilesize) const {
0040     return tilesize / 5;
0041 }
0042 
0043 RowStreakItem::RowStreakItem(QSharedPointer<Picmi> game, int y, QGraphicsItem *parent) :
0044     StreakItem(0, y, game, parent)
0045 {
0046     setFontColors();
0047 }
0048 
0049 void RowStreakItem::refresh() {
0050     QList<Streaks::Streak> streak = m_game->getRowStreak(m_y);
0051     QString text;
0052 
0053     for (int i = 0; i < (int)streak.size(); i++) {
0054         QString color = (streak[i].solved ? m_color_solved : m_color_unsolved);
0055         text.append(QStringLiteral("<font color=\"%1\">%2</font>").arg(color).arg(streak[i].value));
0056         if (i != (int)streak.size() - 1) {
0057             text.append(QStringLiteral(" "));
0058         }
0059     }
0060 
0061     setHtml(text);
0062     reload(QSize());
0063 }
0064 
0065 void RowStreakItem::reload(const QSize &size) {
0066     Q_UNUSED(size);
0067     const int tilesize = Renderer::instance()->getTilesize();
0068 
0069     setFont(Renderer::instance()->getFont(Renderer::Regular));
0070 
0071     QRectF rect = boundingRect();
0072 
0073     /* right align + a little padding */
0074     const int x = 0 - rect.width() - padding(tilesize);
0075 
0076     /* one per row, center text */
0077     const int y = tilesize * m_y + (tilesize - rect.height()) / 2;
0078 
0079     setPos(x, y);
0080 }
0081 
0082 ColStreakItem::ColStreakItem(QSharedPointer<Picmi> game, int x, QGraphicsItem *parent) :
0083     StreakItem(x, 0, game, parent)
0084 {
0085     setFontColors();
0086 }
0087 
0088 void ColStreakItem::refresh() {
0089     QList<Streaks::Streak> streak = m_game->getColStreak(m_x);
0090     QString text;
0091 
0092     for (int i = 0; i < (int)streak.size(); i++) {
0093         QString color = (streak[i].solved ? m_color_solved : m_color_unsolved);
0094         text.append(QStringLiteral("<font color=\"%1\">%2</font>").arg(color).arg(streak[i].value));
0095         if (i != (int)streak.size() - 1) {
0096             text.append(QStringLiteral("<br/>"));
0097         }
0098     }
0099 
0100     setHtml(text);
0101     reload(QSize());
0102 }
0103 
0104 void ColStreakItem::reload(const QSize &size) {
0105     Q_UNUSED(size);
0106     const int tilesize = Renderer::instance()->getTilesize();
0107 
0108     setFont(Renderer::instance()->getFont(Renderer::Regular));
0109 
0110     QRectF rect = boundingRect();
0111 
0112     const int x = tilesize * m_x + (tilesize - rect.width()) / 2;
0113     const int y = 0 - rect.height() - padding(tilesize);
0114 
0115     setPos(x, y);
0116 }
0117 
0118 #include "moc_streakitem.cpp"