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 slotCanvasCharacterPropertiesChanged ()
 
void slotCanvasTextPropertiesChanged ()
 
void slotCharacterPropertiesChanged ()
 
void slotTextPropertiesChanged ()
 

Signals

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

Public Member Functions

KoSvgTextPropertiesModelcharacterProperties () const
 
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

KoSvgTextPropertiesModelcharacterProperties
 
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 43 of file TextPropertiesCanvasObserver.cpp.

44 : QObject(parent)
45 , d(new Private(this))
46{
47 d->textPropertyConfigModel = new TextPropertyConfigModel(this);
49 QStringList wellFormedBCPNames;
50 Q_FOREACH (const QString langCode, KLocalizedString::languages()) {
51 locales.append(QLocale(langCode));
52 wellFormedBCPNames.append(langCode.split("_").join("-"));
53 }
54 d->locales = wellFormedBCPNames;
55
56 connect(d->textModel, SIGNAL(textPropertyChanged()),
57 &d->textToProviderCompressor, SLOT(start()));
58 connect(d->characterModel, SIGNAL(textPropertyChanged()),
59 &d->characterToProviderCompressor, SLOT(start()));
60 connect(&d->textToProviderCompressor, SIGNAL(timeout()), this, SLOT(slotTextPropertiesChanged()));
61 connect(&d->characterToProviderCompressor, SIGNAL(timeout()), this, SLOT(slotCharacterPropertiesChanged()));
62 connect(d->textModel, SIGNAL(textPropertyChanged()),
63 this, SIGNAL(textPropertiesChanged()));
64 connect(d->characterModel, SIGNAL(textPropertyChanged()),
65 this, SIGNAL(characterPropertiesChanged()));
66}
const QScopedPointer< Private > d

References characterPropertiesChanged(), d, locales, slotCharacterPropertiesChanged(), slotTextPropertiesChanged(), and textPropertiesChanged().

◆ ~TextPropertiesCanvasObserver()

TextPropertiesCanvasObserver::~TextPropertiesCanvasObserver ( )

Definition at line 68 of file TextPropertiesCanvasObserver.cpp.

69{
70
71}

Member Function Documentation

◆ applyPreset

void TextPropertiesCanvasObserver::applyPreset ( KoResourceSP resource)
slot

Definition at line 203 of file TextPropertiesCanvasObserver.cpp.

204{
205 KoCssStylePresetSP preset = resource.staticCast<KoCssStylePreset>();
206 if (!preset) return;
207 KoSvgTextPropertiesModel *model = d->characterModel->enabled() && d->characterModel->spanSelection()? d->characterModel: d->textModel;
208 KoSvgTextPropertyData textData = model->textData.get();
209 KoSvgTextProperties properties = preset->properties(d->currentDpi, true);
210 Q_FOREACH(KoSvgTextProperties::PropertyId p, properties.properties()) {
211 textData.commonProperties.setProperty(p, properties.property(p));
212 }
213 model->textData.set(textData);
214}
const Params2D p
The KoCssStylePreset class.
The KoSvgTextPropertiesModel class.
lager::cursor< KoSvgTextPropertyData > textData
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(), KoSvgTextProperties::setProperty(), and KoSvgTextPropertiesModel::textData.

◆ callModalTextPropertyConfigDialog

void TextPropertiesCanvasObserver::callModalTextPropertyConfigDialog ( )
slot

Definition at line 193 of file TextPropertiesCanvasObserver.cpp.

194{
195 TextPropertyConfigDialog dialog(qApp->activeWindow());
196 dialog.setTextPropertyConfigModel(d->textPropertyConfigModel);
197 if (dialog.exec() == QDialog::Accepted) {
198 dialog.model()->saveConfiguration();
200 }
201}

References d, and textPropertyConfigChanged().

◆ characterProperties()

KoSvgTextPropertiesModel * TextPropertiesCanvasObserver::characterProperties ( ) const

Definition at line 133 of file TextPropertiesCanvasObserver.cpp.

134{
135 return d->characterModel;
136}

References d.

◆ characterPropertiesChanged

void TextPropertiesCanvasObserver::characterPropertiesChanged ( )
signal

◆ cloneAndEditPreset

void TextPropertiesCanvasObserver::cloneAndEditPreset ( KoResourceSP resource)
slot

Definition at line 253 of file TextPropertiesCanvasObserver.cpp.

