summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/gradient-selector.cpp70
-rw-r--r--src/widgets/gradient-selector.h2
2 files changed, 71 insertions, 1 deletions
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index 33388a0c1..a900a0d10 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -53,6 +53,8 @@ static void sp_gradient_selector_dispose(GObject *object);
static void sp_gradient_selector_vector_set (SPGradientVectorSelector *gvs, SPGradient *gr, SPGradientSelector *sel);
static void sp_gradient_selector_edit_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
static void sp_gradient_selector_add_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
+static void sp_gradient_selector_delete_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
+
static GtkVBoxClass *parent_class;
static guint signals[LAST_SIGNAL] = {0};
@@ -125,6 +127,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
sel->safelyInit = true;
sel->blocked = false;
new (&sel->nonsolid) std::vector<GtkWidget*>();
+ new (&sel->swatch_widgets) std::vector<GtkWidget*>();
sel->mode = SPGradientSelector::MODE_LINEAR;
@@ -189,7 +192,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
#else
GtkWidget *hb = gtk_hbox_new( FALSE, 2 );
#endif
- sel->nonsolid.push_back(hb);
+ //sel->nonsolid.push_back(hb);
gtk_box_pack_start( GTK_BOX(sel), hb, FALSE, FALSE, 0 );
sel->add = gtk_button_new ();
@@ -213,6 +216,16 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
gtk_button_set_relief(GTK_BUTTON(sel->edit), GTK_RELIEF_NONE);
gtk_widget_set_tooltip_text( sel->edit, _("Edit gradient"));
+ sel->del = gtk_button_new ();
+ gtk_button_set_image((GtkButton*)sel->del , gtk_image_new_from_stock ( GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR ) );
+
+ sel->swatch_widgets.push_back(sel->del);
+ gtk_box_pack_start (GTK_BOX (hb), sel->del, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (sel->del), "clicked", G_CALLBACK (sp_gradient_selector_delete_vector_clicked), sel);
+ gtk_widget_set_sensitive (sel->del, FALSE);
+ gtk_button_set_relief(GTK_BUTTON(sel->del), GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text( sel->del, _("Delete swatch"));
+
gtk_widget_show_all(hb);
@@ -226,6 +239,7 @@ static void sp_gradient_selector_dispose(GObject *object)
sel->safelyInit = false;
using std::vector;
sel->nonsolid.~vector<GtkWidget*>();
+ sel->swatch_widgets.~vector<GtkWidget*>();
}
if (sel->icon_renderer) {
@@ -265,9 +279,23 @@ void SPGradientSelector::setMode(SelectorMode mode)
{
gtk_widget_hide(*it);
}
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
SPGradientVectorSelector* vs = SP_GRADIENT_VECTOR_SELECTOR(vectors);
vs->setSwatched();
+ } else {
+ for (std::vector<GtkWidget*>::iterator it = nonsolid.begin(); it != nonsolid.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_hide(*it);
+ }
+
}
}
}
@@ -412,6 +440,17 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
gtk_widget_show_all(*it);
}
}
+ } else if (mode != MODE_SWATCH) {
+
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_hide(*it);
+ }
+ for (std::vector<GtkWidget*>::iterator it = nonsolid.begin(); it != nonsolid.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
+
}
if (edit) {
@@ -420,6 +459,9 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
if (add) {
gtk_widget_set_sensitive(add, TRUE);
}
+ if (del) {
+ gtk_widget_set_sensitive(del, TRUE);
+ }
} else {
if (edit) {
gtk_widget_set_sensitive(edit, FALSE);
@@ -427,6 +469,9 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
if (add) {
gtk_widget_set_sensitive(add, (doc != NULL));
}
+ if (del) {
+ gtk_widget_set_sensitive(del, FALSE);
+ }
}
}
@@ -451,6 +496,29 @@ sp_gradient_selector_vector_set (SPGradientVectorSelector *gvs, SPGradient *gr,
}
}
+
+static void
+sp_gradient_selector_delete_vector_clicked (GtkWidget */*w*/, SPGradientSelector *sel)
+{
+ const Glib::RefPtr<Gtk::TreeSelection> selection = sel->treeview->get_selection();
+ if (!selection) {
+ return;
+ }
+
+ SPGradient *obj = NULL;
+ /* Single selection */
+ Gtk::TreeModel::iterator iter = selection->get_selected();
+ if ( iter ) {
+ Gtk::TreeModel::Row row = *iter;
+ obj = row[sel->columns->data];
+ }
+
+ if (obj) {
+ sp_gradient_unset_swatch(SP_ACTIVE_DESKTOP, obj->getId());
+ }
+
+}
+
static void
sp_gradient_selector_edit_vector_clicked (GtkWidget */*w*/, SPGradientSelector *sel)
{
diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h
index 01c18a48d..ea83ff819 100644
--- a/src/widgets/gradient-selector.h
+++ b/src/widgets/gradient-selector.h
@@ -97,6 +97,7 @@ struct SPGradientSelector {
/* Editing buttons */
GtkWidget *edit;
GtkWidget *add;
+ GtkWidget *del;
GtkWidget *merge;
/* Position widget */
@@ -106,6 +107,7 @@ struct SPGradientSelector {
bool blocked;
std::vector<GtkWidget*> nonsolid;
+ std::vector<GtkWidget*> swatch_widgets;
void setMode(SelectorMode mode);
void setUnits(SPGradientUnits units);