app: add a button to remove unplugged devices from the list

This commit is contained in:
Michael Natterer 2010-02-15 12:59:29 +01:00
parent f0d4cf68c0
commit 179ddd8a49
2 changed files with 56 additions and 31 deletions

View File

@ -54,6 +54,7 @@ struct _GimpDeviceEditorPrivate
Gimp *gimp; Gimp *gimp;
GtkWidget *treeview; GtkWidget *treeview;
GtkWidget *delete_button;
GtkWidget *label; GtkWidget *label;
GtkWidget *image; GtkWidget *image;
@ -92,6 +93,9 @@ static void gimp_device_editor_select_device (GimpContainerView *view,
gpointer insert_data, gpointer insert_data,
GimpDeviceEditor *editor); GimpDeviceEditor *editor);
static void gimp_device_editor_delete_clicked (GtkWidget *button,
GimpDeviceEditor *editor);
G_DEFINE_TYPE (GimpDeviceEditor, gimp_device_editor, GTK_TYPE_HBOX) G_DEFINE_TYPE (GimpDeviceEditor, gimp_device_editor, GTK_TYPE_HBOX)
@ -142,36 +146,16 @@ gimp_device_editor_init (GimpDeviceEditor *editor)
G_CALLBACK (gimp_device_editor_select_device), G_CALLBACK (gimp_device_editor_select_device),
G_OBJECT (editor), 0); G_OBJECT (editor), 0);
#if 0 private->delete_button =
list->edit_button = gimp_editor_add_button (GIMP_EDITOR (private->treeview),
gimp_editor_add_button (GIMP_EDITOR (list->dest), GTK_STOCK_DELETE,
GTK_STOCK_PROPERTIES, _("Delete the selected device"),
_("Configure the selected controller"),
NULL, NULL,
G_CALLBACK (gimp_controller_list_edit_clicked), G_CALLBACK (gimp_device_editor_delete_clicked),
NULL, NULL,
list); editor);
list->up_button =
gimp_editor_add_button (GIMP_EDITOR (list->dest),
GTK_STOCK_GO_UP,
_("Move the selected controller up"),
NULL,
G_CALLBACK (gimp_controller_list_up_clicked),
NULL,
list);
list->down_button =
gimp_editor_add_button (GIMP_EDITOR (list->dest),
GTK_STOCK_GO_DOWN,
_("Move the selected controller down"),
NULL,
G_CALLBACK (gimp_controller_list_down_clicked),
NULL,
list);
gtk_widget_set_sensitive (list->edit_button, FALSE); gtk_widget_set_sensitive (private->delete_button, FALSE);
gtk_widget_set_sensitive (list->up_button, FALSE);
gtk_widget_set_sensitive (list->down_button, FALSE);
#endif
vbox = gtk_vbox_new (FALSE, 12); vbox = gtk_vbox_new (FALSE, 12);
gtk_box_pack_start (GTK_BOX (editor), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (editor), vbox, TRUE, TRUE, 0);
@ -228,6 +212,13 @@ gimp_device_editor_constructor (GType type,
devices = gimp_devices_get_list (private->gimp); devices = gimp_devices_get_list (private->gimp);
/* connect to "remove" before the container view does so we can get
* the notebook child stored in its model
*/
g_signal_connect (devices, "remove",
G_CALLBACK (gimp_device_editor_remove_device),
editor);
gimp_container_view_set_container (GIMP_CONTAINER_VIEW (private->treeview), gimp_container_view_set_container (GIMP_CONTAINER_VIEW (private->treeview),
devices); devices);
@ -237,9 +228,6 @@ gimp_device_editor_constructor (GType type,
g_signal_connect (devices, "add", g_signal_connect (devices, "add",
G_CALLBACK (gimp_device_editor_add_device), G_CALLBACK (gimp_device_editor_add_device),
editor); editor);
g_signal_connect (devices, "remove",
G_CALLBACK (gimp_device_editor_remove_device),
editor);
for (list = GIMP_LIST (devices)->list; for (list = GIMP_LIST (devices)->list;
list; list;
@ -326,6 +314,26 @@ gimp_device_editor_remove_device (GimpContainer *container,
GimpDeviceInfo *info, GimpDeviceInfo *info,
GimpDeviceEditor *editor) GimpDeviceEditor *editor)
{ {
GimpDeviceEditorPrivate *private = GIMP_DEVICE_EDITOR_GET_PRIVATE (editor);
GtkTreeIter *iter;
iter = gimp_container_view_lookup (GIMP_CONTAINER_VIEW (private->treeview),
GIMP_VIEWABLE (info));
if (iter)
{
GimpContainerTreeView *treeview;
GtkWidget *widget;
treeview = GIMP_CONTAINER_TREE_VIEW (private->treeview);
gtk_tree_model_get (treeview->model, iter,
GIMP_CONTAINER_TREE_VIEW_COLUMN_USER_DATA, &widget,
-1);
if (widget)
gtk_widget_destroy (widget);
}
} }
static void static void
@ -334,7 +342,10 @@ gimp_device_editor_select_device (GimpContainerView *view,
gpointer insert_data, gpointer insert_data,
GimpDeviceEditor *editor) GimpDeviceEditor *editor)
{ {
GimpDeviceEditorPrivate *private = GIMP_DEVICE_EDITOR_GET_PRIVATE (editor); GimpDeviceEditorPrivate *private;
gboolean delete_sensitive = FALSE;
private = GIMP_DEVICE_EDITOR_GET_PRIVATE (editor);
if (viewable && insert_data) if (viewable && insert_data)
{ {
@ -361,7 +372,19 @@ gimp_device_editor_select_device (GimpContainerView *view,
gtk_image_set_from_stock (GTK_IMAGE (private->image), gtk_image_set_from_stock (GTK_IMAGE (private->image),
gimp_viewable_get_stock_id (viewable), gimp_viewable_get_stock_id (viewable),
GTK_ICON_SIZE_BUTTON); GTK_ICON_SIZE_BUTTON);
if (! gimp_device_info_get_device (GIMP_DEVICE_INFO (viewable), NULL))
delete_sensitive = TRUE;
} }
gtk_widget_set_sensitive (private->delete_button, delete_sensitive);
}
static void
gimp_device_editor_delete_clicked (GtkWidget *button,
GimpDeviceEditor *editor)
{
g_printerr ("delete clicked");
} }

View File

@ -165,6 +165,8 @@ gimp_device_info_editor_init (GimpDeviceInfoEditor *editor)
scrolled_win = gtk_scrolled_window_new (NULL, NULL); scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_SHADOW_IN); GTK_SHADOW_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_end (GTK_BOX (editor), scrolled_win, TRUE, TRUE, 0); gtk_box_pack_end (GTK_BOX (editor), scrolled_win, TRUE, TRUE, 0);
gtk_widget_show (scrolled_win); gtk_widget_show (scrolled_win);