File indexing completed on 2024-04-14 03:49:12

0001 /*
0002     SPDX-FileCopyrightText: 2010 Daniel Laidig <laidig@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "statustoggle.h"
0007 #include "statustogglebutton.h"
0008 #include "themedbackgroundrenderer.h"
0009 
0010 #include <KLocalizedString>
0011 
0012 #include <QAction>
0013 
0014 using namespace Practice;
0015 
0016 StatusToggle::StatusToggle(QWidget *parent)
0017     : ImageWidget(parent)
0018 {
0019     setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
0020     setScalingEnabled(false);
0021     setMinimumSize(minimumSizeHint());
0022     setMaximumSize(minimumSizeHint());
0023 
0024     QSize size = minimumSizeHint();
0025     size *= 0.4;
0026     m_toggle = new StatusToggleButton(this);
0027     m_toggle->setMinimumSize(size);
0028     m_toggle->setMaximumSize(size);
0029     m_toggle->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
0030     m_toggle->setScalingEnabled(false);
0031     m_toggle->move(width() - m_toggle->width(), height() - m_toggle->height());
0032 
0033     connect(m_toggle, &StatusToggleButton::clicked, this, &StatusToggle::toggle);
0034 }
0035 
0036 void StatusToggle::setRenderer(ThemedBackgroundRenderer *renderer)
0037 {
0038     m_renderer = renderer;
0039 
0040     QSize size = minimumSizeHint();
0041 
0042     m_defaultStatus = m_renderer->getPixmapForId(QStringLiteral("status-default"), size);
0043     m_correctStatus = m_renderer->getPixmapForId(QStringLiteral("status-correct"), size);
0044     m_wrongStatus = m_renderer->getPixmapForId(QStringLiteral("status-wrong"), size);
0045 
0046     size = size * 0.4;
0047 
0048     m_toggleCorrect = m_renderer->getPixmapForId(QStringLiteral("toggle-correct"), size);
0049     m_toggleCorrectHover = m_renderer->getPixmapForId(QStringLiteral("toggle-correct-hover"), size);
0050     m_toggleCorrectPressed = m_renderer->getPixmapForId(QStringLiteral("toggle-correct-pressed"), size);
0051 
0052     m_toggleWrong = m_renderer->getPixmapForId(QStringLiteral("toggle-wrong"), size);
0053     m_toggleWrongHover = m_renderer->getPixmapForId(QStringLiteral("toggle-wrong-hover"), size);
0054     m_toggleWrongPressed = m_renderer->getPixmapForId(QStringLiteral("toggle-wrong-pressed"), size);
0055 
0056     updatePixmap();
0057     updateToggle();
0058 }
0059 
0060 QSize StatusToggle::minimumSizeHint() const
0061 {
0062     return QSize(128, 128);
0063 }
0064 
0065 void StatusToggle::setResultState(AbstractFrontend::ResultState state)
0066 {
0067     if (m_resultState == state)
0068         return;
0069     m_resultState = state;
0070     switch (m_resultState) {
0071     case AbstractFrontend::QuestionState:
0072     case AbstractFrontend::AnswerSynonym:
0073         setToolTip(QString());
0074         m_toggle->setToolTip(QString());
0075         break;
0076     case AbstractFrontend::AnswerCorrect:
0077         setToolTip(i18n("This answer will be counted as correct.\nWords will only be counted as correct if they are answered correctly on the first attempt."));
0078         m_toggle->setToolTip(i18n("Count this answer as wrong"));
0079         break;
0080     case AbstractFrontend::AnswerWrong:
0081         setToolTip(i18n("This answer will be counted as wrong.\nWords will only be counted as correct if they are answered correctly on the first attempt."));
0082         m_toggle->setToolTip(i18n("Count this answer as correct"));
0083         break;
0084     default:
0085         setPixmap(QPixmap());
0086     }
0087     updatePixmap();
0088     updateToggle();
0089 }
0090 
0091 void StatusToggle::updatePixmap()
0092 {
0093     switch (m_resultState) {
0094     case AbstractFrontend::QuestionState:
0095     case AbstractFrontend::AnswerSynonym:
0096         setPixmap(m_defaultStatus);
0097         break;
0098     case AbstractFrontend::AnswerCorrect:
0099         setPixmap(m_correctStatus);
0100         break;
0101     case AbstractFrontend::AnswerWrong:
0102         setPixmap(m_wrongStatus);
0103         break;
0104     default:
0105         setPixmap(QPixmap());
0106     }
0107 }
0108 
0109 void StatusToggle::updateToggle()
0110 {
0111     switch (m_resultState) {
0112     case AbstractFrontend::AnswerCorrect:
0113         m_toggle->setPixmaps(m_toggleWrong, m_toggleWrongHover, m_toggleWrongPressed);
0114         break;
0115     case AbstractFrontend::AnswerWrong:
0116         m_toggle->setPixmaps(m_toggleCorrect, m_toggleCorrectHover, m_toggleCorrectPressed);
0117         break;
0118     default:
0119         m_toggle->setPixmaps(QPixmap(), QPixmap(), QPixmap());
0120     }
0121 }
0122 
0123 #include "moc_statustoggle.cpp"