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

The TextPropertiesCanvasObserver class. More...

#include <TextPropertiesCanvasObserver.h>

+ Inheritance diagram for TextPropertiesCanvasObserver:

Classes

struct  Private
 

Public Slots

void applyPreset (KoResourceSP resource)
 
void callModalTextPropertyConfigDialog ()
 
void cloneAndEditPreset (KoResourceSP resource)
 
bool createNewPresetFromSettings ()
 
void editPreset (KoResourceSP resource)
 
void slotCanvasTextPropertiesChanged ()
 
void slotTextPropertiesChanged ()
 

Signals

void dpiChanged ()
 
void hasFocusChanged ()
 
void localesChanged ()
 
void textPropertiesChanged ()
 
void textPropertyConfigChanged ()
 

Public Member Functions

qreal dpi () const
 
bool hasFocus () const
 
QStringList locales () const
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 
void setHasFocus (const bool focus)
 
void setViewManager (KisViewManager *kisview) override
 
KoSvgTextPropertiesModeltextProperties () const
 
 TextPropertiesCanvasObserver (QObject *parent=nullptr)
 
TextPropertyConfigModeltextPropertyConfig () const
 
void unsetCanvas () override
 
 ~TextPropertiesCanvasObserver ()
 
- Public Member Functions inherited from KisMainwindowObserver
 KisMainwindowObserver ()
 
 ~KisMainwindowObserver () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Properties

qreal dpi
 
bool hasFocus
 
dpiChangedQStringList locales
 
localesChangedKoSvgTextPropertiesModel * textProperties
 
TextPropertyConfigModeltextPropertyConfig
 

Private Attributes

const QScopedPointer< Privated
 
QPointer< KisCanvas2m_canvas
 

Additional Inherited Members

Detailed Description

The TextPropertiesCanvasObserver class.

This splits out the canvas observer tasks from the docker into it's own QObject, so that it may be instantiated inside QML.

The benefit of this is that we'll have to do way less manipulating of the rootobject on the quickwidget if we want to communicate properties between qml and cpp. Given that the rootobject only exists when the qml successfully loads, this should require way less checks.

Definition at line 28 of file TextPropertiesCanvasObserver.h.

Constructor & Destructor Documentation

◆ TextPropertiesCanvasObserver()

TextPropertiesCanvasObserver::TextPropertiesCanvasObserver ( QObject * parent = nullptr)
explicit

Definition at line 40 of file TextPropertiesCanvasObserver.cpp.

41 : QObject(parent)
42 , d(new Private(this))
43{
44 d->textPropertyConfigModel = new TextPropertyConfigModel(this);
46 QStringList wellFormedBCPNames;
47 Q_FOREACH (const QString langCode, KLocalizedString::languages()) {
48 locales.append(QLocale(langCode));
49 wellFormedBCPNames.append(langCode.split("_").join("-"));
50 }
51 d->locales = wellFormedBCPNames;
52
53 connect(d->textModel, SIGNAL(textPropertyChanged()),
54 &d->modelToProviderCompressor, SLOT(start()));
55 connect(&d->modelToProviderCompressor, SIGNAL(timeout()), this, SLOT(slotTextPropertiesChanged()));
56 connect(d->textModel, SIGNAL(textPropertyChanged()),
57 this, SIGNAL(textPropertiesChanged()));
58}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
const QScopedPointer< Private > d

References connect(), d, locales, slotTextPropertiesChanged(), and textPropertiesChanged().

◆ ~TextPropertiesCanvasObserver()

TextPropertiesCanvasObserver::~TextPropertiesCanvasObserver ( )

Definition at line 60 of file TextPropertiesCanvasObserver.cpp.

61{
62
63}

Member Function Documentation

◆ applyPreset

void TextPropertiesCanvasObserver::applyPreset ( KoResourceSP resource)
slot

Definition at line 166 of file TextPropertiesCanvasObserver.cpp.

167{
168 KoCssStylePresetSP preset = resource.staticCast<KoCssStylePreset>();
169 if (!preset) return;
170 KoSvgTextPropertyData textData = d->textModel->textData.get();
171 KoSvgTextProperties properties = preset->properties(d->currentDpi, true);
172 Q_FOREACH(KoSvgTextProperties::PropertyId p, properties.properties()) {
173 textData.commonProperties.setProperty(p, properties.property(p));
174 }
175 d->textModel->textData.set(textData);
176}
const Params2D p
The KoCssStylePreset class.
QList< PropertyId > properties() const
QVariant property(PropertyId id, const QVariant &defaultValue=QVariant()) const
void setProperty(PropertyId id, const QVariant &value)
The KoSvgTextPropertyData struct.
KoSvgTextProperties commonProperties
The properties common between all the selected text.

References KoSvgTextPropertyData::commonProperties, d, p, KoSvgTextProperties::properties(), KoSvgTextProperties::property(), and KoSvgTextProperties::setProperty().

◆ callModalTextPropertyConfigDialog

void TextPropertiesCanvasObserver::callModalTextPropertyConfigDialog ( )
slot

