Code

Warning cleanup
[inkscape.git] / src / widgets / toolbox.cpp
index c2c7ff8528566aeb7de8e569bc5c6923b5ee1c48..47cb78cb22d21ad91f6f158c5688f584bda645a2 100644 (file)
@@ -248,6 +248,7 @@ static gchar const * ui_descr =
         "    <separator />"
         "    <toolitem action='NodeXAction' />"
         "    <toolitem action='NodeYAction' />"
         "    <separator />"
         "    <toolitem action='NodeXAction' />"
         "    <toolitem action='NodeYAction' />"
+        "    <toolitem action='NodeUnitsAction' />"
         "  </toolbar>"
 
         "  <toolbar name='TweakToolbar'>"
         "  </toolbar>"
 
         "  <toolbar name='TweakToolbar'>"
@@ -847,8 +848,7 @@ static void toggle_show_handles (GtkToggleAction *act, gpointer /*data*/) {
     if (shape_editor) shape_editor->show_handles(show);
 }
 
     if (shape_editor) shape_editor->show_handles(show);
 }
 
-void
-sp_node_path_edit_nextLPEparam (GtkAction *act, gpointer data) {
+void sp_node_path_edit_nextLPEparam (GtkAction */*act*/, gpointer data) {
     sp_selection_next_patheffect_param( reinterpret_cast<SPDesktop*>(data) );
 }
 
     sp_selection_next_patheffect_param( reinterpret_cast<SPDesktop*>(data) );
 }
 
@@ -869,6 +869,9 @@ sp_node_toolbox_coord_changed(gpointer /*shape_editor*/, GObject *tbl)
     // in turn, prevent listener from responding
     g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE));
 
     // in turn, prevent listener from responding
     g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE));
 
+    UnitTracker* tracker = reinterpret_cast<UnitTracker*>( g_object_get_data( tbl, "tracker" ) );
+    SPUnit const *unit = tracker->getActiveUnit();
+
     ShapeEditor *shape_editor = get_current_shape_editor();
     if (shape_editor && shape_editor->has_nodepath()) {
         Inkscape::NodePath::Path *nodepath = shape_editor->get_nodepath();
     ShapeEditor *shape_editor = get_current_shape_editor();
     if (shape_editor && shape_editor->has_nodepath()) {
         Inkscape::NodePath::Path *nodepath = shape_editor->get_nodepath();
@@ -883,14 +886,14 @@ sp_node_toolbox_coord_changed(gpointer /*shape_editor*/, GObject *tbl)
         } else {
             gtk_action_set_sensitive(xact, TRUE);
             gtk_action_set_sensitive(yact, TRUE);
         } else {
             gtk_action_set_sensitive(xact, TRUE);
             gtk_action_set_sensitive(yact, TRUE);
-            NR::Coord oldx = gtk_adjustment_get_value(xadj);
-            NR::Coord oldy = gtk_adjustment_get_value(xadj);
+            NR::Coord oldx = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit);
+            NR::Coord oldy = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit);
 
             if (n_selected == 1) {
                 NR::Point sel_node = nodepath->singleSelectedCoords();
                 if (oldx != sel_node[NR::X] || oldy != sel_node[NR::Y]) {
 
             if (n_selected == 1) {
                 NR::Point sel_node = nodepath->singleSelectedCoords();
                 if (oldx != sel_node[NR::X] || oldy != sel_node[NR::Y]) {
-                    gtk_adjustment_set_value(xadj, sel_node[NR::X]);
-                    gtk_adjustment_set_value(yadj, sel_node[NR::Y]);
+                    gtk_adjustment_set_value(xadj, sp_pixels_get_units(sel_node[NR::X], *unit));
+                    gtk_adjustment_set_value(yadj, sp_pixels_get_units(sel_node[NR::Y], *unit));
                 }
             } else {
                 NR::Maybe<NR::Coord> x = sp_node_selected_common_coord(nodepath, NR::X);
                 }
             } else {
                 NR::Maybe<NR::Coord> x = sp_node_selected_common_coord(nodepath, NR::X);
@@ -899,8 +902,10 @@ sp_node_toolbox_coord_changed(gpointer /*shape_editor*/, GObject *tbl)
                     /* Note: Currently x and y will always have a value, even if the coordinates of the
                        selected nodes don't coincide (in this case we use the coordinates of the center
                        of the bounding box). So the entries are never set to zero. */
                     /* Note: Currently x and y will always have a value, even if the coordinates of the
                        selected nodes don't coincide (in this case we use the coordinates of the center
                        of the bounding box). So the entries are never set to zero. */
-                    gtk_adjustment_set_value(xadj, x ? (*x) : 0.0); // FIXME: Maybe we should clear the entry
-                    gtk_adjustment_set_value(yadj, y ? (*y) : 0.0); //        fields, not set them to zero.
+                    // FIXME: Maybe we should clear the entry if several nodes are selected
+                    //        instead of providing a kind of average value
+                    gtk_adjustment_set_value(xadj, sp_pixels_get_units(x ? (*x) : 0.0, *unit));
+                    gtk_adjustment_set_value(yadj, sp_pixels_get_units(y ? (*y) : 0.0, *unit));
                 }
             }
         }
                 }
             }
         }
