Code

welcome to 0.44+devel
[inkscape.git] / src / dialogs / guidelinedialog.cpp
index 6fab6c1c67d51dcf6574052b9dddd261f74bacdc..7be2545f0d56a4304f99473e6d2bae41e24cf3e5 100644 (file)
@@ -39,43 +39,35 @@ namespace Dialogs {
 
 GuidelinePropertiesDialog::GuidelinePropertiesDialog(SPGuide *guide, SPDesktop *desktop)
 : _desktop(desktop), _guide(guide),
-  _adjustment(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),
+  _relative_toggle(_("Rela_tive move"), _("Move guide relative to current position")),
+  _adjustment(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),  
   _unit_selector(NULL), _mode(true), _oldpos(0.0)
 {
 }
 
 GuidelinePropertiesDialog::~GuidelinePropertiesDialog() {
-    if ( NULL != _unit_selector) {
-        //g_free(_unit_selector);
-    }
 }
 
 void GuidelinePropertiesDialog::showDialog(SPGuide *guide, SPDesktop *desktop) {
-    GuidelinePropertiesDialog *dialog = new GuidelinePropertiesDialog(guide, desktop);
-    dialog->_setup();
-    dialog->run();
-    delete dialog;
+    GuidelinePropertiesDialog dialog(guide, desktop);
+    dialog._setup();
+    dialog.run();
 }
 
 void GuidelinePropertiesDialog::_modeChanged()
 {
-    if (_mode) {
-        // TRANSLATORS: This string appears when double-clicking on a guide.
-        // This is the distance by which the guide is to be moved.
-        _m.set_label(_(" relative by "));
-        _mode = false;
+    _mode = !_relative_toggle.get_active();
+    if (!_mode) {
+        _label_move.set_label(_("Move by:"));
     } else {
-        // TRANSLATORS: This string appears when double-clicking on a guide.
-        // This is the target location where the guide is to be moved.
-        _m.set_label(_(" absolute to "));
-        _mode = true;
+        _label_move.set_label(_("Move to:"));
     }
 }
 
 void GuidelinePropertiesDialog::_onApply()
 {
     gdouble const raw_dist = _spin_button.get_value();
-    SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector));
+    SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector->gobj()));
     gdouble const points = sp_units_get_pixels(raw_dist, unit);
     gdouble const newpos = ( _mode
                              ? points
@@ -126,54 +118,48 @@ void GuidelinePropertiesDialog::_setup() {
 
     Gtk::VBox *mainVBox = get_vbox();
 
-    _b1.set_homogeneous(false);
-    _b1.set_spacing(4);
-    mainVBox->pack_start(_b1, false, false, 0);
-    _b1.set_border_width(4);
-
-    _b2.set_homogeneous(false);
-    _b2.set_spacing(4);
-    _b1.pack_start(_b2, true, true, 0);
+    _layout_table.set_spacings(4);
+    _layout_table.resize (3, 4);
 
-    //labels
-    _b3.set_homogeneous(false);
-    _b3.set_spacing(4);
-    _b2.pack_start(_b3, true, true, 0);
+    mainVBox->pack_start(_layout_table, false, false, 0);
 
-    _label.set_label("foo1");
-    _b3.pack_start(_label, true, true, 0);
-    _label.set_alignment(1.0, 0.5);
+    _label_descr.set_label("foo1");
+    _layout_table.attach(_label_descr,
+                         0, 3, 0, 1, Gtk::FILL, Gtk::FILL);
+    _label_descr.set_alignment(0, 0.5);
 
-    _label_id.set_label("foo2");
-    _b3.pack_start(_label_id, true, true, 0);
-    _label_id.set_alignment(0.0, 0.5);
+    _layout_table.attach(_label_move,
+                         0, 2, 1, 2, Gtk::FILL, Gtk::FILL);
+    _label_move.set_alignment(0, 0.5);
+    _modeChanged();
 
-    _b4.set_homogeneous(false);
-    _b4.set_spacing(4);
-    _b2.pack_start(_b4, false, false, 0);
+    // indent
+    _layout_table.attach(*manage(new Gtk::Label(" ")),
+                         0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 10);
 
-    // mode button
-    _but.set_relief(Gtk::RELIEF_NONE);
-    _b4.pack_start(_but, false, true, 0);
-    _but.signal_clicked().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged));
-    _m.set_label(_(" absolute to "));
-    _but.add(_m);
+    // mode radio button
+    _layout_table.attach(_relative_toggle,
+                         1, 3, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
+    _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged));
 
     // unitmenu
     /* fixme: We should allow percents here too, as percents of the canvas size */
-    _unit_selector = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
-    sp_unit_selector_set_unit(SP_UNIT_SELECTOR(_unit_selector), _desktop->namedview->doc_units);
+    GtkWidget *unit_selector = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
+    sp_unit_selector_set_unit(SP_UNIT_SELECTOR(unit_selector), _desktop->namedview->doc_units);
+    _unit_selector = Gtk::manage(Glib::wrap(unit_selector));
 
     // spinbutton
-    sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(_unit_selector), GTK_ADJUSTMENT(_adjustment.gobj()));
+    sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(unit_selector), GTK_ADJUSTMENT(_adjustment.gobj()));
     _spin_button.configure(_adjustment, 1.0 , 2);
     _spin_button.set_numeric(TRUE);
-    _b4.pack_start(_spin_button, true, true, 0);
+    _layout_table.attach(_spin_button,
+                         1, 2, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::FILL);
     gtk_signal_connect_object(GTK_OBJECT(_spin_button.gobj()), "activate",
                               GTK_SIGNAL_FUNC(gtk_window_activate_default),
                               gobj());
 
-    gtk_box_pack_start(GTK_BOX(_b4.gobj()), _unit_selector, FALSE, FALSE, 0);
+    _layout_table.attach(*_unit_selector,
+                         2, 3, 2, 3, Gtk::FILL, Gtk::FILL);
 
 
     // dialog
@@ -184,17 +170,15 @@ void GuidelinePropertiesDialog::_setup() {
     _oldpos = _guide->position;
     {
         gchar *guide_description = sp_guide_description(_guide);
-        gchar *label = g_strdup_printf(_("Move %s"), guide_description);
-        g_free(guide_description);
-        _label.set_label(label);
-        g_free(label);
-
         Inkscape::XML::Node *repr = SP_OBJECT_REPR (_guide);
         const gchar *guide_id = repr->attribute("id");
-        _label_id.set_label(guide_id);
+        gchar *label = g_strdup_printf(_("Moving %s %s"), guide_description, guide_id);
+        g_free(guide_description);
+        _label_descr.set_label(label);
+        g_free(label);
     }
 
-    SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_unit_selector));
+    SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(unit_selector));
     gdouble const val = sp_pixels_get_units(_oldpos, unit);
     _spin_button.set_value(val);
     _spin_button.grab_focus();