Code

Ctrl+click in pen/pencil tool: Created dots are now selected; Alt is used for randomn...
[inkscape.git] / src / ui / dialog / inkscape-preferences.cpp
index 1d7acf1001eca84de4c6cf38baa4b9784f85c163..34e97a71372789c4e35634d1e1abcd8d4a85d81f 100644 (file)
@@ -38,6 +38,7 @@
 #include "ui/widget/style-swatch.h"
 #include "display/nr-filter-gaussian.h"
 #include "color-profile-fns.h"
+#include "display/canvas-grid.h"
 
 namespace Inkscape {
 namespace UI {
@@ -104,6 +105,7 @@ InkscapePreferences::InkscapePreferences()
     initPageSelecting();
     initPageImportExport();
     initPageCMS();
+    initPageGrids();
     initPageMisc();
 
     signalPresent().connect(sigc::mem_fun(*this, &InkscapePreferences::_presentPages));
@@ -227,6 +229,22 @@ void InkscapePreferences::AddGradientCheckbox(DialogPage& p, const std::string&
     p.add_line( false, "", *cb, "", _("Whether selected objects display gradient editing controls"));
 }
 
+void InkscapePreferences::AddConvertGuidesCheckbox(DialogPage& p, const std::string& prefs_path, bool def_value) {
+    PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
+    cb->init ( _("Conversion to guides uses edges instead of bounding box"), prefs_path, "convertguides", def_value);
+    p.add_line( false, "", *cb, "", _("Converting an object to guides places these along the object's true edges (imitating the object's shape), not along the bounding box."));
+}
+
+void InkscapePreferences::AddDotSizeSpinbutton(DialogPage& p, const std::string& prefs_path, double def_value)
+{
+    PrefSpinButton* sb = Gtk::manage( new PrefSpinButton);
+    sb->init ( prefs_path, "dot-size", 0.0, 1000.0, 0.1, 10.0, def_value, false, false);
+    p.add_line( false, _("Ctrl+click dot size:"), *sb, "times current stroke width", 
+                       _("Size of dots created with Ctrl+click (relative to current stroke width)"),
+                       false );
+}
+
+
 void StyleFromSelectionToTool(gchar const *prefs_path, StyleSwatch *swatch)
 {
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
@@ -318,6 +336,19 @@ void InkscapePreferences::initPageTools()
     Gtk::TreeModel::iterator iter_tools = this->AddPage(_page_tools, _("Tools"), PREFS_PAGE_TOOLS);    
     _path_tools = _page_list.get_model()->get_path(iter_tools);
 
+    _page_tools.add_group_header( _("Bounding box to use:"));
+    _t_bbox_visual.init ( _("Visual bounding box"), "tools", "bounding_box", "visual", false, 0);
+    _page_tools.add_line( true, "", _t_bbox_visual, "",
+                            _("This bounding box includes stroke width, markers, filter margins, etc."));
+    _t_bbox_geometric.init ( _("Geometric bounding box"), "tools", "bounding_box", "geometric", true, &_t_bbox_visual);
+    _page_tools.add_line( true, "", _t_bbox_geometric, "",
+                            _("This bounding box includes only the bare path"));
+
+    _page_tools.add_group_header( _("Conversion to guides:"));
+    _t_cvg_keep_objects.init ( _("Keep objects after conversion to guides"), "tools", "cvg_keep_objects", false);
+    _page_tools.add_line( true, "", _t_cvg_keep_objects, "",
+                            _("When converting an object to guides, don't delete the object after the conversion."));
+
     _calligrapy_use_abs_size.init ( _("Width is in absolute units"), "tools.calligraphic", "abs_width", false);
     _calligrapy_keep_selected.init ( _("Select new path"), "tools.calligraphic", "keep_selected", true);
     _connector_ignore_text.init( _("Don't attach connectors to text objects"), "tools.connector", "ignoretext", true);
@@ -344,18 +375,14 @@ void InkscapePreferences::initPageTools()
     _page_selector.add_line( true, "", _t_sel_cue_box, "", 
                             _("Each selected object displays its bounding box"));
 
-    _page_selector.add_group_header( _("Bounding box to use:"));
-    _t_sel_bbox_visual.init ( _("Visual bounding box"), "tools.select", "bounding_box", "visual", false, 0);
-    _page_selector.add_line( true, "", _t_sel_bbox_visual, "",
-                            _("This bounding box includes stroke width, markers, filter margins, etc."));
-    _t_sel_bbox_geometric.init ( _("Geometric bounding box"), "tools.select", "bounding_box", "geometric", true, &_t_sel_bbox_visual);
-    _page_selector.add_line( true, "", _t_sel_bbox_geometric, "",
-                            _("This bounding box includes only the bare path"));
-
     //Node
     this->AddPage(_page_node, _("Node"), iter_tools, PREFS_PAGE_TOOLS_NODE);
     AddSelcueCheckbox(_page_node, "tools.nodes", true);
     AddGradientCheckbox(_page_node, "tools.nodes", true);
+    //Tweak
+    this->AddPage(_page_tweak, _("Tweak"), iter_tools, PREFS_PAGE_TOOLS_NODE);
+    AddSelcueCheckbox(_page_tweak, "tools.tweak", true);
+    AddGradientCheckbox(_page_tweak, "tools.tweak", false);
     //Zoom
     this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
     AddSelcueCheckbox(_page_zoom, "tools.zoom", true);
@@ -368,9 +395,11 @@ void InkscapePreferences::initPageTools()
     //Rectangle
     this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_RECT);
     this->AddNewObjectsStyle(_page_rectangle, "tools.shapes.rect");
+    this->AddConvertGuidesCheckbox(_page_rectangle, "tools.shapes.rect", true);
     //3D box
     this->AddPage(_page_3dbox, _("3D Box"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_3DBOX);
     this->AddNewObjectsStyle(_page_3dbox, "tools.shapes.3dbox");
+    this->AddConvertGuidesCheckbox(_page_3dbox, "tools.shapes.3dbox", true);
     //ellipse
     this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
     this->AddNewObjectsStyle(_page_ellipse, "tools.shapes.arc");
@@ -388,12 +417,15 @@ void InkscapePreferences::initPageTools()
                            _("This value affects the amount of smoothing applied to freehand lines; lower values produce more uneven paths with more nodes"),
                            false );
     this->AddNewObjectsStyle(_page_pencil, "tools.freehand.pencil");
+    this->AddDotSizeSpinbutton(_page_pencil, "tools.freehand.pencil", 3.0);
     //Pen
     this->AddPage(_page_pen, _("Pen"), iter_tools, PREFS_PAGE_TOOLS_PEN);
     this->AddSelcueCheckbox(_page_pen, "tools.freehand.pen", true);
     this->AddNewObjectsStyle(_page_pen, "tools.freehand.pen");
+    this->AddDotSizeSpinbutton(_page_pen, "tools.freehand.pen", 3.0);
     //Calligraphy
     this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools, PREFS_PAGE_TOOLS_CALLIGRAPHY);
+    this->AddSelcueCheckbox(_page_calligraphy, "tools.calligraphic", false);
     this->AddNewObjectsStyle(_page_calligraphy, "tools.calligraphic");
     _page_calligraphy.add_line( false, "", _calligrapy_use_abs_size, "", 
                             _("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"));
@@ -401,6 +433,7 @@ void InkscapePreferences::initPageTools()
                             _("If on, each newly created object will be selected (deselecting previous selection)"));
     //Paint Bucket
     this->AddPage(_page_paintbucket, _("Paint Bucket"), iter_tools, PREFS_PAGE_TOOLS_PAINTBUCKET);
+    this->AddSelcueCheckbox(_page_paintbucket, "tools.paintbucket", false);
     this->AddNewObjectsStyle(_page_paintbucket, "tools.paintbucket");
     //Text
     this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
@@ -581,8 +614,8 @@ void InkscapePreferences::initPageSelecting()
     _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_hidden.init ( _("Ignore hidden objects"), "options.kbselection", "onlyvisible", true);
-    _sel_locked.init ( _("Ignore locked objects"), "options.kbselection", "onlysensitive", true);
+    _sel_hidden.init ( _("Ignore hidden objects and layers"), "options.kbselection", "onlyvisible", true);
+    _sel_locked.init ( _("Ignore locked objects and layers"), "options.kbselection", "onlysensitive", true);
     _sel_layer_deselects.init ( _("Deselect upon layer change"), "options.selection", "layerdeselect", true);
 
     _page_select.add_group_header( _("Ctrl+A, Tab, Shift+Tab:"));
@@ -593,9 +626,9 @@ void InkscapePreferences::initPageSelecting()
     _page_select.add_line( true, "", _sel_recursive, "", 
                            _("Make keyboard selection commands work on objects in current layer and all its sublayers"));
     _page_select.add_line( true, "", _sel_hidden, "", 
-                           _("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 hidden (either by themselves or by being in a hidden layer)"));
     _page_select.add_line( true, "", _sel_locked, "", 
-                           _("Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked group or layer)"));
+                           _("Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)"));
 
     _page_select.add_line( false, "", _sel_layer_deselects, "", 
                            _("Uncheck this to be able to keep the current objects selected when the current layer changes"));
@@ -669,11 +702,11 @@ void InkscapePreferences::initPageCMS()
     int intentValues[numIntents] = {0, 1, 2, 3};
 
 #if !ENABLE_LCMS
-    Gtk::Label* lbl = new Gtk::Label(_("(Note: Color Management has been disabled in this build)"));
+    Gtk::Label* lbl = new Gtk::Label(_("(Note: Color management has been disabled in this build)"));
     _page_cms.add_line( false, "", *lbl, "", "", true);
 #endif // !ENABLE_LCMS
 
-    _page_cms.add_group_header( _("Display Adjustment"));
+    _page_cms.add_group_header( _("Display adjustment"));
 
     _page_cms.add_line( false, _("Display profile:"), _cms_display_profile, "",
                         _("The ICC profile to use to calibrate display output."), false);
