Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_spin_box_unit_manager.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Laurent Valentin Jospin <laurent.valentin@famillejospin.ch>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KISSPINBOXUNITMANAGER_H
8#define KISSPINBOXUNITMANAGER_H
9
10#include <QObject>
11#include <QStringList>
12#include <QAbstractListModel>
13
14#include "kritawidgetutils_export.h"
15
19
24class KRITAWIDGETUTILS_EXPORT KisSpinBoxUnitManagerFactory
25{
26public:
27
28 static KisSpinBoxUnitManager* buildDefaultUnitManager(QObject* parent);
30 static void setDefaultUnitManagerBuilder(KisSpinBoxUnitManagerBuilder* pBuilder);
31 static void clearUnitManagerBuilder();
32
33private:
34
36
37};
38
43class KRITAWIDGETUTILS_EXPORT KisSpinBoxUnitManagerBuilder
44{
45
46public:
47
50 virtual KisSpinBoxUnitManager* buildUnitManager(QObject* parent) = 0; //this pure virtual function is used to build a unitmanager, it will be used by the unitManagerFactory.
51};
66class KRITAWIDGETUTILS_EXPORT KisSpinBoxUnitManager : public QAbstractListModel
67{
68 Q_OBJECT
69
70public:
71
73 LENGTH = 0, //length, print size, reference is point
74 IMLENGTH = 1, //length, image size, reference is pixel. This dimension is used when the printing units must be avoided
75 ANGLE = 2,
76 TIME = 3
77 };
78
79 static inline bool isUnitId(int code) { return (code == LENGTH || code == ANGLE || code == TIME); }
80
82 static const QStringList referenceUnitSymbols;
83
85 NOCONSTR = 0,
86 REFISINT = 1,
87 VALISINT = 2
88
89 };
90
91 Q_DECLARE_FLAGS(Constrains, Constrain)
92
93 explicit KisSpinBoxUnitManager(QObject *parent = 0);
94 ~KisSpinBoxUnitManager() override;
95
96 int getUnitDimensionType() const;
97 QString getReferenceUnitSymbol() const;
98 QString getApparentUnitSymbol() const;
99
101 int getApparentUnitId() const;
102
104 int getApparentUnitRecommendedDecimals() const;
105
106 virtual QStringList getsUnitSymbolList(bool withName = false) const;
107
108 qreal getReferenceValue(double apparentValue) const;
109 qreal getApparentValue(double refValue) const;
110
112 virtual qreal getConversionFactor(int dim, QString symbol) const;
114 virtual qreal getConversionConstant(int dim, QString symbol) const;
115
116 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
117 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
118
119Q_SIGNALS:
120
121 void unitDimensionChanged(int dimCode);
123 void unitChanged(QString symbol);
124 void unitChanged(int index);
125 void conversionFactorChanged(qreal newConversionFactor, qreal oldConversionFactor) const;
126 void conversionConstantChanged(qreal newConversionFactor, qreal oldConversionFactor) const;
128
129public Q_SLOTS:
130
131 void setUnitDimension(UnitDimension dimension);
132 void setApparentUnitFromSymbol(QString pSymbol);
133 void selectApparentUnitFromIndex(int index);
134
135 void syncWithOtherUnitManager(KisSpinBoxUnitManager* other);
136 void clearSyncWithOtherUnitManager(KisSpinBoxUnitManager* other);
137
138protected:
139
140 class Private;
142
144 void newUnitSymbolToUnitIndex(QString symbol);
145
147 virtual bool hasPercent(int unitDim) const;
148
149 //unit's that may be used only if access to the document information exists.
150 static const QStringList documentRelativeLengthUnitSymbols;
151 static const QStringList documentRelativeTimeUnitSymbols;
152
153 void recomputeConversionFactor() const;
154 void recomputeConversionConstant() const;
155
157 void grantDocumentRelativeUnits();
158
159};
160
161#endif // KISSPINBOXUNITMANAGER_H
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
The KisSpinBoxUnitManagerBuilder class is the base class, used in the strategy pattern of KisSpinBoxU...
virtual KisSpinBoxUnitManager * buildUnitManager(QObject *parent)=0
The KisSpinBoxUnitManagerFactory class is a factory that is used to build a default KisSpinBoxUnitMan...
static KisSpinBoxUnitManagerBuilder * builder
The KisSpinBoxUnitManager class is an abstract interface for the unitspinboxes classes to manage diff...
void unitDimensionChanged(int dimCode)
void conversionFactorChanged(qreal newConversionFactor, qreal oldConversionFactor) const
void conversionConstantChanged(qreal newConversionFactor, qreal oldConversionFactor) const
static bool isUnitId(int code)
void unitChanged(int index)
void unitChanged(QString symbol)
const qreal TIME