aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2011-11-22 21:04:26 +0100
committerThomas White <taw@bitwiz.org.uk>2011-11-22 21:04:26 +0100
commit4c98abb02ad47d13de2694f2bfe2e994f17b3095 (patch)
treeca3ca222d48f681132b32792a2672c2d8414255a
parent096fb6d129ded7b7f72bc5b36c932fd84d45ed22 (diff)
Let tools add stuff to the toolbar
-rw-r--r--src/mainwindow.c21
-rw-r--r--src/objects.c3
-rw-r--r--src/presentation.h3
-rw-r--r--src/tool_image.c9
-rw-r--r--src/tool_select.c12
-rw-r--r--src/tool_text.c10
6 files changed, 46 insertions, 12 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c
index 9b17f52..b3104f7 100644
--- a/src/mainwindow.c
+++ b/src/mainwindow.c
@@ -436,6 +436,12 @@ static gint set_tool_sig(GtkWidget *widget, GtkRadioAction *action,
case TOOL_IMAGE : p->cur_tool = p->image_tool; break;
}
+ if ( p->cur_tbox != NULL ) {
+ gtk_container_remove(GTK_CONTAINER(p->tbox), p->cur_tbox);
+ }
+ p->cur_tbox = p->cur_tool->tbox;
+ gtk_container_add(GTK_CONTAINER(p->tbox), p->cur_tbox);
+
if ( p->editing_object != NULL ) {
if ( p->cur_tool->valid_object(p->editing_object) ) {
p->cur_tool->select(p->editing_object, p->cur_tool);
@@ -479,7 +485,6 @@ static gint add_furniture(GtkWidget *widget, struct presentation *p)
static void add_menu_bar(struct presentation *p, GtkWidget *vbox)
{
GError *error = NULL;
- GtkToolItem *titem;
GtkWidget *toolbar;
GtkWidget *menu;
GtkWidget *item;
@@ -576,13 +581,11 @@ static void add_menu_bar(struct presentation *p, GtkWidget *vbox)
gtk_ui_manager_ensure_update(p->ui);
toolbar = gtk_ui_manager_get_widget(p->ui, "/displaywindowtoolbar");
- titem = gtk_separator_tool_item_new();
- gtk_toolbar_insert(GTK_TOOLBAR(toolbar), titem, -1);
+ gtk_toolbar_insert(GTK_TOOLBAR(toolbar),
+ gtk_separator_tool_item_new(), -1);
- p->tbox = gtk_hbox_new(FALSE, 0.0);
- titem = gtk_tool_item_new();
- gtk_container_add(GTK_CONTAINER(titem), p->tbox);
- gtk_toolbar_insert(GTK_TOOLBAR(toolbar), titem, -1);
+ p->tbox = GTK_WIDGET(gtk_tool_item_new());
+ gtk_toolbar_insert(GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(p->tbox), -1);
/* Add the styles to the "Insert" menu */
menu = gtk_ui_manager_get_widget(p->ui, "/displaywindow/insert");
@@ -1157,7 +1160,6 @@ int open_mainwindow(struct presentation *p)
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
- add_menu_bar(p, vbox);
p->drawingarea = gtk_drawing_area_new();
sw = gtk_scrolled_window_new(NULL, NULL);
@@ -1166,12 +1168,13 @@ int open_mainwindow(struct presentation *p)
GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw),
p->drawingarea);
- gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
gtk_widget_set_size_request(GTK_WIDGET(p->drawingarea),
p->slide_width + 20,
p->slide_height + 20);
realise_everything(p);
+ add_menu_bar(p, vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
gtk_widget_set_can_focus(GTK_WIDGET(p->drawingarea), TRUE);
gtk_widget_add_events(GTK_WIDGET(p->drawingarea),
diff --git a/src/objects.c b/src/objects.c
index 36e7419..80b57a7 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -195,7 +195,10 @@ void realise_everything(struct presentation *p)
{
int i;
+ /* Realise all the tools */
+ p->select_tool->realise(p->select_tool, p->drawingarea);
p->text_tool->realise(p->text_tool, p->drawingarea);
+ p->image_tool->realise(p->image_tool, p->drawingarea);
for ( i=0; i<p->num_slides; i++ ) {
diff --git a/src/presentation.h b/src/presentation.h
index d766a6d..228d886 100644
--- a/src/presentation.h
+++ b/src/presentation.h
@@ -68,6 +68,8 @@ enum drag_status
struct toolinfo
{
+ GtkWidget *tbox;
+
void (*click_select)(struct presentation *p, struct toolinfo *tip,
double x, double y, GdkEventButton *event,
enum drag_status *drag_status,
@@ -117,6 +119,7 @@ struct presentation
GtkActionGroup *action_group;
GtkIMContext *im_context;
GtkWidget *tbox;
+ GtkWidget *cur_tbox;
/* Pointers to the current "editing" and "projection" slides */
struct slide *cur_edit_slide;
diff --git a/src/tool_image.c b/src/tool_image.c
index e41a285..0187ad4 100644
--- a/src/tool_image.c
+++ b/src/tool_image.c
@@ -467,6 +467,14 @@ static struct object *deserialize(struct presentation *p, struct ds_node *root,
}
+static void realise(struct toolinfo *ti, GtkWidget *w)
+{
+ ti->tbox = gtk_label_new("Image tool");
+ g_object_ref(ti->tbox);
+ gtk_widget_show(ti->tbox);
+}
+
+
struct toolinfo *initialise_image_tool()
{
struct image_toolinfo *ti;
@@ -485,6 +493,7 @@ struct toolinfo *initialise_image_tool()
ti->base.im_commit = im_commit;
ti->base.valid_object = valid_object;
ti->base.deserialize = deserialize;
+ ti->base.realise = realise;
return (struct toolinfo *)ti;
}
diff --git a/src/tool_select.c b/src/tool_select.c
index d522000..e473149 100644
--- a/src/tool_select.c
+++ b/src/tool_select.c
@@ -180,6 +180,17 @@ static int valid_object(struct object *o)
}
+static void realise(struct toolinfo *ti, GtkWidget *w)
+{
+ GtkWidget *hbox;
+
+ hbox = gtk_hbox_new(FALSE, 0.0);
+ ti->tbox = hbox;
+ g_object_ref(ti->tbox);
+ gtk_widget_show(ti->tbox);
+}
+
+
struct toolinfo *initialise_select_tool()
{
struct select_toolinfo *ti;
@@ -199,6 +210,7 @@ struct toolinfo *initialise_select_tool()
ti->base.key_pressed = key_pressed;
ti->base.im_commit = im_commit;
ti->base.valid_object = valid_object;
+ ti->base.realise = realise;
return (struct toolinfo *)ti;
}
diff --git a/src/tool_text.c b/src/tool_text.c
index 7b9d377..d011c49 100644
--- a/src/tool_text.c
+++ b/src/tool_text.c
@@ -732,10 +732,14 @@ static int valid_object(struct object *o)
}
-static void realise(struct toolinfo *tip, GtkWidget *w)
+static void realise(struct toolinfo *ti, GtkWidget *w)
{
- struct text_toolinfo *ti = (struct text_toolinfo *)tip;
- ti->pc = gtk_widget_get_pango_context(w);
+ struct text_toolinfo *tip = (struct text_toolinfo *)ti;
+ tip->pc = gtk_widget_get_pango_context(w);
+
+ ti->tbox = gtk_label_new("Text tool");
+ g_object_ref(ti->tbox);
+ gtk_widget_show(ti->tbox);
}