@@ -714,7 +747,7 @@ void InkscapePreferences::initPageCMS()
     _page_cms.add_line( false, _("Device rendering intent:"), _cms_proof_intent, "",
                         _("The rendering intent to use to calibrate display output."), false);
 
-    _cms_proof_blackpoint.init( _("Black Point Compensation"), "options.softproof", "bpc", false);
+    _cms_proof_blackpoint.init( _("Black point compensation"), "options.softproof", "bpc", false);
     _page_cms.add_line( false, "", _cms_proof_blackpoint, "",
                         _("Enables black point compensation."), false);
 
@@ -725,7 +758,7 @@ void InkscapePreferences::initPageCMS()
 #else
                         _("(LittleCMS 1.15 or later required)"),
 #endif // defined(cmsFLAGS_PRESERVEBLACK)
-                        _("Preserve K channel on CMYK -> CMYK transforms"), false);
+                        _("Preserve K channel in CMYK -> CMYK transforms"), false);
 
 #if !defined(cmsFLAGS_PRESERVEBLACK)
     _cms_proof_preserveblack.set_sensitive( false );
@@ -784,7 +817,59 @@ void InkscapePreferences::initPageCMS()
     _cms_proof_preserveblack.set_sensitive( false );
 #endif // ENABLE_LCMS
 
-    this->AddPage(_page_cms, _("Color Management"), PREFS_PAGE_CMS);
+    this->AddPage(_page_cms, _("Color management"), PREFS_PAGE_CMS);
+}
+
+void InkscapePreferences::initPageGrids()
+{
+    _page_grids.add_group_header( _("Default grid settings"));
+
+    _grids_no_emphasize_on_zoom.init( _("Don't emphasize gridlines when zoomed out"), "options.grids", "no_emphasize_when_zoomedout", false);
+    _page_grids.add_line( false, "", _grids_no_emphasize_on_zoom, "", _("If set and zoomed out, the gridlines will be shown in normal color instead of major grid line color."), false);
+    _page_grids.add_line( false, "", _grids_notebook, "", "", false);
+    _grids_notebook.append_page(_grids_xy,     CanvasGrid::getName( GRID_RECTANGULAR ));
+    _grids_notebook.append_page(_grids_axonom, CanvasGrid::getName( GRID_AXONOMETRIC ));
+        _grids_xy_units.init("options.grids.xy", "units");
+        _grids_xy.add_line( false, _("Grid units"), _grids_xy_units, "", "", false);
+        _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_color.init(_("Grid line color"), "options.grids.xy", "color", 0x0000ff20);
+        _grids_xy.add_line( false, _("Grid line color"), _grids_xy_color, "", _("Selects the color used for normal grid lines."), false);
+        _grids_xy_empcolor.init(_("Major grid line color"), "options.grids.xy", "empcolor", 0x0000ff40);
+        _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, _("Major grid line every"), _grids_xy_empspacing, "", "", false);
+        _grids_xy_dotted.init( _("Show dots instead of lines"), "options.grids.xy", "dotted", false);
+        _grids_xy.add_line( false, "", _grids_xy_dotted, "", _("If set, displays dots at gridpoints instead of gridlines"), false);
+
+    // CanvasAxonomGrid properties:
+        _grids_axonom_units.init("options.grids.axonom", "units");
+        _grids_axonom.add_line( false, _("Grid units"), _grids_axonom_units, "", "", 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_color.init(_("Grid line color"), "options.grids.axonom", "color", 0x0000ff20);
+        _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);
+
+    this->AddPage(_page_grids, _("Grids"), PREFS_PAGE_GRIDS);
 }
 
 void InkscapePreferences::initPageMisc()
@@ -808,16 +893,16 @@ void InkscapePreferences::initPageMisc()
 
 
     // consider moving this to an UI tab:
-    _misc_small_toolbar.init( _("Make commands toolbar smaller"), "toolbox", "small", true);
+    _misc_small_toolbar.init( _("Make the commands toolbar icons smaller"), "toolbox", "small", true);
     _page_misc.add_line( false, "", _misc_small_toolbar, "",
                            _("Make the commands toolbar use the 'secondary' toolbar size (requires restart)"), true);
 
-    _misc_small_tools.init( _("Make main tools smaller"), "toolbox.tools", "small", true);
+    _misc_small_tools.init( _("Make the main toolbar icons smaller"), "toolbox.tools", "small", true);
     _page_misc.add_line( false, "", _misc_small_tools, "",
                            _("Make the main tools use the 'secondary' toolbar size (requires restart)"), true);
 
     _misc_recent.init("options.maxrecentdocuments", "value", 0.0, 1000.0, 1.0, 1.0, 1.0, true, false);
-    _page_misc.add_line( false, _("Max recent documents:"), _misc_recent, "", 
+    _page_misc.add_line( false, _("Maximum number of recent documents:"), _misc_recent, "", 
                            _("The maximum length of the Open Recent list in the File menu"), false);
     _misc_simpl.init("options.simplifythreshold", "value", 0.0001, 1.0, 0.0001, 0.0010, 0.0010, false, false);