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

#include <KoZoomAction.h>

+ Inheritance diagram for KoZoomAction:

Public Slots

void setUsePrintResolutionMode (bool value)
 
void slotZoomStateChanged (const KoZoomState &zoomState)
 

Signals

void sigInternalUpdateUsePrintResolutionMode (bool value)
 
void sigInternalUpdateZoomLevelsComboState (const QStringList &values, int index, const QString &activeText)
 
void sigInternalUpdateZoomLevelsSliderState (int size, int index)
 
void sigUsePrintResolutionModeChanged (bool value)
 
void zoomChanged (KoZoomMode::Mode mode, qreal zoom)
 

Public Member Functions

QWidget * createWidget (QWidget *parent) override
 
 KoZoomAction (const QString &text, QObject *parent)
 
 Private (KoZoomAction *_parent)
 
 ~KoZoomAction () override
 

Public Attributes

KoZoomActionState currentActionState
 
KoZoomState currentZoomState
 
KisSignalCompressor guiUpdateCompressor
 
KoZoomActionparent {nullptr}
 

Protected Slots

void sliderValueChanged (int value)
 
void slotTextZoomChanged (const QString &value)
 
void slotUpdateGuiAfterZoom ()
 
void slotZoomLevelChangedIndex (int index)
 

Protected Member Functions

void regenerateItems ()
 
void syncSliderWithZoom ()
 

Private Attributes

Private *const d
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Additional Inherited Members

- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Detailed Description

Class KoZoomAction implements an action to provide zoom values. In a toolbar, KoZoomAction will show a dropdown list (combobox), also with the possibility for the user to enter arbitrary zoom value (must be an integer). The values shown on the list are always sorted. In a statusbar it provides a scale (slider) plus an editable value plus some buttons for special zoommodes

Definition at line 26 of file KoZoomAction.cpp.

Constructor & Destructor Documentation

◆ KoZoomAction()

KoZoomAction::KoZoomAction ( const QString & text,
QObject * parent )

Creates a new zoom action.

Parameters
zoomModeswhich zoom modes that should be shown
textThe text that will be displayed.
parentThe action's parent object.

Definition at line 45 of file KoZoomAction.cpp.

46 : KSelectAction(text, parent)
47 , d(new Private(this))
48{
49 setIcon(koIcon("zoom-original"));
50 setEditable( true );
51 setMaxComboViewCount( 15 );
52
54 connect(&d->guiUpdateCompressor, SIGNAL(timeout()), SLOT(slotUpdateGuiAfterZoom()));
55}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KoZoomAction * parent
Private *const d
void regenerateItems()
void slotUpdateGuiAfterZoom()
#define koIcon(name)
Use these macros for icons without any issues.
Definition kis_icon.h:25

References connect(), d, koIcon, regenerateItems(), and slotUpdateGuiAfterZoom().

◆ ~KoZoomAction()

KoZoomAction::~KoZoomAction ( )
override

Definition at line 57 of file KoZoomAction.cpp.

58{
59 delete d;
60}

References d.

Member Function Documentation

◆ createWidget()

QWidget * KoZoomAction::createWidget ( QWidget * parent)
override

Reimplemented from QWidgetAction.

Definition at line 157 of file KoZoomAction.cpp.

158{
159 KoZoomWidget* zoomWidget = new KoZoomWidget(parent, d->currentActionState.standardLevels.size());
160
164
165 connect(zoomWidget, SIGNAL(zoomLevelChanged(QString)), this, SLOT(slotTextZoomChanged(QString)));
166 connect(zoomWidget, SIGNAL(sliderValueChanged(int)), this, SLOT(sliderValueChanged(int)));
167 connect(zoomWidget, SIGNAL(zoomLevelChangedIndex(int)), this, SLOT(slotZoomLevelChangedIndex(int)));
168 connect(zoomWidget, SIGNAL(sigUsePrintResolutionModeChanged(bool)), this, SIGNAL(sigUsePrintResolutionModeChanged(bool)));
169
172
173 return zoomWidget;
174}
void syncSliderWithZoom()
void slotZoomLevelChangedIndex(int index)
void sigInternalUpdateUsePrintResolutionMode(bool value)
void sliderValueChanged(int value)
void sigUsePrintResolutionModeChanged(bool value)
void slotTextZoomChanged(const QString &value)
void sigInternalUpdateZoomLevelsSliderState(int size, int index)
void sigInternalUpdateZoomLevelsComboState(const QStringList &values, int index, const QString &activeText)
void setZoomLevelsState(const QStringList &values, int index, const QString &activeText)
void setUsePrintResolutionMode(bool value)
void setSliderState(int size, int index)

