document-properties.cpp revision 7073d105e612f7dc898c292742bee9655d2a51b2
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix/** \file
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix *
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Document properties dialog, Gtkmm-style
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix *
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Authors:
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * bulia byak <buliabyak@users.sf.net>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Bryce W. Harrington <bryce@bryceharrington.org>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Lauris Kaplinski <lauris@kaplinski.com>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Jon Phillips <jon@rejon.org>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix *
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Copyright (C) 2006-2008 Johan Engelen <johan@shouraizou.nl>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Copyright (C) 2000 - 2005 Authors
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix *
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Released under GNU GPL. Read the file 'COPYING' for more information
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#ifdef HAVE_CONFIG_H
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix# include <config.h>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#endif
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include <gtkmm.h>
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "ui/widget/color-picker.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "ui/widget/scalar-unit.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "xml/node-event-vector.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "helper/units.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "prefs-utils.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "inkscape.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "verbs.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "document.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "desktop-handles.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "desktop.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "sp-namedview.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "widgets/icon.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "document-properties.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#include "display/canvas-grid.h"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixusing std::pair;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixnamespace Inkscape {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixnamespace UI {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixnamespace Dialog {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#define SPACE_SIZE_X 15
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#define SPACE_SIZE_Y 10
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#define INKSCAPE_ICON_GRID_XY "grid_xy"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix#define INKSCAPE_ICON_GRID_AXONOM "grid_axonom"
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix//===================================================
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix//---------------------------------------------------
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void on_child_added(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void * data);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void on_child_removed(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void * data);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void on_repr_attr_changed (Inkscape::XML::Node *, gchar const *, gchar const *, gchar const *, bool, gpointer);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic Inkscape::XML::NodeEventVector const _repr_events = {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix on_child_added, /* child_added */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix on_child_removed, /* child_removed */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix on_repr_attr_changed,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix NULL, /* content_changed */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix NULL /* order_changed */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix};
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties &
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::getInstance()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix DocumentProperties &instance = *new DocumentProperties();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix instance.init();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix return instance;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::DocumentProperties()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix : UI::Widget::Panel ("", "dialogs.documentoptions", SP_VERB_DIALOG_NAMEDVIEW),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_page(1, 1), _page_guides(1, 1),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_snap(1, 1), _page_snap_dtls(1, 1),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_label_crea("", Gtk::ALIGN_LEFT),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_new(_("_New"), _("Create new grid.")),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_remove(_("_Remove"), _("Remove selected grid.")),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_label_def("", Gtk::ALIGN_LEFT),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _prefs_path("dialogs.documentoptions")
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _tt.enable();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _getContents()->set_spacing (4);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _getContents()->pack_start(_notebook, true, true);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _notebook.append_page(_page_page, _("Page"));
13223d251a0eca100512280a15dc9b2213a28809cilix _notebook.append_page(_page_guides, _("Guides"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _notebook.append_page(_grids_vbox, _("Grids"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _notebook.append_page(_page_snap, _("Snap"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _notebook.append_page(_page_snap_dtls, _("Snap points"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix build_page();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix build_guides();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix build_gridspage();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix build_snap();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix build_snap_dtls();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_new.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::onNewGrid));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_remove.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::onRemoveGrid));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix signalDocumentReplaced().connect(sigc::mem_fun(*this, &DocumentProperties::_handleDocumentReplaced));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix signalActivateDesktop().connect(sigc::mem_fun(*this, &DocumentProperties::_handleActivateDesktop));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix signalDeactiveDesktop().connect(sigc::mem_fun(*this, &DocumentProperties::_handleDeactivateDesktop));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::init()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix update();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(getDesktop()));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix repr->addListener (&_repr_events, this);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::XML::Node *root = SP_OBJECT_REPR(sp_desktop_document(getDesktop())->root);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix root->addListener (&_repr_events, this);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix show_all_children();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_remove.hide();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::~DocumentProperties()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(getDesktop()));
fa90912de6e92199e5fa5957d1d47fd485abc011cilix repr->removeListenerByData (this);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *root = SP_OBJECT_REPR(sp_desktop_document(getDesktop())->root);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix root->removeListenerByData (this);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix//========================================================================
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix/**
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Helper function that attaches widgets in a 3xn table. The widgets come in an
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * array that has two entries per table row. The two entries code for four
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * possible cases: (0,0) means insert space in first column; (0, non-0) means
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * widget in columns 2-3; (non-0, 0) means label in columns 1-3; and
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * (non-0, non-0) means two widgets in columns 2 and 3.
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix**/
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixinline void
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixattach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned const n, int start = 0)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix for (unsigned i = 0, r = start; i < n; i += 2)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (arr[i] && arr[i+1])
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix table.attach(*arr[i], 1, 2, r, r+1,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix table.attach(*arr[i+1], 2, 3, r, r+1,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix else
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (arr[i+1])
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix table.attach(*arr[i+1], 1, 3, r, r+1,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix else if (arr[i])
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label& label = reinterpret_cast<Gtk::Label&>(*arr[i]);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label.set_alignment (0.0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix table.attach (label, 0, 3, r, r+1,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix else
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::HBox *space = manage (new Gtk::HBox);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix table.attach (*space, 0, 1, r, r+1,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix ++r;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::build_page()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_page.show();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bg.init(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Back_ground:"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Background color"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Color and transparency of the page background (also used for bitmap export)"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "pagecolor", "inkscape:pageopacity", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_canb = Gtk::manage( new RegisteredCheckButton(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Show page _border"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, rectangular page border is shown"), "showborder", _wr, false) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_bord = Gtk::manage( new RegisteredCheckButton(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Border on _top of drawing"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, border is always on top of the drawing"), "borderlayer", _wr, false) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bord.init (_("Border _color:"), _("Page border color"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Color of the page border"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "bordercolor", "borderopacity", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_shad = Gtk::manage( new RegisteredCheckButton(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("_Show border shadow"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, page border shows a shadow on its right and lower side"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:showpageshadow", _wr, false) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rum_deflt.init (_("Default _units:"), "inkscape:document-units", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label* label_gen = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gen->set_markup (_("<b>General</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label* label_bor = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_bor->set_markup (_("<b>Border</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_for = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_for->set_markup (_("<b>Format</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_sizer.init (_wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Widget *const widget_array[] =
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gen, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rum_deflt._label, _rum_deflt._sel,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bg._label, _rcp_bg._cp,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_for, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, &_page_sizer,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_bor, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcb_canb,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcb_bord,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcb_shad,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bord._label, _rcp_bord._cp,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix };
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix attach_all(_page_page.table(), widget_array, G_N_ELEMENTS(widget_array));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::build_guides()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_guides.show();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_sgui = Gtk::manage( new RegisteredCheckButton(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Show _guides"), _("Show or hide guides"), "showguides", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_gui.init (_("Guide co_lor:"), _("Guideline color"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Color of guidelines"), "guidecolor", "guideopacity", _wr);
850cbc29823aa92a03e97caba1e3102b53d7c833cilix _rcp_hgui.init (_("_Highlight color:"), _("Highlighted guideline color"),
850cbc29823aa92a03e97caba1e3102b53d7c833cilix _("Color of a guideline when it is under mouse"),
850cbc29823aa92a03e97caba1e3102b53d7c833cilix "guidehicolor", "guidehiopacity", _wr);
850cbc29823aa92a03e97caba1e3102b53d7c833cilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsng = Gtk::manage( new RegisteredCheckButton(
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("_Snap guides while dragging"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("While dragging a guide, snap to object nodes or bounding box corners ('Snap to nodes' or 'snap to bounding box corners' must be enabled in the 'Snap' tab; only a small part of the guide near the cursor will snap)"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-guide", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_gui = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gui->set_markup (_("<b>Guides</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Widget *const widget_array[] =
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gui, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcb_sgui,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_gui._label, _rcp_gui._cp,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_hgui._label, _rcp_hgui._cp,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsng,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix };
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix attach_all(_page_guides.table(), widget_array, G_N_ELEMENTS(widget_array));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::build_snap()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_snap.show();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //General options
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsg = Gtk::manage( new RegisteredCheckButton( _("_Enable snapping"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Toggle snapping on or off"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-global", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbb = Gtk::manage( new RegisteredCheckButton( _("_Bounding box corners"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Only available in the selector tool: snap bounding box corners to guides, to grids, and to other bounding boxes (but not to nodes or paths)"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-bbox", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnn = Gtk::manage( new RegisteredCheckButton( _("_Nodes"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap nodes (e.g. path nodes, special points in shapes, gradient handles, text base points, transformation origins, etc.) to guides, to grids, to paths and to other nodes"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-nodes", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Options for snapping to objects
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnop = Gtk::manage( new RegisteredCheckButton( _("Snap to path_s"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap nodes to object paths"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:object-paths", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnon = Gtk::manage( new RegisteredCheckButton( _("Snap to n_odes"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap nodes and guides to object nodes"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:object-nodes", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbbn = Gtk::manage( new RegisteredCheckButton( _("Snap to bounding box co_rners"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap bounding box corners to other bounding box corners"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:bbox-nodes", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbbp = Gtk::manage( new RegisteredCheckButton( _("Snap to bounding bo_x edges"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap bounding box corners and guides to bounding box edges"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:bbox-paths", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_sno.init (_("Snap _distance"), _("Snap only when _closer than:"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snapping distance, in screen pixels, for snapping to objects"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, objects only snap to another object when it's within the range specified below"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "objecttolerance", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Options for snapping to grids
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_sn.init (_("Snap d_istance"), _("Snap only when c_loser than:"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snapping distance, in screen pixels, for snapping to grid"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, objects only snap to a grid line when it's within the range specified below"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "gridtolerance", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Options for snapping to guides
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_gusn.init (_("Snap dist_ance"), _("Snap only when close_r than:"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snapping distance, in screen pixels, for snapping to guides"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("If set, objects only snap to a guide when it's within the range specified below"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "guidetolerance", _wr);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Other options to locate here: e.g. visual snapping indicators on/off
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix std::list<Gtk::ToggleButton*> slaves;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnop);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnon);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnn->setSlaveButton(slaves);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.clear();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnbbp);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnbbn);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbb->setSlaveButton(slaves);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.clear();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnn);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix slaves.push_back(_rcbsnbb);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsg->setSlaveButton(slaves);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_g = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_g->set_markup (_("<b>Snapping</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_w = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_w->set_markup (_("<b>What snaps</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_o = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_o->set_markup (_("<b>Snap to objects</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_gr = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gr->set_markup (_("<b>Snap to grids</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_gu = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gu->set_markup (_("<b>Snap to guides</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Widget *const array[] =
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_g, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsg,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_w, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnn,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnbb,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_o, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnop,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnon,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnbbp,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsnbbn,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rsu_sno._vbox,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gr, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rsu_sn._vbox,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_gu, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rsu_gusn._vbox
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix };
fa90912de6e92199e5fa5957d1d47fd485abc011cilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix attach_all(_page_snap.table(), array, G_N_ELEMENTS(array));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::build_snap_dtls()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_snap_dtls.show();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsigg = Gtk::manage( new RegisteredCheckButton( _("_Grid with guides"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap to grid-guide intersections"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-intersection-grid-guide", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsils = Gtk::manage( new RegisteredCheckButton( _("_Line segments"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Snap to intersections of line segments ('snap to paths' must be enabled, see the previous tab)"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-intersection-line-segments", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Applies to both nodes and guides, but not to bboxes, that's why its located here
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbic = Gtk::manage( new RegisteredCheckButton( _("Rotation _center"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _("Consider the rotation center of an object when snapping"),
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix "inkscape:snap-center", _wr) );
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //Other options to locate here: e.g. visual snapping indicators on/off
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_i= manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_i->set_markup (_("<b>Snapping to intersections of</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *label_m = manage (new Gtk::Label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_m->set_markup (_("<b>Snapping to special nodes</b>"));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Widget *const array[] =
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_i, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsigg,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbsils,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_m, 0,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix 0, _rcbic,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix };
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix attach_all(_page_snap_dtls.table(), array, G_N_ELEMENTS(array));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix/**
13223d251a0eca100512280a15dc9b2213a28809cilix* Called for _updating_ the dialog (e.g. when a new grid was manually added in XML)
13223d251a0eca100512280a15dc9b2213a28809cilix*/
13223d251a0eca100512280a15dc9b2213a28809cilixvoid
13223d251a0eca100512280a15dc9b2213a28809cilixDocumentProperties::update_gridspage()
850cbc29823aa92a03e97caba1e3102b53d7c833cilix{
13223d251a0eca100512280a15dc9b2213a28809cilix SPDesktop *dt = getDesktop();
13223d251a0eca100512280a15dc9b2213a28809cilix SPNamedView *nv = sp_desktop_namedview(dt);
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix //remove all tabs
13223d251a0eca100512280a15dc9b2213a28809cilix while (_grids_notebook.get_n_pages() != 0) {
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_notebook.remove_page(-1); // this also deletes the page.
13223d251a0eca100512280a15dc9b2213a28809cilix }
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix //add tabs
13223d251a0eca100512280a15dc9b2213a28809cilix bool grids_present = false;
13223d251a0eca100512280a15dc9b2213a28809cilix for (GSList const * l = nv->grids; l != NULL; l = l->next) {
13223d251a0eca100512280a15dc9b2213a28809cilix Inkscape::CanvasGrid * grid = (Inkscape::CanvasGrid*) l->data;
13223d251a0eca100512280a15dc9b2213a28809cilix if (!grid->repr->attribute("id")) continue; // update_gridspage is called again when "id" is added
13223d251a0eca100512280a15dc9b2213a28809cilix Glib::ustring name(grid->repr->attribute("id"));
13223d251a0eca100512280a15dc9b2213a28809cilix const char *icon = NULL;
13223d251a0eca100512280a15dc9b2213a28809cilix switch (grid->getGridType()) {
13223d251a0eca100512280a15dc9b2213a28809cilix case GRID_RECTANGULAR:
13223d251a0eca100512280a15dc9b2213a28809cilix icon = INKSCAPE_ICON_GRID_XY;
13223d251a0eca100512280a15dc9b2213a28809cilix break;
13223d251a0eca100512280a15dc9b2213a28809cilix case GRID_AXONOMETRIC:
13223d251a0eca100512280a15dc9b2213a28809cilix icon = INKSCAPE_ICON_GRID_AXONOM;
13223d251a0eca100512280a15dc9b2213a28809cilix break;
13223d251a0eca100512280a15dc9b2213a28809cilix default:
13223d251a0eca100512280a15dc9b2213a28809cilix break;
13223d251a0eca100512280a15dc9b2213a28809cilix }
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_notebook.append_page(*grid->newWidget(), _createPageTabLabel(name, icon));
13223d251a0eca100512280a15dc9b2213a28809cilix grids_present = true;
13223d251a0eca100512280a15dc9b2213a28809cilix }
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_notebook.show_all();
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix if (grids_present)
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_button_remove.show();
13223d251a0eca100512280a15dc9b2213a28809cilix else
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_button_remove.hide();
13223d251a0eca100512280a15dc9b2213a28809cilix}
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix/**
13223d251a0eca100512280a15dc9b2213a28809cilix * Build grid page of dialog.
13223d251a0eca100512280a15dc9b2213a28809cilix */
13223d251a0eca100512280a15dc9b2213a28809cilixvoid
13223d251a0eca100512280a15dc9b2213a28809cilixDocumentProperties::build_gridspage()
13223d251a0eca100512280a15dc9b2213a28809cilix{
13223d251a0eca100512280a15dc9b2213a28809cilix /// \todo FIXME: gray out snapping when grid is off.
13223d251a0eca100512280a15dc9b2213a28809cilix /// Dissenting view: you want snapping without grid.
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix SPDesktop *dt = getDesktop();
13223d251a0eca100512280a15dc9b2213a28809cilix SPNamedView *nv = sp_desktop_namedview(dt);
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_label_crea.set_markup(_("<b>Creation</b>"));
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_label_def.set_markup(_("<b>Defined grids</b>"));
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_hbox_crea.pack_start(_grids_combo_gridtype, true, true);
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_hbox_crea.pack_start(_grids_button_new, true, true);
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix for (gint t = 0; t <= GRID_MAXTYPENR; t++) {
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_combo_gridtype.append_text( CanvasGrid::getName( (GridType) t ) );
13223d251a0eca100512280a15dc9b2213a28809cilix }
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_combo_gridtype.set_active_text( CanvasGrid::getName(GRID_RECTANGULAR) );
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_space.set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y);
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_vbox.set_spacing(4);
13223d251a0eca100512280a15dc9b2213a28809cilix _grids_vbox.pack_start(_grids_label_crea, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_vbox.pack_start(_grids_hbox_crea, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_vbox.pack_start(_grids_space, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_vbox.pack_start(_grids_label_def, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_vbox.pack_start(_grids_notebook, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_vbox.pack_start(_grids_button_remove, false, false);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _grids_button_remove.hide();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix update_gridspage();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix/**
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Update dialog widgets from desktop. Also call updateWidget routines of the grids.
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixDocumentProperties::update()
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (_wr.isUpdating()) return;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix SPDesktop *dt = getDesktop();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix SPNamedView *nv = sp_desktop_namedview(dt);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _wr.setUpdating (true);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix set_sensitive (true);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //-----------------------------------------------------------page page
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bg.setRgba32 (nv->pagecolor);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_canb->setActive (nv->showborder);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_bord->setActive (nv->borderlayer == SP_BORDER_LAYER_TOP);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bord.setRgba32 (nv->bordercolor);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_shad->setActive (nv->showpageshadow);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (nv->doc_units)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rum_deflt.setUnit (nv->doc_units);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix double const doc_w_px = sp_document_width(sp_desktop_document(dt));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix double const doc_h_px = sp_document_height(sp_desktop_document(dt));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _page_sizer.setDim (doc_w_px, doc_h_px);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //-----------------------------------------------------------guide
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcb_sgui->setActive (nv->showguides);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_gui.setRgba32 (nv->guidecolor);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_hgui.setRgba32 (nv->guidehicolor);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //-----------------------------------------------------------snap
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbb->setActive (nv->snap_manager.getSnapModeBBox());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnn->setActive (nv->snap_manager.getSnapModeNode());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsng->setActive (nv->snap_manager.getSnapModeGuide());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbic->setActive (nv->snap_manager.getIncludeItemCenter());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsigg->setActive (nv->snap_manager.getSnapIntersectionGG());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsils->setActive (nv->snap_manager.getSnapIntersectionLS());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnop->setActive(nv->snap_manager.object.getSnapToItemPath());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnon->setActive(nv->snap_manager.object.getSnapToItemNode());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbbp->setActive(nv->snap_manager.object.getSnapToBBoxPath());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsnbbn->setActive(nv->snap_manager.object.getSnapToBBoxNode());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_sno.setValue (nv->objecttolerance);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_sn.setValue (nv->gridtolerance);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rsu_gusn.setValue (nv->guidetolerance);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcbsg->setActive (nv->snap_manager.getSnapEnabledGlobally());
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix //-----------------------------------------------------------grids page
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix update_gridspage();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _wr.setUpdating (false);
67f112a66b477fe7fb28c644a4deaf0793533838joncruz}
67f112a66b477fe7fb28c644a4deaf0793533838joncruz
67f112a66b477fe7fb28c644a4deaf0793533838joncruz// TODO: copied from fill-and-stroke.cpp factor out into new ui/widget file?
67f112a66b477fe7fb28c644a4deaf0793533838joncruzGtk::HBox&
67f112a66b477fe7fb28c644a4deaf0793533838joncruzDocumentProperties::_createPageTabLabel(const Glib::ustring& label, const char *label_image)
67f112a66b477fe7fb28c644a4deaf0793533838joncruz{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::HBox *_tab_label_box = manage(new Gtk::HBox(false, 0));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _tab_label_box->set_spacing(4);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _tab_label_box->pack_start(*Glib::wrap(sp_icon_new(Inkscape::ICON_SIZE_DECORATION,
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix label_image)));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Gtk::Label *_tab_label = manage(new Gtk::Label(label, true));
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _tab_label_box->pack_start(*_tab_label);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _tab_label_box->show_all();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix return *_tab_label_box;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix//--------------------------------------------------------------------
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixvoid
fa90912de6e92199e5fa5957d1d47fd485abc011cilixDocumentProperties::on_response (int id)
fa90912de6e92199e5fa5957d1d47fd485abc011cilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (id == Gtk::RESPONSE_DELETE_EVENT || id == Gtk::RESPONSE_CLOSE)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bg.closeWindow();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_bord.closeWindow();
13223d251a0eca100512280a15dc9b2213a28809cilix _rcp_gui.closeWindow();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix _rcp_hgui.closeWindow();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (id == Gtk::RESPONSE_CLOSE)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix hide();
fa90912de6e92199e5fa5957d1d47fd485abc011cilix}
fa90912de6e92199e5fa5957d1d47fd485abc011cilix
fa90912de6e92199e5fa5957d1d47fd485abc011cilixvoid
fa90912de6e92199e5fa5957d1d47fd485abc011cilixDocumentProperties::_handleDocumentReplaced(SPDesktop* desktop, SPDocument *document)
fa90912de6e92199e5fa5957d1d47fd485abc011cilix{
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
fa90912de6e92199e5fa5957d1d47fd485abc011cilix repr->addListener(&_repr_events, this);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *root = SP_OBJECT_REPR(document->root);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix root->addListener(&_repr_events, this);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix update();
fa90912de6e92199e5fa5957d1d47fd485abc011cilix}
fa90912de6e92199e5fa5957d1d47fd485abc011cilix
fa90912de6e92199e5fa5957d1d47fd485abc011cilixvoid
fa90912de6e92199e5fa5957d1d47fd485abc011cilixDocumentProperties::_handleActivateDesktop(Inkscape::Application *, SPDesktop *desktop)
fa90912de6e92199e5fa5957d1d47fd485abc011cilix{
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
fa90912de6e92199e5fa5957d1d47fd485abc011cilix repr->addListener(&_repr_events, this);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *root = SP_OBJECT_REPR(sp_desktop_document(desktop)->root);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix root->addListener(&_repr_events, this);
fa90912de6e92199e5fa5957d1d47fd485abc011cilix update();
fa90912de6e92199e5fa5957d1d47fd485abc011cilix}
fa90912de6e92199e5fa5957d1d47fd485abc011cilix
fa90912de6e92199e5fa5957d1d47fd485abc011cilixvoid
fa90912de6e92199e5fa5957d1d47fd485abc011cilixDocumentProperties::_handleDeactivateDesktop(Inkscape::Application *, SPDesktop *desktop)
fa90912de6e92199e5fa5957d1d47fd485abc011cilix{
fa90912de6e92199e5fa5957d1d47fd485abc011cilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(desktop));
fa90912de6e92199e5fa5957d1d47fd485abc011cilix repr->removeListenerByData(this);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::XML::Node *root = SP_OBJECT_REPR(sp_desktop_document(desktop)->root);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix root->removeListenerByData(this);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixon_child_added(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node */*child*/, Inkscape::XML::Node */*ref*/, void *data)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (DocumentProperties *dialog = static_cast<DocumentProperties *>(data))
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix dialog->update_gridspage();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixon_child_removed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node */*child*/, Inkscape::XML::Node */*ref*/, void *data)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (DocumentProperties *dialog = static_cast<DocumentProperties *>(data))
13223d251a0eca100512280a15dc9b2213a28809cilix dialog->update_gridspage();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix/**
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix * Called when XML node attribute changed; updates dialog widgets.
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix */
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixstatic void
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilixon_repr_attr_changed (Inkscape::XML::Node *, gchar const *, gchar const *, gchar const *, bool, gpointer data)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix{
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (DocumentProperties *dialog = static_cast<DocumentProperties *>(data))
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix dialog->update();
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix}
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix
13223d251a0eca100512280a15dc9b2213a28809cilix/*########################################################################
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix# BUTTON CLICK HANDLERS (callbacks)
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix########################################################################*/
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilixvoid
13223d251a0eca100512280a15dc9b2213a28809cilixDocumentProperties::onNewGrid()
13223d251a0eca100512280a15dc9b2213a28809cilix{
13223d251a0eca100512280a15dc9b2213a28809cilix SPDesktop *dt = getDesktop();
13223d251a0eca100512280a15dc9b2213a28809cilix Inkscape::XML::Node *repr = SP_OBJECT_REPR(sp_desktop_namedview(dt));
13223d251a0eca100512280a15dc9b2213a28809cilix SPDocument *doc = sp_desktop_document(dt);
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix Glib::ustring typestring = _grids_combo_gridtype.get_active_text();
13223d251a0eca100512280a15dc9b2213a28809cilix CanvasGrid::writeNewGridToRepr(repr, doc, CanvasGrid::getGridTypeFromName(typestring.c_str()));
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix // toggle grid showing to ON:
13223d251a0eca100512280a15dc9b2213a28809cilix dt->showGrids(true);
13223d251a0eca100512280a15dc9b2213a28809cilix}
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilixvoid
13223d251a0eca100512280a15dc9b2213a28809cilixDocumentProperties::onRemoveGrid()
13223d251a0eca100512280a15dc9b2213a28809cilix{
13223d251a0eca100512280a15dc9b2213a28809cilix gint pagenum = _grids_notebook.get_current_page();
13223d251a0eca100512280a15dc9b2213a28809cilix if (pagenum == -1) // no pages
13223d251a0eca100512280a15dc9b2213a28809cilix return;
13223d251a0eca100512280a15dc9b2213a28809cilix
13223d251a0eca100512280a15dc9b2213a28809cilix SPDesktop *dt = getDesktop();
13223d251a0eca100512280a15dc9b2213a28809cilix SPNamedView *nv = sp_desktop_namedview(dt);
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::CanvasGrid * found_grid = NULL;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix int i = 0;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix for (GSList const * l = nv->grids; l != NULL; l = l->next, i++) { // not a very nice fix, but works.
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix Inkscape::CanvasGrid * grid = (Inkscape::CanvasGrid*) l->data;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (pagenum == i) {
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix found_grid = grid;
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix break; // break out of for-loop
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix }
4358ff6156766a315e38e72a5c3c83d6d5f7486bcilix if (found_grid) {
// delete the grid that corresponds with the selected tab
// when the grid is deleted from SVG, the SPNamedview handler automatically deletes the object, so found_grid becomes an invalid pointer!
found_grid->repr->parent()->removeChild(found_grid->repr);
sp_document_done(sp_desktop_document(dt), SP_VERB_DIALOG_NAMEDVIEW, _("Remove grid"));
}
}
} // namespace Dialog
} // namespace UI
} // namespace Inkscape
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0))
indent-tabs-mode:nilu
fill-column:99
End:
*/
// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :