[PATCH 4/7] Overwrite an existing PaintOp preset instead of creating a new one with the same name.

Silvio Heinrich plassy at web.de
Sun Dec 26 01:40:31 CET 2010


Additionally if a name is entered in the LineEdit field of the PaintOpPreset popup that exists already
then the LineEdit field is highlighted and the save button text is changed to "Overwrite Preset"
---
 krita/ui/kis_paintop_box.cc                    |   43 +++++++++++++++---------
 krita/ui/kis_paintop_box.h                     |    2 +-
 krita/ui/widgets/kis_paintop_presets_popup.cpp |   22 ++++++++++--
 krita/ui/widgets/kis_paintop_presets_popup.h   |    8 ++++
 4 files changed, 55 insertions(+), 20 deletions(-)

diff --git a/krita/ui/kis_paintop_box.cc b/krita/ui/kis_paintop_box.cc
index a200ef0..4e60f69 100644
--- a/krita/ui/kis_paintop_box.cc
+++ b/krita/ui/kis_paintop_box.cc
@@ -171,15 +171,18 @@ KisPaintopBox::KisPaintopBox(KisView2 * view, QWidget *parent, const char * name
     connect(m_presetsPopup, SIGNAL(savePresetClicked()), this, SLOT(slotSaveActivePreset()));
 
     connect(m_presetsPopup, SIGNAL(defaultPresetClicked()), this, SLOT(slotSetupDefaultPreset()));
+    
+    connect(m_presetsPopup, SIGNAL(presetNameLineEditChanged(QString)),
+            this, SLOT(slotWatchPresetNameLineEdit(QString)));
 
     connect(m_presetsChooserPopup, SIGNAL(resourceSelected(KoResource*)),
             this, SLOT(resourceSelected(KoResource*)));
 
     connect(m_resourceProvider, SIGNAL(sigNodeChanged(const KisNodeSP)),
             this, SLOT(nodeChanged(const KisNodeSP)));
-	
-	connect(m_presetsChooserPopup, SIGNAL(resourceSelected(KoResource*)),
-			m_presetsPopup, SLOT(resourceSelected(KoResource*)));
+    
+    connect(m_presetsChooserPopup, SIGNAL(resourceSelected(KoResource*)),
+            m_presetsPopup, SLOT(resourceSelected(KoResource*)));
 
     //Needed to connect canvas to favoriate resource manager
     m_view->canvasBase()->createFavoriteResourceManager(this);
@@ -411,27 +414,28 @@ KisPaintOpPresetSP KisPaintopBox::activePreset(const KoID & paintop, const KoInp
 
 void KisPaintopBox::slotSaveActivePreset()
 {
-    KisPaintOpPresetSP preset = m_resourceProvider->currentPreset();
-    if (!preset)
+    KisPaintOpPresetSP curPreset = m_resourceProvider->currentPreset();
+    
+    if (!curPreset)
         return;
 
-    KisPaintOpPreset* newPreset = preset->clone();
-    newPreset->setImage(m_presetsPopup->cutOutOverlay());
-
+    KisPaintOpPreset* newPreset = curPreset->clone();
     KoResourceServer<KisPaintOpPreset>* rServer = KisResourceServerProvider::instance()->paintOpPresetServer();
     QString saveLocation = rServer->saveLocation();
-
     QString name = m_presetsPopup->getPresetName();
+    QFileInfo fileInfo(saveLocation + name + newPreset->defaultFileExtension());
 
-    QFileInfo fileInfo;
-    fileInfo.setFile(saveLocation + name + newPreset->defaultFileExtension());
-
-    int i = 1;
-    while (fileInfo.exists()) {
-        fileInfo.setFile(saveLocation + name + QString("%1").arg(i) + newPreset->defaultFileExtension());
-        i++;
+    if (fileInfo.exists()) {
+        rServer->removeResource(rServer->getResourceByFilename(fileInfo.fileName()));
     }
+    
+//     int i = 1;
+//     while (fileInfo.exists()) {
+//         fileInfo.setFile(saveLocation + name + QString("%1").arg(i) + newPreset->defaultFileExtension());
+//         i++;
+//     }
 
+    newPreset->setImage(m_presetsPopup->cutOutOverlay());
     newPreset->setFilename(fileInfo.filePath());
     newPreset->setName(name);
 
@@ -581,4 +585,11 @@ void KisPaintopBox::slotSaveToFavouriteBrushes()
     }
 }
 
+void KisPaintopBox::slotWatchPresetNameLineEdit(const QString& text)
+{
+    KoResourceServer<KisPaintOpPreset>* rServer = KisResourceServerProvider::instance()->paintOpPresetServer();
+    m_presetsPopup->changeSavePresetButtonText(rServer->getResourceByName(text) != 0);
+}
+
+
 #include "kis_paintop_box.moc"
diff --git a/krita/ui/kis_paintop_box.h b/krita/ui/kis_paintop_box.h
index 85f4db2..6d17b83 100644
--- a/krita/ui/kis_paintop_box.h
+++ b/krita/ui/kis_paintop_box.h
@@ -105,7 +105,6 @@ private:
     void setEnabledInternal(bool value);
 
 private slots:
-
     void updatePaintops();
     void nodeChanged(const KisNodeSP node);
     void eraseModeToggled(bool checked);
@@ -113,6 +112,7 @@ private slots:
     void slotSetCompositeMode(const QString& compositeOp);
     void slotSetPaintop(const QString& paintOpId);
     void slotSaveToFavouriteBrushes();
+    void slotWatchPresetNameLineEdit(const QString& text);
 
 private:
 
diff --git a/krita/ui/widgets/kis_paintop_presets_popup.cpp b/krita/ui/widgets/kis_paintop_presets_popup.cpp
index 4d71b39..3c42640 100644
--- a/krita/ui/widgets/kis_paintop_presets_popup.cpp
+++ b/krita/ui/widgets/kis_paintop_presets_popup.cpp
@@ -112,6 +112,9 @@ KisPaintOpPresetsPopup::KisPaintOpPresetsPopup(KisCanvasResourceProvider * resou
             
     connect(m_d->uiWdgPaintOpPresetSettings.bnDefaultPreset, SIGNAL(clicked()),
             this, SIGNAL(defaultPresetClicked()));
+    
+    connect(m_d->uiWdgPaintOpPresetSettings.txtPreset, SIGNAL(textChanged(QString)),
+            this, SIGNAL(presetNameLineEditChanged(QString)));
             
     KisConfig cfg;
     m_d->detached = !cfg.paintopPopupDetached();
@@ -161,9 +164,6 @@ void KisPaintOpPresetsPopup::setPaintOpSettingsWidget(QWidget * widget)
     }
 
     if (widget) {
-
-        
-        
         widget->setFont(m_d->smallFont);
 
         m_d->settingsWidget->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
@@ -174,6 +174,22 @@ void KisPaintOpPresetsPopup::setPaintOpSettingsWidget(QWidget * widget)
     }
 }
 
+void KisPaintOpPresetsPopup::changeSavePresetButtonText(bool change)
+{
+    QPalette palette;
+    
+    if (change) {
+        palette.setColor(QPalette::Base, QColor(255,180,180));
+        m_d->uiWdgPaintOpPresetSettings.bnSave->setText("Overwrite Preset");
+        m_d->uiWdgPaintOpPresetSettings.txtPreset->setPalette(palette);
+    }
+    else {
+        m_d->uiWdgPaintOpPresetSettings.bnSave->setText("Save to Presets");
+        m_d->uiWdgPaintOpPresetSettings.txtPreset->setPalette(palette);
+    }
+}
+
+
 QString KisPaintOpPresetsPopup::getPresetName() const
 {
     return m_d->uiWdgPaintOpPresetSettings.txtPreset->text();
diff --git a/krita/ui/widgets/kis_paintop_presets_popup.h b/krita/ui/widgets/kis_paintop_presets_popup.h
index 49a242e..9379ba1 100644
--- a/krita/ui/widgets/kis_paintop_presets_popup.h
+++ b/krita/ui/widgets/kis_paintop_presets_popup.h
@@ -45,6 +45,12 @@ public:
     ~KisPaintOpPresetsPopup();
 
     void setPaintOpSettingsWidget(QWidget * widget);
+    
+    /**
+     * changes the "save to preset" button text to "override preset"
+     * and highlites the preset name lineedit
+     */
+    void changeSavePresetButtonText(bool change);
 
     /**
      * @return the name entered in the preset name lineedit
@@ -71,12 +77,14 @@ public slots:
 signals:
     void savePresetClicked();
     void defaultPresetClicked();
+    void presetNameLineEditChanged(const QString& presetName);
 
 private slots:
     void fillScratchPadGradient();
     void fillScratchPadSolid();
     void fillScratchPadLayer();
     void slotCheckPresetValidity();
+    
 
 private:
 
-- 
1.7.1




More information about the kimageshop mailing list