Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDocumentAwareSpinBoxUnitManager Class Reference

The KisDocumentAwareSpinBoxUnitManager class is a KisSpinBoxUnitManager that is able to connect to the current document to compute transformation for document relative units (the ones that depend of the resolution, or the size in pixels of the image). More...

#include <kis_document_aware_spin_box_unit_manager.h>

+ Inheritance diagram for KisDocumentAwareSpinBoxUnitManager:

Public Types

enum  PixDir { PIX_DIR_X , PIX_DIR_Y }
 
- Public Types inherited from KisSpinBoxUnitManager
enum  Constrain { NOCONSTR = 0 , REFISINT = 1 , VALISINT = 2 }
 
enum  UnitDimension { LENGTH = 0 , IMLENGTH = 1 , ANGLE = 2 , TIME = 3 }
 

Public Member Functions

qreal getConversionConstant (int dim, QString symbol) const override
 
qreal getConversionFactor (int dim, QString psymbol) const override
 
 KisDocumentAwareSpinBoxUnitManager (QObject *parent=0, int pPixDir=PIX_DIR_X)
 
- Public Member Functions inherited from KisSpinBoxUnitManager
QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
int getApparentUnitId () const
 get the position of the apparent unit in the list of units. It is useful if we want to build a model for combo-box based unit management.
 
int getApparentUnitRecommendedDecimals () const
 get a hint of how many decimals the spinbox needs to display.
 
QString getApparentUnitSymbol () const
 
qreal getApparentValue (double refValue) const
 
QString getReferenceUnitSymbol () const
 
qreal getReferenceValue (double apparentValue) const
 
virtual QStringList getsUnitSymbolList (bool withName=false) const
 
int getUnitDimensionType () const
 
 KisSpinBoxUnitManager (QObject *parent=0)
 
 Private (KisSpinBoxUnitManager::UnitDimension pDim=KisSpinBoxUnitManager::LENGTH, QString pUnitSymbol="pt", double pConv=1.0)
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
 ~KisSpinBoxUnitManager () override
 

Static Public Member Functions

static KisDoubleParseUnitSpinBoxcreateUnitSpinBoxWithDocumentAwareness (QWidget *parent=0)
 create a unitSpinBox that is already document aware.
 
static void setDocumentAwarenessToExistingUnitSpinBox (KisDoubleParseUnitSpinBox *spinBox, bool setUnitFromOutsideToggle=false)
 configure a KisDocumentAwareSpinBoxUnitManager for the given spinbox (make the manager a child of the spinbox and attach it to the spinbox).
 
- Static Public Member Functions inherited from KisSpinBoxUnitManager
static bool isUnitId (int code)
 

Protected Member Functions

virtual bool hasPercent (int unitDim) const override
 
- Protected Member Functions inherited from KisSpinBoxUnitManager
void grantDocumentRelativeUnits ()
 calling this method gives access to document relative units. Only subclasses that manage those units should call it.
 
void newUnitSymbolToUnitIndex (QString symbol)
 convert a unitChanged signal with a QString to one with an index.
 
void recomputeConversionConstant () const
 
void recomputeConversionFactor () const
 

Protected Attributes

PixDir pixDir
 
- Protected Attributes inherited from KisSpinBoxUnitManager
Privated
 

Additional Inherited Members

- Public Slots inherited from KisSpinBoxUnitManager
void clearSyncWithOtherUnitManager (KisSpinBoxUnitManager *other)
 
void selectApparentUnitFromIndex (int index)
 
void setApparentUnitFromSymbol (QString pSymbol)
 
void setUnitDimension (UnitDimension dimension)
 
void syncWithOtherUnitManager (KisSpinBoxUnitManager *other)
 
- Signals inherited from KisSpinBoxUnitManager
void conversionConstantChanged (qreal newConversionFactor, qreal oldConversionFactor) const
 
void conversionFactorChanged (qreal newConversionFactor, qreal oldConversionFactor) const
 
void unitAboutToChange ()
 
void unitChanged (int index)
 
void unitChanged (QString symbol)
 
void unitDimensionChanged (int dimCode)
 
void unitListChanged ()
 
- Public Attributes inherited from KisSpinBoxUnitManager
bool canAccessDocument {false}
 
QVector< KisSpinBoxUnitManager * > connectedUnitManagers
 
KisSpinBoxUnitManager::Constrains constrains { KisSpinBoxUnitManager::NOCONSTR }
 
double conversionConstant {0}
 
bool conversionConstantIsFixed {true}
 
double conversionFactor
 
bool conversionFactorIsFixed {true}
 
KisSpinBoxUnitManager::UnitDimension dim
 
bool hasHundredPercent {false}
 
qreal hundredPercent {0}
 
QStringList unitList
 
bool unitListCached {false}
 
QStringList unitListWithName
 
bool unitListWithNameCached {false}
 
QString unitSymbol
 
