/** * allocate new element */ NiftyconfLed *led_register_to_gui(Led * l, NiftyconfChain * chain, LedCount pos) { NiftyconfLed *n; if(!(n = calloc(1, sizeof(NiftyconfLed)))) { g_error("calloc: %s", strerror(errno)); return NULL; } /* save descriptor */ n->l = l; n->chain = chain; n->pos = pos; /* allocate renderer */ if(!(n->renderer = renderer_led_new(n))) { g_error("Failed to allocate renderer for Led"); led_unregister_from_gui(n); return NULL; } /* initially draw led */ renderer_led_damage(n); /* register descriptor as niftyled privdata */ led_set_privdata(l, n); return n; }
/** function to process an element that is currently selected */ static void _element_selected( GtkTreeModel * m, GtkTreePath * p, GtkTreeIter * i, gpointer data) { /* get element represented by this row */ gpointer *element; LedCount n; gtk_tree_model_get(m, i, C_CHAIN_LED, &n, C_CHAIN_ELEMENT, &element, -1); NiftyconfLed *l = (NiftyconfLed *) element; led_set_highlighted(l, true); renderer_led_damage(l); }
/** build list of Leds */ static void _build( NiftyconfChain * c) { /* rebuild */ LedCount i; for(i = 0; i < led_chain_get_ledcount(chain_niftyled(c)); i++) { Led *led = led_chain_get_nth(chain_niftyled(c), i); GtkTreeIter iter; gtk_list_store_append(GTK_LIST_STORE(UI("liststore")), &iter); gtk_list_store_set(GTK_LIST_STORE(UI("liststore")), &iter, C_CHAIN_LED, i, C_CHAIN_ELEMENT, led_get_privdata(led), -1); led_set_highlighted(led_get_privdata(led), false); renderer_led_damage(led_get_privdata(led)); } gtk_widget_show(GTK_WIDGET(UI("treeview"))); }
/** deselect all Leds */ static void _foreach_unhighlight( NiftyconfLed * led) { led_set_highlighted(led, false); renderer_led_damage(led); }