Code

patch [ 1503865 ] Siox performance patch
[inkscape.git] / src / ui / dialog / inkscape-preferences.cpp
index a1e87b854be7f3768621bfb83381a3d6887d7c6c..c8e9448b4e99a6a21f2199b7941da22b04af0a42 100644 (file)
@@ -14,6 +14,7 @@
 # include <config.h>
 #endif
 
+#include <gtkmm/main.h>
 #include <gtkmm/frame.h>
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/alignment.h>
@@ -22,6 +23,7 @@
 #include "inkscape-preferences.h"
 #include "verbs.h"
 #include "selcue.h"
+#include "unit-constants.h"
 #include <iostream>
 #include "enums.h"
 #include "inkscape.h"
@@ -60,7 +62,6 @@ InkscapePreferences::InkscapePreferences()
     hbox_list_page->set_spacing(12);
     this->get_vbox()->add(*hbox_list_page);
 
-
     //Pagelist
     Gtk::Frame* list_frame = Gtk::manage(new Gtk::Frame());
     Gtk::ScrolledWindow* scrolled_window = Gtk::manage(new Gtk::ScrolledWindow());
@@ -181,7 +182,7 @@ void InkscapePreferences::initPageSteps()
     _page_steps.add_line( false, _("Inset/Outset by:"), _steps_inset, _("px"), 
                           _("Inset and Outset commands displace the path by this distance (in px units)"), false);
     _steps_compass.init ( _("Compass-like display of angles"), "options.compassangledisplay", "value", true);
-    _page_windows.add_line( false, "", _steps_compass, "", 
+    _page_steps.add_line( false, "", _steps_compass, "", 
                             _("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"));
     int const num_items = 12;
     Glib::ustring labels[num_items] = {"90", "60", "45", "30", "15", "10", "7.5", "6", "3", "2", "1", _("None")};
@@ -215,10 +216,10 @@ void StyleFromSelectionToTool(gchar const *prefs_path, StyleSwatch *swatch)
     if (desktop == NULL)
         return;
 
-    Inkscape::Selection *selection = SP_DT_SELECTION(desktop);
+    Inkscape::Selection *selection = sp_desktop_selection(desktop);
 
     if (selection->isEmpty()) {
-        SP_DT_MSGSTACK(desktop)->flash(Inkscape::ERROR_MESSAGE,
+        sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE,
                                        _("<b>No objects selected</b> to take the style from."));
         return;
     }
@@ -227,7 +228,7 @@ void StyleFromSelectionToTool(gchar const *prefs_path, StyleSwatch *swatch)
         /* TODO: If each item in the selection has the same style then don't consider it an error.
          * Maybe we should try to handle multiple selections anyway, e.g. the intersection of the
          * style attributes for the selected items. */
-        SP_DT_MSGSTACK(desktop)->flash(Inkscape::ERROR_MESSAGE,
+        sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE,
                                        _("<b>More than one object selected.</b>  Cannot take style from multiple objects."));
         return;
     }
@@ -300,6 +301,10 @@ 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);
 
+    _calligrapy_use_abs_size.init ( _("Width is in absolute units"), "tools.calligraphic", "abs_width", false);
+    _calligrapy_keep_selected.init ( _("Keep selected"), "tools.calligraphic", "keep_selected", true);
+    _connector_ignore_text.init( _("Don't attach connectors to text objects"), "tools.connector", "ignoretext", true);
+
     //Selector
     this->AddPage(_page_selector, _("Selector"), iter_tools, PREFS_PAGE_TOOLS_SELECTOR);
 
@@ -368,6 +373,10 @@ void InkscapePreferences::initPageTools()
     //Calligraphy
     this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools, PREFS_PAGE_TOOLS_CALLIGRAPHY);
     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"));
+    _page_calligraphy.add_line( false, "", _calligrapy_keep_selected, "", 
+                            _("If on, each object created with this tool will remain selected after you finish drawing it"));
     //Text
     this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
     this->AddSelcueCheckbox(_page_text, "tools.text", true);
@@ -379,6 +388,8 @@ void InkscapePreferences::initPageTools()
     //Connector
     this->AddPage(_page_connector, _("Connector"), iter_tools, PREFS_PAGE_TOOLS_CONNECTOR);
     this->AddSelcueCheckbox(_page_connector, "tools.connector", true);