- Static Public Attributes inherited from KisSpinBoxUnitManager
static const QStringList referenceUnitSymbols = {"pt", "px", "°", "frame"}
 this list holds the symbols of the reference unit per dimension. The index is equal to the value in UnitDimension so that the dimension name can be used to index the list.
 
- Static Protected Attributes inherited from KisSpinBoxUnitManager
static const QStringList documentRelativeLengthUnitSymbols = {"px", "vw", "vh"}
 
static const QStringList documentRelativeTimeUnitSymbols = {"s", "%"}
 

Detailed Description

The KisDocumentAwareSpinBoxUnitManager class is a KisSpinBoxUnitManager that is able to connect to the current document to compute transformation for document relative units (the ones that depend of the resolution, or the size in pixels of the image).

See also
KisSpinBoxUnitManager

Definition at line 26 of file kis_document_aware_spin_box_unit_manager.h.

Member Enumeration Documentation

◆ PixDir

Enumerator
PIX_DIR_X 
PIX_DIR_Y 

Definition at line 32 of file kis_document_aware_spin_box_unit_manager.h.

32 {
35 }; //in case the image has not the same x and y resolution, indicate on which direction get the resolution.

Constructor & Destructor Documentation

◆ KisDocumentAwareSpinBoxUnitManager()

KisDocumentAwareSpinBoxUnitManager::KisDocumentAwareSpinBoxUnitManager ( QObject * parent = 0,
int pPixDir = PIX_DIR_X )

Definition at line 39 of file kis_document_aware_spin_box_unit_manager.cpp.

39 :
41{
42 if (pPixDir == PIX_DIR_Y) {
44 } else {
46 }
47
48 grantDocumentRelativeUnits(); //the purpose of this class is to manage document relative units.
49}
KisSpinBoxUnitManager(QObject *parent=0)
KisSpinBoxUnitManager::UnitDimension dim
void grantDocumentRelativeUnits()
calling this method gives access to document relative units. Only subclasses that manage those units ...

References KisSpinBoxUnitManager::dim, KisSpinBoxUnitManager::grantDocumentRelativeUnits(), PIX_DIR_X, PIX_DIR_Y, and pixDir.

Member Function Documentation

◆ createUnitSpinBoxWithDocumentAwareness()

KisDoubleParseUnitSpinBox * KisDocumentAwareSpinBoxUnitManager::createUnitSpinBoxWithDocumentAwareness ( QWidget * parent = 0)
static

create a unitSpinBox that is already document aware.

Definition at line 31 of file kis_document_aware_spin_box_unit_manager.cpp.

