Code

fix cursor placement logic
[inkscape.git] / src / dialogs / guidelinedialog.cpp
index b2c867e1e01ed2023c57453c565727ddbf283d87..f0115ee913cd6dae305a329fd1c0dda49c8ea6fd 100644 (file)
@@ -1,9 +1,7 @@
-#define __GUIDELINE_CPP__
-
-/*
- * simple guideline dialog
- *
- * Authors:
+/** @file
+ * @brief Simple guideline dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   Andrius R. <knutux@gmail.com>
  *   Johan Engelen
@@ -41,10 +39,14 @@ namespace Dialogs {
 
 GuidelinePropertiesDialog::GuidelinePropertiesDialog(SPGuide *guide, SPDesktop *desktop)
 : _desktop(desktop), _guide(guide),
-  _relative_toggle(_("Rela_tive move"), _("Move guide relative to current position")),
-  _adjustment_x(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),  
-  _adjustment_y(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),  
-  _adj_angle(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),  
+  _label_units(_("Unit:")),
+  _label_X(_("X:")),
+  _label_Y(_("Y:")),
+  _label_degrees(_("Angle (degrees):")),
+  _relative_toggle(_("Rela_tive change"), _("Move and/or rotate the guide relative to current settings")),
+  _adjustment_x(0.0, -1e6, 1e6, 1.0, 10.0, 10.0),  
+  _adjustment_y(0.0, -1e6, 1e6, 1.0, 10.0, 10.0),  
+  _adj_angle(0.0, -360, 360, 1.0, 10.0, 10.0),  
   _unit_selector(NULL), _mode(true), _oldpos(0.,0.), _oldangle(0.0)
 {
 }
@@ -62,17 +64,28 @@ void GuidelinePropertiesDialog::_modeChanged()
 {
     _mode = !_relative_toggle.get_active();
     if (!_mode) {
-        _label_move.set_label(_("Move by:"));
-        _label_angle.set_label(_("Increase angle by:"));
+        // relative
+        _spin_angle.set_value(0);
+
+        _spin_button_y.set_value(0);
+        _spin_button_x.set_value(0);
     } else {
-        _label_move.set_label(_("Move to:"));
-        _label_angle.set_label(_("Set angle to:"));
+        // absolute
+        _spin_angle.set_value(_oldangle);
+
+        SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector->gobj()));
+        gdouble const val_y = sp_pixels_get_units(_oldpos[Geom::Y], unit);
+        _spin_button_y.set_value(val_y);
+        gdouble const val_x = sp_pixels_get_units(_oldpos[Geom::X], unit);
+        _spin_button_x.set_value(val_x);
     }
 }
 
 void GuidelinePropertiesDialog::_onApply()
 {
-    double const deg_angle = _spin_angle.get_value();
+    double deg_angle = _spin_angle.get_value();
+    if (!_mode)
+        deg_angle += _oldangle;
     Geom::Point normal;
     if ( deg_angle == 90. || deg_angle == 270. || deg_angle == -90. || deg_angle == -270.) {
         normal = Geom::Point(1.,0.);
@@ -121,7 +134,7 @@ void GuidelinePropertiesDialog::_response(gint response)
        case -12:
             _onDelete();
             break;
-       case Gtk::RESPONSE_CLOSE:
+       case Gtk::RESPONSE_CANCEL:
             break;
        case Gtk::RESPONSE_DELETE_EVENT:
             break;
@@ -138,7 +151,7 @@ void GuidelinePropertiesDialog::_setup() {
     set_title(_("Guideline"));
     add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
     add_button(Gtk::Stock::DELETE, -12);
-    add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE);
+    add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
 
     Gtk::VBox *mainVBox = get_vbox();
 
@@ -147,28 +160,23 @@ void GuidelinePropertiesDialog::_setup() {
 
     mainVBox->pack_start(_layout_table, false, false, 0);
 
+    _label_name.set_label("foo0");
+    _layout_table.attach(_label_name,
+                         0, 3, 0, 1, Gtk::FILL, Gtk::FILL);
+    _label_name.set_alignment(0, 0.5);
+
     _label_descr.set_label("foo1");
     _layout_table.attach(_label_descr,
-                         0, 3, 0, 1, Gtk::FILL, Gtk::FILL);
+                         0, 3, 1, 2, Gtk::FILL, Gtk::FILL);
     _label_descr.set_alignment(0, 0.5);
 
-    _layout_table.attach(_label_move,
-                         0, 2, 1, 2, Gtk::FILL, Gtk::FILL);
-    _label_move.set_alignment(0, 0.5);
-
-    _layout_table.attach(_label_angle,
-                         0, 2, 5, 6, Gtk::FILL, Gtk::FILL);
-    _label_angle.set_alignment(0, 0.5);
-
-    _modeChanged();
-
     // indent
     _layout_table.attach(*manage(new Gtk::Label(" ")),
                          0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 10);
 
     // mode radio button
     _layout_table.attach(_relative_toggle,
-                         1, 3, 7, 8, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+                         1, 3, 9, 10, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged));
 
     // unitmenu
@@ -184,23 +192,31 @@ void GuidelinePropertiesDialog::_setup() {
     _spin_button_x.set_numeric();
     _spin_button_y.configure(_adjustment_y, 1.0 , 3);
     _spin_button_y.set_numeric();
+    _layout_table.attach(_label_X,
+                         1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     _layout_table.attach(_spin_button_x,
-                         1, 2, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+                         2, 3, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+    _layout_table.attach(_label_Y,
+                         1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     _layout_table.attach(_spin_button_y,
-                         1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+                         2, 3, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     gtk_signal_connect_object(GTK_OBJECT(_spin_button_x.gobj()), "activate",
                               GTK_SIGNAL_FUNC(gtk_window_activate_default),
                               gobj());
 
+    _layout_table.attach(_label_units,
+                         1, 2, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     _layout_table.attach(*_unit_selector,
-                         1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
+                         2, 3, 6, 7, Gtk::FILL, Gtk::FILL);
 
     // angle spinbutton
     _spin_angle.configure(_adj_angle, 5.0 , 3);
     _spin_angle.set_numeric();
     _spin_angle.show();
+    _layout_table.attach(_label_degrees,
+                         1, 2, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     _layout_table.attach(_spin_angle,
-                         1, 2, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+                         2, 3, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
 
 
     // dialog
@@ -216,25 +232,35 @@ void GuidelinePropertiesDialog::_setup() {
     } else {
         _oldangle = Geom::rad_to_deg( std::atan2( - _guide->normal_to_line[Geom::X], _guide->normal_to_line[Geom::Y] ) );
     }
+
     {
-        gchar *guide_description = sp_guide_description(_guide);
         Inkscape::XML::Node *repr = SP_OBJECT_REPR (_guide);
         const gchar *guide_id = repr->attribute("id");
-        gchar *label = g_strdup_printf(_("Moving %s %s"), guide_description, guide_id);
+        gchar *label = g_strdup_printf(_("Guideline ID: %s"), guide_id);
+        _label_name.set_label(label);
+        g_free(label);
+    }
+    {
+        gchar *guide_description = sp_guide_description(_guide);
+        gchar *label = g_strdup_printf(_("Current: %s"), guide_description);
         g_free(guide_description);
-        _label_descr.set_label(label);
+        _label_descr.set_markup(label);
         g_free(label);
     }
 
-    _spin_angle.set_value(_oldangle);
+    _modeChanged(); // sets values of spinboxes.
+
+    if ( _oldangle == 90. || _oldangle == 270. || _oldangle == -90. || _oldangle == -270.) {
+        _spin_button_x.grab_focus();
+        _spin_button_x.select_region(0, 20);
+    } else if ( _oldangle == 0. || _oldangle == 180. || _oldangle == -180.) {
+        _spin_button_y.grab_focus();
+        _spin_button_y.select_region(0, 20);
+    } else {
+        _spin_angle.grab_focus();
+        _spin_angle.select_region(0, 20);
+    }
 
-    SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(unit_selector));
-    gdouble const val_y = sp_pixels_get_units(_oldpos[Geom::Y], unit);
-    _spin_button_y.set_value(val_y);
-    gdouble const val_x = sp_pixels_get_units(_oldpos[Geom::X], unit);
-    _spin_button_x.set_value(val_x);
-    _spin_button_x.grab_focus();
-    _spin_button_x.select_region(0, 20);
     set_position(Gtk::WIN_POS_MOUSE);
 
     show_all_children();
@@ -257,4 +283,3 @@ void GuidelinePropertiesDialog::_setup() {
   End:
 */
 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
-