#include #if GTK_MAJOR_VERSION == 2 static void on_up(GtkWidget *btn, gpointer user_data) { GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data); GtkTreeModel *model; GtkTreeIter current; GtkTreePath *path; gtk_tree_selection_get_selected(sel, &model, ¤t); path = gtk_tree_model_get_path(model, ¤t); gtk_tree_path_prev(path); gtk_tree_selection_select_path(sel, path); gtk_tree_path_free(path); } static void on_down(GtkWidget *btn, gpointer user_data) { GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data); GtkTreeModel *model; GtkTreeIter current; GtkTreePath *path; gtk_tree_selection_get_selected(sel, &model, ¤t); path = gtk_tree_model_get_path(model, ¤t); gtk_tree_path_next(path); gtk_tree_selection_select_path(sel, path); gtk_tree_path_free(path); } #elif GTK_MAJOR_VERSION == 3 static void on_up(GtkWidget *btn, gpointer user_data) { GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data); GtkTreeModel *model; GtkTreeIter current; gtk_tree_selection_get_selected(sel, &model, ¤t); if (gtk_tree_model_iter_previous(model, ¤t)) gtk_tree_selection_select_iter(sel, ¤t); } static void on_down(GtkWidget *btn, gpointer user_data) { GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data); GtkTreeModel *model; GtkTreeIter current; gtk_tree_selection_get_selected(sel, &model, ¤t); if (gtk_tree_model_iter_next(model, ¤t)) gtk_tree_selection_select_iter(sel, ¤t); } #endif int main(int argc, char **argv) { gtk_init(&argc, &argv); GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "One item", 1, FALSE, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "Two items", 1, TRUE, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "Last item", 1, FALSE, -1); GtkWidget *view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); g_object_unref(G_OBJECT(store)); GtkCellRenderer *render = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(view), -1, "String", render, "text", 0, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW(view), -1, "Bool", render, "text", 1, NULL); #if GTK_MAJOR_VERSION == 2 GtkWidget *vbox = gtk_vbox_new(FALSE, 4); GtkWidget *hbox = gtk_hbox_new(FALSE, 4); #else GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); #endif GtkWidget *btn_up = gtk_button_new_with_label("Up"); GtkWidget *btn_down = gtk_button_new_with_label("Down"); gtk_box_pack_start(GTK_BOX(vbox), btn_up, FALSE, FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), btn_down, FALSE, FALSE, 4); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); g_signal_connect (G_OBJECT(btn_up), "clicked", G_CALLBACK(on_up), selection); g_signal_connect (G_OBJECT(btn_down), "clicked", G_CALLBACK(on_down), selection); gtk_box_pack_start(GTK_BOX(hbox), view, TRUE, TRUE, 4); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show_all(window); g_signal_connect(window, "delete-event", gtk_main_quit, NULL); gtk_main(); }