@@ -916,6 +921,15 @@ sp_node_toolbox_coord_changed(gpointer /*shape_editor*/, GObject *tbl)
 static void
 sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_name)
 {
 static void
 sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_name)
 {
+    SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+
+    UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data( tbl, "tracker" ));
+    SPUnit const *unit = tracker->getActiveUnit();
+
+    if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+        prefs_set_double_attribute("tools.nodes", value_name, sp_units_get_pixels(adj->value, *unit));
+    }
+
     // quit if run by the attr_changed listener
     if (g_object_get_data( tbl, "freeze" )) {
         return;
     // quit if run by the attr_changed listener
     if (g_object_get_data( tbl, "freeze" )) {
         return;
@@ -926,11 +940,12 @@ sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_
 
     ShapeEditor *shape_editor = get_current_shape_editor();
     if (shape_editor && shape_editor->has_nodepath()) {
 
     ShapeEditor *shape_editor = get_current_shape_editor();
     if (shape_editor && shape_editor->has_nodepath()) {
+        double val = sp_units_get_pixels(gtk_adjustment_get_value(adj), *unit);
         if (!strcmp(value_name, "x")) {
         if (!strcmp(value_name, "x")) {
-            sp_node_selected_move_absolute(shape_editor->get_nodepath(), gtk_adjustment_get_value(adj), NR::X);
+            sp_node_selected_move_absolute(shape_editor->get_nodepath(), val, NR::X);
         }
         if (!strcmp(value_name, "y")) {
         }
         if (!strcmp(value_name, "y")) {
-            sp_node_selected_move_absolute(shape_editor->get_nodepath(), gtk_adjustment_get_value(adj), NR::Y);
+            sp_node_selected_move_absolute(shape_editor->get_nodepath(), val, NR::Y);
         }
     }
 
         }
     }
 
@@ -955,6 +970,10 @@ sp_node_path_y_value_changed(GtkAdjustment *adj, GObject *tbl)
 
 static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
 {
 
 static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
 {
+    UnitTracker* tracker = new UnitTracker( SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE );
+    tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units );
+    g_object_set_data( holder, "tracker", tracker );
+
     {
         InkAction* inky = ink_action_new( "NodeInsertAction",
                                           _("Insert node"),
     {
         InkAction* inky = ink_action_new( "NodeInsertAction",
                                           _("Insert node"),
@@ -1101,6 +1120,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
                                          -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
                                          labels, values, G_N_ELEMENTS(labels),
                                          sp_node_path_x_value_changed );
                                          -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
                                          labels, values, G_N_ELEMENTS(labels),
                                          sp_node_path_x_value_changed );
+        tracker->addAdjustment( ege_adjustment_action_get_adjustment(eact) );
         g_object_set_data( holder, "nodes_x_action", eact );
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         g_object_set_data( holder, "nodes_x_action", eact );
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
@@ -1118,11 +1138,18 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
                                          -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
                                          labels, values, G_N_ELEMENTS(labels),
                                          sp_node_path_y_value_changed );
                                          -1e6, 1e6, SPIN_STEP, SPIN_PAGE_STEP,
                                          labels, values, G_N_ELEMENTS(labels),
                                          sp_node_path_y_value_changed );
+        tracker->addAdjustment( ege_adjustment_action_get_adjustment(eact) );
         g_object_set_data( holder, "nodes_y_action", eact );
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
     }
 
         g_object_set_data( holder, "nodes_y_action", eact );
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
     }
 
+    // add the units menu
+    {
+        GtkAction* act = tracker->createAction( "NodeUnitsAction", _("Units"), ("") );
+        gtk_action_group_add_action( mainActions, act );
+    }
+
     sigc::connection *connection = new sigc::connection (
         desktop->connectToolSubselectionChanged(sigc::bind (sigc::ptr_fun(sp_node_toolbox_coord_changed), (GObject *)holder))
         );
     sigc::connection *connection = new sigc::connection (
         desktop->connectToolSubselectionChanged(sigc::bind (sigc::ptr_fun(sp_node_toolbox_coord_changed), (GObject *)holder))
         );
@@ -4328,16 +4355,7 @@ sp_text_toolbox_size_changed  (GtkComboBox *cbox,
 
     if (g_object_get_data (tbl, "size-block")) return;
 
 
     if (g_object_get_data (tbl, "size-block")) return;
 
-#if GTK_CHECK_VERSION(2,6,0)
     char *text = gtk_combo_box_get_active_text (cbox);
     char *text = gtk_combo_box_get_active_text (cbox);
-#else // GTK_CHECK_VERSION(2,6,0)
-    GtkTreeModel *model = gtk_combo_box_get_model (cbox);
-    GtkTreeIter iter;
-    char *text = NULL;
-
-    if (gtk_combo_box_get_active_iter (cbox, &iter) && model)
-        gtk_tree_model_get (model, &iter, 0, &text, -1);
-#endif // GTK_CHECK_VERSION(2,6,0)
 
     SPCSSAttr *css = sp_repr_css_attr_new ();
     sp_repr_css_set_property (css, "font-size", text);
 
     SPCSSAttr *css = sp_repr_css_attr_new ();
     sp_repr_css_set_property (css, "font-size", text);
@@ -4504,9 +4522,7 @@ sp_text_toolbox_new (SPDesktop *desktop)
 
     gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (Glib::unwrap(store)));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
 
     gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (Glib::unwrap(store)));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
