summaryrefslogtreecommitdiffstats
path: root/src/dialogs/guidelinedialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dialogs/guidelinedialog.cpp')
-rw-r--r--src/dialogs/guidelinedialog.cpp220
1 files changed, 220 insertions, 0 deletions
diff --git a/src/dialogs/guidelinedialog.cpp b/src/dialogs/guidelinedialog.cpp
new file mode 100644
index 000000000..6f8639d4c
--- /dev/null
+++ b/src/dialogs/guidelinedialog.cpp
@@ -0,0 +1,220 @@
+#define __GUIDELINE_CPP__
+
+/*
+ * simple guideline dialog
+ *
+ * Authors:
+ * Lauris Kaplinski <lauris@kaplinski.com>
+ * Andrius R. <knutux@gmail.com>
+ *
+ * Copyright (C) 1999-2006 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "display/guideline.h"
+#include "helper/unit-menu.h"
+#include "helper/units.h"
+#include "desktop.h"
+#include "document.h"
+#include "sp-guide.h"
+#include "sp-namedview.h"
+#include "desktop-handles.h"
+#include "event-context.h"
+#include "widgets/desktop-widget.h"
+#include "sp-metrics.h"
+#include <glibmm/i18n.h>
+#include "dialogs/dialog-events.h"
+#include "message-context.h"
+#include "xml/repr.h"
+
+#include "guidelinedialog.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Dialogs {
+
+GuidelinePropertiesDialog::GuidelinePropertiesDialog(SPGuide *guide, SPDesktop *desktop)
+: _desktop(desktop), _guide(guide),
+ _a(0.0, -SP_DESKTOP_SCROLL_LIMIT, SP_DESKTOP_SCROLL_LIMIT, 1.0, 10.0, 10.0),
+ _u(NULL), _mode(true), _oldpos(0.0)
+{
+}
+
+GuidelinePropertiesDialog::~GuidelinePropertiesDialog() {
+ if ( NULL != _u) {
+ //g_free(_u);
+ }
+}
+
+void GuidelinePropertiesDialog::showDialog(SPGuide *guide, SPDesktop *desktop) {
+ GuidelinePropertiesDialog *dialog = new GuidelinePropertiesDialog(guide, desktop);
+ dialog->_setup();
+ dialog->run();
+ delete dialog;
+}
+
+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;
+ } 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;
+ }
+}
+
+void GuidelinePropertiesDialog::_onApply()
+{
+ gdouble const raw_dist = _e.get_value();
+ SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_u));
+ gdouble const points = sp_units_get_pixels(raw_dist, unit);
+ gdouble const newpos = ( _mode
+ ? points
+ : _guide->position + points );
+ sp_guide_moveto(*_guide, newpos, true);
+ sp_document_done(SP_OBJECT_DOCUMENT(_guide));
+}
+
+void GuidelinePropertiesDialog::_onOK()
+{
+ _onApply();
+}
+
+void GuidelinePropertiesDialog::_onDelete()
+{
+ SPDocument *doc = SP_OBJECT_DOCUMENT(_guide);
+ sp_guide_remove(_guide);
+ sp_document_done(doc);
+}
+
+void GuidelinePropertiesDialog::_response(gint response)
+{
+ switch (response) {
+ case Gtk::RESPONSE_OK:
+ _onOK();
+ break;
+ case -12:
+ _onDelete();
+ break;
+ case Gtk::RESPONSE_CLOSE:
+ break;
+ case Gtk::RESPONSE_DELETE_EVENT:
+ break;
+/* case GTK_RESPONSE_APPLY:
+ _onApply();
+ break;
+*/
+ default:
+ g_assert_not_reached();
+ }
+}
+
+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);
+
+ 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);
+
+ //labels
+ _b3.set_homogeneous(false);
+ _b3.set_spacing(4);
+ _b2.pack_start(_b3, true, true, 0);
+
+ _l1.set_label("foo1");
+ _b3.pack_start(_l1, true, true, 0);
+ _l1.set_alignment(1.0, 0.5);
+
+ _l2.set_label("foo2");
+ _b3.pack_start(_l2, true, true, 0);
+ _l2.set_alignment(0.0, 0.5);
+
+ _b4.set_homogeneous(false);
+ _b4.set_spacing(4);
+ _b2.pack_start(_b4, false, false, 0);
+
+ // 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);
+
+ // unitmenu
+ /* fixme: We should allow percents here too, as percents of the canvas size */
+ _u = sp_unit_selector_new(SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE);
+ sp_unit_selector_set_unit(SP_UNIT_SELECTOR(_u), _desktop->namedview->doc_units);
+
+ // spinbutton
+ sp_unit_selector_add_adjustment(SP_UNIT_SELECTOR(_u), GTK_ADJUSTMENT(_a.gobj()));
+ _e.configure(_a, 1.0 , 2);
+ _e.set_numeric(TRUE);
+ _b4.pack_start(_e, true, true, 0);
+ gtk_signal_connect_object(GTK_OBJECT(_e.gobj()), "activate",
+ GTK_SIGNAL_FUNC(gtk_window_activate_default),
+ gobj());
+
+ gtk_box_pack_start(GTK_BOX(_b4.gobj()), _u, FALSE, FALSE, 0);
+
+
+ // dialog
+ set_default_response(Gtk::RESPONSE_OK);
+ signal_response().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_response));
+
+ // initialize dialog
+ _oldpos = _guide->position;
+ {
+ gchar *guide_description = sp_guide_description(_guide);
+ gchar *label = g_strdup_printf(_("Move %s"), guide_description);
+ g_free(guide_description);
+ _l1.set_label(label);
+ g_free(label);
+ }
+
+ SPUnit const &unit = *sp_unit_selector_get_unit(SP_UNIT_SELECTOR(_u));
+ gdouble const val = sp_pixels_get_units(_oldpos, unit);
+ _e.set_value(val);
+ _e.grab_focus();
+ _e.select_region(0, 20);
+ set_position(Gtk::WIN_POS_MOUSE);
+
+ show_all_children();
+ set_modal(true);
+ _desktop->setWindowTransient (gobj());
+ property_destroy_with_parent() = true;
+}
+
+}
+}
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+