References connect(), d, parent, regenerateItems(), KoZoomWidget::setSliderState(), KoZoomWidget::setUsePrintResolutionMode(), KoZoomWidget::setZoomLevelsState(), sigInternalUpdateUsePrintResolutionMode(), sigInternalUpdateZoomLevelsComboState(), sigInternalUpdateZoomLevelsSliderState(), sigUsePrintResolutionModeChanged(), sliderValueChanged(), slotTextZoomChanged(), slotZoomLevelChangedIndex(), and syncSliderWithZoom().

◆ Private()

KoZoomAction::Private ( KoZoomAction * _parent)
inline

Definition at line 30 of file KoZoomAction.cpp.

31 : parent(_parent)
34 {}
KisSignalCompressor guiUpdateCompressor
KoZoomActionState currentActionState
KoZoomState currentZoomState

◆ regenerateItems()

void KoZoomAction::regenerateItems ( )
protected

Definition at line 124 of file KoZoomAction.cpp.

125{
126 QStringList values;
127
128 std::transform(d->currentActionState.realGuiLevels.begin(),
129 d->currentActionState.realGuiLevels.end(),
130 std::back_inserter(values),
131 [](const auto &item) {
132 return std::get<QString>(item);
133 });
134
135 {
136 QSignalBlocker b(this);
137 setItems(values);
138 setCurrentItem(d->currentActionState.currentRealLevelIndex);
139 }
140
142 values,
143 d->currentActionState.currentRealLevelIndex,
144 d->currentActionState.currentRealLevelText);
145}

References d, and sigInternalUpdateZoomLevelsComboState().

◆ setUsePrintResolutionMode

void KoZoomAction::setUsePrintResolutionMode ( bool value)
slot

Change status of canvas size mapping button (emits canvasMappingModeChanged(bool) after the change, ALWAYS)

Definition at line 182 of file KoZoomAction.cpp.

183{
185}
float value(const T *src, size_t ch)

References sigInternalUpdateUsePrintResolutionMode(), and value().

◆ sigInternalUpdateUsePrintResolutionMode

void KoZoomAction::sigInternalUpdateUsePrintResolutionMode ( bool value)
signal

◆ sigInternalUpdateZoomLevelsComboState

void KoZoomAction::sigInternalUpdateZoomLevelsComboState ( const QStringList & values,
int index,
const QString & activeText )
signal

◆ sigInternalUpdateZoomLevelsSliderState

void KoZoomAction::sigInternalUpdateZoomLevelsSliderState ( int size,
int index )
signal

◆ sigUsePrintResolutionModeChanged

void KoZoomAction::sigUsePrintResolutionModeChanged ( bool value)
signal

◆ sliderValueChanged

void KoZoomAction::sliderValueChanged ( int value)
protectedslot

Definition at line 147 of file KoZoomAction.cpp.

148{
149 if (value < 0 || value >= d->currentActionState.standardLevels.size()) return;
150
152 qreal zoom = d->currentActionState.standardLevels[value];
153
154 Q_EMIT zoomChanged(mode, zoom);
155}
void zoomChanged(KoZoomMode::Mode mode, qreal zoom)
@ ZOOM_CONSTANT
zoom x %
Definition KoZoomMode.h:24
QAction * zoom(const QObject *recvr, const char *slot, QObject *parent)

References d, value(), KoZoomMode::ZOOM_CONSTANT, and zoomChanged().

◆ slotTextZoomChanged

void KoZoomAction::slotTextZoomChanged ( const QString & value)
protectedslot

In Turkish language, the percent sign can go before the number...

If the value has been selected from the dropdown, then it has already been activated by slotZoomLevelChangedIndex() and we shouldn't emit it once again.

Definition at line 70 of file KoZoomAction.cpp.

