summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorRalf Stephan <ralf@ark.in-berlin.de>2006-02-06 09:22:10 +0000
committerrwst <rwst@users.sourceforge.net>2006-02-06 09:22:10 +0000
commit59004ddbee10325befbf1dfe38e7430e408bc8d9 (patch)
tree9608ff3bcbc1eafa5bf82f6141cc2d941dc2af79 /src/ui
parentr10887@tres: ted | 2006-02-05 23:16:41 -0800 (diff)
downloadinkscape-59004ddbee10325befbf1dfe38e7430e408bc8d9.tar.gz
inkscape-59004ddbee10325befbf1dfe38e7430e408bc8d9.zip
open Inkscape Preferences on doubleclick of toolbox button (more or less patch
#1424822 by Marco Scholten) (bzr r93)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/dialog.cpp6
-rw-r--r--src/ui/dialog/dialog.h2
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp107
-rw-r--r--src/ui/dialog/inkscape-preferences.h44
4 files changed, 112 insertions, 47 deletions
diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp
index 47cb4eb73..aa48f7eb8 100644
--- a/src/ui/dialog/dialog.cpp
+++ b/src/ui/dialog/dialog.cpp
@@ -59,6 +59,12 @@ sp_dialog_shutdown (GtkObject *object, gpointer dlgPtr)
dlg->onShutdown();
}
+void
+Dialog::present()
+{
+ Gtk::Dialog::present();
+}
+
void
Dialog::save_geometry()
{
diff --git a/src/ui/dialog/dialog.h b/src/ui/dialog/dialog.h
index d01cdb048..dd3cdaafe 100644
--- a/src/ui/dialog/dialog.h
+++ b/src/ui/dialog/dialog.h
@@ -34,6 +34,8 @@ public:
virtual void onDesktopActivated (SPDesktop*);
virtual void onShutdown();
+ virtual void present();
+
/** Hide and show dialogs */
virtual void onHideF12();
virtual void onShowF12();
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index c22e1a4b6..2de1ebe65 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -72,10 +72,10 @@ InkscapePreferences::InkscapePreferences()
list_frame->add(*scrolled_window);
_page_list_model = Gtk::TreeStore::create(_page_list_columns);
_page_list.set_model(_page_list_model);
- _page_list.append_column("id",_page_list_columns._col_id);
- Glib::RefPtr<Gtk::TreeSelection> _page_list_selection = _page_list.get_selection();
- _page_list_selection->signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::on_pagelist_selection_changed));
- _page_list_selection->set_mode(Gtk::SELECTION_BROWSE);
+ _page_list.append_column("name",_page_list_columns._col_name);
+ Glib::RefPtr<Gtk::TreeSelection> page_list_selection = _page_list.get_selection();
+ page_list_selection->signal_changed().connect(sigc::mem_fun(*this, &InkscapePreferences::on_pagelist_selection_changed));
+ page_list_selection->set_mode(Gtk::SELECTION_BROWSE);
//Pages
Gtk::VBox* vbox_page = Gtk::manage(new Gtk::VBox());
@@ -103,38 +103,40 @@ InkscapePreferences::InkscapePreferences()
_page_list_model->foreach_iter(sigc::mem_fun(*this, &InkscapePreferences::SetMaxDialogSize));
this->set_size_request(_max_dialog_width, _max_dialog_height);
_page_list.collapse_all();
-
- //Select page todo: select last
- Gtk::TreeModel::iterator iter = _page_list_model->children().begin();
- if(iter)
- _page_list_selection->select(iter);
}
InkscapePreferences::~InkscapePreferences()
{
}
-Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title)
+void InkscapePreferences::present()
{
- Gtk::TreeModel::iterator iter = _page_list_model->append();
- Gtk::TreeModel::Row row = *iter;
- row[_page_list_columns._col_id] = title;
- row[_page_list_columns._col_page] = &p;
- return iter;
+ _page_list_model->foreach_iter(sigc::mem_fun(*this, &InkscapePreferences::PresentPage));
+ Dialog::present();
+}
+
+Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, int id)
+{
+ return AddPage(p, title, Gtk::TreeModel::iterator() , id);
}
-Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent)
+Gtk::TreeModel::iterator InkscapePreferences::AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent, int id)
{
- Gtk::TreeModel::iterator iter = _page_list_model->append((*parent).children());
+ Gtk::TreeModel::iterator iter;
+ if (parent)
+ iter = _page_list_model->append((*parent).children());
+ else
+ iter = _page_list_model->append();
Gtk::TreeModel::Row row = *iter;
- row[_page_list_columns._col_id] = title;
+ row[_page_list_columns._col_name] = title;
+ row[_page_list_columns._col_id] = id;
row[_page_list_columns._col_page] = &p;
return iter;
}
void InkscapePreferences::initPageMouse()
{
- this->AddPage(_page_mouse, _("Mouse"));
+ this->AddPage(_page_mouse, _("Mouse"), PREFS_PAGE_MOUSE);
_mouse_sens.init ( "options.cursortolerance", "value", 0.0, 30.0, 1.0, 1.0, 8.0, true, false);
_page_mouse.add_line( false, _("Grab sensitivity:"), _mouse_sens, _("pixels"),
_("How close on the screen you need to be to an object to be able to grab it with mouse (in screen pixels)"), false);
@@ -145,7 +147,7 @@ void InkscapePreferences::initPageMouse()
void InkscapePreferences::initPageScrolling()
{
- this->AddPage(_page_scrolling, _("Scrolling"));
+ this->AddPage(_page_scrolling, _("Scrolling"), PREFS_PAGE_SCROLLING);
_scroll_wheel.init ( "options.wheelscroll", "value", 0.0, 1000.0, 1.0, 1.0, 40.0, true, false);
_page_scrolling.add_line( false, _("Mouse wheel scrolls by:"), _scroll_wheel, _("pixels"),
_("One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"), false);
@@ -167,7 +169,7 @@ void InkscapePreferences::initPageScrolling()
void InkscapePreferences::initPageSteps()
{
- this->AddPage(_page_steps, _("Steps"));
+ this->AddPage(_page_steps, _("Steps"), PREFS_PAGE_STEPS);
_steps_arrow.init ( "options.nudgedistance", "value", 0.0, 3000.0, 0.01, 1.0, 2.0, false, false);
_page_steps.add_line( false, _("Arrow keys move by:"), _steps_arrow, _("px"),
@@ -295,10 +297,11 @@ void InkscapePreferences::AddNewObjectsStyle(DialogPage& p, const std::string& p
void InkscapePreferences::initPageTools()
{
- Gtk::TreeModel::iterator iter_tools = this->AddPage(_page_tools, _("Tools"));
+ Gtk::TreeModel::iterator iter_tools = this->AddPage(_page_tools, _("Tools"), PREFS_PAGE_TOOLS);
+ _path_tools = _page_list.get_model()->get_path(iter_tools);
//Selector
- this->AddPage(_page_selector, _("Selector"), iter_tools);
+ this->AddPage(_page_selector, _("Selector"), iter_tools, PREFS_PAGE_TOOLS_SELECTOR);
AddSelcueCheckbox(_page_selector, "tools.select", false);
_page_selector.add_group_header( _("When transforming, show:"));
@@ -326,31 +329,32 @@ void InkscapePreferences::initPageTools()
_page_selector.add_line( true, "", _t_sel_org_node, "",
_("Default scale origin will be on the bounding box of the item's points"));
//Node
- this->AddPage(_page_node, _("Node"), iter_tools);
+ this->AddPage(_page_node, _("Node"), iter_tools, PREFS_PAGE_TOOLS_NODE);
AddSelcueCheckbox(_page_node, "tools.nodes", true);
AddGradientCheckbox(_page_node, "tools.nodes", true);
//Zoom
- this->AddPage(_page_zoom, _("Zoom"), iter_tools);
+ this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
AddSelcueCheckbox(_page_zoom, "tools.zoom", true);
AddGradientCheckbox(_page_zoom, "tools.zoom", false);
//Shapes
- Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools);
+ Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES);
+ _path_shapes = _page_list.get_model()->get_path(iter_shapes);
this->AddSelcueCheckbox(_page_shapes, "tools.shapes", true);
this->AddGradientCheckbox(_page_shapes, "tools.shapes", true);
//Rectangle
- this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes);
+ this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_RECT);
this->AddNewObjectsStyle(_page_rectangle, "tools.shapes.rect");
//ellipse
- this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes);
+ this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
this->AddNewObjectsStyle(_page_ellipse, "tools.shapes.arc");
//star
- this->AddPage(_page_star, _("Star"), iter_shapes);
+ this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR);
this->AddNewObjectsStyle(_page_star, "tools.shapes.star");
//spiral
- this->AddPage(_page_spiral, _("Spiral"), iter_shapes);
+ this->AddPage(_page_spiral, _("Spiral"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_SPIRAL);
this->AddNewObjectsStyle(_page_spiral, "tools.shapes.spiral");
//Pencil
- this->AddPage(_page_pencil, _("Pencil"), iter_tools);
+ this->AddPage(_page_pencil, _("Pencil"), iter_tools, PREFS_PAGE_TOOLS_PENCIL);
this->AddSelcueCheckbox(_page_pencil, "tools.freehand.pencil", true);
_t_pencil_tolerance.init ( "tools.freehand.pencil", "tolerance", 0.0, 100.0, 0.5, 1.0, 10.0, false, false);
_page_pencil.add_line( false, _("Tolerance:"), _t_pencil_tolerance, "",
@@ -358,25 +362,25 @@ void InkscapePreferences::initPageTools()
false );
this->AddNewObjectsStyle(_page_pencil, "tools.freehand.pencil");
//Pen
- this->AddPage(_page_pen, _("Pen"), iter_tools);
+ 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");
//Calligraphy
- this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools);
+ this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools, PREFS_PAGE_TOOLS_CALLIGRAPHY);
this->AddNewObjectsStyle(_page_calligraphy, "tools.calligraphic");
//Text
- this->AddPage(_page_text, _("Text"), iter_tools);
+ this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
this->AddSelcueCheckbox(_page_text, "tools.text", true);
this->AddGradientCheckbox(_page_text, "tools.text", true);
this->AddNewObjectsStyle(_page_text, "tools.text");
//Gradient
- this->AddPage(_page_gradient, _("Gradient"), iter_tools);
+ this->AddPage(_page_gradient, _("Gradient"), iter_tools, PREFS_PAGE_TOOLS_GRADIENT);
this->AddSelcueCheckbox(_page_gradient, "tools.gradient", true);
//Connector
- this->AddPage(_page_connector, _("Connector"), iter_tools);
+ this->AddPage(_page_connector, _("Connector"), iter_tools, PREFS_PAGE_TOOLS_CONNECTOR);
this->AddSelcueCheckbox(_page_connector, "tools.connector", true);
//Dropper
- this->AddPage(_page_dropper, _("Dropper"), iter_tools);
+ this->AddPage(_page_dropper, _("Dropper"), iter_tools, PREFS_PAGE_TOOLS_DROPPER);
this->AddSelcueCheckbox(_page_dropper, "tools.dropper", true);
this->AddGradientCheckbox(_page_dropper, "tools.dropper", true);
}
@@ -404,7 +408,7 @@ void InkscapePreferences::initPageWindows()
_page_windows.add_line( true, "", _win_ontop_agressive, "",
_("Same as Normal but may work better with some window managers"));
- this->AddPage(_page_windows, _("Windows"));
+ this->AddPage(_page_windows, _("Windows"), PREFS_PAGE_WINDOWS);
}
void InkscapePreferences::initPageClones()
@@ -433,7 +437,7 @@ void InkscapePreferences::initPageClones()
_page_clones.add_line( true, "", _clone_option_delete, "",
_("Orphaned clones are deleted along with their original."));
- this->AddPage(_page_clones, _("Clones"));
+ this->AddPage(_page_clones, _("Clones"), PREFS_PAGE_CLONES);
}
void InkscapePreferences::initPageTransforms()
@@ -459,7 +463,7 @@ void InkscapePreferences::initPageTransforms()
_page_transforms.add_line( true, "", _trans_preserved, "",
_("Always store transformation as a transform= attribute on objects"));
- this->AddPage(_page_transforms, _("Transforms"));
+ this->AddPage(_page_transforms, _("Transforms"), PREFS_PAGE_TRANSFORMS);
}
void InkscapePreferences::initPageSelecting()
@@ -476,7 +480,7 @@ 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)"));
- this->AddPage(_page_select, _("Selecting"));
+ this->AddPage(_page_select, _("Selecting"), PREFS_PAGE_SELECTING);
}
@@ -507,7 +511,7 @@ void InkscapePreferences::initPageMisc()
_misc_overs_bitmap.init("options.bitmapoversample", "value", labels, values, num_items, 1);
_page_misc.add_line( false, _("Oversample bitmaps:"), _misc_overs_bitmap, "", "", false);
- this->AddPage(_page_misc, _("Misc"));
+ this->AddPage(_page_misc, _("Misc"), PREFS_PAGE_MISC);
}
bool InkscapePreferences::SetMaxDialogSize(const Gtk::TreeModel::iterator& iter)
@@ -524,6 +528,22 @@ bool InkscapePreferences::SetMaxDialogSize(const Gtk::TreeModel::iterator& iter)
return false;
}
+bool InkscapePreferences::PresentPage(const Gtk::TreeModel::iterator& iter)
+{
+ Gtk::TreeModel::Row row = *iter;
+ int desired_page = prefs_get_int_attribute("dialogs.preferences", "page", 0);
+ if (desired_page == row[_page_list_columns._col_id])
+ {
+ if (desired_page >= PREFS_PAGE_TOOLS && desired_page <= PREFS_PAGE_TOOLS_DROPPER)
+ _page_list.expand_row(_path_tools, false);
+ if (desired_page >= PREFS_PAGE_TOOLS_SHAPES && desired_page <= PREFS_PAGE_TOOLS_SHAPES_SPIRAL)
+ _page_list.expand_row(_path_shapes, false);
+ _page_list.get_selection()->select(iter);
+ return true;
+ }
+ return false;
+}
+
void InkscapePreferences::on_pagelist_selection_changed()
{
// show new selection
@@ -535,7 +555,8 @@ void InkscapePreferences::on_pagelist_selection_changed()
_page_frame.remove();
Gtk::TreeModel::Row row = *iter;
_current_page = row[_page_list_columns._col_page];
- _page_title.set_markup("<span size='large'><b>" + row[_page_list_columns._col_id] + "</b></span>");
+ prefs_set_int_attribute("dialogs.preferences", "page", row[_page_list_columns._col_id]);
+ _page_title.set_markup("<span size='large'><b>" + row[_page_list_columns._col_name] + "</b></span>");
_page_frame.add(*_current_page);
_current_page->show();
}
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index fe87583ba..de2010f12 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -28,6 +28,36 @@
#include "dialog.h"
+// UPDATE THIS IF YOU'RE ADDING PREFS PAGES.
+// Otherwise the commands that open the dialog with the new page will fail.
+
+enum {
+ PREFS_PAGE_MOUSE,
+ PREFS_PAGE_SCROLLING,
+ PREFS_PAGE_STEPS,
+ PREFS_PAGE_TOOLS,
+ PREFS_PAGE_TOOLS_SELECTOR,
+ PREFS_PAGE_TOOLS_NODE,
+ PREFS_PAGE_TOOLS_ZOOM,
+ PREFS_PAGE_TOOLS_SHAPES,
+ PREFS_PAGE_TOOLS_SHAPES_RECT,
+ PREFS_PAGE_TOOLS_SHAPES_ELLIPSE,
+ PREFS_PAGE_TOOLS_SHAPES_STAR,
+ PREFS_PAGE_TOOLS_SHAPES_SPIRAL,
+ PREFS_PAGE_TOOLS_PENCIL,
+ PREFS_PAGE_TOOLS_PEN,
+ PREFS_PAGE_TOOLS_CALLIGRAPHY,
+ PREFS_PAGE_TOOLS_TEXT,
+ PREFS_PAGE_TOOLS_GRADIENT,
+ PREFS_PAGE_TOOLS_CONNECTOR,
+ PREFS_PAGE_TOOLS_DROPPER,
+ PREFS_PAGE_WINDOWS,
+ PREFS_PAGE_CLONES,
+ PREFS_PAGE_TRANSFORMS,
+ PREFS_PAGE_SELECTING,
+ PREFS_PAGE_MISC
+};
+
using namespace Inkscape::UI::Widget;
namespace Inkscape {
@@ -39,6 +69,7 @@ public:
virtual ~InkscapePreferences();
static InkscapePreferences *create() {return new InkscapePreferences(); }
+ void present();
protected:
Gtk::Frame _page_frame;
@@ -51,12 +82,16 @@ protected:
{
public:
PageListModelColumns()
- { Gtk::TreeModelColumnRecord::add(_col_id); Gtk::TreeModelColumnRecord::add(_col_page); }
- Gtk::TreeModelColumn<Glib::ustring> _col_id;
+ { Gtk::TreeModelColumnRecord::add(_col_name); Gtk::TreeModelColumnRecord::add(_col_page); Gtk::TreeModelColumnRecord::add(_col_id); }
+ Gtk::TreeModelColumn<Glib::ustring> _col_name;
+ Gtk::TreeModelColumn<int> _col_id;
Gtk::TreeModelColumn<DialogPage*> _col_page;
};
PageListModelColumns _page_list_columns;
+ Gtk::TreeModel::Path _path_tools;
+ Gtk::TreeModel::Path _path_shapes;
+
DialogPage _page_mouse, _page_scrolling, _page_steps, _page_tools, _page_windows,
_page_clones, _page_transforms, _page_select, _page_misc;
DialogPage _page_selector, _page_node, _page_zoom, _page_shapes, _page_pencil, _page_pen,
@@ -96,9 +131,10 @@ protected:
int _sb_width;
DialogPage* _current_page;
- Gtk::TreeModel::iterator AddPage(DialogPage& p, Glib::ustring title);
- Gtk::TreeModel::iterator AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent);
+ Gtk::TreeModel::iterator AddPage(DialogPage& p, Glib::ustring title, int id);
+ Gtk::TreeModel::iterator AddPage(DialogPage& p, Glib::ustring title, Gtk::TreeModel::iterator parent, int id);
bool SetMaxDialogSize(const Gtk::TreeModel::iterator& iter);
+ bool PresentPage(const Gtk::TreeModel::iterator& iter);
static void AddSelcueCheckbox(DialogPage& p, const std::string& prefs_path, bool def_value);
static void AddGradientCheckbox(DialogPage& p, const std::string& prefs_path, bool def_value);