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

#include <kis_dlg_layer_properties.h>

+ Inheritance diagram for KisDlgLayerProperties:

Classes

struct  Private
 

Public Member Functions

 KisDlgLayerProperties (KisNodeList nodes, KisViewManager *view, QWidget *parent=0, const char *name=0, Qt::WindowFlags f=Qt::WindowFlags())
 
 ~KisDlgLayerProperties () override
 
- Public Member Functions inherited from KoDialog
QPushButton * button (ButtonCode id) const
 
QIcon buttonIcon (ButtonCode id) const
 
QString buttonText (ButtonCode id) const
 
QString buttonToolTip (ButtonCode id) const
 
QString buttonWhatsThis (ButtonCode id) const
 
ButtonCode defaultButton () const
 
QString helpLinkText () const
 
void incrementInitialSize (const QSize &size)
 
bool isButtonEnabled (ButtonCode id) const
 
 KoDialog (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
 
QWidget * mainWidget ()
 
QSize minimumSizeHint () const override
 
void setButtonFocus (ButtonCode id)
 
void setButtonGuiItem (ButtonCode id, const KGuiItem &item)
 
void setButtonIcon (ButtonCode id, const QIcon &icon)
 
void setButtons (ButtonCodes buttonMask)
 
void setButtonsOrientation (Qt::Orientation orientation)
 
void setButtonText (ButtonCode id, const QString &text)
 
void setButtonToolTip (ButtonCode id, const QString &text)
 
void setButtonWhatsThis (ButtonCode id, const QString &text)
 
void setDefaultButton (ButtonCode id)
 
void setEscapeButton (ButtonCode id)
 
void setInitialSize (const QSize &size)
 
void setMainWidget (QWidget *widget)
 
void showButton (ButtonCode id, bool state)
 
void showButtonSeparator (bool state)
 
QSize sizeHint () const override
 
 ~KoDialog () override
 

Protected Slots

void slotColorLabelValueChangedExternally ()
 
void slotColorLabelValueChangedInternally ()
 
void slotCompositeOpValueChangedExternally ()
 
void slotCompositeOpValueChangedInternally ()
 
void slotFlagsValueChangedInternally ()
 
void slotNameValueChangedExternally ()
 
void slotNameValueChangedInternally ()
 
void slotOpacityValueChangedExternally ()
 
void slotOpacityValueChangedInternally ()
 
void slotPropertyValueChangedInternally ()
 
void updatePreview ()
 
- Protected Slots inherited from KoDialog
virtual void slotButtonClicked (int button)
 

Private Attributes

const QScopedPointer< Privated
 

Additional Inherited Members

- Public Types inherited from KoDialog
enum  ButtonCode {
  None = 0x00000000 , Help = 0x00000001 , Default = 0x00000002 , Ok = 0x00000004 ,
  Apply = 0x00000008 , Try = 0x00000010 , Cancel = 0x00000020 , Close = 0x00000040 ,
  No = 0x00000080 , Yes = 0x00000100 , Reset = 0x00000200 , Details = 0x00000400 ,
  User1 = 0x00001000 , User2 = 0x00002000 , User3 = 0x00004000 , NoDefault = 0x00008000
}
 
enum  ButtonPopupMode { InstantPopup = 0 , DelayedPopup = 1 }
 
enum  CaptionFlag { NoCaptionFlags = 0 , AppNameCaption = 1 , ModifiedCaption = 2 , HIGCompliantCaption = AppNameCaption }
 
- Public Slots inherited from KoDialog
void delayedDestruct ()
 
void enableButton (ButtonCode id, bool state)
 
void enableButtonApply (bool state)
 
void enableButtonCancel (bool state)
 
void enableButtonOk (bool state)
 
void enableLinkedHelp (bool state)
 
bool isDetailsWidgetVisible () const
 
virtual void setCaption (const QString &caption)
 
virtual void setCaption (const QString &caption, bool modified)
 
void setDetailsWidget (QWidget *detailsWidget)
 
void setDetailsWidgetVisible (bool visible)
 
void setHelp (const QString &anchor, const QString &appname=QString())
 
void setHelpLinkText (const QString &text)
 
virtual void setPlainCaption (const QString &caption)
 
- Signals inherited from KoDialog
void aboutToShowDetails ()
 
void applyClicked ()
 
void buttonClicked (KoDialog::ButtonCode button)
 
void cancelClicked ()
 
void closeClicked ()
 
void defaultClicked ()
 
void finished ()
 
void helpClicked ()
 
void hidden ()
 
void layoutHintChanged ()
 
void noClicked ()
 
void okClicked ()
 
void resetClicked ()
 
void tryClicked ()
 
void user1Clicked ()
 
void user2Clicked ()
 
void user3Clicked ()
 
void yesClicked ()
 
- Static Public Member Functions inherited from KoDialog
static int groupSpacingHint ()
 
static QString makeStandardCaption (const QString &userCaption, QWidget *window=0, CaptionFlags flags=HIGCompliantCaption)
 
static int marginHint ()
 
static void resizeLayout (QLayout *lay, int margin, int spacing)
 
static void resizeLayout (QWidget *widget, int margin, int spacing)
 
static int spacingHint ()
 
- Protected Member Functions inherited from KoDialog
void closeEvent (QCloseEvent *e) override
 
void hideEvent (QHideEvent *) override
 
void keyPressEvent (QKeyEvent *) override
 
void showEvent (QShowEvent *e) override
 

Detailed Description

KisDlgLayerProperties is a dialogue for displaying and modifying information on a KisLayer. The dialog is non modal by default and uses a timer to check for user changes to the configuration, showing a preview of them.

Definition at line 40 of file kis_dlg_layer_properties.h.

Constructor & Destructor Documentation

◆ KisDlgLayerProperties()

KisDlgLayerProperties::KisDlgLayerProperties ( KisNodeList nodes,
KisViewManager * view,
QWidget * parent = 0,
const char * name = 0,
Qt::WindowFlags f = Qt::WindowFlags() )

Definition at line 70 of file kis_dlg_layer_properties.cc.

71 : KoDialog(parent)
72 , d(new Private())
73{
74 nodes = KisLayerUtils::sortMergeableNodes(view->image()->root(), nodes);
75 d->nodes = nodes;
76
77 Q_UNUSED(f);
78 setCaption(i18n("Layer Properties"));
81 setModal(false);
82
83 setObjectName(name);
84 d->page = new WdgLayerProperties(this);
85 setMainWidget(d->page);
86 d->view = view;
87 d->colorSpace = d->nodes.first()->colorSpace();
88
89 d->page->editName->setFocus();
90 d->nameProperty.reset(new KisMultinodeNameProperty(nodes));
91 d->nameProperty->connectIgnoreCheckBox(d->page->chkName);
92 d->nameProperty->connectAutoEnableWidget(d->page->editName);
93 d->nameProperty->connectValueChangedSignal(this, SLOT(slotNameValueChangedInternally()));
94 connect(d->page->editName, SIGNAL(textChanged(QString)), SLOT(slotNameValueChangedExternally()));
95
96 d->page->intOpacity->setRange(0, 100);
97 KisSpinBoxI18nHelper::setText(d->page->intOpacity, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
98 d->opacityProperty.reset(new KisMultinodeOpacityProperty(nodes));
99 d->opacityProperty->connectIgnoreCheckBox(d->page->chkOpacity);
100 d->opacityProperty->connectAutoEnableWidget(d->page->intOpacity);
101 d->opacityProperty->connectValueChangedSignal(this, SLOT(slotOpacityValueChangedInternally()));
102 d->opacityProperty->connectValueChangedSignal(&d->updatesCompressor, SLOT(start()));
103 connect(d->page->intOpacity, SIGNAL(valueChanged(int)), SLOT(slotOpacityValueChangedExternally()));
104
105 d->compositeOpProperty.reset(new KisMultinodeCompositeOpProperty(nodes));
106 d->compositeOpProperty->connectIgnoreCheckBox(d->page->chkCompositeOp);
107 d->compositeOpProperty->connectAutoEnableWidget(d->page->cmbComposite);
108 d->compositeOpProperty->connectValueChangedSignal(this, SLOT(slotCompositeOpValueChangedInternally()));
109 d->compositeOpProperty->connectValueChangedSignal(&d->updatesCompressor, SLOT(start()));
110 connect(d->page->cmbComposite, SIGNAL(currentIndexChanged(int)), SLOT(slotCompositeOpValueChangedExternally()));
111
112 d->page->colorLabelSelector->setFocusPolicy(Qt::StrongFocus);
113 d->colorLabelProperty.reset(new KisMultinodeColorLabelProperty(nodes));
114 d->colorLabelProperty->connectIgnoreCheckBox(d->page->chkColorLabel);
115 d->colorLabelProperty->connectAutoEnableWidget(d->page->colorLabelSelector);
116 d->colorLabelProperty->connectValueChangedSignal(this, SLOT(slotColorLabelValueChangedInternally()));
117 d->colorLabelProperty->connectValueChangedSignal(&d->updatesCompressor, SLOT(start()));
118 connect(d->page->colorLabelSelector, SIGNAL(currentIndexChanged(int)), SLOT(slotColorLabelValueChangedExternally()));
119
120 if (!KisLayerUtils::checkNodesDiffer<const KoColorSpace*>(d->nodes, [](KisNodeSP node) { return node->colorSpace(); })) {
121
122 d->page->lblColorSpace->setText(d->colorSpace->name());
123 if (const KoColorProfile* profile = d->colorSpace->profile()) {
124 d->page->lblProfile->setText(profile->name());
125 }
126
127 QRect bounds = d->nodes.first()->exactBounds();
128 d->page->lblDimensions->setText(i18nc("layer dimensions", "(%1, %2), (%3, %4)",
129 bounds.x(),
130 bounds.y(),
131 bounds.width(),
132 bounds.height()));
133
135 if (!props.isEmpty()) {
136 QVBoxLayout *vbox = new QVBoxLayout;
137 Q_FOREACH (const ChannelFlagAdapter::Property &prop, props) {
138 QCheckBox *chk = new QCheckBox(prop.name, this);
139 vbox->addWidget(chk);
140
143 nodes,
144 ChannelFlagAdapter(prop));
145
146 multiprop->connectIgnoreCheckBox(chk);
148 multiprop->connectValueChangedSignal(&d->updatesCompressor, SLOT(start()));
149
150 d->channelFlagsCheckboxes << chk;
151 d->channelFlagsProps << toQShared(multiprop);
152 }
153
154 d->page->grpActiveChannels->setLayout(vbox);
155 } else {
156 d->page->grpActiveChannels->setVisible(false);
157 d->page->lineActiveChannels->setVisible(false);
158 }
159 } else {
160 d->page->grpActiveChannels->setVisible(false);
161 d->page->lineActiveChannels->setVisible(false);
162 d->page->cmbComposite->setEnabled(false);
163 d->page->chkCompositeOp->setEnabled(false);
164 d->page->lblDimensions->setText(i18n("*varies*"));
165 d->page->lblColorSpace->setText(i18n("*varies*"));
166 d->page->lblProfile->setText(i18n("*varies*"));
167 }
168
169 {
170 QVBoxLayout *vbox = new QVBoxLayout;
171
173 Q_FOREACH (const KisBaseNode::Property &prop, props) {
174 QCheckBox *chk = new QCheckBox(prop.name, this);
175 chk->setIcon(prop.onIcon);
176 vbox->addWidget(chk);
177
180 nodes,
182
183 multiprop->connectIgnoreCheckBox(chk);
185 multiprop->connectValueChangedSignal(&d->updatesCompressor, SLOT(start()));
186
187 d->layerPropCheckboxes << chk;
188 d->layerProperties << toQShared(multiprop);
189 }
190
191 d->page->grpProperties->setLayout(vbox);
192 }
193
194 connect(&d->updatesCompressor, SIGNAL(timeout()), SLOT(updatePreview()));
195}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
const QScopedPointer< Private > d
virtual void connectValueChangedSignal(const QObject *receiver, const char *method, Qt::ConnectionType type=Qt::AutoConnection)=0
virtual void connectIgnoreCheckBox(QCheckBox *ignoreBox)=0
KisImageWSP image() const
Return the image this view is displaying.
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:354
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
void setDefaultButton(ButtonCode id)
Definition KoDialog.cpp:302
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
KoDialog(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags())
Definition KoDialog.cpp:176
#define bounds(x, a, b)
KisMultinodeProperty< ColorLabelAdapter > KisMultinodeColorLabelProperty
KisMultinodeProperty< OpacityAdapter > KisMultinodeOpacityProperty
KisMultinodeProperty< NameAdapter > KisMultinodeNameProperty
KisMultinodeProperty< CompositeOpAdapter > KisMultinodeCompositeOpProperty
QSharedPointer< T > toQShared(T *ptr)
void sortMergeableNodes(KisNodeSP root, KisNodeList &inputNodes, KisNodeList &outputNodes)
void setText(QSpinBox *spinBox, const QStringView textTemplate)
static PropertyList adaptersList(KisNodeList nodes)
static KisBaseNode::PropertyList adaptersList(KisNodeList nodes)

References LayerPropertyAdapter::adaptersList(), ChannelFlagAdapter::adaptersList(), bounds, KoDialog::Cancel, connect(), KisMultinodePropertyInterface::connectIgnoreCheckBox(), KisMultinodePropertyInterface::connectValueChangedSignal(), d, KisViewManager::image(), KisBaseNode::Property::name, ChannelFlagAdapter::Property::name, KoDialog::Ok, KisBaseNode::Property::onIcon, KisNodeFacade::root, KoDialog::setButtons(), KoDialog::setCaption(), KoDialog::setDefaultButton(), KoDialog::setMainWidget(), KisSpinBoxI18nHelper::setText(), slotColorLabelValueChangedExternally(), slotColorLabelValueChangedInternally(), slotCompositeOpValueChangedExternally(), slotCompositeOpValueChangedInternally(), slotFlagsValueChangedInternally(), slotNameValueChangedExternally(), slotNameValueChangedInternally(), slotOpacityValueChangedExternally(), slotOpacityValueChangedInternally(), slotPropertyValueChangedInternally(), KisLayerUtils::sortMergeableNodes(), toQShared(), and updatePreview().

◆ ~KisDlgLayerProperties()

KisDlgLayerProperties::~KisDlgLayerProperties ( )
override

Definition at line 197 of file kis_dlg_layer_properties.cc.

198{
199 if (result() == QDialog::Accepted) {
200 if (d->updatesCompressor.isActive()) {
201 d->updatesCompressor.stop();
203 }
204
206 d->view->image()->postExecutionUndoAdapter();
207 KisSavedMacroCommand *macro = adapter->createMacro(kundo2_i18n("Change Layer Properties"));
209 Q_FOREACH(auto prop, d->allProperties()) {
210 if (!prop->isIgnored()) {
211 macro->addCommand(toQShared(prop->createPostExecutionUndoCommand()));
212 }
213 }
215 adapter->addMacro(macro);
216 }
217 else /* if (result() == QDialog::Rejected) */ {
218 Q_FOREACH(auto prop, d->allProperties()) {
219 prop->setIgnored(true);
220 }
222 }
223}
void addMacro(KisSavedMacroCommand *macro)
KisSavedMacroCommand * createMacro(const KUndo2MagicString &macroName)
void addCommand(KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
KUndo2MagicString kundo2_i18n(const char *text)

References KisSavedMacroCommand::addCommand(), KisPostExecutionUndoAdapter::addMacro(), KisPostExecutionUndoAdapter::createMacro(), d, kundo2_i18n(), toQShared(), and updatePreview().

Member Function Documentation

◆ slotColorLabelValueChangedExternally

void KisDlgLayerProperties::slotColorLabelValueChangedExternally ( )
protectedslot

Definition at line 244 of file kis_dlg_layer_properties.cc.

245{
246 if (d->colorLabelProperty->isIgnored()) return;
247 d->colorLabelProperty->setValue(d->page->colorLabelSelector->currentIndex());
248}

References d.

◆ slotColorLabelValueChangedInternally

void KisDlgLayerProperties::slotColorLabelValueChangedInternally ( )
protectedslot

Definition at line 238 of file kis_dlg_layer_properties.cc.

239{
240 d->page->colorLabelSelector->setCurrentIndex(d->colorLabelProperty->value());
241 d->page->colorLabelSelector->setEnabled(!d->colorLabelProperty->isIgnored());
242}

References d.

◆ slotCompositeOpValueChangedExternally

void KisDlgLayerProperties::slotCompositeOpValueChangedExternally ( )
protectedslot

Definition at line 232 of file kis_dlg_layer_properties.cc.

233{
234 if (d->compositeOpProperty->isIgnored()) return;
235 d->compositeOpProperty->setValue(d->page->cmbComposite->selectedCompositeOp().id());
236}

References d.

◆ slotCompositeOpValueChangedInternally

void KisDlgLayerProperties::slotCompositeOpValueChangedInternally ( )
protectedslot

Definition at line 225 of file kis_dlg_layer_properties.cc.

226{
227 d->page->cmbComposite->validate(d->colorSpace);
228 d->page->cmbComposite->selectCompositeOp(KoID(d->compositeOpProperty->value()));
229 d->page->cmbComposite->setEnabled(!d->compositeOpProperty->isIgnored());
230}
Definition KoID.h:30

References d.

◆ slotFlagsValueChangedInternally

void KisDlgLayerProperties::slotFlagsValueChangedInternally ( )
protectedslot

Definition at line 287 of file kis_dlg_layer_properties.cc.

288{
289 Q_FOREACH (KisMultinodePropertyInterfaceSP prop, d->layerProperties) {
290 prop->rereadCurrentValue();
291 }
292}

References d.

◆ slotNameValueChangedExternally

void KisDlgLayerProperties::slotNameValueChangedExternally ( )
protectedslot

Definition at line 271 of file kis_dlg_layer_properties.cc.

272{
273 if (d->nameProperty->isIgnored()) return;
274
275 if (d->page->editName->text() != d->nameProperty->value()) {
276 d->nameProperty->setValue(d->page->editName->text());
277 }
278}

References d.

◆ slotNameValueChangedInternally

void KisDlgLayerProperties::slotNameValueChangedInternally ( )
protectedslot

Definition at line 262 of file kis_dlg_layer_properties.cc.

263{
264 if (d->page->editName->text() != d->nameProperty->value()) {
265 d->page->editName->setText(d->nameProperty->value());
266 }
267
268 d->page->editName->setEnabled(!d->nameProperty->isIgnored());
269}

References d.

◆ slotOpacityValueChangedExternally

void KisDlgLayerProperties::slotOpacityValueChangedExternally ( )
protectedslot

Definition at line 256 of file kis_dlg_layer_properties.cc.

257{
258 if (d->opacityProperty->isIgnored()) return;
259 d->opacityProperty->setValue(d->page->intOpacity->value());
260}

References d.

◆ slotOpacityValueChangedInternally

void KisDlgLayerProperties::slotOpacityValueChangedInternally ( )
protectedslot

Definition at line 250 of file kis_dlg_layer_properties.cc.

251{
252 d->page->intOpacity->setValue(d->opacityProperty->value());
253 d->page->intOpacity->setEnabled(!d->opacityProperty->isIgnored());
254}

References d.

◆ slotPropertyValueChangedInternally

void KisDlgLayerProperties::slotPropertyValueChangedInternally ( )
protectedslot

Definition at line 280 of file kis_dlg_layer_properties.cc.

281{
282 Q_FOREACH (KisMultinodePropertyInterfaceSP prop, d->channelFlagsProps) {
283 prop->rereadCurrentValue();
284 }
285}

References d.

◆ updatePreview

void KisDlgLayerProperties::updatePreview ( )
protectedslot

Member Data Documentation

◆ d

const QScopedPointer<Private> KisDlgLayerProperties::d
private

Definition at line 69 of file kis_dlg_layer_properties.h.


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