File indexing completed on 2024-04-21 03:41:48
0001 /* 0002 KBruch - exercise to convert mixed numbers in ratios and vice versa 0003 SPDX-FileCopyrightText: 2011 - Sebastian Stein <seb.kde@hpfsc.de> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef EXERCISEMIXEDNUMBERS_H 0009 #define EXERCISEMIXEDNUMBERS_H 0010 0011 #include "ExerciseBase.h" 0012 #include "ResultWidget.h" 0013 #include "Task.h" 0014 #include "TaskWidget.h" 0015 0016 0017 class QLineEdit; 0018 class QFrame; 0019 class QGridLayout; 0020 class QPushButton; 0021 class QWidget; 0022 0023 0024 /** 0025 * exercise to convert mixed numbers in ordinary ratios and vice versa 0026 * \author Sebastian Stein 0027 */ 0028 class ExerciseMixedNumbers: public ExerciseBase 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 /** constructor */ 0034 explicit ExerciseMixedNumbers(QWidget* parent = nullptr); 0035 0036 /** destructor */ 0037 ~ExerciseMixedNumbers() override; 0038 0039 /** resets the current state, creates a new task and counts the last task 0040 * as wrong, if it wasn't solved (in _NEXT_TASK state) yet mainly used 0041 * after changing the task parameters */ 0042 void forceNewTask() override; 0043 0044 Q_SIGNALS: 0045 /** signal emitted if task solved correctly */ 0046 void signalExerciseSolvedCorrect(); 0047 0048 /** signal emitted if task skipped */ 0049 void signalExerciseSkipped(); 0050 0051 /** signal emitted if task solved not correctly */ 0052 void signalExerciseSolvedWrong(); 0053 0054 private: 0055 /** holds current state of this exercise */ 0056 short m_currentState; 0057 0058 /** true if task is a mixed number and user must enter ratio */ 0059 bool m_isMixedTask; 0060 0061 /** task currently to be solved */ 0062 Task m_task; 0063 0064 // components to enter result 0065 QLineEdit * m_integerEdit; 0066 QLineEdit * m_numerEdit; 0067 QFrame * m_editLine; 0068 QLineEdit * m_denoEdit; 0069 0070 // check and skip buttons 0071 QPushButton * m_checkButton; 0072 QPushButton * m_skipButton; 0073 0074 // base grid layout 0075 QGridLayout * m_baseGrid; 0076 QWidget * m_checkWidget; 0077 QWidget * m_tmpTaskWidget; 0078 0079 // layout to show task and input fields 0080 QGridLayout * m_taskLayout; 0081 TaskWidget * m_taskWidget; 0082 0083 // layout to show solution 0084 QGridLayout * m_checkLayout; 0085 ResultWidget * m_resultWidget; 0086 0087 /** creates a new task */ 0088 void createTask(); 0089 0090 /** shows next task; hides previous solution */ 0091 void nextTask(); 0092 0093 /** checks result and shows solution */ 0094 void showResult(); 0095 0096 /** handle check button click */ 0097 void slotCheckButtonClicked(); 0098 0099 /** handle skip button click */ 0100 void slotSkipButtonClicked(); 0101 0102 /** focus set to numerator edit if return pressed in integer edit */ 0103 void integerReturnPressed(); 0104 0105 /** focus set to denominator edit if return pressed in numerator edit */ 0106 void numerReturnPressed(); 0107 0108 /** invokes check button if return pressed in denominator edit */ 0109 void denoReturnPressed(); 0110 0111 protected: 0112 /** sets focus to input fields */ 0113 void showEvent(QShowEvent * event) override; 0114 }; 0115 0116 #endif // EXERCISEMIXEDNUMBERS_H