Definition at line 156 of file TextPropertiesCanvasObserver.cpp.

157{
158 TextPropertyConfigDialog dialog(qApp->activeWindow());
159 dialog.setTextPropertyConfigModel(d->textPropertyConfigModel);
160 if (dialog.exec() == QDialog::Accepted) {
161 dialog.model()->saveConfiguration();
163 }
164}

References d, and textPropertyConfigChanged().

◆ cloneAndEditPreset

void TextPropertiesCanvasObserver::cloneAndEditPreset ( KoResourceSP resource)
slot

Definition at line 214 of file TextPropertiesCanvasObserver.cpp.

215{
216 KoResourceSP newResource = resource->clone();
217 KoCssStylePresetSP preset = newResource.staticCast<KoCssStylePreset>();
218 if (!preset) return;
219
220 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
221 dialog->setCurrentResource(preset);
222
223 if (dialog->exec() == QDialog::Accepted) {
224 preset = dialog->currentResource();
225 preset->setFilename(preset->name().replace(' ', '_').replace('.', '_') + preset->defaultFileExtension());
226 KisResourceUserOperations::addResourceWithUserInput(qApp->activeWindow(), preset);
227 }
228}
static bool addResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString storageLocation="")

References KisResourceUserOperations::addResourceWithUserInput().

◆ createNewPresetFromSettings

bool TextPropertiesCanvasObserver::createNewPresetFromSettings ( )
slot

Definition at line 178 of file TextPropertiesCanvasObserver.cpp.

179{
180 KoCssStylePresetSP preset(new KoCssStylePreset(QString()));
181 KoSvgTextPropertyData textData = d->textModel->textData.get();
182 preset->setProperties(textData.commonProperties);
183 preset->setName(i18nc("@info:placeholder", "New Style Preset"));
184 preset->setStyleType("character");
185 preset->updateThumbnail();
186
187 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
188 dialog->setDpi(d->currentDpi);
189 dialog->setCurrentResource(preset);
190
191 if (dialog->exec() == QDialog::Accepted) {
192 return KisResourceUserOperations::addResourceWithUserInput(qApp->activeWindow(), dialog->currentResource());
193 }
194
195 return false;
196}

References KisResourceUserOperations::addResourceWithUserInput(), KoSvgTextPropertyData::commonProperties, and d.

◆ dpi()

qreal TextPropertiesCanvasObserver::dpi ( ) const

Definition at line 105 of file TextPropertiesCanvasObserver.cpp.

106{
107 return d->currentDpi;
108}

References d.

◆ dpiChanged

void TextPropertiesCanvasObserver::dpiChanged ( )
signal

◆ editPreset

void TextPropertiesCanvasObserver::editPreset ( KoResourceSP resource)
slot

Definition at line 198 of file TextPropertiesCanvasObserver.cpp.

199{
200 KoCssStylePresetSP preset = resource.staticCast<KoCssStylePreset>();
201 if (!preset) return;
202
203 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
204 dialog->setCurrentResource(preset);
205
206 if (dialog->exec() == QDialog::Accepted) {
207 KisResourceUserOperations::updateResourceWithUserInput(qApp->activeWindow(), dialog->currentResource());
208 } else {
209 KisResourceModel model = KisResourceModel(ResourceType::CssStyles, qApp->activeWindow());
210 model.reloadResource(preset);
211 }
212}
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
bool reloadResource(KoResourceSP resource) override
reloadResource
static bool updateResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource)
const QString CssStyles

References ResourceType::CssStyles, KisResourceModel::reloadResource(), and KisResourceUserOperations::updateResourceWithUserInput().

◆ hasFocus()

bool TextPropertiesCanvasObserver::hasFocus ( ) const

Definition at line 125 of file TextPropertiesCanvasObserver.cpp.

126{
127 return d->hasFocus;
128}

References d.

◆ hasFocusChanged

void TextPropertiesCanvasObserver::hasFocusChanged ( )
signal

◆ locales()

QStringList TextPropertiesCanvasObserver::locales ( ) const

Definition at line 110 of file TextPropertiesCanvasObserver.cpp.

111{
112 return d->locales;
113}

References d.

◆ localesChanged

void TextPropertiesCanvasObserver::localesChanged ( )
signal

◆ observerName()

QString TextPropertiesCanvasObserver::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 47 of file TextPropertiesCanvasObserver.h.

47{ return "TextPropertiesCanvasObserver"; }

◆ setCanvas()

void TextPropertiesCanvasObserver::setCanvas ( KoCanvasBase * canvas)
overridevirtual

re-implement this method in your canvas observer. It will be called whenever a canvas becomes active. Note that you are responsible for not connecting more than one time to the signals of a canvas or any of the QObjects you can access through the canvas.

Implements KoCanvasObserverBase.

Definition at line 79 of file TextPropertiesCanvasObserver.cpp.

