11#include <KSeExprUI/ErrorMessages.h>
29#include "ui_wdgseexpr.h"
36 , m_isCreatingPresetFromScratch(true)
45 m_widget->reloadPresetButton->setToolTip(i18n(
"Reload the preset"));
47 m_widget->dirtyPresetIndicatorButton->setToolTip(i18n(
"The settings for this preset have changed from their default."));
53 m_widget->txtEditor->registerExtraVariable(
"$u", i18nc(
"SeExpr variable",
"Normalized X axis coordinate of the image from its top-left corner"));
54 m_widget->txtEditor->registerExtraVariable(
"$v", i18nc(
"SeExpr variable",
"Normalized Y axis coordinate of the image from its top-left corner"));
55 m_widget->txtEditor->registerExtraVariable(
"$w", i18nc(
"SeExpr variable",
"Image width"));
56 m_widget->txtEditor->registerExtraVariable(
"$h", i18nc(
"SeExpr variable",
"Image height"));
58 m_widget->txtEditor->updateCompleter();
60 m_widget->txtEditor->exprTe->setFont(QFontDatabase().systemFont(QFontDatabase::FixedFont));
61 const QFontMetricsF fntTe(
m_widget->txtEditor->exprTe->fontMetrics());
62 m_widget->txtEditor->exprTe->setTabStopDistance(fntTe.horizontalAdvance(
" "));
95 m_widget->splitter->restoreState(
KisConfig(
true).readEntry(
"seExpr/splitLayoutState", QByteArray()));
96 m_widget->tabWidget->setCurrentIndex(
KisConfig(
true).readEntry(
"seExpr/selectedTab", -1));
117 auto name = config->getString(
"seexpr",
"Disney_noisecolor2");
118 auto pattern = rserver->resource(
"",
"", name);
120 m_widget->scriptSelectorWidget->setCurrentScript(pattern);
123 QString script = config->getString(
"script");
125 if (!script.isNull()) {
126 m_widget->txtEditor->setExpr(script,
true);
134 if (
m_widget->scriptSelectorWidget->currentResource()) {
136 v.setValue(
m_widget->scriptSelectorWidget->currentResource()->name());
137 config->setProperty(
"pattern",
v);
139 config->setProperty(
"script", QVariant(
m_widget->txtEditor->getExpr()));
147 m_widget->scriptSelectorWidget->setCurrentScript(resource);
162 QString formattedBrushName =
m_currentPreset->name().replace(
"_",
" ");
163 m_widget->currentBrushNameLabel->setText(formattedBrushName);
164 m_widget->renameBrushNameTextField->setText(formattedBrushName);
166 QSize thumbSize = QSize(55, 55)*devicePixelRatioF();
167 QPixmap thumbnail = QPixmap::fromImage(
m_currentPreset->image().scaled(thumbSize, Qt::KeepAspectRatio, Qt::SmoothTransformation));
168 thumbnail.setDevicePixelRatio(devicePixelRatioF());
169 m_widget->presetThumbnailicon->setPixmap(thumbnail);
191 m_widget->renameBrushNameTextField->setVisible(isRenaming);
192 m_widget->updateBrushNameButton->setVisible(isRenaming);
193 m_widget->cancelBrushNameUpdateButton->setVisible(isRenaming);
196 m_widget->currentBrushNameLabel->setVisible(!isRenaming);
197 m_widget->renameBrushPresetButton->setVisible(!isRenaming);
198 m_widget->saveBrushPresetButton->setEnabled(!isRenaming);
199 m_widget->saveBrushPresetButton->setVisible(!isRenaming);
200 m_widget->saveNewBrushPresetButton->setEnabled(!isRenaming);
201 m_widget->saveNewBrushPresetButton->setVisible(!isRenaming);
222 QString renamedPresetName =
m_widget->renameBrushNameTextField->text();
225 if (currentPresetResourceId < 0) {
239 properCleanResource.dynamicCast<
KisSeExprScript>()->setScript(prevScript);
254 m_widget->presetThumbnailicon->setVisible(
false);
255 m_widget->dirtyPresetIndicatorButton->setVisible(
false);
256 m_widget->reloadPresetButton->setVisible(
false);
257 m_widget->saveBrushPresetButton->setVisible(
false);
258 m_widget->saveNewBrushPresetButton->setEnabled(
false);
259 m_widget->renameBrushPresetButton->setVisible(
false);
268 m_widget->presetThumbnailicon->setVisible(
true);
270 m_widget->dirtyPresetIndicatorButton->setVisible(isPresetDirty);
271 m_widget->reloadPresetButton->setVisible(isPresetDirty);
272 m_widget->saveBrushPresetButton->setEnabled(isPresetDirty);
273 m_widget->saveNewBrushPresetButton->setEnabled(
true);
274 m_widget->renameBrushPresetButton->setVisible(
true);
320 for (
auto controls :
m_widget->wdgControls->findChildren<ExprControl *>()) {
321 for (
auto wdg : controls->findChildren<QCheckBox *>(QString(), Qt::FindDirectChildrenOnly)) {
322 wdg->setCheckState(Qt::Unchecked);
323 wdg->setVisible(
false);
330 QString script =
m_widget->txtEditor->getExpr();
333 expression.setDesiredReturnType(KSeExpr::ExprType().FP(3));
342 if (!expression.isValid()) {
343 const auto &errors = expression.getErrors();
345 for (
const auto &occurrence : errors) {
346 QString message = ErrorMessages::message(occurrence.error);
347 for (
const auto &arg : occurrence.ids) {
348 message = message.arg(QString::fromStdString(arg));
350 m_widget->txtEditor->addError(occurrence.startPos, occurrence.endPos, message);
353 m_widget->saveBrushPresetButton->setEnabled(
false);
354 m_widget->saveNewBrushPresetButton->setEnabled(
false);
357 else if (!expression.returnType().isFP(3)) {
358 QString type = QString::fromStdString(expression.returnType().toString());
359 m_widget->txtEditor->addError(1, 1, tr2i18n(
"Expected this script to output color, got '%1'").arg(type));
361 m_widget->saveBrushPresetButton->setEnabled(
false);
362 m_widget->saveNewBrushPresetButton->setEnabled(
false);
376 m_widget->saveNewBrushPresetButton->setEnabled(
true);
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void writeEntry(const QString &name, const T &value)
static KisResourcesInterfaceSP instance()
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
KoResourceSP resourceForId(int id) const
bool reloadResource(KoResourceSP resource) override
reloadResource
static bool renameResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString resourceName)
void setCurrentPreset(KisSeExprScriptSP resource)
void loadExistingThumbnail()
void setCurrentRenderConfiguration(KisFilterConfigurationSP config)
void useNewPresetDialog(bool show)
determines if we should show the save as dialog (true) or save in the background (false)
KisPropertiesConfigurationSP configuration() const override
void slotHideCheckboxes()
KisWdgSeExprPresetsSave * m_saveDialog
void slotResourceSelected(KoResourceSP resource)
KisSignalCompressor updateCompressor
KisSeExprScriptSP m_currentPreset
void slotReloadPresetClicked()
void slotSaveNewBrushPreset()
void slotSaveRenameCurrentPreset()
void slotRenamePresetActivated()
const Ui_WdgSeExpr * widget() const
KisWdgSeExpr(QWidget *parent=0)
void slotUpdatePresetSettings()
void slotSaveBrushPreset()
bool m_isCreatingPresetFromScratch
void setConfiguration(const KisPropertiesConfigurationSP) override
void slotResourceSaved(KoResourceSP resource)
void togglePresetRenameUIActive(bool isRenaming)
void slotRenamePresetDeactivated()
#define KIS_ASSERT_RECOVER_RETURN(cond)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
KRITAWIDGETUTILS_EXPORT void restoreState(QWidget *parent, const QString &dialogName, const QMap< QString, QVariant > &defaults=QMap< QString, QVariant >())
restoreState restores the state of the dialog
KRITAWIDGETUTILS_EXPORT void saveState(QWidget *parent, const QString &dialogName)
saveState saves the state for the specified widgets
QIcon loadIcon(const QString &name)
const QString SeExprScripts
static KoResourceServerProvider * instance()