inkscape-preferences.cpp revision 8d634ca611595d2a85739d58cf6980d9169dd62c
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * \brief Inkscape Preferences dialog
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Carl Hetherington
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Marco Scholten
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Bruno Dilly <bruno.dilly@gmail.com>
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Copyright (C) 2004-2007 Authors
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Released under GNU GPL. Read the file 'COPYING' for more information.
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich : UI::Widget::Panel ("", "dialogs.preferences", SP_VERB_DIALOG_DISPLAY),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //get the width of a spinbutton
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::HBox* hbox_list_page = Gtk::manage(new Gtk::HBox());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::Frame* list_frame = Gtk::manage(new Gtk::Frame());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::ScrolledWindow* scrolled_window = Gtk::manage(new Gtk::ScrolledWindow());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich hbox_list_page->pack_start(*list_frame, false, true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich scrolled_window->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_list_model = Gtk::TreeStore::create(_page_list_columns);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_list.append_column("name",_page_list_columns._col_name);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Glib::RefPtr<Gtk::TreeSelection> page_list_selection = _page_list.get_selection();
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich page_list_selection->signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::on_pagelist_selection_changed));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich page_list_selection->set_mode(Gtk::SELECTION_BROWSE);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::VBox* vbox_page = Gtk::manage(new Gtk::VBox());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::Frame* title_frame = Gtk::manage(new Gtk::Frame());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich hbox_list_page->pack_start(*vbox_page, true, true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich vbox_page->pack_start(*title_frame, false, false, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich vbox_page->pack_start(_page_frame, true, true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich title_frame->set_shadow_type(Gtk::SHADOW_IN);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich signalPresent().connect(sigc::mem_fun(*this, &InkscapePreferences::_presentPages));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //calculate the size request for this dialog
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_list_model->foreach_iter(sigc::mem_fun(*this, &InkscapePreferences::SetMaxDialogSize));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _getContents()->set_size_request(_max_dialog_width, _max_dialog_height);
d3314a865df296da3830c262165d32c1741b653cKlaus LuettichGtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, int id)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich return AddPage(p, title, Gtk::TreeModel::iterator() , id);
d3314a865df296da3830c262165d32c1741b653cKlaus LuettichGtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent, int id)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich iter = _page_list_model->append((*parent).children());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_mouse, _("Mouse"), PREFS_PAGE_MOUSE);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _mouse_sens.init ( "options.cursortolerance", "value", 0.0, 30.0, 1.0, 1.0, 8.0, true, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_mouse.add_line( false, _("Grab sensitivity:"), _mouse_sens, _("pixels"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("How close on the screen you need to be to an object to be able to grab it with mouse (in screen pixels)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _mouse_thres.init ( "options.dragtolerance", "value", 0.0, 20.0, 1.0, 1.0, 4.0, true, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_mouse.add_line( false, _("Click/drag threshold:"), _mouse_thres, _("pixels"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Maximum mouse drag (in screen pixels) which is considered a click, not a drag"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _mouse_use_ext_input.init( _("Use pressure-sensitive tablet (requires restart)"), "options.useextinput", "value", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_mouse.add_line(true, "",_mouse_use_ext_input, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Use the capabilities of a tablet or other pressure-sensitive device. Disable this only if you have problems with the tablet (you can still use it as a mouse)"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_scrolling, _("Scrolling"), PREFS_PAGE_SCROLLING);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_wheel.init ( "options.wheelscroll", "value", 0.0, 1000.0, 1.0, 1.0, 40.0, true, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( false, _("Mouse wheel scrolls by:"), _scroll_wheel, _("pixels"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_group_header( _("Ctrl+arrows"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_arrow_px.init ( "options.keyscroll", "value", 0.0, 1000.0, 1.0, 1.0, 10.0, true, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( true, _("Scroll by:"), _scroll_arrow_px, _("pixels"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Pressing Ctrl+arrow key scrolls by this distance (in screen pixels)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_arrow_acc.init ( "options.scrollingacceleration", "value", 0.0, 5.0, 0.01, 1.0, 0.35, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( true, _("Acceleration:"), _scroll_arrow_acc, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_group_header( _("Autoscrolling"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_auto_speed.init ( "options.autoscrollspeed", "value", 0.0, 5.0, 0.01, 1.0, 0.7, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( true, _("Speed:"), _scroll_auto_speed, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_auto_thres.init ( "options.autoscrolldistance", "value", -600.0, 600.0, 1.0, 1.0, -10.0, true, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( true, _("Threshold:"), _scroll_auto_thres, _("pixels"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("How far (in screen pixels) you need to be from the canvas edge to trigger autoscroll; positive is outside the canvas, negative is within the canvas"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _scroll_space.init ( _("Left mouse button pans when Space is pressed"), "options.spacepans", "value", false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( false, "", _scroll_space, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("When on, pressing and holding Space and dragging with left mouse button pans canvas (as in Adobe Illustrator). When off, Space temporarily switches to Selector tool (default)."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _wheel_zoom.init ( _("Mouse wheel zooms by default"), "options.wheelzooms", "value", false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_scrolling.add_line( false, "", _wheel_zoom, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when off, it zooms with Ctrl and scrolls without Ctrl."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_steps, _("Steps"), PREFS_PAGE_STEPS);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_arrow.init ( "options.nudgedistance", "value", 0.0, 1000.0, 0.01, 1.0, 2.0, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //nudgedistance is limited to 1000 in select-context.cpp: use the same limit here
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, _("Arrow keys move by:"), _steps_arrow, _("px"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Pressing an arrow key moves selected object(s) or node(s) by this distance (in px units)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_scale.init ( "options.defaultscale", "value", 0.0, 1000.0, 0.01, 1.0, 2.0, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //defaultscale is limited to 1000 in select-context.cpp: use the same limit here
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, _("> and < scale by:"), _steps_scale, _("px"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Pressing > or < scales selection up or down by this increment (in px units)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_inset.init ( "options.defaultoffsetwidth", "value", 0.0, 3000.0, 0.01, 1.0, 2.0, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, _("Inset/Outset by:"), _steps_inset, _("px"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Inset and Outset commands displace the path by this distance (in px units)"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_compass.init ( _("Compass-like display of angles"), "options.compassangledisplay", "value", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, "", _steps_compass, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("When on, angles are displayed with 0 at north, 0 to 360 range, positive clockwise; otherwise with 0 at east, -180 to 180 range, positive counterclockwise"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Glib::ustring labels[num_items] = {"90", "60", "45", "36", "30", "22.5", "18", "15", "12", "10", "7.5", "6", "3", "2", "1", "0.5", _("None")};
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich int values[num_items] = {2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 24, 30, 60, 90, 180, 360, 0};
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_rot_snap.init("options.rotationsnapsperpi", "value", labels, values, num_items, 12);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, _("Rotation snaps every:"), _steps_rot_snap, _("degrees"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _steps_zoom.init ( "options.zoomincrement", "value", 101.0, 500.0, 1.0, 1.0, 1.414213562, true, true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_steps.add_line( false, _("Zoom in/out by:"), _steps_zoom, _("%"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"), false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettichvoid InkscapePreferences::AddSelcueCheckbox(DialogPage& p, const std::string& prefs_path, bool def_value)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich cb->init ( _("Show selection cue"), prefs_path, "selcue", def_value);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich p.add_line( false, "", *cb, "", _("Whether selected objects display a selection cue (the same as in selector)"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettichvoid InkscapePreferences::AddGradientCheckbox(DialogPage& p, const std::string& prefs_path, bool def_value)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich cb->init ( _("Enable gradient editing"), prefs_path, "gradientdrag", def_value);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich p.add_line( false, "", *cb, "", _("Whether selected objects display gradient editing controls"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettichvoid StyleFromSelectionToTool(gchar const *prefs_path, StyleSwatch *swatch)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Inkscape::Selection *selection = sp_desktop_selection(desktop);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE,
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("<b>No objects selected</b> to take the style from."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich /* TODO: If each item in the selection has the same style then don't consider it an error.
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * Maybe we should try to handle multiple selections anyway, e.g. the intersection of the
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich * style attributes for the selected items. */
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE,
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("<b>More than one object selected.</b> Cannot take style from multiple objects."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich SPCSSAttr *css = take_style_from_item (item);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich if (!css) return;
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich // only store text style for the text tool
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich if (!g_strrstr ((const gchar *) prefs_path, "text")) {
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich // we cannot store properties with uris - they will be invalid in other documents
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich sp_repr_css_change (inkscape_get_repr (INKSCAPE, prefs_path), css, "style");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich // update the swatch
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Inkscape::XML::Node *tool_repr = inkscape_get_repr(INKSCAPE, prefs_path);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich SPCSSAttr *css = sp_repr_css_attr_inherited(tool_repr, "style");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettichvoid InkscapePreferences::AddNewObjectsStyle(DialogPage& p, const std::string& prefs_path)
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich p.add_group_header( _("Create new objects with:"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich PrefRadioButton* current = Gtk::manage( new PrefRadioButton);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich current->init ( _("Last used style"), prefs_path, "usecurrent", 1, true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Apply the style you last set on an object"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich PrefRadioButton* own = Gtk::manage( new PrefRadioButton);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::Alignment* align = Gtk::manage( new Gtk::Alignment);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich own->init ( _("This tool's own style:"), prefs_path, "usecurrent", 0, false, current);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich p.set_tip( *own, _("Each tool may store its own style to apply to the newly created objects. Use the button below to set it."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich // style swatch
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Inkscape::XML::Node *tool_repr = inkscape_get_repr(INKSCAPE, prefs_path.c_str());
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::Button* button = Gtk::manage( new Gtk::Button(_("Take from selection"),true));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich SPCSSAttr *css = sp_repr_css_attr_inherited(tool_repr, "style");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich swatch = new StyleSwatch(css, _("This tool's style of new objects"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich button->signal_clicked().connect( sigc::bind( sigc::ptr_fun(StyleFromSelectionToTool), prefs_path.c_str(), swatch) );
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich own->changed_signal.connect( sigc::mem_fun(*button, &Gtk::Button::set_sensitive) );
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Remember the style of the (first) selected object as this tool's style"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::TreeModel::iterator iter_tools = this->AddPage(_page_tools, _("Tools"), PREFS_PAGE_TOOLS);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _path_tools = _page_list.get_model()->get_path(iter_tools);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _calligrapy_use_abs_size.init ( _("Width is in absolute units"), "tools.calligraphic", "abs_width", false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _calligrapy_keep_selected.init ( _("Select new path"), "tools.calligraphic", "keep_selected", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _connector_ignore_text.init( _("Don't attach connectors to text objects"), "tools.connector", "ignoretext", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_selector, _("Selector"), iter_tools, PREFS_PAGE_TOOLS_SELECTOR);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich AddSelcueCheckbox(_page_selector, "tools.select", false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_group_header( _("When transforming, show:"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_trans_obj.init ( _("Objects"), "tools.select", "show", "content", true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_trans_obj, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Show the actual objects when moving or transforming"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_trans_outl.init ( _("Box outline"), "tools.select", "show", "outline", false, &_t_sel_trans_obj);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_trans_outl, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Show only a box outline of the objects when moving or transforming"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_group_header( _("Per-object selection cue:"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_cue_none.init ( _("None"), "options.selcue", "value", Inkscape::SelCue::NONE, false, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_cue_none, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("No per-object selection indication"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_cue_mark.init ( _("Mark"), "options.selcue", "value", Inkscape::SelCue::MARK, true, &_t_sel_cue_none);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_cue_mark, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Each selected object has a diamond mark in the top left corner"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_cue_box.init ( _("Box"), "options.selcue", "value", Inkscape::SelCue::BBOX, false, &_t_sel_cue_none);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_cue_box, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("Each selected object displays its bounding box"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_group_header( _("Bounding box to use:"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_bbox_visual.init ( _("Visual bounding box"), "tools.select", "bounding_box", "visual", false, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_bbox_visual, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("This bounding box includes stroke width, markers, filter margins, etc."));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_sel_bbox_geometric.init ( _("Geometric bounding box"), "tools.select", "bounding_box", "geometric", true, &_t_sel_bbox_visual);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_selector.add_line( true, "", _t_sel_bbox_geometric, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("This bounding box includes only the bare path"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_node, _("Node"), iter_tools, PREFS_PAGE_TOOLS_NODE);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich AddSelcueCheckbox(_page_node, "tools.nodes", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich AddGradientCheckbox(_page_node, "tools.nodes", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich AddSelcueCheckbox(_page_zoom, "tools.zoom", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich AddGradientCheckbox(_page_zoom, "tools.zoom", false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _path_shapes = _page_list.get_model()->get_path(iter_shapes);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_shapes, "tools.shapes", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddGradientCheckbox(_page_shapes, "tools.shapes", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_RECT);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_rectangle, "tools.shapes.rect");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_3dbox, _("3D Box"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_3DBOX);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_3dbox, "tools.shapes.3dbox");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_ellipse, "tools.shapes.arc");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_star, "tools.shapes.star");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_spiral, _("Spiral"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_SPIRAL);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_spiral, "tools.shapes.spiral");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_pencil, _("Pencil"), iter_tools, PREFS_PAGE_TOOLS_PENCIL);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_pencil, "tools.freehand.pencil", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _t_pencil_tolerance.init ( "tools.freehand.pencil", "tolerance", 0.0, 100.0, 0.5, 1.0, 10.0, false, false);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_pencil.add_line( false, _("Tolerance:"), _t_pencil_tolerance, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("This value affects the amount of smoothing applied to freehand lines; lower values produce more uneven paths with more nodes"),
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_pencil, "tools.freehand.pencil");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_pen, _("Pen"), iter_tools, PREFS_PAGE_TOOLS_PEN);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_pen, "tools.freehand.pen", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_pen, "tools.freehand.pen");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //Calligraphy
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools, PREFS_PAGE_TOOLS_CALLIGRAPHY);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_calligraphy, "tools.calligraphic");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_calligraphy.add_line( false, "", _calligrapy_use_abs_size, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("If on, pen width is in absolute units (px) independent of zoom; otherwise pen width depends on zoom so that it looks the same at any zoom"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_calligraphy.add_line( false, "", _calligrapy_keep_selected, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("If on, each newly created object will be selected (deselecting previous selection)"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich //Paint Bucket
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_paintbucket, _("Paint Bucket"), iter_tools, PREFS_PAGE_TOOLS_PAINTBUCKET);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_paintbucket, "tools.paintbucket");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_text, "tools.text", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddGradientCheckbox(_page_text, "tools.text", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddNewObjectsStyle(_page_text, "tools.text");
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_gradient, _("Gradient"), iter_tools, PREFS_PAGE_TOOLS_GRADIENT);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_gradient, "tools.gradient", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_connector, _("Connector"), iter_tools, PREFS_PAGE_TOOLS_CONNECTOR);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_connector, "tools.connector", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _page_connector.add_line(false, "", _connector_ignore_text, "",
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _("If on, connector attachment points will not be shown for text objects"));
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddPage(_page_dropper, _("Dropper"), iter_tools, PREFS_PAGE_TOOLS_DROPPER);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddSelcueCheckbox(_page_dropper, "tools.dropper", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich this->AddGradientCheckbox(_page_dropper, "tools.dropper", true);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _win_save_geom.init ( _("Save and restore window geometry for each document"), "options.savewindowgeometry", "value", 1, true, 0);
d3314a865df296da3830c262165d32c1741b653cKlaus Luettich _win_save_geom_prefs.init ( _("Remember and use last window's geometry"), "options.savewindowgeometry", "value", 2, false, &_win_save_geom);
_win_save_geom_off.init ( _("Don't save window geometry"), "options.savewindowgeometry", "value", 0, false, &_win_save_geom);
_win_hide_task.init ( _("Dialogs are hidden in taskbar"), "options.dialogsskiptaskbar", "value", true);
_win_ontop_normal.init ( _("Normal"), "options.transientpolicy", "value", 1, true, &_win_ontop_none);
_win_ontop_agressive.init ( _("Aggressive"), "options.transientpolicy", "value", 2, false, &_win_ontop_none);
#ifdef WIN32
_win_ontop_win32.init ( _("Dialogs stay on top (experimental!)"), "options.dialogsontopwin32", "value", false);
_("Whether dialogs should stay on top of document windows. Read the ReleaseNotes on this issue! (Rightclick the taskbar button and press 'Restore' to bring back a minimized document window)"));
_("Zoom drawing when document window is resized, to keep the same area visible (this is the default which can be changed in any window using the button above the right scrollbar)"));
SP_CLONE_COMPENSATION_PARALLEL, true, 0);
_clone_option_transform.init ( _("Move according to transform"), "options.clonecompensation", "value",
SP_CLONE_ORPHANS_UNLINK, true, 0);
_("Each clone moves according to the value of its transform= attribute. For example, a rotated clone will move in a different direction than its original."));
_mask_mask_on_top.init ( _("When applying, use the topmost selected object as clippath/mask"), "options.maskobject", "topmost", true);
_mask_mask_remove.init ( _("Remove clippath/mask object after applying"), "options.maskobject", "remove", true);
_trans_scale_corner.init ( _("Scale rounded corners in rectangles"), "options.transform", "rectcorners", false);
_trans_preserved.init ( _("Preserved"), "options.preservetransform", "value", 1, false, &_trans_optimized);
BLUR_QUALITY_BEST, false, 0);
_("Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)"));
_sel_all.init ( _("Select in all layers"), "options.kbselection", "inlayer", PREFS_SELECTION_ALL, false, 0);
_sel_current.init ( _("Select only within current layer"), "options.kbselection", "inlayer", PREFS_SELECTION_LAYER, true, &_sel_all);
_sel_recursive.init ( _("Select in current layer and sublayers"), "options.kbselection", "inlayer", PREFS_SELECTION_LAYER_RECURSIVE, false, &_sel_all);
_sel_layer_deselects.init ( _("Deselect upon layer change"), "options.selection", "layerdeselect", true);
_("Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden group or layer)"));
_("Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked group or layer)"));
_importexport_export.init("dialogs.export.defaultxdpi", "value", 0.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
_page_importexport.add_line( false, _("Default export resolution:"), _importexport_export, _("dpi"),
_page_importexport.add_line( false, _("Open Clip Art Library Server Name:"), _importexport_ocal_url, "",
_("The server name of the Open Clip Art Library webdav server. It's used by the Import and Export to OCAL function."), true);
_page_importexport.add_line( false, _("Open Clip Art Library Username:"), _importexport_ocal_username, "",
_page_importexport.add_line( false, _("Open Clip Art Library Password:"), _importexport_ocal_password, "",
#if ENABLE_LCMS
/* TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm */
Glib::ustring intentLabels[numIntents] = {_("Perceptual"), _("Relative Colorimetric"), _("Saturation"), _("Absolute Colorimetric")};
#if !ENABLE_LCMS
_cms_from_display.init( _("Retrieve profile from display"), "options.displayprofile", "from_display", false);
#ifdef GDK_WINDOWING_X11
#if defined(cmsFLAGS_PRESERVEBLACK)
#if !defined(cmsFLAGS_PRESERVEBLACK)
#if ENABLE_LCMS
index++;
index++;
index = 0;
index++;
_cms_gamutcolor.signal_color_set().connect( sigc::bind( sigc::ptr_fun(gamutColorChanged), &_cms_gamutcolor) );
_cms_display_profile.signal_changed().connect( sigc::bind( sigc::ptr_fun(profileComboChanged), &_cms_display_profile) );
_cms_proof_profile.signal_changed().connect( sigc::bind( sigc::ptr_fun(proofComboChanged), &_cms_proof_profile) );
_grids_xy_origin_x.init("options.grids.xy", "origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false);
_grids_xy_origin_y.init("options.grids.xy", "origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false);
_grids_xy.add_line( false, _("Origin X"), _grids_xy_origin_x, "", _("X coordinate of grid origin"), false);
_grids_xy.add_line( false, _("Origin Y"), _grids_xy_origin_y, "", _("Y coordinate of grid origin"), false);
_grids_xy_spacing_x.init("options.grids.xy", "spacing_x", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false);
_grids_xy_spacing_y.init("options.grids.xy", "spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false);
_grids_xy.add_line( false, _("Spacing X"), _grids_xy_spacing_x, "", _("Distance between vertical grid lines"), false);
_grids_xy.add_line( false, _("Spacing Y"), _grids_xy_spacing_y, "", _("Distance between horizontal grid lines"), false);
_grids_xy.add_line( false, _("Grid line color"), _grids_xy_color, "", _("Selects the color used for normal grid lines."), false);
_grids_xy.add_line( false, _("Major grid line color"), _grids_xy_empcolor, "", _("Selects the color used for major (highlighted) grid lines."), false);
_grids_xy_empspacing.init("options.grids.xy", "empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false);
_grids_xy.add_line( false, "", _grids_xy_dotted, "", _("If set, displays dots at gridpoints instead of gridlines"), false);
_grids_axonom_origin_x.init("options.grids.axonom", "origin_x", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false);
_grids_axonom_origin_y.init("options.grids.axonom", "origin_y", -10000.0, 10000.0, 0.1, 1.0, 0.0, false, false);
_grids_axonom.add_line( false, _("Origin X"), _grids_axonom_origin_x, "", _("X coordinate of grid origin"), false);
_grids_axonom.add_line( false, _("Origin Y"), _grids_axonom_origin_y, "", _("Y coordinate of grid origin"), false);
_grids_axonom_spacing_y.init("options.grids.axonom", "spacing_y", -10000.0, 10000.0, 0.1, 1.0, 1.0, false, false);
_grids_axonom.add_line( false, _("Spacing Y"), _grids_axonom_spacing_y, "", _("Base length of z-axis"), false);
_grids_axonom_angle_x.init("options.grids.axonom", "angle_x", -360.0, 360.0, 1.0, 10.0, 30.0, false, false);
_grids_axonom_angle_z.init("options.grids.axonom", "angle_z", -360.0, 360.0, 1.0, 10.0, 30.0, false, false);
_grids_axonom.add_line( false, _("Angle X"), _grids_axonom_angle_x, "", _("Angle of x-axis"), false);
_grids_axonom.add_line( false, _("Angle Z"), _grids_axonom_angle_z, "", _("Angle of z-axis"), false);
_grids_axonom.add_line( false, _("Grid line color"), _grids_axonom_color, "", _("Selects the color used for normal grid lines."), false);
_grids_axonom_empcolor.init(_("Major grid line color"), "options.grids.axonom", "empcolor", 0x0000ff40);
_grids_axonom.add_line( false, _("Major grid line color"), _grids_axonom_empcolor, "", _("Selects the color used for major (highlighted) grid lines."), false);
_grids_axonom_empspacing.init("options.grids.axonom", "empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false);
_grids_axonom.add_line( false, _("Major grid line every"), _grids_axonom_empspacing, "", "", false);
_misc_comment.init( _("Add label comments to printing output"), "printing.debug", "show-label-comments", false);
_("When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"), true);
_misc_forkvectors.init( _("Prevent sharing of gradient definitions"), "options.forkgradientvectors", "value", true);
_("When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"), true);
_("How strong is the Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."), false);
_misc_simpl.init("options.simplifythreshold", "value", 0.0001, 1.0, 0.0001, 0.0010, 0.0010, false, false);
this->show_all_children();
if(iter)
if (_current_page)
_page_title.set_markup("<span size='large'><b>" + row[_page_list_columns._col_name] + "</b></span>");
this->show_all_children();