71{
72 // HACK ALERT: all items in predefined zooms are handled by
73 // slotZoomLevelChangedIndex(), which comes first;
74 // this implementation is for explicitly entered
75 // values only.
76
77 bool isValid = false;
78 qreal zoom = QLocale().toDouble(value, &isValid);
79
80 if (!isValid) {
83
84 QString trimmedValue = value.trimmed();
85 if (trimmedValue.endsWith('%')) {
86 stringRemoveLast(trimmedValue);
87 } else if (trimmedValue.startsWith('%')) {
92 stringRemoveFirst(trimmedValue);
93 }
94 zoom = QLocale().toDouble(trimmedValue, &isValid);
95 }
96
97 if (isValid) {
103 const KoZoomState &zoomState = d->currentActionState.zoomState;
104 if (zoomState.mode != KoZoomMode::ZOOM_CONSTANT ||
105 qRound(zoomState.zoom * 1000.0) != qRound(zoom * 10.0)) {
106
107 Q_EMIT zoomChanged(KoZoomMode::ZOOM_CONSTANT, zoom / 100.0);
108 }
109
110 }
111}
KoZoomMode::Mode mode
Definition KoZoomState.h:24
void stringRemoveFirst(QString &str)
void stringRemoveLast(QString &str)

References d, KoZoomState::mode, KisPortingUtils::stringRemoveFirst(), KisPortingUtils::stringRemoveLast(), value(), KoZoomState::zoom, KoZoomMode::ZOOM_CONSTANT, and zoomChanged().

◆ slotUpdateGuiAfterZoom

void KoZoomAction::slotUpdateGuiAfterZoom ( )
protectedslot

Definition at line 176 of file KoZoomAction.cpp.

177{
180}

References regenerateItems(), and syncSliderWithZoom().

◆ slotZoomLevelChangedIndex

void KoZoomAction::slotZoomLevelChangedIndex ( int index)
protectedslot

Definition at line 113 of file KoZoomAction.cpp.

114{
115 if (index < 0 || index >= d->currentActionState.realGuiLevels.size()) return;
116 if (index == d->currentActionState.currentRealLevelIndex) return;
117
118 KoZoomMode::Mode mode = std::get<KoZoomMode::Mode>(d->currentActionState.realGuiLevels[index]);
119 qreal zoom = std::get<qreal>(d->currentActionState.realGuiLevels[index]);
120
121 Q_EMIT zoomChanged(mode, zoom);
122}

References d, and zoomChanged().

◆ slotZoomStateChanged

void KoZoomAction::slotZoomStateChanged ( const KoZoomState & zoomState)
slot

Definition at line 62 of file KoZoomAction.cpp.

63{
64 d->currentZoomState = zoomState;
65 d->currentActionState.setZoomState(zoomState);
66
67 d->guiUpdateCompressor.start();
68}

References d.

◆ syncSliderWithZoom()

void KoZoomAction::syncSliderWithZoom ( )
protected

Definition at line 187 of file KoZoomAction.cpp.

188{
189 const int index = d->currentActionState.calcNearestStandardLevel();
190 Q_EMIT sigInternalUpdateZoomLevelsSliderState(d->currentActionState.standardLevels.size(), index);
191}

References d, and sigInternalUpdateZoomLevelsSliderState().

◆ zoomChanged

void KoZoomAction::zoomChanged ( KoZoomMode::Mode mode,
qreal zoom )
signal

Signal zoomChanged is triggered when user changes the zoom value, either by choosing it from the list or by entering new value.

Parameters
modeThe selected zoom mode
zoomthe zoom, only defined if mode is KoZoomMode::ZOOM_CONSTANT

Member Data Documentation

◆ currentActionState

KoZoomActionState KoZoomAction::currentActionState

Definition at line 41 of file KoZoomAction.cpp.

◆ currentZoomState

KoZoomState KoZoomAction::currentZoomState

Definition at line 38 of file KoZoomAction.cpp.

◆ d

Private* const KoZoomAction::d
private

Definition at line 87 of file KoZoomAction.h.

◆ guiUpdateCompressor

KisSignalCompressor KoZoomAction::guiUpdateCompressor

Definition at line 39 of file KoZoomAction.cpp.

◆ parent

KoZoomAction* KoZoomAction::parent {nullptr}

Definition at line 36 of file KoZoomAction.cpp.

36{nullptr};

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