-#if GTK_CHECK_VERSION(2,6,0)
     gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
     gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
-#endif // GTK_CHECK_VERSION(2,6,0)
 
     //gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
 
 
     //gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
 
@@ -4701,168 +4717,6 @@ sp_text_toolbox_new (SPDesktop *desktop)
     Inkscape::ConnectionPool::connect_destroy (G_OBJECT (tbl), pool);
 
 
     Inkscape::ConnectionPool::connect_destroy (G_OBJECT (tbl), pool);
 
 
-#if 0
-    // horizontal
-    {
-        GtkWidget *px= sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_WRITING_MODE_LR);
-        GtkWidget *b = group = gtk_radio_button_new (NULL);
-        gtk_container_add (GTK_CONTAINER (b), px);
-        gtk_tooltips_set_tip (tt, b, _("Horizontal text"), NULL);
-        gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
-        gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE );
-        gtk_box_pack_start (GTK_BOX (tbl), b, FALSE, FALSE, 0);
-    }
-
-    // vertical
-    {
-        GtkWidget *px = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_WRITING_MODE_TB);
-        GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
-        gtk_container_add (GTK_CONTAINER (b), px);
-        gtk_tooltips_set_tip (tt, b, _("Vertical text"), NULL);
-        gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
-        gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE );
-        gtk_box_pack_start (GTK_BOX (tbl), b, FALSE, FALSE, 0);
-    }
-
-    aux_toolbox_space(tbl, AUX_BETWEEN_BUTTON_GROUPS);
-
-    // letter spacing
-    {
-        {
-            GtkWidget *image = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_LETTER_SPACING);
-            GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-            gtk_container_add (GTK_CONTAINER (hb), image);
-            gtk_widget_show(image);
-            gtk_box_pack_start (GTK_BOX (tbl), hb, FALSE, FALSE, 0);
-        }
-
-        {
-            GtkWidget *hb = sp_tb_spinbutton((""), _("Spacing between letters"),
-                                             "tools.text", "letter_spacing", 0.0,
-                                             us, tbl, FALSE, NULL,
-                                             -1000.0, 1000.0, 0.1, 0.1,
-                                             sp_text_letter_changed, 0.1, 1);
-            gtk_widget_set_size_request (hb, 45, 6);
-            gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, 6);
-        }
-    }
-
-    // line spacing
-    {
-        {
-            GtkWidget *image = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_LINE_SPACING);
-            GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-            gtk_container_add (GTK_CONTAINER (hb), image);
-            gtk_widget_show(image);
-            gtk_box_pack_start (GTK_BOX (tbl), hb, FALSE, FALSE, 0);
-        }
-
-        {
-            GtkWidget *hb = sp_tb_spinbutton((""), _("Spacing between lines"),
-                                             "tools.text", "line_spacing", 0,
-                                             us, tbl, FALSE, NULL,
-                                             -1000.0, 1000.0, 0.1, 0.1,
-                                             sp_text_line_changed, 0.1, 1);
-            gtk_widget_set_size_request (hb, 45, 0);
-            gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, 3);
-        }
-    }
-
-    {
-        // horizontal kerning/vertical kerning units menu: create
-        GtkWidget *us = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
-        sp_unit_selector_setsize(us, AUX_OPTION_MENU_WIDTH, AUX_OPTION_MENU_HEIGHT);
-        sp_unit_selector_set_unit(SP_UNIT_SELECTOR(us), desktop->namedview->doc_units);
-
-        aux_toolbox_space(tbl, AUX_BETWEEN_BUTTON_GROUPS);
-
-        // horizontal kerning
-        {
-            {
-                GtkWidget *image = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_HORZ_KERN);
-                GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-                gtk_container_add (GTK_CONTAINER (hb), image);
-                gtk_widget_show(image);
-                gtk_box_pack_start (GTK_BOX (tbl), hb, FALSE, FALSE, 0);
-            }
-
-            {
-                GtkWidget *hb = sp_tb_spinbutton((""), _("Horizontal kerning"),
-                                                 "tools.text", "horizontal_kerning", 0,
-                                                 us, tbl, FALSE, NULL,
-                                                 -100.00, 100.00, 0.01, 0.1,
-                                                 sp_text_horiz_kern_changed);
-                gtk_widget_set_size_request (hb, 45, 0);
-                gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, 6);
-            }
-        }
-
-        // vertical kerning
-        {
-            {
-                GtkWidget *image = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_VERT_KERN);
-                GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-                gtk_container_add (GTK_CONTAINER (hb), image);
-                gtk_widget_show(image);
-                gtk_box_pack_start (GTK_BOX (tbl), hb, FALSE, FALSE, 0);
-            }
-
-            {
-                GtkWidget *hb = sp_tb_spinbutton((""), _("Vertical kerning"),
-                                                 "tools.text", "vertical_kerning", 0,
-                                                 us, tbl, FALSE, NULL,
-                                                 -100.00, 100.00, 0.01, 0.1,
-                                                 sp_text_vert_kern_changed);
-                gtk_widget_set_size_request (hb, 45, 0);
-                gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, 5);
-            }
-        }
-
-        // add the units menu
-        gtk_widget_show(us);
-        gtk_box_pack_start(GTK_BOX(tbl), us, FALSE, FALSE, 1);
-        gtk_object_set_data(GTK_OBJECT(tbl), "units", us);
-    }
-
-    // letter rotation
-    aux_toolbox_space(tbl, AUX_BETWEEN_BUTTON_GROUPS);
-    {
-        {
-            GtkWidget *image = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_ROTATION);
-            GtkWidget *hb = gtk_hbox_new(FALSE, 1);
-            gtk_container_add (GTK_CONTAINER (hb), image);
-            gtk_widget_show(image);
-            gtk_box_pack_start (GTK_BOX (tbl), hb, FALSE, FALSE, 0);
-        }
-        {
-            GtkWidget *hb = sp_tb_spinbutton((""), _("Letter rotation"),
-                                             "tools.text", "letter_rotation", 0,
-                                             us, tbl, FALSE, NULL,
-                                             -180.0, 180.0, 0.1, 0.1,
-                                             sp_text_letter_rotation_changed, 0.1, 1);
-            gtk_widget_set_size_request (hb, 45, 0);
-            gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, 6);
-        }
-        // rotation degree label
-        {
-            GtkWidget *label = gtk_widget_new (GTK_TYPE_LABEL, "label", "\302\260", "xalign", 0.0, NULL);
-            gtk_box_pack_start(GTK_BOX(tbl), label, FALSE, FALSE, 0);
-        }
-    }
-
-    // Remove Manual Kerns
-    {
-        GtkWidget *px = sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_STOCK_TEXT_REMOVE_KERNS);
-        GtkWidget *button = gtk_button_new ();
-        gtk_container_add (GTK_CONTAINER (button), px);
-        gtk_widget_show(button);
-        gtk_tooltips_set_tip (tt, button, _("Remove manual kerns"), NULL);
-        gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
-        gtk_widget_set_sensitive(button, TRUE);
-        gtk_box_pack_start (GTK_BOX (tbl), button, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS);
-    }
-#endif
-
     gtk_widget_show_all (tbl);
     return tbl;
 
     gtk_widget_show_all (tbl);
     return tbl;