254{
255 KoResourceSP newResource = resource->clone();
256 KoCssStylePresetSP preset = newResource.staticCast<KoCssStylePreset>();
257 if (!preset) return;
258
259 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
260 dialog->setCurrentResource(preset);
261
262 if (dialog->exec() == QDialog::Accepted) {
263 preset = dialog->currentResource();
264 preset->setFilename(preset->name().replace(' ', '_').replace('.', '_') + preset->defaultFileExtension());
265 KisResourceUserOperations::addResourceWithUserInput(qApp->activeWindow(), preset);
266 }
267}
static bool addResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString storageLocation="")

References KisResourceUserOperations::addResourceWithUserInput().

◆ createNewPresetFromSettings

bool TextPropertiesCanvasObserver::createNewPresetFromSettings ( )
slot

Definition at line 216 of file TextPropertiesCanvasObserver.cpp.

217{
218 KoCssStylePresetSP preset(new KoCssStylePreset(QString()));
219 KoSvgTextPropertiesModel *model = d->characterModel->enabled() && d->characterModel->spanSelection()? d->characterModel: d->textModel;
220 KoSvgTextPropertyData textData = model->textData.get();
221 preset->setProperties(textData.commonProperties);
222 preset->setName(i18nc("@info:placeholder", "New Style Preset"));
223 preset->setStyleType("character");
224 preset->updateThumbnail();
225
226 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
227 dialog->setDpi(d->currentDpi);
228 dialog->setCurrentResource(preset);
229
230 if (dialog->exec() == QDialog::Accepted) {
231 return KisResourceUserOperations::addResourceWithUserInput(qApp->activeWindow(), dialog->currentResource());
232 }
233
234 return false;
235}

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

◆ dpi()

qreal TextPropertiesCanvasObserver::dpi ( ) const

Definition at line 118 of file TextPropertiesCanvasObserver.cpp.

119{
120 return d->currentDpi;
121}

References d.

◆ dpiChanged

void TextPropertiesCanvasObserver::dpiChanged ( )
signal

◆ editPreset

void TextPropertiesCanvasObserver::editPreset ( KoResourceSP resource)
slot

Definition at line 237 of file TextPropertiesCanvasObserver.cpp.

238{
239 KoCssStylePresetSP preset = resource.staticCast<KoCssStylePreset>();
240 if (!preset) return;
241
242 CssStylePresetEditDialog *dialog = new CssStylePresetEditDialog(qApp->activeWindow());
243 dialog->setCurrentResource(preset);
244
245 if (dialog->exec() == QDialog::Accepted) {
246 KisResourceUserOperations::updateResourceWithUserInput(qApp->activeWindow(), dialog->currentResource());
247 } else {
248 KisResourceModel model = KisResourceModel(ResourceType::CssStyles, qApp->activeWindow());
249 model.reloadResource(preset);
250 }
251}
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 143 of file TextPropertiesCanvasObserver.cpp.

144{
145 return d->hasFocus;
146}

References d.

◆ hasFocusChanged

void TextPropertiesCanvasObserver::hasFocusChanged ( )
signal

◆ locales()

QStringList TextPropertiesCanvasObserver::locales ( ) const

Definition at line 123 of file TextPropertiesCanvasObserver.cpp.

124{
125 return d->locales;
126}

References d.

◆ localesChanged

void TextPropertiesCanvasObserver::localesChanged ( )
signal

◆ observerName()

QString TextPropertiesCanvasObserver::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 48 of file TextPropertiesCanvasObserver.h.

