File indexing completed on 2022-12-06 18:52:29

0001 /*
0002     SPDX-FileCopyrightText: 2004 Sebastian Stein <seb.kde@hpfsc.de>
0003     SPDX-FileCopyrightText: 2008 Tadeu Araujo <tadeu.araujo@ltia.fc.unesp.br>
0004     SPDX-FileCopyrightText: 2008 Danilo Balzaque <danilo.balzaque@ltia.fc.unesp.br>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef EXERCISEFACTORIZE_H
0010 #define EXERCISEFACTORIZE_H
0011 
0012 #include <QList>
0013 #include <QWidget>
0014 
0015 #include "ExerciseBase.h"
0016 #include "ResultWidget.h"
0017 #include "Ratio.h"
0018 #include "PrimeFactorsLineEdit.h"
0019 
0020 class ResultWidget;
0021 class QGridLayout;
0022 class QLabel;
0023 class QPushButton;
0024 
0025 // a list containing uints
0026 typedef QList<uint> uintList;
0027 
0028 // set a macro how much numbers are given to factorize
0029 #define numberPossibleTasks 45
0030 
0031 // set all possible numbers to factorize
0032 const uint possibleTasks[numberPossibleTasks] = {4, 6, 8, 9, 10, 12, 14, 15, 16,
0033         18, 20, 21, 22, 24, 25, 26, 27, 30, 32, 33, 34, 35, 38, 39, 49, 50, 51, 54, 55,
0034         57, 60, 65, 70, 77, 75, 85, 95, 98, 121, 125, 169, 242, 250, 289, 361
0035                                                 };
0036 
0037 /*! Construct the exercise widget to factorize a given number
0038  *
0039  *  \author Sebastian Stein
0040  * */
0041 class ExerciseFactorize : public ExerciseBase
0042 {
0043     Q_OBJECT
0044 
0045 public:
0046     /** constructor */
0047     explicit ExerciseFactorize(QWidget * parent = nullptr);
0048 
0049     /** destructor */
0050     ~ExerciseFactorize() override;
0051 
0052     /** force the creation of a new task */
0053     void forceNewTask() override;
0054 
0055     void update();
0056 
0057 Q_SIGNALS:
0058     /** class emits this signal, if the task was solved correctly by the user */
0059     void signalExerciseSolvedCorrect();
0060 
0061     /** class emits this signal, if the task was skipped by the user */
0062     void signalExerciseSkipped();
0063 
0064     /** class emits this signal, if the task was solved not correctly by the user
0065      * */
0066     void signalExerciseSolvedWrong();
0067 
0068 private:
0069     short m_currentState;
0070 
0071     bool m_edit;
0072 
0073     // Get the last number typped by keyboard for keyboard handler
0074     uint m_buffer;
0075 
0076     uint m_taskNumber;
0077     uintList m_factorsEntered;
0078     uintList m_factorsResult;
0079 
0080     QLabel * m_taskLabel;
0081     QLabel * m_equalSignLabel;
0082     PrimeFactorsLineEdit * m_factorsEnteredEdit;
0083 
0084     // buttons for the different prime factors
0085     QPushButton * m_factor2Button;
0086     QPushButton * m_factor3Button;
0087     QPushButton * m_factor5Button;
0088     QPushButton * m_factor7Button;
0089     QPushButton * m_factor11Button;
0090     QPushButton * m_factor13Button;
0091     QPushButton * m_factor17Button;
0092     QPushButton * m_factor19Button;
0093 
0094     // button to remove the last entered factor
0095     QPushButton * m_removeLastFactorButton;
0096     QPushButton * m_checkButton;
0097     QPushButton * m_skipButton;
0098 
0099     QGridLayout * checkLayout;
0100     QGridLayout * taskLayout;
0101     QGridLayout * baseGrid;
0102 
0103     QWidget * checkWidget;
0104     QWidget * taskWidget;
0105 
0106     ResultWidget * m_resultWidget;
0107 
0108     void createTask();
0109     void showResult();
0110     void nextTask();
0111 
0112     void addFactor(uint factor);
0113     void updateEnteredEdit();
0114 
0115     void slotFactorsEditReturnPressed();
0116 
0117     void slotCheckButtonClicked();
0118     void slotSkipButtonClicked();
0119 
0120     void slotFactor2ButtonClicked();
0121     void slotFactor3ButtonClicked();
0122     void slotFactor5ButtonClicked();
0123     void slotFactor7ButtonClicked();
0124     void slotFactor11ButtonClicked();
0125     void slotFactor13ButtonClicked();
0126     void slotFactor17ButtonClicked();
0127     void slotFactor19ButtonClicked();
0128     void slotRemoveLastFactorButtonClicked();
0129 
0130     void editContentChanged(bool correct);
0131     void setButtonsEnabled(bool enabled);
0132 
0133     protected:
0134     void showEvent(QShowEvent * event) override;
0135 };
0136 
0137 #endif