diff --git a/ChangeLog b/ChangeLog index f4bce4b065..9a0a926242 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-05-11 Michael Natterer <mitch@gimp.org> + + * app/widgets/gimpuimanager.c (gimp_ui_manager_find_action): allow + to pass a NULL group_name and iterate all action groups to find + the action in that case. + + * app/widgets/gimpcontrollereditor.c: show the action's stock icon + in the "Action" column, using above function. + 2005-05-11 Sven Neumann <sven@gimp.org> * app/display/gimpdisplay.c: added a read-only property to access diff --git a/app/widgets/gimpcontrollereditor.c b/app/widgets/gimpcontrollereditor.c index 9fa176f5fc..bf06e8dc6e 100644 --- a/app/widgets/gimpcontrollereditor.c +++ b/app/widgets/gimpcontrollereditor.c @@ -53,6 +53,7 @@ enum { COLUMN_EVENT, COLUMN_BLURB, + COLUMN_STOCK_ID, COLUMN_ACTION, NUM_COLUMNS }; @@ -171,6 +172,7 @@ gimp_controller_editor_constructor (GType type, GimpControllerInfo *info; GimpController *controller; GimpControllerClass *controller_class; + GimpUIManager *ui_manager; GtkListStore *store; GtkWidget *frame; GtkWidget *vbox; @@ -180,6 +182,8 @@ gimp_controller_editor_constructor (GType type, GtkWidget *tv; GtkWidget *sw; GtkWidget *entry; + GtkTreeViewColumn *column; + GtkCellRenderer *cell; GParamSpec **property_specs; guint n_property_specs; gint n_events; @@ -320,6 +324,7 @@ gimp_controller_editor_constructor (GType type, g_free (property_specs); store = gtk_list_store_new (NUM_COLUMNS, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); @@ -345,6 +350,8 @@ gimp_controller_editor_constructor (GType type, G_CALLBACK (gimp_controller_editor_sel_changed), editor); + ui_manager = gimp_ui_managers_from_name ("<Image>")->data; + n_events = gimp_controller_get_n_events (controller); for (i = 0; i < n_events; i++) @@ -353,18 +360,33 @@ gimp_controller_editor_constructor (GType type, const gchar *event_name; const gchar *event_blurb; const gchar *event_action; + gchar *stock_id = NULL; event_name = gimp_controller_get_event_name (controller, i); event_blurb = gimp_controller_get_event_blurb (controller, i); event_action = g_hash_table_lookup (info->mapping, event_name); + if (event_action) + { + GtkAction *action; + + action = gimp_ui_manager_find_action (ui_manager, NULL, event_action); + + if (action) + g_object_get (action, "stock-id", &stock_id, NULL); + } + gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, - COLUMN_EVENT, event_name, - COLUMN_BLURB, event_blurb, - COLUMN_ACTION, event_action, + COLUMN_EVENT, event_name, + COLUMN_BLURB, event_blurb, + COLUMN_STOCK_ID, stock_id, + COLUMN_ACTION, event_action, -1); + + if (stock_id) + g_free (stock_id); } gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tv), 0, @@ -372,11 +394,22 @@ gimp_controller_editor_constructor (GType type, gtk_cell_renderer_text_new (), "text", COLUMN_BLURB, NULL); - gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tv), 2, - _("Action"), - gtk_cell_renderer_text_new (), - "text", COLUMN_ACTION, - NULL); + + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Action")); + gtk_tree_view_append_column (GTK_TREE_VIEW (tv), column); + + cell = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (column, cell, FALSE); + gtk_tree_view_column_set_attributes (column, cell, + "stock-id", COLUMN_STOCK_ID, + NULL); + + cell = gtk_cell_renderer_text_new (); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_set_attributes (column, cell, + "text", COLUMN_ACTION, + NULL); hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); @@ -391,6 +424,11 @@ gimp_controller_editor_constructor (GType type, G_CALLBACK (gimp_controller_editor_grab_toggled), editor); + gimp_help_set_help_data (editor->grab_button, + _("Select the next event arriving from " + "the controller"), + NULL); + editor->edit_button = gtk_button_new_from_stock (GIMP_STOCK_EDIT); gtk_box_pack_start (GTK_BOX (hbox), editor->edit_button, TRUE, TRUE, 0); gtk_widget_show (editor->edit_button); @@ -399,6 +437,10 @@ gimp_controller_editor_constructor (GType type, G_CALLBACK (gimp_controller_editor_edit_clicked), editor); + gimp_help_set_help_data (editor->edit_button, + _("Assign an action to the selected event"), + NULL); + editor->delete_button = gtk_button_new_from_stock (GTK_STOCK_DELETE); gtk_box_pack_start (GTK_BOX (hbox), editor->delete_button, TRUE, TRUE, 0); gtk_widget_show (editor->delete_button); @@ -407,6 +449,10 @@ gimp_controller_editor_constructor (GType type, G_CALLBACK (gimp_controller_editor_delete_clicked), editor); + gimp_help_set_help_data (editor->delete_button, + _("Remove the action from the selected event"), + NULL); + gtk_widget_set_sensitive (editor->edit_button, FALSE); gtk_widget_set_sensitive (editor->delete_button, FALSE); @@ -712,7 +758,8 @@ gimp_controller_editor_delete_clicked (GtkWidget *button, g_free (event_name); gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COLUMN_ACTION, NULL, + COLUMN_STOCK_ID, NULL, + COLUMN_ACTION, NULL, -1); } } @@ -738,11 +785,13 @@ gimp_controller_editor_edit_response (GtkWidget *dialog, GtkTreeModel *model; GtkTreeIter iter; gchar *event_name = NULL; + gchar *stock_id = NULL; gchar *action_name = NULL; if (gtk_tree_selection_get_selected (editor->edit_sel, &model, &iter)) gtk_tree_model_get (model, &iter, - GIMP_ACTION_VIEW_COLUMN_NAME, &action_name, + GIMP_ACTION_VIEW_COLUMN_STOCK_ID, &stock_id, + GIMP_ACTION_VIEW_COLUMN_NAME, &action_name, -1); if (gtk_tree_selection_get_selected (editor->sel, &model, &iter)) @@ -757,11 +806,13 @@ gimp_controller_editor_edit_response (GtkWidget *dialog, g_strdup (action_name)); gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COLUMN_ACTION, action_name, + COLUMN_STOCK_ID, stock_id, + COLUMN_ACTION, action_name, -1); } g_free (event_name); + g_free (stock_id); g_free (action_name); } diff --git a/app/widgets/gimpuimanager.c b/app/widgets/gimpuimanager.c index 9fd037b058..07d409cf95 100644 --- a/app/widgets/gimpuimanager.c +++ b/app/widgets/gimpuimanager.c @@ -469,17 +469,38 @@ gimp_ui_manager_find_action (GimpUIManager *manager, const gchar *action_name) { GimpActionGroup *group; + GtkAction *action = NULL; g_return_val_if_fail (GIMP_IS_UI_MANAGER (manager), NULL); - g_return_val_if_fail (group_name != NULL, NULL); g_return_val_if_fail (action_name != NULL, NULL); - group = gimp_ui_manager_get_action_group (manager, group_name); + if (group_name) + { + group = gimp_ui_manager_get_action_group (manager, group_name); - if (group) - return gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name); + if (group) + action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), + action_name); + } + else + { + GList *list; - return NULL; + for (list = gtk_ui_manager_get_action_groups (GTK_UI_MANAGER (manager)); + list; + list = g_list_next (list)) + { + group = list->data; + + action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), + action_name); + + if (action) + break; + } + } + + return action; } void