48{ 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 92 of file TextPropertiesCanvasObserver.cpp.

93{
94 //setEnabled(true);
95
96 if (m_canvas == canvas) {
97 return;
98 }
99
100 if (m_canvas) {
101 m_canvas->disconnectCanvasObserver(this);
102 }
103
104 KIS_ASSERT(canvas);
105
106 m_canvas = dynamic_cast<KisCanvas2*>(canvas);
107 if (m_canvas && m_canvas->currentImage()) {
108 d->currentDpi = m_canvas->currentImage()->xRes() * 72.0;
109 Q_EMIT dpiChanged();
110 }
111}
#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 148 of file TextPropertiesCanvasObserver.cpp.

149{
150 if (d->hasFocus == focus) return;
151 d->hasFocus = focus;
152 Q_EMIT hasFocusChanged();
153}

References d, and hasFocusChanged().

◆ setViewManager()

void TextPropertiesCanvasObserver::setViewManager ( KisViewManager * kisview)
overridevirtual

Implements KisMainwindowObserver.

Definition at line 73 of file TextPropertiesCanvasObserver.cpp.

74{
75 d->provider = kisview->canvasResourceProvider();
76 if (d->provider) {
77 connect(d->provider, SIGNAL(sigTextPropertiesChanged()),
79 connect(d->provider, SIGNAL(sigCharacterPropertiesChanged()),
81
82 // This initializes the docker to an empty entry;
83 KoSvgTextPropertyData textData;
85 textData.enabled = true;
86 d->provider->setTextPropertyData(textData);
87 textData.enabled = false;
88 d->provider->setCharacterPropertyData(textData);
89 }
90}
KisCanvasResourceProvider * canvasResourceProvider()
KoSvgTextProperties inheritedProperties
The properties that are inherited, so that widgets may be set correctly.

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

◆ slotCanvasCharacterPropertiesChanged

void TextPropertiesCanvasObserver::slotCanvasCharacterPropertiesChanged ( )
slot

Definition at line 165 of file TextPropertiesCanvasObserver.cpp.

166{
167 KoSvgTextPropertyData data = d->provider->characterTextPropertyData();
168 const bool shouldSet = d->hasFocus? !d->characterToProviderCompressor.isActive(): true;
169 if (d->characterModel->textData.get() != data && shouldSet) {
170 d->characterModel->textData.set(data);
172 }
173}

References characterPropertiesChanged(), and d.

◆ slotCanvasTextPropertiesChanged

void TextPropertiesCanvasObserver::slotCanvasTextPropertiesChanged ( )
slot

Definition at line 155 of file TextPropertiesCanvasObserver.cpp.

156{
157 KoSvgTextPropertyData data = d->provider->textPropertyData();
158 const bool shouldSet = d->hasFocus? !d->textToProviderCompressor.isActive(): true;
159 if (d->textModel->textData.get() != data && shouldSet) {
160 d->textModel->textData.set(data);
161 Q_EMIT textPropertiesChanged();
162 }
163}

References d, and textPropertiesChanged().

◆ slotCharacterPropertiesChanged

void TextPropertiesCanvasObserver::slotCharacterPropertiesChanged ( )
slot

Definition at line 184 of file TextPropertiesCanvasObserver.cpp.

185{
186 KoSvgTextPropertyData characterData = d->characterModel->textData.get();
187 debugFlake << Q_FUNC_INFO << characterData;
188 if (d->provider && d->provider->characterTextPropertyData() != characterData) {
189 d->provider->setCharacterPropertyData(characterData);
190 }
191}
#define debugFlake
Definition FlakeDebug.h:15

References d, and debugFlake.

◆ slotTextPropertiesChanged

void TextPropertiesCanvasObserver::slotTextPropertiesChanged ( )
slot

Definition at line 175 of file TextPropertiesCanvasObserver.cpp.

176{
177 KoSvgTextPropertyData textData = d->textModel->textData.get();
178 debugFlake << Q_FUNC_INFO << textData;
179 if (d->provider && d->provider->textPropertyData() != textData) {
180 d->provider->setTextPropertyData(textData);
181 }
182}

References d, and debugFlake.

◆ textProperties()

KoSvgTextPropertiesModel * TextPropertiesCanvasObserver::textProperties ( ) const

Definition at line 128 of file TextPropertiesCanvasObserver.cpp.

129{
130 return d->textModel;
131}

References d.

◆ textPropertiesChanged

void TextPropertiesCanvasObserver::textPropertiesChanged ( )
signal

◆ textPropertyConfig()

TextPropertyConfigModel * TextPropertiesCanvasObserver::textPropertyConfig ( ) const

Definition at line 138 of file TextPropertiesCanvasObserver.cpp.

139{
140 return d->textPropertyConfigModel;
141}

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 113 of file TextPropertiesCanvasObserver.cpp.

114{
115 m_canvas = 0;
116}

References m_canvas.

Member Data Documentation

◆ d

const QScopedPointer<Private> TextPropertiesCanvasObserver::d
private

Definition at line 83 of file TextPropertiesCanvasObserver.h.

◆ m_canvas

QPointer<KisCanvas2> TextPropertiesCanvasObserver::m_canvas
private

Definition at line 84 of file TextPropertiesCanvasObserver.h.

Property Documentation

◆ characterProperties

KoSvgTextPropertiesModel * TextPropertiesCanvasObserver::characterProperties
read

Definition at line 34 of file TextPropertiesCanvasObserver.h.

◆ dpi

qreal TextPropertiesCanvasObserver::dpi
read

Definition at line 31 of file TextPropertiesCanvasObserver.h.

◆ hasFocus

bool TextPropertiesCanvasObserver::hasFocus
readwrite

Definition at line 43 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 35 of file TextPropertiesCanvasObserver.h.


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