You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

111 lines
2.9 KiB

#ifndef BASEVIEWMODEL_H
#define BASEVIEWMODEL_H
#include <QObject>
#include <QMutex>
#include <QtMvvmCore/ViewModel>
#include "viewModel/utils/AutoProperty.h"
#include "viewModel/utils/UsMultiButton.h"
#include "viewModel/utils/UsSpinBox.h"
#include "viewModel/utils/UsSwitchButton.h"
#include "viewModel/utils/UsJoystick.h"
#include "viewModel/utils/UsRadioButton.h"
#include "viewModel/utils/UsInfoBox.h"
#include "viewModel/utils/UsTrackball.h"
#include "viewModel/utils/UsList.h"
#include "viewModel/utils/UsImage.h"
#include "viewModel/utils/UsButtonDoubleText.h"
#define SINGLETON(NAME) \
private: \
static NAME* _instance; \
static QMutex _mutex; \
public: \
static NAME* getInstance() \
{ \
if(!_instance) \
{ \
_mutex.lock(); \
if(!_instance) \
{ \
_instance = new NAME(); \
} \
_mutex.unlock(); \
} \
return _instance; \
}
#define SINGLETON_DEF(NAME) \
NAME* NAME::_instance; \
QMutex NAME::_mutex;
//macro defenition
//Place this in each and every class that inherits from BaseViewModel
//so that you dont have to type all this again
//uncrustify off
#define US_VIEW_MODEL(VIEW_MODEL_NAME) \
private: \
void prepareData() override; \
void sendData(bool sync = false) override; \
void setInitialValue() override; \
void turnOnMinimalMode() override; \
void turnOffMinimalMode() override; \
explicit VIEW_MODEL_NAME(); \
public: \
virtual void init() override; \
#define APPLY_DIFF_COMMAND(PROPERTY) \
auto diffValue = GET_VALUE(request, 0, qint16); \
auto nextValue = getNextValue(PROPERTY() + diffValue, 0, PROPERTY ## Values().length() - 1); \
PROPERTY(nextValue); \
//uncrustify on
/*************************************************************************************************/
class BaseViewModel : public QtMvvm::ViewModel
{
Q_OBJECT
private:
int _awaitingSend;
bool isSendingAllowed();
virtual void setInitialValue() = 0;
virtual void prepareData() = 0;
virtual void sendData(bool sync = false) = 0;
virtual void turnOnMinimalMode() = 0;
virtual void turnOffMinimalMode() = 0;
protected:
bool _isMinimal;
void allowSending();
void blockSending();
virtual void send(bool sync = false) final;
virtual QList<QString> arithmeticSeries(int start, int end, int step) final;
virtual QList<QString> arithmeticSeries(float start,
float end,
float step,
int precision) final;
public:
explicit BaseViewModel();
void start();
virtual void init() = 0;
void changeMode(bool minimal);
virtual int getNextValue(const int estimatedValue, const int lowerBound,
const int upperBound) final;
};
#endif //BASEVIEWMODEL_H