+    _page_connector.add_line(false, "", _connector_ignore_text, "", 
+            _("If on, connector attachment points will not be shown for text objects"));
     //Dropper
     this->AddPage(_page_dropper, _("Dropper"), iter_tools, PREFS_PAGE_TOOLS_DROPPER);
     this->AddSelcueCheckbox(_page_dropper, "tools.dropper", true);
@@ -390,6 +401,7 @@ void InkscapePreferences::initPageWindows()
     _win_save_geom.init ( _("Save window geometry"), "options.savewindowgeometry", "value", true);
     _win_hide_task.init ( _("Dialogs are hidden in taskbar"), "options.dialogsskiptaskbar", "value", true);
     _win_zoom_resize.init ( _("Zoom when window is resized"), "options.stickyzoom", "value", false);
+    _win_show_close.init ( _("Show close button on dialogs"), "dialogs", "showclose", false);
     _win_ontop_none.init ( _("None"), "options.transientpolicy", "value", 0, false, 0);
     _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);
@@ -400,6 +412,8 @@ void InkscapePreferences::initPageWindows()
                             _("Whether dialog windows are to be hidden in the window manager taskbar"));
     _page_windows.add_line( false, "", _win_zoom_resize, "", 
                             _("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)"));
+    _page_windows.add_line( false, "", _win_show_close, "", 
+                            _("Whether dialog windows have a close button (requires restart)"));
     _page_windows.add_group_header( _("Dialogs on top:"));
     _page_windows.add_line( true, "", _win_ontop_none, "", 
                             _("Dialogs are treated as regular windows"));
@@ -473,6 +487,7 @@ void InkscapePreferences::initPageSelecting()
     _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_layer_deselects.init ( _("Deselect upon layer change"), "options.selection", "layerdeselect", true);
 
     _page_select.add_group_header( _("Ctrl+A, Tab, Shift+Tab:"));
     _page_select.add_line( true, "", _sel_all, "", 
@@ -486,13 +501,16 @@ void InkscapePreferences::initPageSelecting()
     _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)"));
 
+    _page_select.add_line( false, "", _sel_layer_deselects, "", 
+                           _("Uncheck this to be able to keep the current objects selected when the current layer changes"));
+
     this->AddPage(_page_select, _("Selecting"), PREFS_PAGE_SELECTING);
 }
 
 
 void InkscapePreferences::initPageMisc()
 {
-    _misc_export.init("dialogs.export.defaultxdpi", "value", 0.0, 6000.0, 1.0, 1.0, 1.0, true, false);
+    _misc_export.init("dialogs.export.defaultxdpi", "value", 0.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
     _page_misc.add_line( false, _("Default export resolution:"), _misc_export, _("dpi"), 
                            _("Default bitmap resolution (in dots per inch) in the Export dialog"), false);
     _misc_imp_bitmap.init( _("Import bitmap as <image>"), "options.importbitmapsasimages", "value", true);
@@ -501,9 +519,6 @@ void InkscapePreferences::initPageMisc()
     _misc_comment.init( _("Add label comments to printing output"), "printing.debug", "show-label-comments", false);
     _page_misc.add_line( false, "", _misc_comment, "", 
                            _("When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"), true);
-    _misc_scripts.init( _("Enable script effects (requires restart) - EXPERIMENTAL"), "extensions", "show-effects-menu", false);
-    _page_misc.add_line( false, "", _misc_scripts, "", 
-                           _("When on, the effects menu is enabled, allowing external effect scripts to be called, requires restart before effective - EXPERIMENTAL"), 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, "", 
                            _("The maximum length of the Open Recent list in the File menu"), false);
@@ -523,7 +538,7 @@ void InkscapePreferences::initPageMisc()
                         _("Uncheck this to use the bottom selected object as the clipping path or mask"));
     _misc_mask_remove.init ( _("Remove clipping path or mask after applying"), "options.maskobject", "remove", true);
     _page_misc.add_line(true, "", _misc_mask_remove, "", 
-                        _("Affter applying, remove the object used as the clipping path or mask from the drawing"));
+                        _("After applying, remove the object used as the clipping path or mask from the drawing"));
 
     this->AddPage(_page_misc, _("Misc"), PREFS_PAGE_MISC);
 }
@@ -573,6 +588,11 @@ void InkscapePreferences::on_pagelist_selection_changed()
         _page_title.set_markup("<span size='large'><b>" + row[_page_list_columns._col_name] + "</b></span>");
         _page_frame.add(*_current_page);
         _current_page->show();
+        while (Gtk::Main::events_pending()) 
+        {
+            Gtk::Main::iteration();
+        }
+        this->show_all_children();
     }
 }