/* * Copyright © 2008, Roland Roberts * */ #include #include #include #include /* Global GladeXML struct for use by anyone needing to look up a UI element. */ GladeXML *xml; enum _state {IS_UNKNOWN, IS_CONNECTED, IS_NOT_CONNECTED, IS_NEWLY_DETECTED }; typedef enum _state state; char *_colormap[] = { "red", "#008000", "blue", "black" }; struct _data { const char *name; const char *port; state connected; }; struct _data data[] = { { "RoloCam 2000", "hyper:001,007", IS_CONNECTED }, { "AstroCam 100", "air:27,31", IS_NOT_CONNECTED }, { "NoCam 2020", "pipe:/smoke/0", IS_UNKNOWN }, { "NoCam 2021", "pipe:/smoke/1", IS_UNKNOWN }, { "RoloCam 2001", "hyper:001,007", IS_NEWLY_DETECTED }, { "AstroCam 101", "air:27,31", IS_NOT_CONNECTED }, { "NoCam 3020", "pipe:/smoke/2", IS_UNKNOWN }, { "NoCam 3021", "pipe:/smoke/3", IS_NEWLY_DETECTED }, { 0, 0, 0 }, }; enum _model_columns { NAME_COL, PORT_COL, STATE_COL, COLOR_COL, NUM_COLS }; void main_window_destroy_cb(GtkObject *object, gpointer user_data) { gtk_main_quit(); } void main_menubar_quit_activate_cb(GtkObject *object, gpointer user_data) { gtk_main_quit(); } int main(int argc, char *argv[]) { GtkWidget *window; GtkTreeView *treeview; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkListStore *store; struct _data *row; int i; gtk_init(&argc, &argv); xml = glade_xml_new("dummy.glade", NULL, NULL); window = GTK_WIDGET(glade_xml_get_widget(xml, "window1")); glade_xml_signal_autoconnect(xml); treeview = GTK_TREE_VIEW(glade_xml_get_widget(xml, "treeview1")); selection = gtk_tree_view_get_selection(treeview); gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); /* Only need one generic renderer for our list. */ renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(treeview, -1, "Name", renderer, "text", NAME_COL, "foreground", COLOR_COL, NULL); gtk_tree_view_insert_column_with_attributes(treeview, -1, "Port", renderer, "text", PORT_COL, "foreground", COLOR_COL, NULL); gtk_tree_view_insert_column_with_attributes(treeview, -1, "State", renderer, "text", STATE_COL, "foreground", COLOR_COL, NULL); gtk_tree_view_insert_column_with_attributes(treeview, -1, "Color", renderer, "text", COLOR_COL, "foreground", COLOR_COL, NULL); store = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store)); for (i = 0; data[i].name; i++) { GtkTreeIter iter; struct _data *row = &data[i]; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, NAME_COL, row->name, PORT_COL, row->port, STATE_COL, row->connected, COLOR_COL, _colormap[row->connected], -1); printf("inserted: %-15s %-15s %2d %s\n", row->name, row->port, row->connected, _colormap[row->connected]); } gtk_widget_show(window); gtk_main (); return 0; }