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' />"
+        "    <toolitem action='NodeUnitsAction' />"
         "  </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);
 }
 
-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) );
 }
 
@@ -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));
 
+    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();
@@ -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);
-            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]) {
-                    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);
@@ -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. */
-                    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)
 {
+    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;
@@ -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()) {
+        double val = sp_units_get_pixels(gtk_adjustment_get_value(adj), *unit);
         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")) {
-            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)
 {
+    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"),
@@ -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 );
+        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) );
@@ -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 );
+        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) );
     }
 
+    // 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))
         );
@@ -4328,16 +4355,7 @@ sp_text_toolbox_size_changed  (GtkComboBox *cbox,
 
     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);
-#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);
@@ -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);
-#if GTK_CHECK_VERSION(2,6,0)
     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);
 
@@ -4701,168 +4717,6 @@ sp_text_toolbox_new (SPDesktop *desktop)
     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;