diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-05-08 05:21:59 +0000 |
|---|---|---|
| committer | John Smith <removethis.john.q.public@bigmail.com> | 2012-05-08 05:21:59 +0000 |
| commit | 7572ee2641532716d219a9a11f03e87511ed0bab (patch) | |
| tree | 72c9ccfe5b54a179a32ddbf4cae9ee07f34ce90b /src/widgets/star-toolbar.cpp | |
| parent | Fixing to use explicit enum types instead of generic guint & bool. (diff) | |
| download | inkscape-7572ee2641532716d219a9a11f03e87511ed0bab.tar.gz inkscape-7572ee2641532716d219a9a11f03e87511ed0bab.zip | |
Fix for 986446 : Refactor toolbox into tool specific files
(bzr r11346)
Diffstat (limited to 'src/widgets/star-toolbar.cpp')
| -rw-r--r-- | src/widgets/star-toolbar.cpp | 603 |
1 files changed, 603 insertions, 0 deletions
diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp new file mode 100644 index 000000000..0b9501bcc --- /dev/null +++ b/src/widgets/star-toolbar.cpp @@ -0,0 +1,603 @@ +/** + * @file + * Star aux toolbar + */ +/* Authors: + * MenTaLguY <mental@rydia.net> + * Lauris Kaplinski <lauris@kaplinski.com> + * bulia byak <buliabyak@users.sf.net> + * Frank Felfe <innerspace@iname.com> + * John Cliff <simarilius@yahoo.com> + * David Turner <novalis@gnu.org> + * Josh Andler <scislac@scislac.com> + * Jon A. Cruz <jon@joncruz.org> + * Maximilian Albert <maximilian.albert@gmail.com> + * Tavmjong Bah <tavmjong@free.fr> + * Abhishek Sharma + * Kris De Gussem <Kris.DeGussem@gmail.com> + * + * Copyright (C) 2004 David Turner + * Copyright (C) 2003 MenTaLguY + * Copyright (C) 1999-2011 authors + * Copyright (C) 2001-2002 Ximian, Inc. + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "toolbox.h" +#include "star-toolbar.h" + +#include "../desktop.h" +#include "../desktop-handles.h" +#include "document-undo.h" +#include "../verbs.h" +#include "../inkscape.h" +#include "../selection-chemistry.h" +#include "../selection.h" +#include "../ege-adjustment-action.h" +#include "../ege-output-action.h" +#include "../ege-select-one-action.h" +#include "../ink-action.h" +#include "../ink-comboboxentry-action.h" +#include "../widgets/button.h" +#include "../widgets/spinbutton-events.h" +#include "ui/widget/spinbutton.h" +#include "../widgets/spw-utilities.h" +#include "../widgets/widget-sizes.h" +#include "../xml/node-event-vector.h" +#include "../xml/repr.h" +#include "ui/uxmanager.h" +#include "../ui/icon-names.h" +#include "../helper/unit-menu.h" +#include "../helper/units.h" +#include "../helper/unit-tracker.h" +#include "../pen-context.h" +#include "../sp-star.h" + + +using Inkscape::UnitTracker; +using Inkscape::UI::UXManager; +using Inkscape::DocumentUndo; +using Inkscape::UI::ToolboxFactory; +using Inkscape::UI::PrefPusher; + + +//######################## +//## Star ## +//######################## + +static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKludge ) +{ + SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" ); + + if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) { + // do not remember prefs if this call is initiated by an undo change, because undoing object + // creation sets bogus values to its attributes before it is deleted + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setInt("/tools/shapes/star/magnitude", + (gint)gtk_adjustment_get_value(adj)); + } + + // quit if run by the attr_changed listener + if (g_object_get_data( dataKludge, "freeze" )) { + return; + } + + // in turn, prevent listener from responding + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(TRUE) ); + + bool modmade = false; + + Inkscape::Selection *selection = sp_desktop_selection(desktop); + GSList const *items = selection->itemList(); + for (; items != NULL; items = items->next) { + SPItem *item = reinterpret_cast<SPItem*>(items->data); + if (SP_IS_STAR(item)) { + Inkscape::XML::Node *repr = item->getRepr(); + sp_repr_set_int(repr,"sodipodi:sides", + (gint)gtk_adjustment_get_value(adj)); + double arg1 = 0.5; + sp_repr_get_double(repr, "sodipodi:arg1", &arg1); + sp_repr_set_svg_double(repr, "sodipodi:arg2", + (arg1 + M_PI / (gint)gtk_adjustment_get_value(adj))); + item->updateRepr(); + modmade = true; + } + } + if (modmade) { + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR, + _("Star: Change number of corners")); + } + + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) ); +} + +static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKludge ) +{ + SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" ); + + if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) { + if (!IS_NAN(gtk_adjustment_get_value(adj))) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble("/tools/shapes/star/proportion", + gtk_adjustment_get_value(adj)); + } + } + + // quit if run by the attr_changed listener + if (g_object_get_data( dataKludge, "freeze" )) { + return; + } + + // in turn, prevent listener from responding + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(TRUE) ); + + bool modmade = false; + Inkscape::Selection *selection = sp_desktop_selection(desktop); + GSList const *items = selection->itemList(); + for (; items != NULL; items = items->next) { + SPItem *item = reinterpret_cast<SPItem *>(items->data); + if (SP_IS_STAR(item)) { + Inkscape::XML::Node *repr = item->getRepr(); + + gdouble r1 = 1.0; + gdouble r2 = 1.0; + sp_repr_get_double(repr, "sodipodi:r1", &r1); + sp_repr_get_double(repr, "sodipodi:r2", &r2); + if (r2 < r1) { + sp_repr_set_svg_double(repr, "sodipodi:r2", + r1*gtk_adjustment_get_value(adj)); + } else { + sp_repr_set_svg_double(repr, "sodipodi:r1", + r2*gtk_adjustment_get_value(adj)); + } + + item->updateRepr(); + modmade = true; + } + } + + if (modmade) { + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR, + _("Star: Change spoke ratio")); + } + + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) ); +} + +static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *dataKludge ) +{ + SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" ); + bool flat = ege_select_one_action_get_active( act ) == 0; + + if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setBool( "/tools/shapes/star/isflatsided", flat); + } + + // quit if run by the attr_changed listener + if (g_object_get_data( dataKludge, "freeze" )) { + return; + } + + // in turn, prevent listener from responding + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(TRUE) ); + + Inkscape::Selection *selection = sp_desktop_selection(desktop); + GSList const *items = selection->itemList(); + GtkAction* prop_action = GTK_ACTION( g_object_get_data( dataKludge, "prop_action" ) ); + bool modmade = false; + + if ( prop_action ) { + gtk_action_set_sensitive( prop_action, !flat ); + } + + for (; items != NULL; items = items->next) { + SPItem *item = reinterpret_cast<SPItem *>(items->data); + if (SP_IS_STAR(item)) { + Inkscape::XML::Node *repr = item->getRepr(); + repr->setAttribute("inkscape:flatsided", flat ? "true" : "false" ); + item->updateRepr(); + modmade = true; + } + } + + if (modmade) { + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR, + flat ? _("Make polygon") : _("Make star")); + } + + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) ); +} + +static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludge ) +{ + SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" ); + + if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble("/tools/shapes/star/rounded", (gdouble) gtk_adjustment_get_value(adj)); + } + + // quit if run by the attr_changed listener + if (g_object_get_data( dataKludge, "freeze" )) { + return; + } + + // in turn, prevent listener from responding + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(TRUE) ); + + bool modmade = false; + + Inkscape::Selection *selection = sp_desktop_selection(desktop); + GSList const *items = selection->itemList(); + for (; items != NULL; items = items->next) { + SPItem *item = reinterpret_cast<SPItem*>(items->data); + if (SP_IS_STAR(item)) { + Inkscape::XML::Node *repr = item->getRepr(); + sp_repr_set_svg_double(repr, "inkscape:rounded", + (gdouble) gtk_adjustment_get_value(adj)); + item->updateRepr(); + modmade = true; + } + } + if (modmade) { + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR, + _("Star: Change rounding")); + } + + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) ); +} + +static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKludge ) +{ + SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" ); + + if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble("/tools/shapes/star/randomized", + (gdouble) gtk_adjustment_get_value(adj)); + } + + // quit if run by the attr_changed listener + if (g_object_get_data( dataKludge, "freeze" )) { + return; + } + + // in turn, prevent listener from responding + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(TRUE) ); + + bool modmade = false; + + Inkscape::Selection *selection = sp_desktop_selection(desktop); + GSList const *items = selection->itemList(); + for (; items != NULL; items = items->next) { + SPItem *item = reinterpret_cast<SPItem *>(items->data); + if (SP_IS_STAR(item)) { + Inkscape::XML::Node *repr = item->getRepr(); + sp_repr_set_svg_double(repr, "inkscape:randomized", + (gdouble) gtk_adjustment_get_value(adj)); + item->updateRepr(); + modmade = true; + } + } + if (modmade) { + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR, + _("Star: Change randomization")); + } + + g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) ); +} + + +static void star_tb_event_attr_changed(Inkscape::XML::Node *repr, gchar const *name, + gchar const * /*old_value*/, gchar const * /*new_value*/, + bool /*is_interactive*/, gpointer data) +{ + GtkWidget *tbl = GTK_WIDGET(data); + + // quit if run by the _changed callbacks + if (g_object_get_data(G_OBJECT(tbl), "freeze")) { + return; + } + + // in turn, prevent callbacks from responding + g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE)); + + GtkAdjustment *adj = 0; + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool isFlatSided = prefs->getBool("/tools/shapes/star/isflatsided", true); + + if (!strcmp(name, "inkscape:randomized")) { + adj = GTK_ADJUSTMENT( g_object_get_data(G_OBJECT(tbl), "randomized") ); + double randomized = 0.0; + sp_repr_get_double(repr, "inkscape:randomized", &randomized); + gtk_adjustment_set_value(adj, randomized); + } else if (!strcmp(name, "inkscape:rounded")) { + adj = GTK_ADJUSTMENT( g_object_get_data(G_OBJECT(tbl), "rounded") ); + double rounded = 0.0; + sp_repr_get_double(repr, "inkscape:rounded", &rounded); + gtk_adjustment_set_value(adj, rounded); + } else if (!strcmp(name, "inkscape:flatsided")) { + GtkAction* prop_action = GTK_ACTION( g_object_get_data(G_OBJECT(tbl), "prop_action") ); + char const *flatsides = repr->attribute("inkscape:flatsided"); + EgeSelectOneAction* flat_action = EGE_SELECT_ONE_ACTION( g_object_get_data( G_OBJECT(tbl), "flat_action" ) ); + if ( flatsides && !strcmp(flatsides,"false") ) { + ege_select_one_action_set_active( flat_action, 1 ); + gtk_action_set_sensitive( prop_action, TRUE ); + } else { + ege_select_one_action_set_active( flat_action, 0 ); + gtk_action_set_sensitive( prop_action, FALSE ); + } + } else if ((!strcmp(name, "sodipodi:r1") || !strcmp(name, "sodipodi:r2")) && (!isFlatSided) ) { + adj = (GtkAdjustment*)g_object_get_data(G_OBJECT(tbl), "proportion"); + gdouble r1 = 1.0; + gdouble r2 = 1.0; + sp_repr_get_double(repr, "sodipodi:r1", &r1); + sp_repr_get_double(repr, "sodipodi:r2", &r2); + if (r2 < r1) { + gtk_adjustment_set_value(adj, r2/r1); + } else { + gtk_adjustment_set_value(adj, r1/r2); + } + } else if (!strcmp(name, "sodipodi:sides")) { + adj = (GtkAdjustment*)g_object_get_data(G_OBJECT(tbl), "magnitude"); + int sides = 0; + sp_repr_get_int(repr, "sodipodi:sides", &sides); + gtk_adjustment_set_value(adj, sides); + } + + g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE)); +} + + +static Inkscape::XML::NodeEventVector star_tb_repr_events = +{ + NULL, /* child_added */ + NULL, /* child_removed */ + star_tb_event_attr_changed, + NULL, /* content_changed */ + NULL /* order_changed */ +}; + + +/** + * \param selection Should not be NULL. + */ +static void +sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl) +{ + int n_selected = 0; + Inkscape::XML::Node *repr = NULL; + + purge_repr_listener( tbl, tbl ); + + for (GSList const *items = selection->itemList(); + items != NULL; + items = items->next) + { + SPItem* item = reinterpret_cast<SPItem *>(items->data); + if (SP_IS_STAR(item)) { + n_selected++; + repr = item->getRepr(); + } + } + + EgeOutputAction* act = EGE_OUTPUT_ACTION( g_object_get_data( tbl, "mode_action" ) ); + + if (n_selected == 0) { + g_object_set( G_OBJECT(act), "label", _("<b>New:</b>"), NULL ); + } else if (n_selected == 1) { + g_object_set( G_OBJECT(act), "label", _("<b>Change:</b>"), NULL ); + + if (repr) { + g_object_set_data( tbl, "repr", repr ); + Inkscape::GC::anchor(repr); + sp_repr_add_listener(repr, &star_tb_repr_events, tbl); + sp_repr_synthesize_events(repr, &star_tb_repr_events, tbl); + } + } else { + // FIXME: implement averaging of all parameters for multiple selected stars + //gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>")); + //gtk_label_set_markup(GTK_LABEL(l), _("<b>Change:</b>")); + } +} + + +static void sp_stb_defaults( GtkWidget * /*widget*/, GObject *dataKludge ) +{ + // FIXME: in this and all other _default functions, set some flag telling the value_changed + // callbacks to lump all the changes for all selected objects in one undo step + + GtkAdjustment *adj = 0; + + // fixme: make settable in prefs! + gint mag = 5; + gdouble prop = 0.5; + gboolean flat = FALSE; + gdouble randomized = 0; + gdouble rounded = 0; + + EgeSelectOneAction* flat_action = EGE_SELECT_ONE_ACTION( g_object_get_data( dataKludge, "flat_action" ) ); + ege_select_one_action_set_active( flat_action, flat ? 0 : 1 ); + + GtkAction* sb2 = GTK_ACTION( g_object_get_data( dataKludge, "prop_action" ) ); + gtk_action_set_sensitive( sb2, !flat ); + + adj = GTK_ADJUSTMENT( g_object_get_data( dataKludge, "magnitude" ) ); + gtk_adjustment_set_value(adj, mag); + gtk_adjustment_value_changed(adj); + + adj = GTK_ADJUSTMENT( g_object_get_data( dataKludge, "proportion" ) ); + gtk_adjustment_set_value(adj, prop); + gtk_adjustment_value_changed(adj); + + adj = GTK_ADJUSTMENT( g_object_get_data( dataKludge, "rounded" ) ); + gtk_adjustment_set_value(adj, rounded); + gtk_adjustment_value_changed(adj); + + adj = GTK_ADJUSTMENT( g_object_get_data( dataKludge, "randomized" ) ); + gtk_adjustment_set_value(adj, randomized); + gtk_adjustment_value_changed(adj); +} + + +void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) +{ + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + + { + EgeOutputAction* act = ege_output_action_new( "StarStateAction", _("<b>New:</b>"), "", 0 ); + ege_output_action_set_use_markup( act, TRUE ); + gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); + g_object_set_data( holder, "mode_action", act ); + } + + { + EgeAdjustmentAction* eact = 0; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool isFlatSided = prefs->getBool("/tools/shapes/star/isflatsided", true); + + /* Flatsided checkbox */ + { + GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); + + GtkTreeIter iter; + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Polygon"), + 1, _("Regular polygon (with one handle) instead of a star"), + 2, INKSCAPE_ICON("draw-polygon"), + -1 ); + + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Star"), + 1, _("Star instead of a regular polygon (with one handle)"), + 2, INKSCAPE_ICON("draw-star"), + -1 ); + + EgeSelectOneAction* act = ege_select_one_action_new( "FlatAction", (""), (""), NULL, GTK_TREE_MODEL(model) ); + gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); + g_object_set_data( holder, "flat_action", act ); + + ege_select_one_action_set_appearance( act, "full" ); + ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE ); + g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL ); + ege_select_one_action_set_icon_column( act, 2 ); + ege_select_one_action_set_icon_size( act, secondarySize ); + ege_select_one_action_set_tooltip_column( act, 1 ); + + ege_select_one_action_set_active( act, isFlatSided ? 0 : 1 ); + g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_stb_sides_flat_state_changed), holder); + } + + /* Magnitude */ + { + gchar const* labels[] = {_("triangle/tri-star"), _("square/quad-star"), _("pentagon/five-pointed star"), _("hexagon/six-pointed star"), 0, 0, 0, 0, 0}; + gdouble values[] = {3, 4, 5, 6, 7, 8, 10, 12, 20}; + eact = create_adjustment_action( "MagnitudeAction", + _("Corners"), _("Corners:"), _("Number of corners of a polygon or star"), + "/tools/shapes/star/magnitude", 3, + GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL, + 3, 1024, 1, 5, + labels, values, G_N_ELEMENTS(labels), + sp_stb_magnitude_value_changed, + 1.0, 0 ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } + + /* Spoke ratio */ + { + gchar const* labels[] = {_("thin-ray star"), 0, _("pentagram"), _("hexagram"), _("heptagram"), _("octagram"), _("regular polygon")}; + gdouble values[] = {0.01, 0.2, 0.382, 0.577, 0.692, 0.765, 1}; + eact = create_adjustment_action( "SpokeAction", + _("Spoke ratio"), _("Spoke ratio:"), + // TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle. + // Base radius is the same for the closest handle. + _("Base radius to tip radius ratio"), + "/tools/shapes/star/proportion", 0.5, + GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL, + 0.01, 1.0, 0.01, 0.1, + labels, values, G_N_ELEMENTS(labels), + sp_stb_proportion_value_changed ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + g_object_set_data( holder, "prop_action", eact ); + } + + if ( !isFlatSided ) { + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } else { + gtk_action_set_sensitive( GTK_ACTION(eact), FALSE ); + } + + /* Roundedness */ + { + gchar const* labels[] = {_("stretched"), _("twisted"), _("slightly pinched"), _("NOT rounded"), _("slightly rounded"), _("visibly rounded"), _("well rounded"), _("amply rounded"), 0, _("stretched"), _("blown up")}; + gdouble values[] = {-1, -0.2, -0.03, 0, 0.05, 0.1, 0.2, 0.3, 0.5, 1, 10}; + eact = create_adjustment_action( "RoundednessAction", + _("Rounded"), _("Rounded:"), _("How much rounded are the corners (0 for sharp)"), + "/tools/shapes/star/rounded", 0.0, + GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL, + -10.0, 10.0, 0.01, 0.1, + labels, values, G_N_ELEMENTS(labels), + sp_stb_rounded_value_changed ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } + + /* Randomization */ + { + gchar const* labels[] = {_("NOT randomized"), _("slightly irregular"), _("visibly randomized"), _("strongly randomized"), _("blown up")}; + gdouble values[] = {0, 0.01, 0.1, 0.5, 10}; + eact = create_adjustment_action( "RandomizationAction", + _("Randomized"), _("Randomized:"), _("Scatter randomly the corners and angles"), + "/tools/shapes/star/randomized", 0.0, + GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL, + -10.0, 10.0, 0.001, 0.01, + labels, values, G_N_ELEMENTS(labels), + sp_stb_randomized_value_changed, 0.1, 3 ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } + } + + { + /* Reset */ + { + GtkAction* act = gtk_action_new( "StarResetAction", + _("Defaults"), + _("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), + GTK_STOCK_CLEAR ); + g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(sp_stb_defaults), holder ); + gtk_action_group_add_action( mainActions, act ); + gtk_action_set_sensitive( act, TRUE ); + } + } + + sigc::connection *connection = new sigc::connection( + sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_star_toolbox_selection_changed), (GObject *)holder)) + ); + g_signal_connect( holder, "destroy", G_CALLBACK(delete_connection), connection ); + g_signal_connect( holder, "destroy", G_CALLBACK(purge_repr_listener), holder ); +} + + + + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : |
