Show names of symbols in the statusbar.

This commit is contained in:
Přemysl Eric Janouch 2011-01-10 04:58:32 +01:00
parent 09a6e91f96
commit d785feeb82

View File

@ -96,6 +96,7 @@ struct _LdWindowMainPrivate
LdCanvas *canvas; LdCanvas *canvas;
GtkWidget *statusbar; GtkWidget *statusbar;
guint statusbar_symbol_context_id;
guint statusbar_menu_context_id; guint statusbar_menu_context_id;
SymbolMenuData symbol_menu; SymbolMenuData symbol_menu;
@ -294,6 +295,8 @@ ld_window_main_init (LdWindowMain *self)
priv->statusbar = gtk_statusbar_new (); priv->statusbar = gtk_statusbar_new ();
priv->statusbar_menu_context_id = gtk_statusbar_get_context_id priv->statusbar_menu_context_id = gtk_statusbar_get_context_id
(GTK_STATUSBAR (priv->statusbar), "menu"); (GTK_STATUSBAR (priv->statusbar), "menu");
priv->statusbar_symbol_context_id = gtk_statusbar_get_context_id
(GTK_STATUSBAR (priv->statusbar), "symbol");
/* Pack all widgets into the window. */ /* Pack all widgets into the window. */
priv->hbox = gtk_hbox_new (FALSE, 0); priv->hbox = gtk_hbox_new (FALSE, 0);
@ -639,6 +642,9 @@ on_category_toggle (GtkToggleButton *toggle_button, gpointer user_data)
g_free (data->items); g_free (data->items);
data->items = NULL; data->items = NULL;
gtk_statusbar_pop (GTK_STATUSBAR (self->priv->statusbar),
self->priv->statusbar_menu_context_id);
gtk_grab_remove (GTK_WIDGET (self->priv->canvas)); gtk_grab_remove (GTK_WIDGET (self->priv->canvas));
} }
else else
@ -763,7 +769,7 @@ on_canvas_motion_notify (GtkWidget *widget, GdkEventMotion *event,
{ {
LdWindowMain *self; LdWindowMain *self;
SymbolMenuData *data; SymbolMenuData *data;
gint i, x; gint i, x, at_cursor = -1;
self = LD_WINDOW_MAIN (user_data); self = LD_WINDOW_MAIN (user_data);
data = &self->priv->symbol_menu; data = &self->priv->symbol_menu;
@ -771,24 +777,34 @@ on_canvas_motion_notify (GtkWidget *widget, GdkEventMotion *event,
if (widget->window != event->window if (widget->window != event->window
|| event->x < 0 || event->y < data->menu_y || event->x < 0 || event->y < data->menu_y
|| event->y >= data->menu_y + data->menu_height) || event->y >= data->menu_y + data->menu_height)
{ goto on_canvas_motion_notify_end;
data->active_item = -1;
redraw_symbol_menu (self);
return FALSE;
}
for (x = i = 0; i < data->n_items; i++) for (x = i = 0; i < data->n_items; i++)
{ {
x += data->items[i].width; x += data->items[i].width;
if (event->x < x) if (event->x < x)
{ {
/* TODO: Show the human name of this symbol in status bar. */ at_cursor = i;
data->active_item = i; break;
redraw_symbol_menu (self);
return FALSE;
} }
} }
data->active_item = -1;
on_canvas_motion_notify_end:
if (data->active_item != at_cursor)
{
const gchar *symbol_name;
gtk_statusbar_pop (GTK_STATUSBAR (self->priv->statusbar),
self->priv->statusbar_menu_context_id);
if (at_cursor != -1)
{
symbol_name = ld_symbol_get_human_name (data->items[i].symbol);
gtk_statusbar_push (GTK_STATUSBAR (self->priv->statusbar),
self->priv->statusbar_menu_context_id, symbol_name);
}
}
data->active_item = at_cursor;
redraw_symbol_menu (self); redraw_symbol_menu (self);
return FALSE; return FALSE;
} }