static void _append_resv_record(sview_resv_info_t *sview_resv_info_ptr, GtkTreeStore *treestore) { gtk_tree_store_append(treestore, &sview_resv_info_ptr->iter_ptr, NULL); gtk_tree_store_set(treestore, &sview_resv_info_ptr->iter_ptr, SORTID_POS, sview_resv_info_ptr->pos, -1); _update_resv_record(sview_resv_info_ptr, treestore); }
static void _update_info_resv(List info_list, GtkTreeView *tree_view) { GtkTreeModel *model = gtk_tree_view_get_model(tree_view); char *name = NULL; ListIterator itr = NULL; sview_resv_info_t *sview_resv_info = NULL; set_for_update(model, SORTID_UPDATED); itr = list_iterator_create(info_list); while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) { /* This means the tree_store changed (added new column or something). */ if (last_model != model) sview_resv_info->iter_set = false; if (sview_resv_info->iter_set) { gtk_tree_model_get(model, &sview_resv_info->iter_ptr, SORTID_NAME, &name, -1); if (strcmp(name, sview_resv_info->resv_name)) { /* Bad pointer */ sview_resv_info->iter_set = false; //g_print("bad resv iter pointer\n"); } g_free(name); } if (sview_resv_info->iter_set) { _update_resv_record(sview_resv_info, GTK_TREE_STORE(model)); } else { _append_resv_record(sview_resv_info, GTK_TREE_STORE(model)); sview_resv_info->iter_set = true; } } list_iterator_destroy(itr); /* remove all old reservations */ remove_old(model, SORTID_UPDATED); last_model = model; }
static void _update_info_resv(List info_list, GtkTreeView *tree_view) { GtkTreeModel *model = gtk_tree_view_get_model(tree_view); static GtkTreeModel *last_model = NULL; reserve_info_t *resv_ptr = NULL; char *name = NULL; ListIterator itr = NULL; sview_resv_info_t *sview_resv_info = NULL; set_for_update(model, SORTID_UPDATED); itr = list_iterator_create(info_list); while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) { resv_ptr = sview_resv_info->resv_ptr; /* This means the tree_store changed (added new column or something). */ if (last_model != model) sview_resv_info->iter_set = false; if (sview_resv_info->iter_set) { gtk_tree_model_get(model, &sview_resv_info->iter_ptr, SORTID_NAME, &name, -1); if (strcmp(name, resv_ptr->name)) { /* Bad pointer */ sview_resv_info->iter_set = false; //g_print("bad resv iter pointer\n"); } g_free(name); } if (sview_resv_info->iter_set) { _update_resv_record(sview_resv_info, GTK_TREE_STORE(model)); } else { GtkTreePath *path = gtk_tree_path_new_first(); /* get the iter, or find out the list is empty * goto add */ if (gtk_tree_model_get_iter( model, &sview_resv_info->iter_ptr, path)) { do { /* search for the jobid and check to see if it is in the list */ gtk_tree_model_get( model, &sview_resv_info->iter_ptr, SORTID_NAME, &name, -1); if (!strcmp(name, resv_ptr->name)) { /* update with new info */ g_free(name); _update_resv_record( sview_resv_info, GTK_TREE_STORE(model)); sview_resv_info->iter_set = 1; break; } g_free(name); } while (gtk_tree_model_iter_next( model, &sview_resv_info->iter_ptr)); } if (!sview_resv_info->iter_set) { _append_resv_record(sview_resv_info, GTK_TREE_STORE(model)); sview_resv_info->iter_set = true; } gtk_tree_path_free(path); } } list_iterator_destroy(itr); /* remove all old reservations */ remove_old(model, SORTID_UPDATED); last_model = model; }