Warning, file /education/parley/src/practice/statustoggle.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 }