summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2010-01-07 09:19:48 +0000
committerJon A. Cruz <jon@joncruz.org>2010-01-07 09:19:48 +0000
commit568dab6fba413360b1ca2cbf5205bdde8eb9a13b (patch)
tree7783c453b3624e97517c09dfbeed25dc14ef621a /src/widgets
parenta better truncation detection, suggested by Richard Hughes (diff)
downloadinkscape-568dab6fba413360b1ca2cbf5205bdde8eb9a13b.tar.gz
inkscape-568dab6fba413360b1ca2cbf5205bdde8eb9a13b.zip
Added UXManager. Cleaning up toolbox creation.
(bzr r8951)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/desktop-widget.cpp15
-rw-r--r--src/widgets/toolbox.cpp104
-rw-r--r--src/widgets/toolbox.h11
3 files changed, 63 insertions, 67 deletions
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index b63992afe..6c330b5f3 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -55,6 +55,7 @@
#include "ui/widget/dock.h"
#include "ui/widget/layer-selector.h"
#include "ui/widget/selected-style.h"
+#include "ui/uxmanager.h"
#include "widgets/button.h"
#include "widgets/ruler.h"
#include "widgets/spinbutton-events.h"
@@ -67,6 +68,10 @@
using Inkscape::round;
#endif
+
+using Inkscape::UI::UXManager;
+
+
#ifdef WITH_INKBOARD
#endif
@@ -1374,10 +1379,12 @@ sp_desktop_widget_new (SPNamedView *namedview)
sp_desktop_widget_layout (dtw);
- sp_tool_toolbox_set_desktop (dtw->tool_toolbox, dtw->desktop);
- sp_aux_toolbox_set_desktop (dtw->aux_toolbox, dtw->desktop);
- sp_commands_toolbox_set_desktop (dtw->commands_toolbox, dtw->desktop);
- sp_snap_toolbox_set_desktop (dtw->snap_toolbox, dtw->desktop);
+ std::vector<GtkWidget *> toolboxes;
+ toolboxes.push_back(dtw->tool_toolbox);
+ toolboxes.push_back(dtw->aux_toolbox);
+ toolboxes.push_back(dtw->commands_toolbox);
+ toolboxes.push_back(dtw->snap_toolbox);
+ UXManager::getInstance()->connectToDesktop( toolboxes, dtw->desktop );
dtw->panels->setDesktop( dtw->desktop );
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index 49cbbe010..185e8bd2d 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -106,6 +106,16 @@ using Inkscape::UnitTracker;
typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop);
typedef void (*UpdateFunction)(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox);
+enum BarId {
+ BAR_TOOL = 0,
+ BAR_AUX,
+ BAR_COMMANDS,
+ BAR_SNAP,
+};
+
+#define BAR_ID_KEY "BarIdValue"
+
+
static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
@@ -489,8 +499,6 @@ static gchar const * ui_descr =
static Glib::RefPtr<Gtk::ActionGroup> create_or_fetch_actions( SPDesktop* desktop );
-static void toolbox_set_desktop (GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func);
-
static void setup_tool_toolbox (GtkWidget *toolbox, SPDesktop *desktop);
static void update_tool_toolbox (SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox);
@@ -833,9 +841,7 @@ void handlebox_attached(GtkHandleBox* /*handlebox*/, GtkWidget* widget, gpointer
gtk_widget_set_size_request( widget, -1, -1 );
}
-
-
-static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos )
+static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType handlePos )
{
g_object_set_data(G_OBJECT(tb), "desktop", NULL);
@@ -855,6 +861,9 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos )
g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast<gpointer>(0));
g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast<gpointer>(0));
+ gpointer val = GINT_TO_POINTER(id);
+ g_object_set_data(G_OBJECT(hb), BAR_ID_KEY, val);
+
return hb;
}
@@ -864,16 +873,14 @@ GtkWidget *sp_tool_toolbox_new()
gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL);
gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE);
- return toolboxNewCommon( toolBar, GTK_POS_TOP );
+ return toolboxNewCommon( toolBar, BAR_TOOL, GTK_POS_TOP );
}
GtkWidget *sp_aux_toolbox_new()
{
GtkWidget *tb = gtk_vbox_new(FALSE, 0);
- g_object_set_data(G_OBJECT(tb), "MarkForChild", const_cast<gchar *>("MarkForChild"));
-
- return toolboxNewCommon( tb, GTK_POS_LEFT );
+ return toolboxNewCommon( tb, BAR_AUX, GTK_POS_LEFT );
}
//####################################
@@ -884,14 +891,14 @@ GtkWidget *sp_commands_toolbox_new()
{
GtkWidget *tb = gtk_toolbar_new();
- return toolboxNewCommon( tb, GTK_POS_LEFT );
+ return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT );
}
GtkWidget *sp_snap_toolbox_new()
{
GtkWidget *tb = gtk_vbox_new(FALSE, 0);
- return toolboxNewCommon( tb, GTK_POS_LEFT );
+ return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT );
}
static EgeAdjustmentAction * create_adjustment_action( gchar const *name,
@@ -1509,55 +1516,41 @@ static void sp_zoom_toolbox_prep(SPDesktop */*desktop*/, GtkActionGroup* /*mainA
// no custom GtkAction setup needed
} // end of sp_zoom_toolbox_prep()
-void
-sp_tool_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop)
+void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop)
{
- toolbox_set_desktop(toolbox,
- desktop,
- setup_tool_toolbox,
- update_tool_toolbox);
-}
+ sigc::connection *conn = static_cast<sigc::connection*>(g_object_get_data(G_OBJECT(toolbox),
+ "event_context_connection"));
+ BarId id = static_cast<BarId>( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)) );
-void
-sp_aux_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop)
-{
- toolbox_set_desktop(toolbox,
- desktop,
- setup_aux_toolbox,
- update_aux_toolbox);
-}
+ SetupFunction setup_func = 0;
+ UpdateFunction update_func = 0;
-void
-sp_commands_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop)
-{
- toolbox_set_desktop(toolbox,
- desktop,
- setup_commands_toolbox,
- update_commands_toolbox);
-}
+ switch (id) {
+ case BAR_TOOL:
+ setup_func = setup_tool_toolbox;
+ update_func = update_tool_toolbox;
+ break;
-void
-sp_snap_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop)
-{
- toolbox_set_desktop(toolbox,
- desktop,
- setup_snap_toolbox,
- update_snap_toolbox);
-}
+ case BAR_AUX:
+ toolbox = gtk_bin_get_child(GTK_BIN(toolbox));
+ setup_func = setup_aux_toolbox;
+ update_func = update_aux_toolbox;
+ break;
+ case BAR_COMMANDS:
+ setup_func = setup_commands_toolbox;
+ update_func = update_commands_toolbox;
+ break;
-static void
-toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func)
-{
- sigc::connection *conn = static_cast<sigc::connection*>(g_object_get_data(G_OBJECT(toolbox),
- "event_context_connection"));
- {
- GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox));
- if (g_object_get_data(G_OBJECT(child), "MarkForChild")) {
- toolbox = child;
- }
+ case BAR_SNAP:
+ setup_func = setup_snap_toolbox;
+ update_func = update_snap_toolbox;
+ break;
+ default:
+ g_warning("Unexpected toolbox id encountered.");
}
+
gpointer ptr = g_object_get_data(G_OBJECT(toolbox), "desktop");
SPDesktop *old_desktop = static_cast<SPDesktop*>(ptr);
@@ -1573,17 +1566,16 @@ toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_
g_object_set_data(G_OBJECT(toolbox), "desktop", (gpointer)desktop);
- if (desktop) {
+ if (desktop && setup_func && update_func) {
gtk_widget_set_sensitive(toolbox, TRUE);
setup_func(toolbox, desktop);
update_func(desktop, desktop->event_context, toolbox);
- *conn = desktop->connectEventContextChanged
- (sigc::bind (sigc::ptr_fun(update_func), toolbox));
+ *conn = desktop->connectEventContextChanged(sigc::bind (sigc::ptr_fun(update_func), toolbox));
} else {
gtk_widget_set_sensitive(toolbox, FALSE);
}
-} // end of toolbox_set_desktop()
+} // end of sp_toolbox_set_desktop()
static void setupToolboxCommon( GtkWidget *toolbox,
diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h
index 4bc417e8f..a07a8cb2a 100644
--- a/src/widgets/toolbox.h
+++ b/src/widgets/toolbox.h
@@ -16,21 +16,18 @@
#include <gtk/gtkstyle.h>
#include <gtk/gtktooltips.h>
+#include <glibmm/ustring.h>
#include "forward.h"
#include "icon-size.h"
GtkWidget *sp_tool_toolbox_new ();
-void sp_tool_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop);
-
GtkWidget *sp_aux_toolbox_new ();
-void sp_aux_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop);
-
GtkWidget *sp_commands_toolbox_new ();
-void sp_commands_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop);
-
GtkWidget *sp_snap_toolbox_new ();
-void sp_snap_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop);
+
+void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop);
+
void update_snap_toolbox(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox);
void setup_snap_toolbox (GtkWidget *toolbox, SPDesktop *desktop);