80{
81 //setEnabled(true);
82
83 if (m_canvas == canvas) {
84 return;
85 }
86
87 if (m_canvas) {
88 m_canvas->disconnectCanvasObserver(this);
89 }
90
91 KIS_ASSERT(canvas);
92
93 m_canvas = dynamic_cast<KisCanvas2*>(canvas);
94 if (m_canvas && m_canvas->currentImage()) {
95 d->currentDpi = m_canvas->currentImage()->xRes() * 72.0;
96 Q_EMIT dpiChanged();
97 }
98}
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References d, dpiChanged(), KIS_ASSERT, and m_canvas.

◆ setHasFocus()

void TextPropertiesCanvasObserver::setHasFocus ( const bool focus)

Definition at line 130 of file TextPropertiesCanvasObserver.cpp.

131{
132 if (d->hasFocus == focus) return;
133 d->hasFocus = focus;
134 Q_EMIT hasFocusChanged();
135}

References d, and hasFocusChanged().

◆ setViewManager()

void TextPropertiesCanvasObserver::setViewManager ( KisViewManager * kisview)
overridevirtual

Implements KisMainwindowObserver.

Definition at line 65 of file TextPropertiesCanvasObserver.cpp.

66{
67 d->provider = kisview->canvasResourceProvider();
68 if (d->provider) {
69 connect(d->provider, SIGNAL(sigTextPropertiesChanged()),
71
72 // This initializes the docker to an empty entry;
73 KoSvgTextPropertyData textData;
75 d->provider->setTextPropertyData(textData);
76 }
77}
KisCanvasResourceProvider * canvasResourceProvider()
KoSvgTextProperties inheritedProperties
The properties that are inherited, so that widgets may be set correctly.

References KisViewManager::canvasResourceProvider(), connect(), d, KoSvgTextPropertyData::inheritedProperties, and slotCanvasTextPropertiesChanged().

◆ slotCanvasTextPropertiesChanged

void TextPropertiesCanvasObserver::slotCanvasTextPropertiesChanged ( )
slot

Definition at line 137 of file TextPropertiesCanvasObserver.cpp.

138{
139 KoSvgTextPropertyData data = d->provider->textPropertyData();
140 const bool shouldSet = d->hasFocus? !d->modelToProviderCompressor.isActive(): true;
141 if (d->textModel->textData.get() != data && shouldSet) {
142 d->textModel->textData.set(data);
143 Q_EMIT textPropertiesChanged();
144 }
145}

References d, and textPropertiesChanged().

◆ slotTextPropertiesChanged

void TextPropertiesCanvasObserver::slotTextPropertiesChanged ( )
slot

Definition at line 147 of file TextPropertiesCanvasObserver.cpp.

148{
149 KoSvgTextPropertyData textData = d->textModel->textData.get();
150 debugFlake << Q_FUNC_INFO << textData;
151 if (d->provider && d->provider->textPropertyData() != textData) {
152 d->provider->setTextPropertyData(textData);
153 }
154}
#define debugFlake
Definition FlakeDebug.h:15

References d, and debugFlake.

◆ textProperties()

KoSvgTextPropertiesModel * TextPropertiesCanvasObserver::textProperties ( ) const

Definition at line 115 of file TextPropertiesCanvasObserver.cpp.

116{
117 return d->textModel;
118}

References d.

◆ textPropertiesChanged

void TextPropertiesCanvasObserver::textPropertiesChanged ( )
signal

◆ textPropertyConfig()

TextPropertyConfigModel * TextPropertiesCanvasObserver::textPropertyConfig ( ) const

Definition at line 120 of file TextPropertiesCanvasObserver.cpp.

121{
122 return d->textPropertyConfigModel;
123}

References d.

◆ textPropertyConfigChanged

void TextPropertiesCanvasObserver::textPropertyConfigChanged ( )
signal

◆ unsetCanvas()

void TextPropertiesCanvasObserver::unsetCanvas ( )
overridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 100 of file TextPropertiesCanvasObserver.cpp.

101{
102 m_canvas = 0;
103}

References m_canvas.

Member Data Documentation

◆ d

const QScopedPointer<Private> TextPropertiesCanvasObserver::d
private

Definition at line 78 of file TextPropertiesCanvasObserver.h.

◆ m_canvas

QPointer<KisCanvas2> TextPropertiesCanvasObserver::m_canvas
private

Definition at line 79 of file TextPropertiesCanvasObserver.h.

Property Documentation

◆ dpi

qreal TextPropertiesCanvasObserver::dpi
read

Definition at line 31 of file TextPropertiesCanvasObserver.h.

◆ hasFocus

bool TextPropertiesCanvasObserver::hasFocus
readwrite

Definition at line 42 of file TextPropertiesCanvasObserver.h.

◆ locales

dpiChangedQStringList TextPropertiesCanvasObserver::locales
read

Definition at line 32 of file TextPropertiesCanvasObserver.h.

◆ textProperties

localesChangedKoSvgTextPropertiesModel * TextPropertiesCanvasObserver::textProperties
read

Definition at line 33 of file TextPropertiesCanvasObserver.h.

◆ textPropertyConfig

TextPropertyConfigModel * TextPropertiesCanvasObserver::textPropertyConfig
read

Definition at line 34 of file TextPropertiesCanvasObserver.h.


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