summaryrefslogtreecommitdiffstats
path: root/src/widgets/toolbox.cpp
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2008-10-27 18:03:09 +0000
committerTed Gould <ted@canonical.com>2008-10-27 18:03:09 +0000
commit7dbe11bc23efa5f51a9b84e7d0f6dd16e63e0902 (patch)
tree7d3a2b95b84a03a19cb132cdf88bea0ab6dc4773 /src/widgets/toolbox.cpp
parentMerging from trunk (diff)
downloadinkscape-7dbe11bc23efa5f51a9b84e7d0f6dd16e63e0902.tar.gz
inkscape-7dbe11bc23efa5f51a9b84e7d0f6dd16e63e0902.zip
From trunk
(bzr r6885)
Diffstat (limited to 'src/widgets/toolbox.cpp')
-rw-r--r--src/widgets/toolbox.cpp662
1 files changed, 325 insertions, 337 deletions
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index b70684692..b945765db 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -1,28 +1,25 @@
-/** \file
- * Controls bars for some of Inkscape's tools
- * (for some tools, they are in their own files)
+/** @file
+ * @brief Controls bars for some of Inkscape's tools (for some tools,
+ * they are in their own files)
+ */
+/* 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>
+ *
+ * Copyright (C) 2004 David Turner
+ * Copyright (C) 2003 MenTaLguY
+ * Copyright (C) 1999-2008 authors
+ * Copyright (C) 2001-2002 Ximian, Inc.
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
*/
-
-/*
-*
-* 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>
-*
-* Copyright (C) 2004 David Turner
-* Copyright (C) 2003 MenTaLguY
-* Copyright (C) 1999-2008 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"
@@ -140,14 +137,14 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* ma
namespace { GtkWidget *sp_text_toolbox_new (SPDesktop *desktop); }
-Inkscape::IconSize prefToSize( gchar const *path, gchar const *attr, int base ) {
+Inkscape::IconSize prefToSize( Glib::ustring const &path, int base ) {
static Inkscape::IconSize sizeChoices[] = {
Inkscape::ICON_SIZE_LARGE_TOOLBAR,
Inkscape::ICON_SIZE_SMALL_TOOLBAR,
Inkscape::ICON_SIZE_MENU
};
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- int index = prefs->getIntLimited( path, attr, base, 0, G_N_ELEMENTS(sizeChoices) );
+ int index = prefs->getIntLimited( path, base, 0, G_N_ELEMENTS(sizeChoices) );
return sizeChoices[index];
}
@@ -194,29 +191,29 @@ static struct {
{ "SPNodeContext", "node_toolbox", 0, sp_node_toolbox_prep, "NodeToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPTweakContext", "tweak_toolbox", 0, sp_tweak_toolbox_prep, "TweakToolbar",
- SP_VERB_CONTEXT_TWEAK_PREFS, "tools.tweak", N_("Color/opacity used for color tweaking")},
+ SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")},
{ "SPZoomContext", "zoom_toolbox", 0, sp_zoom_toolbox_prep, "ZoomToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPStarContext", "star_toolbox", 0, sp_star_toolbox_prep, "StarToolbar",
- SP_VERB_CONTEXT_STAR_PREFS, "tools.shapes.star", N_("Style of new stars")},
+ SP_VERB_CONTEXT_STAR_PREFS, "/tools/shapes/star", N_("Style of new stars")},
{ "SPRectContext", "rect_toolbox", 0, sp_rect_toolbox_prep, "RectToolbar",
- SP_VERB_CONTEXT_RECT_PREFS, "tools.shapes.rect", N_("Style of new rectangles")},
+ SP_VERB_CONTEXT_RECT_PREFS, "/tools/shapes/rect", N_("Style of new rectangles")},
{ "Box3DContext", "3dbox_toolbox", 0, box3d_toolbox_prep, "3DBoxToolbar",
- SP_VERB_CONTEXT_3DBOX_PREFS, "tools.shapes.3dbox", N_("Style of new 3D boxes")},
+ SP_VERB_CONTEXT_3DBOX_PREFS, "/tools/shapes/3dbox", N_("Style of new 3D boxes")},
{ "SPArcContext", "arc_toolbox", 0, sp_arc_toolbox_prep, "ArcToolbar",
- SP_VERB_CONTEXT_ARC_PREFS, "tools.shapes.arc", N_("Style of new ellipses")},
+ SP_VERB_CONTEXT_ARC_PREFS, "/tools/shapes/arc", N_("Style of new ellipses")},
{ "SPSpiralContext", "spiral_toolbox", 0, sp_spiral_toolbox_prep, "SpiralToolbar",
- SP_VERB_CONTEXT_SPIRAL_PREFS, "tools.shapes.spiral", N_("Style of new spirals")},
+ SP_VERB_CONTEXT_SPIRAL_PREFS, "/tools/shapes/spiral", N_("Style of new spirals")},
{ "SPPencilContext", "pencil_toolbox", 0, sp_pencil_toolbox_prep, "PencilToolbar",
- SP_VERB_CONTEXT_PENCIL_PREFS, "tools.freehand.pencil", N_("Style of new paths created by Pencil")},
+ SP_VERB_CONTEXT_PENCIL_PREFS, "/tools/freehand/pencil", N_("Style of new paths created by Pencil")},
{ "SPPenContext", "pen_toolbox", 0, sp_pen_toolbox_prep, "PenToolbar",
- SP_VERB_CONTEXT_PEN_PREFS, "tools.freehand.pen", N_("Style of new paths created by Pen")},
+ SP_VERB_CONTEXT_PEN_PREFS, "/tools/freehand/pen", N_("Style of new paths created by Pen")},
{ "SPDynaDrawContext", "calligraphy_toolbox", 0, sp_calligraphy_toolbox_prep,"CalligraphyToolbar",
- SP_VERB_CONTEXT_CALLIGRAPHIC_PREFS, "tools.calligraphic", N_("Style of new calligraphic strokes")},
+ SP_VERB_CONTEXT_CALLIGRAPHIC_PREFS, "/tools/calligraphic", N_("Style of new calligraphic strokes")},
{ "SPEraserContext", "eraser_toolbox", 0, sp_eraser_toolbox_prep,"EraserToolbar",
- SP_VERB_CONTEXT_ERASER_PREFS, "tools.eraser", _("TBD")},
+ SP_VERB_CONTEXT_ERASER_PREFS, "/tools/eraser", _("TBD")},
{ "SPLPEToolContext", "lpetool_toolbox", 0, sp_lpetool_toolbox_prep, "LPEToolToolbar",
- SP_VERB_CONTEXT_LPETOOL_PREFS, "tools.lpetool", _("TBD")},
+ SP_VERB_CONTEXT_LPETOOL_PREFS, "/tools/lpetool", _("TBD")},
{ "SPTextContext", "text_toolbox", sp_text_toolbox_new, 0, 0,
SP_VERB_INVALID, 0, 0},
{ "SPDropperContext", "dropper_toolbox", 0, sp_dropper_toolbox_prep, "DropperToolbar",
@@ -226,7 +223,7 @@ static struct {
{ "SPConnectorContext", "connector_toolbox", 0, sp_connector_toolbox_prep, "ConnectorToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPFloodContext", "paintbucket_toolbox", 0, sp_paintbucket_toolbox_prep, "PaintbucketToolbar",
- SP_VERB_CONTEXT_PAINTBUCKET_PREFS, "tools.paintbucket", N_("Style of Paint Bucket fill objects")},
+ SP_VERB_CONTEXT_PAINTBUCKET_PREFS, "/tools/paintbucket", N_("Style of Paint Bucket fill objects")},
{ NULL, NULL, NULL, NULL, NULL, SP_VERB_INVALID, NULL, NULL }
};
@@ -276,6 +273,7 @@ static gchar const * ui_descr =
" <toolitem action='NodeCuspAction' />"
" <toolitem action='NodeSmoothAction' />"
" <toolitem action='NodeSymmetricAction' />"
+ " <toolitem action='NodeAutoAction' />"
" <separator />"
" <toolitem action='NodeLineAction' />"
" <toolitem action='NodeCurveAction' />"
@@ -561,7 +559,7 @@ Gtk::Widget* VerbAction::create_menu_item_vfunc()
Gtk::Widget* VerbAction::create_tool_item_vfunc()
{
// Gtk::Widget* widg = Gtk::Action::create_tool_item_vfunc();
- Inkscape::IconSize toolboxSize = prefToSize("toolbox.tools", "small");
+ Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small");
GtkWidget* toolbox = 0;
GtkWidget *button = sp_toolbox_button_new_from_verb_with_doubleclick( toolbox, toolboxSize,
SP_BUTTON_TYPE_TOGGLE,
@@ -768,7 +766,7 @@ Glib::RefPtr<Gtk::ActionGroup> create_or_fetch_actions( SPDesktop* desktop )
SP_VERB_ZOOM_SELECTION,
};
- Inkscape::IconSize toolboxSize = prefToSize("toolbox", "small");
+ Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small");
static std::map<SPDesktop*, Glib::RefPtr<Gtk::ActionGroup> > groups;
Glib::RefPtr<Gtk::ActionGroup> mainActions;
@@ -913,7 +911,7 @@ sp_commands_toolbox_new()
static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
gchar const *label, gchar const *shortLabel, gchar const *tooltip,
- gchar const *path, gchar const *data, gdouble def,
+ Glib::ustring const &path, gdouble def,
GtkWidget *focusTarget,
GtkWidget *us,
GObject *dataKludge,
@@ -924,7 +922,7 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
gdouble climb = 0.1, guint digits = 3, double factor = 1.0 )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( prefs->getDouble(path, data, def) * factor,
+ GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( prefs->getDouble(path, def) * factor,
lower, upper, step, page, page ) );
if (us) {
sp_unit_selector_add_adjustment( SP_UNIT_SELECTOR(us), adj );
@@ -950,7 +948,9 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
}
if ( dataKludge ) {
- g_object_set_data( dataKludge, data, adj );
+ // Rather lame, but it's the only place where we need to get the entry name
+ // but we don't have an Entry
+ g_object_set_data( dataKludge, prefs->getEntry(path).getEntryName().data(), adj );
}
// Using a cast just to make sure we pass in the right kind of function pointer
@@ -1060,10 +1060,17 @@ sp_node_path_edit_symmetrical(void)
if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_SYMM);
}
+void
+sp_node_path_edit_auto(void)
+{
+ ShapeEditor *shape_editor = get_current_shape_editor();
+ if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_AUTO);
+}
+
static void toggle_show_handles (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool show = gtk_toggle_action_get_active( act );
- prefs->setBool("tools.nodes", "show_handles", show);
+ prefs->setBool("/tools/nodes/show_handles", show);
ShapeEditor *shape_editor = get_current_shape_editor();
if (shape_editor) shape_editor->show_handles(show);
}
@@ -1071,7 +1078,7 @@ static void toggle_show_handles (GtkToggleAction *act, gpointer /*data*/) {
static void toggle_show_helperpath (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool show = gtk_toggle_action_get_active( act );
- prefs->setBool("tools.nodes", "show_helperpath", show);
+ prefs->setBool("/tools/nodes/show_helperpath", show);
ShapeEditor *shape_editor = get_current_shape_editor();
if (shape_editor) shape_editor->show_helperpath(show);
}
@@ -1164,7 +1171,7 @@ sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_
SPUnit const *unit = tracker->getActiveUnit();
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
- prefs->setDouble("tools.nodes", value_name, sp_units_get_pixels(adj->value, *unit));
+ prefs->setDouble(Glib::ustring("/tools/nodes/") + value_name, sp_units_get_pixels(adj->value, *unit));
}
// quit if run by the attr_changed listener
@@ -1258,7 +1265,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
g_object_set_data( holder, "tracker", tracker );
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
InkAction* inky = ink_action_new( "NodeInsertAction",
@@ -1355,6 +1362,16 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
}
{
+ InkAction* inky = ink_action_new( "NodeAutoAction",
+ _("Node Auto"),
+ _("Make selected nodes auto-smooth"),
+ "node_auto",
+ secondarySize );
+ g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_node_path_edit_auto), 0 );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
+ }
+
+ {
InkAction* inky = ink_action_new( "NodeLineAction",
_("Node Line"),
_("Make selected segments lines"),
@@ -1382,7 +1399,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_handles), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.nodes", "show_handles", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_handles", true) );
}
{
@@ -1393,7 +1410,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_helperpath), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.nodes", "show_helperpath", false) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_helperpath", false) );
}
{
@@ -1436,7 +1453,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {1, 2, 3, 5, 10, 20, 50, 100, 200, 500};
eact = create_adjustment_action( "NodeXAction",
_("X coordinate:"), _("X:"), _("X coordinate of selected node(s)"),
- "tools.nodes", "Xcoord", 0,
+ "/tools/nodes/Xcoord", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, TRUE, "altx-nodes",
-1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -1454,7 +1471,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {1, 2, 3, 5, 10, 20, 50, 100, 200, 500};
eact = create_adjustment_action( "NodeYAction",
_("Y coordinate:"), _("Y:"), _("Y coordinate of selected node(s)"),
- "tools.nodes", "Ycoord", 0,
+ "/tools/nodes/Ycoord", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, FALSE, NULL,
-1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -1608,10 +1625,10 @@ setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal );
GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, "/ui/ToolToolbar" );
- if ( prefs->getIntLimited("toolbox", "icononly", 1, 0, 1) ) {
+ if ( prefs->getBool("/toolbox/icononly", true) ) {
gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS );
}
- Inkscape::IconSize toolboxSize = prefToSize("toolbox.tools", "small");
+ Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small");
gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), (GtkIconSize)toolboxSize );
gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL);
@@ -1625,7 +1642,7 @@ setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
}
gtk_container_add( GTK_CONTAINER(toolbox), toolBar );
-// Inkscape::IconSize toolboxSize = prefToSize("toolbox.tools", "small");
+// Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small");
}
@@ -1703,9 +1720,8 @@ setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
g_free( tmp );
tmp = 0;
- Inkscape::IconSize toolboxSize = prefToSize("toolbox", "small");
- /// @todo convert to getBool
- if ( prefs->getIntLimited( "toolbox", "icononly", 1, 0, 1 ) ) {
+ Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small");
+ if ( prefs->getBool( "/toolbox/icononly", true) ) {
gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS );
}
gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast<GtkIconSize>(toolboxSize) );
@@ -1803,11 +1819,11 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal );
GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, "/ui/CommandsToolbar" );
- if ( prefs->getBool("toolbox", "icononly", true) ) {
+ if ( prefs->getBool("/toolbox/icononly", true) ) {
gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS );
}
- Inkscape::IconSize toolboxSize = prefToSize("toolbox", "small");
+ Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small");
gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), (GtkIconSize)toolboxSize );
gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_HORIZONTAL);
@@ -1870,7 +1886,7 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu
// 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)adj->value);
+ prefs->setInt("/tools/shapes/star/magnitude", (gint)adj->value);
}
// quit if run by the attr_changed listener
@@ -1908,7 +1924,7 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.star", "proportion", adj->value);
+ prefs->setDouble("/tools/shapes/star/proportion", adj->value);
}
// quit if run by the attr_changed listener
@@ -1952,7 +1968,7 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool( "tools.shapes.star", "isflatsided", flat);
+ prefs->setBool( "/tools/shapes/star/isflatsided", flat);
}
// quit if run by the attr_changed listener
@@ -1995,7 +2011,7 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.star", "rounded", (gdouble) adj->value);
+ prefs->setDouble("/tools/shapes/star/rounded", (gdouble) adj->value);
}
// quit if run by the attr_changed listener
@@ -2030,7 +2046,7 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.star", "randomized", (gdouble) adj->value);
+ prefs->setDouble("/tools/shapes/star/randomized", (gdouble) adj->value);
}
// quit if run by the attr_changed listener
@@ -2077,7 +2093,7 @@ static void star_tb_event_attr_changed(Inkscape::XML::Node *repr, gchar const *n
GtkAdjustment *adj = 0;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool isFlatSided = prefs->getBool("tools.shapes.star", "isflatsided", true);
+ bool isFlatSided = prefs->getBool("/tools/shapes/star/isflatsided", true);
if (!strcmp(name, "inkscape:randomized")) {
adj = GTK_ADJUSTMENT( gtk_object_get_data(GTK_OBJECT(tbl), "randomized") );
@@ -2223,7 +2239,7 @@ sp_toolbox_add_label(GtkWidget *tbl, gchar const *title, bool wide)
static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
EgeOutputAction* act = ege_output_action_new( "StarStateAction", _("<b>New:</b>"), "", 0 );
@@ -2235,7 +2251,7 @@ static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
{
EgeAdjustmentAction* eact = 0;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool isFlatSided = prefs->getBool("tools.shapes.star", "isflatsided", true);
+ bool isFlatSided = prefs->getBool("/tools/shapes/star/isflatsided", true);
/* Flatsided checkbox */
{
@@ -2277,7 +2293,7 @@ static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
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,
+ "/tools/shapes/star/magnitude", 3,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
3, 1024, 1, 5,
labels, values, G_N_ELEMENTS(labels),
@@ -2296,7 +2312,7 @@ static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
// 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,
+ "/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),
@@ -2317,7 +2333,7 @@ static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
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,
+ "/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),
@@ -2332,7 +2348,7 @@ static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
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,
+ "/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),
@@ -2392,7 +2408,7 @@ sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_name,
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.rect", value_name, sp_units_get_pixels(adj->value, *unit));
+ prefs->setDouble(Glib::ustring("/tools/shapes/rect/") + value_name, sp_units_get_pixels(adj->value, *unit));
}
// quit if run by the attr_changed listener
@@ -2592,7 +2608,7 @@ sp_rect_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
EgeAdjustmentAction* eact = 0;
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
EgeOutputAction* act = ege_output_action_new( "RectStateAction", _("<b>New:</b>"), "", 0 );
@@ -2614,7 +2630,7 @@ static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {1, 2, 3, 5, 10, 20, 50, 100, 200, 500};
eact = create_adjustment_action( "RectWidthAction",
_("Width"), _("W:"), _("Width of rectangle"),
- "tools.shapes.rect", "width", 0,
+ "/tools/shapes/rect/width", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, TRUE, "altx-rect",
0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -2631,7 +2647,7 @@ static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {1, 2, 3, 5, 10, 20, 50, 100, 200, 500};
eact = create_adjustment_action( "RectHeightAction",
_("Height"), _("H:"), _("Height of rectangle"),
- "tools.shapes.rect", "height", 0,
+ "/tools/shapes/rect/height", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, FALSE, NULL,
0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -2648,7 +2664,7 @@ static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {0.5, 1, 2, 3, 5, 10, 20, 50, 100};
eact = create_adjustment_action( "RadiusXAction",
_("Horizontal radius"), _("Rx:"), _("Horizontal radius of rounded corners"),
- "tools.shapes.rect", "rx", 0,
+ "/tools/shapes/rect/rx", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, FALSE, NULL,
0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -2663,7 +2679,7 @@ static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
gdouble values[] = {0.5, 1, 2, 3, 5, 10, 20, 50, 100};
eact = create_adjustment_action( "RadiusYAction",
_("Vertical radius"), _("Ry:"), _("Vertical radius of rounded corners"),
- "tools.shapes.rect", "ry", 0,
+ "/tools/shapes/rect/ry", 0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, FALSE, NULL,
0, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
labels, values, G_N_ELEMENTS(labels),
@@ -2777,16 +2793,14 @@ static void box3d_persp_tb_event_attr_changed(Inkscape::XML::Node *repr, gchar c
{
GtkWidget *tbl = GTK_WIDGET(data);
- // quit if run by the attr_changed listener
- // note: it used to work without the differently called freeze_ attributes (here and in
- // box3d_angle_value_changed()) but I now it doesn't so I'm leaving them in for now
- if (g_object_get_data(G_OBJECT(tbl), "freeze_angle")) {
+ // quit if run by the attr_changed or selection changed listener
+ if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
return;
}
// set freeze so that it can be caught in box3d_angle_z_value_changed() (to avoid calling
// sp_document_maybe_done() when the document is undo insensitive)
- g_object_set_data(G_OBJECT(tbl), "freeze_attr", GINT_TO_POINTER(TRUE));
+ g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
// TODO: Only update the appropriate part of the toolbar
// if (!strcmp(name, "inkscape:vp_z")) {
@@ -2796,7 +2810,7 @@ static void box3d_persp_tb_event_attr_changed(Inkscape::XML::Node *repr, gchar c
Persp3D *persp = persp3d_get_from_repr(repr);
persp3d_update_box_reprs(persp);
- g_object_set_data(G_OBJECT(tbl), "freeze_attr", GINT_TO_POINTER(FALSE));
+ g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(FALSE));
}
static Inkscape::XML::NodeEventVector box3d_persp_tb_repr_events =
@@ -2838,9 +2852,11 @@ box3d_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
inkscape_active_document()->current_persp3d = persp3d_get_from_repr(persp_repr);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setString("tools.shapes.3dbox", "persp", persp_repr->attribute("id"));
+ prefs->setString("/tools/shapes/3dbox/persp", persp_repr->attribute("id"));
+ g_object_set_data(tbl, "freeze", GINT_TO_POINTER(TRUE));
box3d_resync_toolbar(persp_repr, tbl);
+ g_object_set_data(tbl, "freeze", GINT_TO_POINTER(FALSE));
}
}
@@ -2850,15 +2866,13 @@ box3d_angle_value_changed(GtkAdjustment *adj, GObject *dataKludge, Proj::Axis ax
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
SPDocument *document = sp_desktop_document(desktop);
- // quit if run by the attr_changed listener
- // note: it used to work without the differently called freeze_ attributes (here and in
- // box3d_persp_tb_event_attr_changed()) but I now it doesn't so I'm leaving them in for now
- if (g_object_get_data( dataKludge, "freeze_attr" )) {
+ // quit if run by the attr_changed or selection changed listener
+ if (g_object_get_data( dataKludge, "freeze" )) {
return;
}
// in turn, prevent listener from responding
- g_object_set_data(dataKludge, "freeze_angle", GINT_TO_POINTER(TRUE));
+ g_object_set_data(dataKludge, "freeze", GINT_TO_POINTER(TRUE));
//Persp3D *persp = document->current_persp3d;
std::list<Persp3D *> sel_persps = sp_desktop_selection(desktop)->perspList();
@@ -2874,7 +2888,7 @@ box3d_angle_value_changed(GtkAdjustment *adj, GObject *dataKludge, Proj::Axis ax
// TODO: use the correct axis here, too
sp_document_maybe_done(document, "perspangle", SP_VERB_CONTEXT_3DBOX, _("3D Box: Change perspective (angle of infinite axis)"));
- g_object_set_data( dataKludge, "freeze_angle", GINT_TO_POINTER(FALSE) );
+ g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -2945,7 +2959,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
_("Angle in X direction"), _("Angle X:"),
// Translators: PL is short for 'perspective line'
_("Angle of PLs in X direction"),
- "tools.shapes.3dbox", "box3d_angle_x", 30,
+ "/tools/shapes/3dbox/box3d_angle_x", 30,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-box3d",
-360.0, 360.0, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -2973,8 +2987,8 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_object_set_data( holder, "box3d_vp_x_state_action", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_x_state_changed), box3d_angle_x );
- gtk_action_set_sensitive( GTK_ACTION(box3d_angle_x), !prefs->getBool("tools.shapes.3dbox", "vp_x_state", true) );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.shapes.3dbox", "vp_x_state", true) );
+ gtk_action_set_sensitive( GTK_ACTION(box3d_angle_x), !prefs->getBool("/tools/shapes/3dbox/vp_x_state", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/shapes/3dbox/vp_x_state", true) );
}
/* Angle Y */
@@ -2985,7 +2999,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
_("Angle in Y direction"), _("Angle Y:"),
// Translators: PL is short for 'perspective line'
_("Angle of PLs in Y direction"),
- "tools.shapes.3dbox", "box3d_angle_y", 30,
+ "/tools/shapes/3dbox/box3d_angle_y", 30,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-360.0, 360.0, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3012,8 +3026,8 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_object_set_data( holder, "box3d_vp_y_state_action", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_y_state_changed), box3d_angle_y );
- gtk_action_set_sensitive( GTK_ACTION(box3d_angle_y), !prefs->getBool("tools.shapes.3dbox", "vp_y_state", true) );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.shapes.3dbox", "vp_y_state", true) );
+ gtk_action_set_sensitive( GTK_ACTION(box3d_angle_y), !prefs->getBool("/tools/shapes/3dbox/vp_y_state", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/shapes/3dbox/vp_y_state", true) );
}
/* Angle Z */
@@ -3024,7 +3038,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
_("Angle in Z direction"), _("Angle Z:"),
// Translators: PL is short for 'perspective line'
_("Angle of PLs in Z direction"),
- "tools.shapes.3dbox", "box3d_angle_z", 30,
+ "/tools/shapes/3dbox/box3d_angle_z", 30,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-360.0, 360.0, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3051,8 +3065,8 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_object_set_data( holder, "box3d_vp_z_state_action", act );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_z_state_changed), box3d_angle_z );
- gtk_action_set_sensitive( GTK_ACTION(box3d_angle_z), !prefs->getBool("tools.shapes.3dbox", "vp_z_state", true) );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.shapes.3dbox", "vp_z_state", true) );
+ gtk_action_set_sensitive( GTK_ACTION(box3d_angle_z), !prefs->getBool("/tools/shapes/3dbox/vp_z_state", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/shapes/3dbox/vp_z_state", true) );
}
sigc::connection *connection = new sigc::connection(
@@ -3067,13 +3081,13 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
//########################
static void
-sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_name)
+sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustring const &value_name)
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.spiral", value_name, adj->value);
+ prefs->setDouble("/tools/shapes/spiral/" + value_name, adj->value);
}
// quit if run by the attr_changed listener
@@ -3084,7 +3098,7 @@ sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_nam
// in turn, prevent listener from responding
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
- gchar* namespaced_name = g_strconcat("sodipodi:", value_name, NULL);
+ gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), NULL);
bool modmade = false;
for (GSList const *items = sp_desktop_selection(desktop)->itemList();
@@ -3233,7 +3247,7 @@ sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl
static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
EgeAdjustmentAction* eact = 0;
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
EgeOutputAction* act = ege_output_action_new( "SpiralStateAction", _("<b>New:</b>"), "", 0 );
@@ -3248,7 +3262,7 @@ static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
gdouble values[] = {0.01, 0.5, 1, 2, 3, 5, 10, 20, 50, 100};
eact = create_adjustment_action( "SpiralRevolutionAction",
_("Number of turns"), _("Turns:"), _("Number of revolutions"),
- "tools.shapes.spiral", "revolution", 3.0,
+ "/tools/shapes/spiral/revolution", 3.0,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-spiral",
0.01, 1024.0, 0.1, 1.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3262,7 +3276,7 @@ static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
gdouble values[] = {0, 0.1, 0.5, 1, 1.5, 5, 20};
eact = create_adjustment_action( "SpiralExpansionAction",
_("Divergence"), _("Divergence:"), _("How much denser/sparser are outer revolutions; 1 = uniform"),
- "tools.shapes.spiral", "expansion", 1.0,
+ "/tools/shapes/spiral/expansion", 1.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 1000.0, 0.01, 1.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3276,7 +3290,7 @@ static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
gdouble values[] = {0, 0.5, 0.9};
eact = create_adjustment_action( "SpiralT0Action",
_("Inner radius"), _("Inner radius:"), _("Radius of the innermost revolution (relative to the spiral size)"),
- "tools.shapes.spiral", "t0", 0.0,
+ "/tools/shapes/spiral/t0", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 0.999, 0.01, 1.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3308,13 +3322,13 @@ static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
//########################
/* This is used in generic functions below to share large portions of code between pen and pencil tool */
-static char const *
+static Glib::ustring const
freehand_tool_name(GObject *dataKludge)
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data(dataKludge, "desktop");
return ( tools_isactive(desktop, TOOLS_FREEHAND_PEN)
- ? "tools.freehand.pen"
- : "tools.freehand.pencil" );
+ ? "/tools/freehand/pen"
+ : "/tools/freehand/pencil" );
}
static void freehand_mode_changed(EgeSelectOneAction* act, GObject* tbl)
@@ -3322,7 +3336,7 @@ static void freehand_mode_changed(EgeSelectOneAction* act, GObject* tbl)
gint mode = ege_select_one_action_get_active(act);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt(freehand_tool_name(tbl), "freehand-mode", mode);
+ prefs->setInt(freehand_tool_name(tbl) + "/freehand-mode", mode);
SPDesktop *desktop = (SPDesktop *) g_object_get_data(tbl, "desktop");
@@ -3339,8 +3353,8 @@ static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* ho
/* Freehand mode toggle buttons */
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- guint freehandMode = prefs->getInt(( tool_is_pencil ? "tools.freehand.pencil" : "tools.freehand.pen" ), "freehand-mode", 0);
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ guint freehandMode = prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/freehand-mode" : "/tools/freehand/pen/freehand-mode" ), 0);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
@@ -3398,7 +3412,7 @@ static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* ho
static void freehand_change_shape(EgeSelectOneAction* act, GObject *dataKludge) {
gint shape = ege_select_one_action_get_active( act );
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt(freehand_tool_name(dataKludge), "shape", shape);
+ prefs->setInt(freehand_tool_name(dataKludge) + "/shape", shape);
}
/**
@@ -3439,7 +3453,7 @@ freehand_add_advanced_shape_options(GtkActionGroup* mainActions, GObject* holder
_("Shape:"), ("Shape"), NULL, GTK_TREE_MODEL(model));
g_object_set( act1, "short_label", _("Shape:"), NULL );
ege_select_one_action_set_appearance( act1, "compact" );
- ege_select_one_action_set_active( act1, prefs->getInt(( tool_is_pencil ? "tools.freehand.pencil" : "tools.freehand.pen" ), "shape", 0) );
+ ege_select_one_action_set_active( act1, prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/shape" : "/tools/freehand/pen/shape" ), 0) );
g_signal_connect( G_OBJECT(act1), "changed", G_CALLBACK(freehand_change_shape), holder );
gtk_action_group_add_action( mainActions, GTK_ACTION(act1) );
g_object_set_data( holder, "shape_action", act1 );
@@ -3473,7 +3487,6 @@ sp_pencil_tb_defaults(GtkWidget */*widget*/, GtkObject *obj)
static void
sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tbl)
{
-
// quit if run by the attr_changed listener
if (g_object_get_data( tbl, "freeze" )) {
return;
@@ -3481,45 +3494,36 @@ sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tbl)
// in turn, prevent listener from responding
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
- prefs->setDouble("tools.freehand.pencil", "tolerance", adj->value);
+ prefs->setDouble("/tools/freehand/pencil/tolerance", adj->value);
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
-
}
-
-
-static void
-sp_pencil_tb_tolerance_value_changed_external(Inkscape::XML::Node */*repr*/,
- const gchar */*key*/,
- const gchar */*oldval*/,
- const gchar */*newval*/,
- bool /*is_interactive*/,
- void * data)
-{
- GObject* tbl = G_OBJECT(data);
- if (g_object_get_data( tbl, "freeze" )) {
- return;
+class PencilToleranceObserver : public Inkscape::Preferences::Observer {
+public:
+ PencilToleranceObserver(Glib::ustring const &path, GObject *x) : Observer(path), _obj(x)
+ {
+ g_object_set_data(_obj, "prefobserver", this);
}
+ virtual ~PencilToleranceObserver() {
+ if (g_object_get_data(_obj, "prefobserver") == this) {
+ g_object_set_data(_obj, "prefobserver", NULL);
+ }
+ }
+ virtual void notify(Inkscape::Preferences::Entry const &val) {
+ GObject* tbl = _obj;
+ if (g_object_get_data( tbl, "freeze" )) {
+ return;
+ }
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
-
- GtkAdjustment * adj = (GtkAdjustment*)g_object_get_data(tbl,
- "tolerance");
-
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- double v = prefs->getDouble("tools.freehand.pencil", "tolerance", adj->value);
- gtk_adjustment_set_value(adj, v);
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
-
-}
+ GtkAdjustment * adj = (GtkAdjustment*)g_object_get_data(tbl, "tolerance");
-static Inkscape::XML::NodeEventVector pencil_node_events =
-{
- NULL,
- NULL,
- sp_pencil_tb_tolerance_value_changed_external,
- NULL,
- NULL,
+ double v = val.getDouble(adj->value);
+ gtk_adjustment_set_value(adj, v);
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+ }
+private:
+ GObject *_obj;
};
@@ -3536,7 +3540,7 @@ static void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
eact = create_adjustment_action( "PencilToleranceAction",
_("Smoothing:"), _("Smoothing: "),
_("How much smoothing (simplifying) is applied to the line"),
- "tools.freehand.pencil", "tolerance",
+ "/tools/freehand/pencil/tolerance",
3.0,
GTK_WIDGET(desktop->canvas), NULL,
holder, TRUE, "altx-pencil",
@@ -3547,11 +3551,8 @@ static void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
- Inkscape::XML::Node *repr = inkscape_get_repr(INKSCAPE,
- "tools.freehand.pencil");
- repr->addListener(&pencil_node_events, G_OBJECT(holder));
- g_object_set_data(G_OBJECT(holder), "repr", repr);
-
+ PencilToleranceObserver *obs =
+ new PencilToleranceObserver("/tools/freehand/pencil/tolerance", G_OBJECT(holder));
}
/* advanced shape options */
@@ -3580,26 +3581,26 @@ static void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
static void sp_tweak_width_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.tweak", "width", adj->value * 0.01 );
+ prefs->setDouble( "/tools/tweak/width", adj->value * 0.01 );
}
static void sp_tweak_force_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.tweak", "force", adj->value * 0.01 );
+ prefs->setDouble( "/tools/tweak/force", adj->value * 0.01 );
}
static void sp_tweak_pressure_state_changed( GtkToggleAction *act, gpointer /*data*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.tweak", "usepressure", gtk_toggle_action_get_active(act));
+ prefs->setBool("/tools/tweak/usepressure", gtk_toggle_action_get_active(act));
}
static void sp_tweak_mode_changed( EgeSelectOneAction *act, GObject *tbl )
{
int mode = ege_select_one_action_get_active( act );
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("tools.tweak", "mode", mode);
+ prefs->setInt("/tools/tweak/mode", mode);
GtkAction *doh = GTK_ACTION(g_object_get_data( tbl, "tweak_doh"));
GtkAction *dos = GTK_ACTION(g_object_get_data( tbl, "tweak_dos"));
@@ -3627,29 +3628,29 @@ static void sp_tweak_mode_changed( EgeSelectOneAction *act, GObject *tbl )
static void sp_tweak_fidelity_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.tweak", "fidelity", adj->value * 0.01 );
+ prefs->setDouble( "/tools/tweak/fidelity", adj->value * 0.01 );
}
static void tweak_toggle_doh (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.tweak", "doh", gtk_toggle_action_get_active(act));
+ prefs->setBool("/tools/tweak/doh", gtk_toggle_action_get_active(act));
}
static void tweak_toggle_dos (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.tweak", "dos", gtk_toggle_action_get_active(act));
+ prefs->setBool("/tools/tweak/dos", gtk_toggle_action_get_active(act));
}
static void tweak_toggle_dol (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.tweak", "dol", gtk_toggle_action_get_active(act));
+ prefs->setBool("/tools/tweak/dol", gtk_toggle_action_get_active(act));
}
static void tweak_toggle_doo (GtkToggleAction *act, gpointer /*data*/) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.tweak", "doo", gtk_toggle_action_get_active(act));
+ prefs->setBool("/tools/tweak/doo", gtk_toggle_action_get_active(act));
}
static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
{
@@ -3658,7 +3659,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
gdouble values[] = {1, 3, 5, 10, 15, 20, 30, 50, 75, 100};
EgeAdjustmentAction *eact = create_adjustment_action( "TweakWidthAction",
_("Width"), _("Width:"), _("The width of the tweak area (relative to the visible canvas area)"),
- "tools.tweak", "width", 15,
+ "/tools/tweak/width", 15,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-tweak",
1, 100, 1.0, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3675,7 +3676,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
gdouble values[] = {1, 5, 10, 20, 30, 50, 70, 100};
EgeAdjustmentAction *eact = create_adjustment_action( "TweakForceAction",
_("Force"), _("Force:"), _("The force of the tweak action"),
- "tools.tweak", "force", 20,
+ "/tools/tweak/force", 20,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "tweak-force",
1, 100, 1.0, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3794,14 +3795,14 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
ege_select_one_action_set_icon_size( act, secondarySize );
ege_select_one_action_set_tooltip_column( act, 1 );
- gint mode = prefs->getInt("tools.tweak", "mode", 0);
+ gint mode = prefs->getInt("/tools/tweak/mode", 0);
ege_select_one_action_set_active( act, mode );
g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_tweak_mode_changed), holder );
g_object_set_data( G_OBJECT(holder), "tweak_tool_mode", act);
}
- guint mode = prefs->getInt("tools.tweak", "mode", 0);
+ guint mode = prefs->getInt("/tools/tweak/mode", 0);
{
EgeOutputAction* act = ege_output_action_new( "TweakChannelsLabel", _("Channels:"), "", 0 );
@@ -3822,7 +3823,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
g_object_set( act, "short_label", _("H"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_doh), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.tweak", "doh", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/doh", true) );
if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
g_object_set_data( holder, "tweak_doh", act);
@@ -3837,7 +3838,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
g_object_set( act, "short_label", _("S"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_dos), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.tweak", "dos", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/dos", true) );
if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
g_object_set_data( holder, "tweak_dos", act );
@@ -3852,7 +3853,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
g_object_set( act, "short_label", _("L"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_dol), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.tweak", "dol", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/dol", true) );
if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
g_object_set_data( holder, "tweak_dol", act );
@@ -3867,7 +3868,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
g_object_set( act, "short_label", _("O"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(tweak_toggle_doo), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.tweak", "doo", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/doo", true) );
if (mode != TWEAK_MODE_COLORPAINT && mode != TWEAK_MODE_COLORJITTER)
gtk_action_set_sensitive (GTK_ACTION(act), FALSE);
g_object_set_data( holder, "tweak_doo", act );
@@ -3879,7 +3880,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
EgeAdjustmentAction *eact = create_adjustment_action( "TweakFidelityAction",
_("Fidelity"), _("Fidelity:"),
_("Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"),
- "tools.tweak", "fidelity", 50,
+ "/tools/tweak/fidelity", 50,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "tweak-fidelity",
1, 100, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -3901,7 +3902,7 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_tweak_pressure_state_changed), NULL);
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.tweak", "usepressure", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/usepressure", true) );
}
}
@@ -3918,29 +3919,26 @@ static void update_presets_list (GObject *tbl)
EgeSelectOneAction *sel = static_cast<EgeSelectOneAction *>(g_object_get_data(tbl, "profile_selector"));
if (!sel) {
- ege_select_one_action_set_active(sel, 0);
+ // WTF!? This will cause a segfault if ever reached
+ //ege_select_one_action_set_active(sel, 0);
return;
}
- int total_prefs = prefs->childCount("tools.calligraphic.preset");
-
- for (int i = 0; i < total_prefs; ++i) {
- Glib::ustring preset_path = prefs->getNthChild("tools.calligraphic.preset", i);
- /// @todo Remove the use of _getNode()
- Inkscape::XML::Node *preset_repr = prefs->_getNode(preset_path);
+ std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ int ege_index = 1;
+ for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i, ++ege_index) {
bool match = true;
+
+ std::vector<Inkscape::Preferences::Entry> preset = prefs->getAllEntries(*i);
+ for (std::vector<Inkscape::Preferences::Entry>::iterator j = preset.begin(); j != preset.end(); ++j) {
+ Glib::ustring entry_name = j->getEntryName();
+ if (entry_name == "id" || entry_name == "name") continue;
- for ( Inkscape::Util::List<Inkscape::XML::AttributeRecord const> iter = preset_repr->attributeList();
- iter;
- ++iter ) {
- const gchar *attr_name = g_quark_to_string(iter->key);
- if (!strcmp(attr_name, "id") || !strcmp(attr_name, "name"))
- continue;
- void *widget = g_object_get_data(tbl, attr_name);
+ void *widget = g_object_get_data(tbl, entry_name.data());
if (widget) {
if (GTK_IS_ADJUSTMENT(widget)) {
- double v = prefs->getDouble(preset_path, attr_name, 0); // fixme: no min/max checks here, add?
+ double v = j->getDouble();
GtkAdjustment* adj = static_cast<GtkAdjustment *>(widget);
//std::cout << "compared adj " << attr_name << gtk_adjustment_get_value(adj) << " to " << v << "\n";
if (fabs(gtk_adjustment_get_value(adj) - v) > 1e-6) {
@@ -3948,7 +3946,7 @@ static void update_presets_list (GObject *tbl)
break;
}
} else if (GTK_IS_TOGGLE_ACTION(widget)) {
- bool v = prefs->getBool(preset_path, attr_name);
+ bool v = j->getBool();
GtkToggleAction* toggle = static_cast<GtkToggleAction *>(widget);
//std::cout << "compared toggle " << attr_name << gtk_toggle_action_get_active(toggle) << " to " << v << "\n";
if ( static_cast<bool>(gtk_toggle_action_get_active(toggle)) != v ) {
@@ -3957,13 +3955,13 @@ static void update_presets_list (GObject *tbl)
}
}
}
- }
-
- if (match) {
+ }
+
+ if (match) {
// newly added item is at the same index as the
// save command, so we need to change twice for it to take effect
ege_select_one_action_set_active(sel, 0);
- ege_select_one_action_set_active(sel, i + 1); // one-based index
+ ege_select_one_action_set_active(sel, ege_index); // one-based index
return;
}
}
@@ -3975,70 +3973,70 @@ static void update_presets_list (GObject *tbl)
static void sp_ddc_mass_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "mass", adj->value * 0.01 );
+ prefs->setDouble( "/tools/calligraphic/mass", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_ddc_wiggle_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "wiggle", adj->value * 0.01 );
+ prefs->setDouble( "/tools/calligraphic/wiggle", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_ddc_angle_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "angle", adj->value );
+ prefs->setDouble( "/tools/calligraphic/angle", adj->value );
update_presets_list(tbl);
}
static void sp_ddc_width_value_changed( GtkAdjustment *adj, GObject *tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "width", adj->value * 0.01 );
+ prefs->setDouble( "/tools/calligraphic/width", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_ddc_velthin_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.calligraphic", "thinning", adj->value * 0.01 );
+ prefs->setDouble("/tools/calligraphic/thinning", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_ddc_flatness_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "flatness", adj->value * 0.01);
+ prefs->setDouble( "/tools/calligraphic/flatness", adj->value * 0.01);
update_presets_list(tbl);
}
static void sp_ddc_tremor_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "tremor", adj->value * 0.01 );
+ prefs->setDouble( "/tools/calligraphic/tremor", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_ddc_cap_rounding_value_changed( GtkAdjustment *adj, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.calligraphic", "cap_rounding", adj->value );
+ prefs->setDouble( "/tools/calligraphic/cap_rounding", adj->value );
update_presets_list(tbl);
}
static void sp_ddc_pressure_state_changed( GtkToggleAction *act, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.calligraphic", "usepressure", gtk_toggle_action_get_active( act ));
+ prefs->setBool("/tools/calligraphic/usepressure", gtk_toggle_action_get_active( act ));
update_presets_list(tbl);
}
static void sp_ddc_trace_background_changed( GtkToggleAction *act, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.calligraphic", "tracebackground", gtk_toggle_action_get_active( act ));
+ prefs->setBool("/tools/calligraphic/tracebackground", gtk_toggle_action_get_active( act ));
update_presets_list(tbl);
}
@@ -4046,7 +4044,7 @@ static void sp_ddc_tilt_state_changed( GtkToggleAction *act, GObject* tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
GtkAction * calligraphy_angle = static_cast<GtkAction *> (g_object_get_data(tbl,"angle_action"));
- prefs->setBool("tools.calligraphic", "usetilt", gtk_toggle_action_get_active( act ));
+ prefs->setBool("/tools/calligraphic/usetilt", gtk_toggle_action_get_active( act ));
update_presets_list(tbl);
if (calligraphy_angle )
gtk_action_set_sensitive( calligraphy_angle, !gtk_toggle_action_get_active( act ) );
@@ -4081,18 +4079,17 @@ static void sp_dcc_build_presets_list(GObject *tbl)
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter, 0, _("No preset"), 1, 0, -1 );
}
-
- /// @todo Use public Preferences API instead of node manipulation
+
+ // iterate over all presets to populate the list
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- Inkscape::XML::Node *repr = prefs->_getNode("tools.calligraphic.preset", true);
- Inkscape::XML::Node *child_repr = repr->firstChild();
+ std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
int ii=1;
- while (child_repr) {
- GtkTreeIter iter;
- char *preset_name = (char *) child_repr->attribute("name");
+
+ for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i) {
+ GtkTreeIter iter;
+ Glib::ustring preset_name = prefs->getString(*i + "/name");
gtk_list_store_append( model, &iter );
- gtk_list_store_set( model, &iter, 0, preset_name, 1, ii++, -1 );
- child_repr = child_repr->next();
+ gtk_list_store_set( model, &iter, 0, preset_name.data(), 1, ii++, -1 );
}
{
@@ -4131,29 +4128,28 @@ static void sp_dcc_save_profile (GtkWidget */*widget*/, GObject *tbl)
}
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(TRUE));
-
+
+ // If there's a preset with the given name, find it and set save_path appropriately
+ std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ int total_presets = presets.size();
int new_index = -1;
- Glib::ustring pref_path;
- int total_prefs = prefs->childCount("tools.calligraphic.preset");
-
- for (int i = 0; i < total_prefs; ++i) {
- Glib::ustring path = prefs->getNthChild("tools.calligraphic.preset", i);
- Glib::ustring name = prefs->getString(path, "name");
- if (!name.empty() && ( profile_name == name )) {
- // we already have preset with this name, replace its values
- new_index = i;
- pref_path = path;
+ Glib::ustring save_path; // profile pref path without a trailing slash
+
+ int temp_index = 0;
+ for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i, ++temp_index) {
+ Glib::ustring name = prefs->getString(*i + "/name");
+ if (!name.empty() && profile_name == name) {
+ new_index = temp_index;
+ save_path = *i;
break;
- }
+ }
}
if (new_index == -1) {
// no preset with this name, create
- /// @todo This is wrong, the name should be encoded in the key
- /// to allow deletion of presets
- new_index = total_prefs + 1;
- gchar *profile_id = g_strdup_printf(".dcc%d", new_index);
- pref_path = Glib::ustring("tools.calligraphic.preset") + profile_id;
+ new_index = total_presets + 1;
+ gchar *profile_id = g_strdup_printf("/dcc%d", new_index);
+ save_path = Glib::ustring("/tools/calligraphic/preset") + profile_id;
g_free(profile_id);
}
@@ -4163,22 +4159,20 @@ static void sp_dcc_save_profile (GtkWidget */*widget*/, GObject *tbl)
if (widget) {
if (GTK_IS_ADJUSTMENT(widget)) {
GtkAdjustment* adj = static_cast<GtkAdjustment *>(widget);
- double v = gtk_adjustment_get_value(adj);
- prefs->setDouble(pref_path, widget_name, v);
+ prefs->setDouble(save_path + "/" + widget_name, gtk_adjustment_get_value(adj));
//std::cout << "wrote adj " << widget_name << ": " << v << "\n";
} else if (GTK_IS_TOGGLE_ACTION(widget)) {
GtkToggleAction* toggle = static_cast<GtkToggleAction *>(widget);
- bool v = gtk_toggle_action_get_active(toggle);
- prefs->setBool(pref_path, widget_name, v);
+ prefs->setBool(save_path + "/" + widget_name, gtk_toggle_action_get_active(toggle));
//std::cout << "wrote tog " << widget_name << ": " << v << "\n";
} else {
- g_warning("Unknown widget type for preset: %s\n", widget_name);
+ g_warning("Unknown widget type for preset: %s\n", widget_name);
}
} else {
g_warning("Bad key when writing preset: %s\n", widget_name);
}
}
- prefs->setString(pref_path, "name", profile_name);
+ prefs->setString(save_path + "/name", profile_name);
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
sp_dcc_build_presets_list (tbl);
@@ -4190,6 +4184,11 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gint preset_index = ege_select_one_action_get_active( act );
+ // This is necessary because EgeSelectOneAction spams us with GObject "changed" signal calls
+ // even when the preset is not changed. It would be good to replace it with something more
+ // modern. Index 0 means "No preset", so we don't do anything.
+ if (preset_index == 0) return;
+
gint save_presets_index = GPOINTER_TO_INT(g_object_get_data(tbl, "save_presets_index"));
if (preset_index == save_presets_index) {
@@ -4202,44 +4201,37 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl) {
return;
// preset_index is one-based so we subtract 1
- Glib::ustring preset_path = prefs->getNthChild("tools.calligraphic.preset", preset_index - 1);
+ std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ Glib::ustring preset_path = presets.at(preset_index - 1);
if (!preset_path.empty()) {
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(TRUE)); //temporarily block the selector so no one will updadte it while we're reading it
-
- /// @todo Remove the use of _getNode() in this fragment, modify
- /// the public interface of Preferences if necessary
- Inkscape::XML::Node *preset_repr = prefs->_getNode(preset_path);
+
+ std::vector<Inkscape::Preferences::Entry> preset = prefs->getAllEntries(preset_path);
// Shouldn't this be std::map?
- for ( Inkscape::Util::List<Inkscape::XML::AttributeRecord const> iter = preset_repr->attributeList();
- iter;
- ++iter ) {
- const gchar *attr_name = g_quark_to_string(iter->key);
- if (!strcmp(attr_name, "id") || !strcmp(attr_name, "name"))
- continue;
- void *widget = g_object_get_data(tbl, attr_name);
+ for (std::vector<Inkscape::Preferences::Entry>::iterator i = preset.begin(); i != preset.end(); ++i) {
+ Glib::ustring entry_name = i->getEntryName();
+ if (entry_name == "id" || entry_name == "name") continue;
+ void *widget = g_object_get_data(tbl, entry_name.data());
if (widget) {
if (GTK_IS_ADJUSTMENT(widget)) {
- double v = prefs->getDouble(preset_path, attr_name, 0); // fixme: no min/max checks here, add?
GtkAdjustment* adj = static_cast<GtkAdjustment *>(widget);
- gtk_adjustment_set_value(adj, v);
+ gtk_adjustment_set_value(adj, i->getDouble());
//std::cout << "set adj " << attr_name << " to " << v << "\n";
} else if (GTK_IS_TOGGLE_ACTION(widget)) {
- int v = prefs->getInt(preset_path, attr_name, 0); // fixme: no min/max checks here, add?
GtkToggleAction* toggle = static_cast<GtkToggleAction *>(widget);
- gtk_toggle_action_set_active(toggle, v);
+ gtk_toggle_action_set_active(toggle, i->getBool());
//std::cout << "set toggle " << attr_name << " to " << v << "\n";
} else {
- g_warning("Unknown widget type for preset: %s\n", attr_name);
+ g_warning("Unknown widget type for preset: %s\n", entry_name.data());
}
} else {
- g_warning("Bad key found in a preset record: %s\n", attr_name);
+ g_warning("Bad key found in a preset record: %s\n", entry_name.data());
}
}
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
}
-
}
@@ -4258,7 +4250,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction *eact = create_adjustment_action( "CalligraphyWidthAction",
_("Pen Width"), _("Width:"),
_("The width of the calligraphic pen (relative to the visible canvas area)"),
- "tools.calligraphic", "width", 15,
+ "/tools/calligraphic/width", 15,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-calligraphy",
1, 100, 1.0, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4275,7 +4267,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "ThinningAction",
_("Stroke Thinning"), _("Thinning:"),
_("How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"),
- "tools.calligraphic", "thinning", 10,
+ "/tools/calligraphic/thinning", 10,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
-100, 100, 1, 0.1,
labels, values, G_N_ELEMENTS(labels),
@@ -4291,7 +4283,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "AngleAction",
_("Pen Angle"), _("Angle:"),
_("The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"),
- "tools.calligraphic", "angle", 30,
+ "/tools/calligraphic/angle", 30,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "calligraphy-angle",
-90.0, 90.0, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4309,7 +4301,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "FixationAction",
_("Fixation"), _("Fixation:"),
_("Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"),
- "tools.calligraphic", "flatness", 90,
+ "/tools/calligraphic/flatness", 90,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 100, 1.0, 10.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4326,7 +4318,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "CapRoundingAction",
_("Cap rounding"), _("Caps:"),
_("Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"),
- "tools.calligraphic", "cap_rounding", 0.0,
+ "/tools/calligraphic/cap_rounding", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 5.0, 0.01, 0.1,
labels, values, G_N_ELEMENTS(labels),
@@ -4342,7 +4334,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "TremorAction",
_("Stroke Tremor"), _("Tremor:"),
_("Increase to make strokes rugged and trembling"),
- "tools.calligraphic", "tremor", 0.0,
+ "/tools/calligraphic/tremor", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 100, 1, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4360,7 +4352,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "WiggleAction",
_("Pen Wiggle"), _("Wiggle:"),
_("Increase to make the pen waver and wiggle"),
- "tools.calligraphic", "wiggle", 0.0,
+ "/tools/calligraphic/wiggle", 0.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 100, 1, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4377,7 +4369,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeAdjustmentAction* eact = create_adjustment_action( "MassAction",
_("Pen Mass"), _("Mass:"),
_("Increase to make the pen drag behind, as if slowed by inertia"),
- "tools.calligraphic", "mass", 2.0,
+ "/tools/calligraphic/mass", 2.0,
GTK_WIDGET(desktop->canvas), NULL, holder, FALSE, NULL,
0.0, 100, 1, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -4397,7 +4389,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_trace_background_changed), holder);
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.calligraphic", "tracebackground", false) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/calligraphic/tracebackground", false) );
g_object_set_data( holder, "tracebackground", act );
}
@@ -4410,7 +4402,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_pressure_state_changed), holder);
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.calligraphic", "usepressure", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/calligraphic/usepressure", true) );
g_object_set_data( holder, "usepressure", act );
}
@@ -4423,8 +4415,8 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_ddc_tilt_state_changed), holder );
- gtk_action_set_sensitive( GTK_ACTION(calligraphy_angle), !prefs->getBool("tools.calligraphic", "usetilt", true) );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("tools.calligraphic", "usetilt", true) );
+ gtk_action_set_sensitive( GTK_ACTION(calligraphy_angle), !prefs->getBool("/tools/calligraphic/usetilt", true) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/calligraphic/usetilt", true) );
g_object_set_data( holder, "usetilt", act );
}
@@ -4473,7 +4465,7 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.shapes.arc", value_name, (adj->value * M_PI)/ 180);
+ prefs->setDouble(Glib::ustring("/tools/shapes/arc") + value_name, (adj->value * M_PI)/ 180);
}
// quit if run by the attr_changed listener
@@ -4542,7 +4534,7 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl )
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.shapes.arc", "open", ege_select_one_action_get_active(act) != 0);
+ prefs->setBool("/tools/shapes/arc/open", ege_select_one_action_get_active(act) != 0);
}
// quit if run by the attr_changed listener
@@ -4696,7 +4688,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
EgeAdjustmentAction* eact = 0;
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
@@ -4711,7 +4703,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
eact = create_adjustment_action( "ArcStartAction",
_("Start"), _("Start:"),
_("The angle (in degrees) from the horizontal to the arc's start point"),
- "tools.shapes.arc", "start", 0.0,
+ "/tools/shapes/arc/start", 0.0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, TRUE, "altx-arc",
-360.0, 360.0, 1.0, 10.0,
0, 0, 0,
@@ -4724,7 +4716,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
eact = create_adjustment_action( "ArcEndAction",
_("End"), _("End:"),
_("The angle (in degrees) from the horizontal to the arc's end point"),
- "tools.shapes.arc", "end", 0.0,
+ "/tools/shapes/arc/end", 0.0,
GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, FALSE, NULL,
-360.0, 360.0, 1.0, 10.0,
0, 0, 0,
@@ -4762,7 +4754,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
ege_select_one_action_set_icon_size( act, secondarySize );
ege_select_one_action_set_tooltip_column( act, 1 );
- bool isClosed = !prefs->getBool("tools.shapes.arc", "open", false);
+ bool isClosed = !prefs->getBool("/tools/shapes/arc/open", false);
ege_select_one_action_set_active( act, isClosed ? 0 : 1 );
g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_arctb_open_state_changed), holder );
}
@@ -4807,7 +4799,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
static void toggle_dropper_pick_alpha( GtkToggleAction* act, gpointer tbl ) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt( "tools.dropper", "pick", gtk_toggle_action_get_active( act ) );
+ prefs->setInt( "/tools/dropper/pick", gtk_toggle_action_get_active( act ) );
GtkAction* set_action = GTK_ACTION( g_object_get_data(G_OBJECT(tbl), "set_action") );
if ( set_action ) {
if ( gtk_toggle_action_get_active( act ) ) {
@@ -4822,7 +4814,7 @@ static void toggle_dropper_pick_alpha( GtkToggleAction* act, gpointer tbl ) {
static void toggle_dropper_set_alpha( GtkToggleAction* act, gpointer tbl ) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt( "tools.dropper", "setalpha", gtk_toggle_action_get_active( act ) ? 1 : 0 );
+ prefs->setBool( "/tools/dropper/setalpha", gtk_toggle_action_get_active( act ) );
spinbutton_defocus(GTK_OBJECT(tbl));
}
@@ -4837,7 +4829,7 @@ static void toggle_dropper_set_alpha( GtkToggleAction* act, gpointer tbl ) {
static void sp_dropper_toolbox_prep(SPDesktop */*desktop*/, GtkActionGroup* mainActions, GObject* holder)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- gint pickAlpha = prefs->getInt( "tools.dropper", "pick", 1 );
+ gint pickAlpha = prefs->getInt( "/tools/dropper/pick", 1 );
{
EgeOutputAction* act = ege_output_action_new( "DropperOpacityAction", _("Opacity:"), "", 0 );
@@ -4867,7 +4859,7 @@ static void sp_dropper_toolbox_prep(SPDesktop */*desktop*/, GtkActionGroup* main
g_object_set( act, "short_label", _("Assign"), NULL );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_object_set_data( holder, "set_action", act );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.dropper", "setalpha", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/dropper/setalpha", true) );
// make sure it's disabled if we're not picking alpha
gtk_action_set_sensitive( GTK_ACTION(act), pickAlpha );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_dropper_set_alpha), holder );
@@ -4913,7 +4905,7 @@ static void sp_lpetool_mode_changed(EgeSelectOneAction *act, GObject *tbl)
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt( "tools.lpetool", "mode", mode );
+ prefs->setInt( "/tools/lpetool/mode", mode );
}
g_object_set_data(tbl, "freeze", GINT_TO_POINTER(FALSE));
@@ -4971,7 +4963,7 @@ lpetool_toggle_show_bbox (GtkToggleAction *act, gpointer data) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool show = gtk_toggle_action_get_active( act );
- prefs->setInt("tools.lpetool", "show_bbox", show ? 1 : 0);
+ prefs->setBool("/tools/lpetool/show_bbox", show);
if (tools_isactive(desktop, TOOLS_LPETOOL)) {
SPLPEToolContext *lc = SP_LPETOOL_CONTEXT(desktop->event_context);
@@ -4990,7 +4982,7 @@ lpetool_toggle_show_measuring_info (GtkToggleAction *act, GObject *tbl) {
if (tools_isactive(desktop, TOOLS_LPETOOL)) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool show = gtk_toggle_action_get_active( act );
- prefs->setInt("tools.lpetool", "show_measuring_info", show ? 1 : 0);
+ prefs->setBool("/tools/lpetool/show_measuring_info", show);
lpetool_show_measuring_info(lc, show);
gtk_action_set_sensitive(GTK_ACTION(unitact), show);
}
@@ -5000,7 +4992,7 @@ static void lpetool_unit_changed(GtkAction* /*act*/, GObject* tbl) {
UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(tbl, "tracker"));
SPUnit const *unit = tracker->getActiveUnit();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("tools.lpetool", "unitid", unit->unit_id);
+ prefs->setInt("/tools/lpetool/unitid", unit->unit_id);
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
if (SP_IS_LPETOOL_CONTEXT(desktop->event_context)) {
@@ -5026,10 +5018,10 @@ lpetool_toggle_set_bbox (GtkToggleAction *act, gpointer data) {
// TODO: should we provide a way to store points in prefs?
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.lpetool", "bbox_upperleftx", A[Geom::X]);
- prefs->setDouble("tools.lpetool", "bbox_upperlefty", A[Geom::Y]);
- prefs->setDouble("tools.lpetool", "bbox_lowerrightx", B[Geom::X]);
- prefs->setDouble("tools.lpetool", "bbox_lowerrighty", B[Geom::Y]);
+ prefs->setDouble("/tools/lpetool/bbox_upperleftx", A[Geom::X]);
+ prefs->setDouble("/tools/lpetool/bbox_upperlefty", A[Geom::Y]);
+ prefs->setDouble("/tools/lpetool/bbox_lowerrightx", B[Geom::X]);
+ prefs->setDouble("/tools/lpetool/bbox_lowerrighty", B[Geom::Y]);
lpetool_context_reset_limiting_bbox(SP_LPETOOL_CONTEXT(desktop->event_context));
}
@@ -5103,7 +5095,7 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
SPUnit const *unit = tracker->getActiveUnit();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("tools.lpetool", "unitid", unit->unit_id);
+ prefs->setInt("/tools/lpetool/unitid", unit->unit_id);
/** Automatically create a list of LPEs that get added to the toolbar **/
{
@@ -5141,7 +5133,7 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
ege_select_one_action_set_icon_column( act, 2 );
ege_select_one_action_set_tooltip_column( act, 1 );
- gint lpeToolMode = prefs->getInt("tools.lpetool", "mode", 0);
+ gint lpeToolMode = prefs->getInt("/tools/lpetool/mode", 0);
ege_select_one_action_set_active( act, lpeToolMode );
g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_lpetool_mode_changed), holder );
}
@@ -5155,7 +5147,7 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_bbox), desktop );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.lpetool", "show_bbox", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_bbox", true ) );
}
/* Set limiting bounding box to bbox of current selection */
@@ -5196,7 +5188,7 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_measuring_info), holder );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getInt( "tools.lpetool", "show_measuring_info", 1 ) );
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_measuring_info", true ) );
}
// add the units menu
@@ -5205,7 +5197,7 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
gtk_action_group_add_action( mainActions, act );
g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(lpetool_unit_changed), (GObject*)holder );
g_object_set_data(holder, "lpetool_units_action", act);
- gtk_action_set_sensitive(act, prefs->getInt("tools.lpetool", "show_measuring_info", 1));
+ gtk_action_set_sensitive(act, prefs->getBool("/tools/lpetool/show_measuring_info", true));
}
/* Open LPE dialog (to adapt parameters numerically) */
@@ -5241,17 +5233,17 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActi
static void sp_erc_width_value_changed( GtkAdjustment *adj, GObject *tbl )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble( "tools.eraser", "width", adj->value * 0.01 );
+ prefs->setDouble( "/tools/eraser/width", adj->value * 0.01 );
update_presets_list(tbl);
}
static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl )
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
- gint eraserMode = (ege_select_one_action_get_active( act ) != 0) ? 1 : 0;
+ bool eraserMode = ege_select_one_action_get_active( act ) != 0;
if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt( "tools.eraser", "mode", eraserMode );
+ prefs->setBool( "/tools/eraser/mode", eraserMode );
}
// only take action if run by the attr_changed listener
@@ -5277,7 +5269,7 @@ static void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
EgeAdjustmentAction *eact = create_adjustment_action( "EraserWidthAction",
_("Pen Width"), _("Width:"),
_("The width of the eraser pen (relative to the visible canvas area)"),
- "tools.eraser", "width", 15,
+ "/tools/eraser/width", 15,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-eraser",
1, 100, 1.0, 0.0,
labels, values, G_N_ELEMENTS(labels),
@@ -5317,7 +5309,7 @@ static void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
/// @todo Convert to boolean?
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- gint eraserMode = (prefs->getInt("tools.eraser", "mode", 0) != 0) ? 1 : 0;
+ gint eraserMode = prefs->getBool("/tools/eraser/mode") ? 1 : 0;
ege_select_one_action_set_active( act, eraserMode );
g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_erasertb_mode_changed), holder );
}
@@ -5385,20 +5377,15 @@ sp_text_toolbox_selection_changed (Inkscape::Selection */*selection*/, GObject *
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
if (result_family == QUERY_STYLE_NOTHING || result_style == QUERY_STYLE_NOTHING || result_numbers == QUERY_STYLE_NOTHING) {
// there are no texts in selection, read from prefs
-
- Inkscape::XML::Node *repr = inkscape_get_repr (INKSCAPE, "tools.text");
- if (repr) {
- sp_style_read_from_repr (query, repr);
- if (g_object_get_data(tbl, "text_style_from_prefs")) {
- // do not reset the toolbar style from prefs if we already did it last time
- sp_style_unref(query);
- return;
- }
- g_object_set_data(tbl, "text_style_from_prefs", GINT_TO_POINTER(TRUE));
- } else {
+
+ sp_style_read_from_prefs(query, "/tools/text");
+
+ if (g_object_get_data(tbl, "text_style_from_prefs")) {
+ // do not reset the toolbar style from prefs if we already did it last time
sp_style_unref(query);
return;
}
+ g_object_set_data(tbl, "text_style_from_prefs", GINT_TO_POINTER(TRUE));
} else {
g_object_set_data(tbl, "text_style_from_prefs", GINT_TO_POINTER(FALSE));
}
@@ -5635,7 +5622,8 @@ sp_text_toolbox_family_changed (GtkTreeSelection *selection,
// If querying returned nothing, set the default style of the tool (for new texts)
if (result_fontspec == QUERY_STYLE_NOTHING)
{
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setStyle("/tools/text/style", css);
sp_text_edit_dialog_default_set_insensitive (); //FIXME: Replace trough a verb
}
else
@@ -5727,7 +5715,8 @@ sp_text_toolbox_anchoring_toggled (GtkRadioButton *button,
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
if (result_numbers == QUERY_STYLE_NOTHING)
{
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setStyle("/tools/text/style", css);
}
sp_style_unref(query);
@@ -5805,7 +5794,8 @@ sp_text_toolbox_style_toggled (GtkToggleButton *button,
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
if (result_fontspec == QUERY_STYLE_NOTHING)
{
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setStyle("/tools/text/style", css);
}
sp_style_unref(query);
@@ -5854,7 +5844,8 @@ sp_text_toolbox_orientation_toggled (GtkRadioButton *button,
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
if (result_numbers == QUERY_STYLE_NOTHING)
{
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setStyle("/tools/text/style", css);
}
sp_desktop_set_style (desktop, css, true, true);
@@ -5954,7 +5945,8 @@ sp_text_toolbox_size_changed (GtkComboBox *cbox,
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
if (result_numbers == QUERY_STYLE_NOTHING)
{
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setStyle("/tools/text/style", css);
}
sp_style_unref(query);
@@ -6117,7 +6109,7 @@ GtkWidget*
sp_text_toolbox_new (SPDesktop *desktop)
{
GtkToolbar *tbl = GTK_TOOLBAR(gtk_toolbar_new());
- GtkIconSize secondarySize = static_cast<GtkIconSize>(prefToSize("toolbox", "secondary", 1));
+ GtkIconSize secondarySize = static_cast<GtkIconSize>(prefToSize("/toolbox/secondary", 1));
gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas);
gtk_object_set_data(GTK_OBJECT(tbl), "desktop", desktop);
@@ -6437,12 +6429,12 @@ static void sp_connector_graph_layout(void)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
// hack for clones, see comment in align-and-distribute.cpp
- int saved_compensation = prefs->getInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
- prefs->setInt("options.clonecompensation", "value", SP_CLONE_COMPENSATION_UNMOVED);
+ int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
+ prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
graphlayout(sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList());
- prefs->setInt("options.clonecompensation", "value", saved_compensation);
+ prefs->setInt("/options/clonecompensation/value", saved_compensation);
sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_ALIGN_DISTRIBUTE, _("Arrange connector network"));
}
@@ -6450,14 +6442,14 @@ static void sp_connector_graph_layout(void)
static void sp_directed_graph_layout_toggled( GtkToggleAction* act, GtkObject */*tbl*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.connector", "directedlayout",
+ prefs->setBool("/tools/connector/directedlayout",
gtk_toggle_action_get_active( act ));
}
static void sp_nooverlaps_graph_layout_toggled( GtkToggleAction* act, GtkObject */*tbl*/ )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setBool("tools.connector", "avoidoverlaplayout",
+ prefs->setBool("/tools/connector/avoidoverlaplayout",
gtk_toggle_action_get_active( act ));
}
@@ -6465,7 +6457,7 @@ static void sp_nooverlaps_graph_layout_toggled( GtkToggleAction* act, GtkObject
static void connector_length_changed(GtkAdjustment *adj, GObject* tbl)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.connector", "length", adj->value);
+ prefs->setDouble("/tools/connector/length", adj->value);
spinbutton_defocus(GTK_OBJECT(tbl));
}
@@ -6503,7 +6495,7 @@ static Inkscape::XML::NodeEventVector connector_tb_repr_events = {
static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- Inkscape::IconSize secondarySize = prefToSize("toolbox", "secondary", 1);
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
{
InkAction* inky = ink_action_new( "ConnectorAvoidAction",
@@ -6531,7 +6523,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
eact = create_adjustment_action( "ConnectorSpacingAction",
_("Connector Spacing"), _("Spacing:"),
_("The amount of space left around objects by auto-routing connectors"),
- "tools.connector", "spacing", defaultConnSpacing,
+ "/tools/connector/spacing", defaultConnSpacing,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "inkscape:connector-spacing",
0, 100, 1.0, 10.0,
0, 0, 0,
@@ -6553,7 +6545,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
eact = create_adjustment_action( "ConnectorLengthAction",
_("Connector Length"), _("Length:"),
_("Ideal length for connectors when layout is applied"),
- "tools.connector", "length", 100,
+ "/tools/connector/length", 100,
GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "inkscape:connector-length",
10, 1000, 10.0, 100.0,
0, 0, 0,
@@ -6570,7 +6562,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- bool tbuttonstate = prefs->getBool("tools.connector", "directedlayout");
+ bool tbuttonstate = prefs->getBool("/tools/connector/directedlayout");
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_directed_graph_layout_toggled), holder );
@@ -6585,7 +6577,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
Inkscape::ICON_SIZE_DECORATION );
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- bool tbuttonstate = prefs->getBool("tools.connector", "avoidoverlaplayout");
+ bool tbuttonstate = prefs->getBool("/tools/connector/avoidoverlaplayout");
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), (tbuttonstate ? TRUE : FALSE ));
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_nooverlaps_graph_layout_toggled), holder );
@@ -6620,13 +6612,13 @@ static void paintbucket_channels_changed(EgeSelectOneAction* act, GObject* /*tbl
static void paintbucket_threshold_changed(GtkAdjustment *adj, GObject */*tbl*/)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("tools.paintbucket", "threshold", (gint)adj->value);
+ prefs->setInt("/tools/paintbucket/threshold", (gint)adj->value);
}
static void paintbucket_autogap_changed(EgeSelectOneAction* act, GObject */*tbl*/)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("tools.paintbucket", "autogap", ege_select_one_action_get_active( act ));
+ prefs->setBool("/tools/paintbucket/autogap", ege_select_one_action_get_active( act ));
}
static void paintbucket_offset_changed(GtkAdjustment *adj, GObject *tbl)
@@ -6635,8 +6627,8 @@ static void paintbucket_offset_changed(GtkAdjustment *adj, GObject *tbl)
SPUnit const *unit = tracker->getActiveUnit();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setDouble("tools.paintbucket", "offset", (gdouble)sp_units_get_pixels(adj->value, *unit));
- prefs->setString("tools.paintbucket", "offsetunits", sp_unit_get_abbreviation(unit));
+ prefs->setDouble("/tools/paintbucket/offset", (gdouble)sp_units_get_pixels(adj->value, *unit));
+ prefs->setString("/tools/paintbucket/offsetunits", sp_unit_get_abbreviation(unit));
}
static void paintbucket_defaults (GtkWidget *, GObject *tbl)
@@ -6686,7 +6678,7 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeSelectOneAction* act1 = ege_select_one_action_new( "ChannelsAction", _("Fill by"), (""), NULL, GTK_TREE_MODEL(model) );
g_object_set( act1, "short_label", _("Fill by:"), NULL );
ege_select_one_action_set_appearance( act1, "compact" );
- ege_select_one_action_set_active( act1, prefs->getInt("tools.paintbucket", "channels", 0) );
+ ege_select_one_action_set_active( act1, prefs->getInt("/tools/paintbucket/channels", 0) );
g_signal_connect( G_OBJECT(act1), "changed", G_CALLBACK(paintbucket_channels_changed), holder );
gtk_action_group_add_action( mainActions, GTK_ACTION(act1) );
g_object_set_data( holder, "channels_action", act1 );
@@ -6698,7 +6690,7 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
"ThresholdAction",
_("Fill Threshold"), _("Threshold:"),
_("The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"),
- "tools.paintbucket", "threshold", 5, GTK_WIDGET(desktop->canvas), NULL, holder, TRUE,
+ "/tools/paintbucket/threshold", 5, GTK_WIDGET(desktop->canvas), NULL, holder, TRUE,
"inkscape:paintbucket-threshold", 0, 100.0, 1.0, 0.0,
0, 0, 0,
paintbucket_threshold_changed, 1, 0 );
@@ -6709,7 +6701,7 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
// Create the units menu.
UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
- Glib::ustring stored_unit = prefs->getString("tools.paintbucket", "offsetunits");
+ Glib::ustring stored_unit = prefs->getString("/tools/paintbucket/offsetunits");
if (!stored_unit.empty())
tracker->setActiveUnit(sp_unit_get_by_abbreviation(stored_unit.data()));
g_object_set_data( holder, "tracker", tracker );
@@ -6724,7 +6716,7 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
"OffsetAction",
_("Grow/shrink by"), _("Grow/shrink by:"),
_("The amount to grow (positive) or shrink (negative) the created fill path"),
- "tools.paintbucket", "offset", 0, GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, TRUE,
+ "/tools/paintbucket/offset", 0, GTK_WIDGET(desktop->canvas), NULL/*us*/, holder, TRUE,
"inkscape:paintbucket-offset", -1e6, 1e6, 0.1, 0.5,
0, 0, 0,
paintbucket_offset_changed, 1, 2);
@@ -6751,7 +6743,7 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
EgeSelectOneAction* act2 = ege_select_one_action_new( "AutoGapAction", _("Close gaps"), (""), NULL, GTK_TREE_MODEL(model) );
g_object_set( act2, "short_label", _("Close gaps:"), NULL );
ege_select_one_action_set_appearance( act2, "compact" );
- ege_select_one_action_set_active( act2, prefs->getInt("tools.paintbucket", "autogap", 0) );
+ ege_select_one_action_set_active( act2, prefs->getBool("/tools/paintbucket/autogap") );
g_signal_connect( G_OBJECT(act2), "changed", G_CALLBACK(paintbucket_autogap_changed), holder );
gtk_action_group_add_action( mainActions, GTK_ACTION(act2) );
g_object_set_data( holder, "autogap_action", act2 );
@@ -6780,7 +6772,3 @@ static void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
-
-
-
-