32{
35
36 return spinBox;
37}
static void setDocumentAwarenessToExistingUnitSpinBox(KisDoubleParseUnitSpinBox *spinBox, bool setUnitFromOutsideToggle=false)
configure a KisDocumentAwareSpinBoxUnitManager for the given spinbox (make the manager a child of the...
The KisDoubleParseUnitSpinBox class is an evolution of the.

References setDocumentAwarenessToExistingUnitSpinBox().

◆ getConversionConstant()

qreal KisDocumentAwareSpinBoxUnitManager::getConversionConstant ( int dim,
QString symbol ) const
overridevirtual
See also
KisSpinBoxUnitManager

Reimplemented from KisSpinBoxUnitManager.

Definition at line 154 of file kis_document_aware_spin_box_unit_manager.cpp.

155{
156 if (dim == TIME && symbol == "%") {
157 KisImage* img = KisPart::instance()->currentMainwindow()->activeView()->document()->image().data();
158 const KisTimeSpan & time_range = img->animationInterface()->documentPlaybackRange();
159 qreal n_frame = time_range.end() - time_range.start();
160
161 return -time_range.start()*100.0/n_frame;
162 }
163
165}
QPointer< KisView > activeView
static KisPart * instance()
Definition KisPart.cpp:131
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:483
virtual qreal getConversionConstant(int dim, QString symbol) const
some units conversions are done via an affine transform, not just a linear transform....
int end() const

References KisMainWindow::activeView, KisPart::currentMainwindow(), KisSpinBoxUnitManager::dim, KisTimeSpan::end(), KisSpinBoxUnitManager::getConversionConstant(), KisPart::instance(), and KisSpinBoxUnitManager::TIME.

◆ getConversionFactor()

qreal KisDocumentAwareSpinBoxUnitManager::getConversionFactor ( int dim,
QString psymbol ) const
overridevirtual
See also
KisSpinBoxUnitManager

Reimplemented from KisSpinBoxUnitManager.

Definition at line 52 of file kis_document_aware_spin_box_unit_manager.cpp.

53{
54 QString symbol = psymbol;
55
56 if (symbol == "%") { //percent can be seen as vw or vh depending of the reference side in the image.
57 if (pixDir == PIX_DIR_X) {
58 symbol = "vw";
59 } else {
60 symbol = "vh";
61 }
62 }
63
65
66 if (factor > 0) {
67 //no errors occurred at a lower level, so the conversion factor has been get.
68 return factor;
69 }
70
71 factor = 1; //fall back to something natural in case document is unreachable (1 px = 1 pt = 1vw = 1vh). So a virtual document of 100x100 with a resolution of 1.
72
73 if (!KisPart::instance()->currentMainwindow()) {
74 return factor;
75 }
76
78
79 if (view == nullptr) {
80 return factor;
81 }
82
83 KisDocument* doc = view->document();
84
85 if (doc == nullptr) {
86 return factor;
87 }
88
89 KisImage* img = doc->image().data();
90
91 if (img == nullptr) {
92 return factor;
93 }
94
95 qreal resX = img->xRes();
96 qreal resY = img->yRes();
97 qreal sizeX = img->width();
98 qreal sizeY = img->height();
99
100 switch (dim) {
101
102 case LENGTH:
103 if (symbol == "px") {
104
105 if (pixDir == PIX_DIR_X) {
106 factor = resX;
107 } else {
108 factor = resY;
109 }
110 } else if (symbol == "vw") {
111 qreal docWidth = sizeX/resX;
112
113 factor = 100.0/docWidth; //1 vw is 1% of document width, 1 vw in point is docWidth/100 so 1 point in vw is the inverse.
114 } else if (symbol == "vh") {
115 qreal docHeight = sizeY/resY;
116
117 factor = 100.0/docHeight;
118 }
119 break;
120
121 case IMLENGTH:
122
123 if (symbol == "vw") {
124 factor = 100.0/sizeX; //1 vw is 1% of document width, 1 vw in pixel is sizeX/100 so 1 pixel in vw is the inverse.
125
126 } else if (symbol == "vh") {
127 factor = 100.0/sizeY;
128 }
129 break;
130
131 case TIME:
132 {
133 if (symbol == "s") {
134 qreal fps = img->animationInterface()->framerate();
135
136 factor = 1/fps;
137 } else if (symbol == "%") {
138 const KisTimeSpan & time_range = img->animationInterface()->documentPlaybackRange();
139 qreal n_frame = time_range.end() - time_range.start();
140
141 factor = 100/n_frame;
142 }
143 }
144 break;
145
146 default:
147 break;
148
149 }
150
151 return factor;
152}
KisImageSP image
double xRes() const
virtual qreal getConversionFactor(int dim, QString symbol) const
gets the conversion factor of a managed unit, or -1 in case of error. This method is the one that nee...
QPointer< KisDocument > document
Definition KisView.cpp:121

References KisMainWindow::activeView, KisPart::currentMainwindow(), KisSharedPtr< T >::data(), KisSpinBoxUnitManager::dim, KisView::document, KisTimeSpan::end(), KisSpinBoxUnitManager::getConversionFactor(), KisDocument::image, KisSpinBoxUnitManager::IMLENGTH, KisPart::instance(), KisSpinBoxUnitManager::LENGTH, PIX_DIR_X, pixDir, KisSpinBoxUnitManager::TIME, and KisImage::xRes().

◆ hasPercent()

bool KisDocumentAwareSpinBoxUnitManager::hasPercent ( int unitDim) const
overrideprotectedvirtual
See also
KisSpinBoxUnitManager

Reimplemented from KisSpinBoxUnitManager.

Definition at line 168 of file kis_document_aware_spin_box_unit_manager.cpp.

168 {
169
170 if (unitDim == IMLENGTH || unitDim == LENGTH) {
171 return true;
172 }
173
175}
virtual bool hasPercent(int unitDim) const
indicate if the unit manager has some kind of way of using a percent unit, used by the main class to ...

References KisSpinBoxUnitManager::dim, KisSpinBoxUnitManager::hasPercent(), KisSpinBoxUnitManager::IMLENGTH, and KisSpinBoxUnitManager::LENGTH.

◆ setDocumentAwarenessToExistingUnitSpinBox()

void KisDocumentAwareSpinBoxUnitManager::setDocumentAwarenessToExistingUnitSpinBox ( KisDoubleParseUnitSpinBox * spinBox,
bool setUnitFromOutsideToggle = false )
static

configure a KisDocumentAwareSpinBoxUnitManager for the given spinbox (make the manager a child of the spinbox and attach it to the spinbox).

Definition at line 24 of file kis_document_aware_spin_box_unit_manager.cpp.

25{
27 spinBox->setUnitManager(manager);
29}
The KisDocumentAwareSpinBoxUnitManager class is a KisSpinBoxUnitManager that is able to connect to th...
KisDocumentAwareSpinBoxUnitManager(QObject *parent=0, int pPixDir=PIX_DIR_X)
void setUnitManager(KisSpinBoxUnitManager *unitManager)

References KisSpinBoxUnitManager::dim, KisDocumentAwareSpinBoxUnitManager(), KisDoubleParseUnitSpinBox::setUnitChangeFromOutsideBehavior(), and KisDoubleParseUnitSpinBox::setUnitManager().

Member Data Documentation

◆ pixDir

PixDir KisDocumentAwareSpinBoxUnitManager::pixDir
protected

Definition at line 55 of file kis_document_aware_spin_box_unit_manager.h.


The documentation for this class was generated from the following files: