tExpand our GtkTreeView Win32 implementation - vaccinewars - be a doctor and tr… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit fbddb9bf7cb2e0023beed6039895844347737e7b | |
parent d9f07d249229b0334196961afc812d1932bf2254 | |
Author: Ben Webb <[email protected]> | |
Date: Fri, 27 Nov 2020 00:26:41 -0800 | |
Expand our GtkTreeView Win32 implementation | |
Diffstat: | |
M src/gtkport/gtkenums.h | 6 ++++++ | |
M src/gtkport/treeview.c | 43 ++++++++++++++++++++++++++++++ | |
M src/gtkport/treeview.h | 20 +++++++++++++++++++- | |
3 files changed, 68 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/src/gtkport/gtkenums.h b/src/gtkport/gtkenums.h | |
t@@ -127,6 +127,12 @@ typedef enum | |
GTK_ORIENTATION_VERTICAL | |
} GtkOrientation; | |
+typedef enum | |
+{ | |
+ GTK_SORT_ASCENDING, | |
+ GTK_SORT_DESCENDING | |
+} GtkSortType; | |
+ | |
enum | |
{ | |
G_TYPE_STRING, | |
diff --git a/src/gtkport/treeview.c b/src/gtkport/treeview.c | |
t@@ -426,6 +426,15 @@ void gtk_tree_model_get(GtkTreeModel *tree_model, GtkTree… | |
va_end(ap); | |
} | |
+gboolean gtk_tree_model_iter_nth_child(GtkTreeModel *tree_model, | |
+ GtkTreeIter *iter, | |
+ GtkTreeIter *parent, gint n) | |
+{ | |
+ /* We only work with one level (lists) for now */ | |
+ g_assert(parent == NULL); | |
+ *iter = n; | |
+} | |
+ | |
static void gtk_tree_view_column_free(gpointer data) | |
{ | |
GtkTreeViewColumn *col = data; | |
t@@ -736,6 +745,28 @@ void gtk_tree_selection_select_path(GtkTreeSelection *sel… | |
} | |
} | |
+void gtk_tree_selection_unselect_all(GtkTreeSelection *selection) | |
+{ | |
+ GList *sel; | |
+ for (sel = selection->selection; sel; sel = g_list_next(sel)) { | |
+ int row = GPOINTER_TO_INT(sel->data); | |
+ gtk_tree_selection_unselect_path(selection, &row); | |
+ } | |
+} | |
+ | |
+GList *gtk_tree_selection_get_selected_rows(GtkTreeSelection *selection, | |
+ GtkTreeModel **model) | |
+{ | |
+ GList *sel, *pathsel = NULL; | |
+ for (sel = selection->selection; sel; sel = g_list_next(sel)) { | |
+ int row = GPOINTER_TO_INT(sel->data); | |
+ GtkTreePath *path = g_new(GtkTreePath, 1); | |
+ *path = row; | |
+ pathsel = g_list_append(pathsel, path); | |
+ } | |
+ return pathsel; | |
+} | |
+ | |
void gtk_tree_selection_unselect_path(GtkTreeSelection *selection, | |
GtkTreePath *path) | |
{ | |
t@@ -879,6 +910,7 @@ static GtkTreeViewColumn *new_column_internal(const char *… | |
col->title = g_strdup(title); | |
col->resizeable = FALSE; | |
col->expand = FALSE; | |
+ col->sort_column_id = -1; | |
col->model_column = -1; | |
/* Currently we only support the "text" attribute to point to the | |
t@@ -928,6 +960,12 @@ void gtk_tree_view_column_set_expand(GtkTreeViewColumn *t… | |
tree_column->expand = expand; | |
} | |
+void gtk_tree_view_column_set_sort_column_id(GtkTreeViewColumn *tree_column, | |
+ gint sort_column_id) | |
+{ | |
+ tree_column->sort_column_id = sort_column_id; | |
+} | |
+ | |
gint gtk_tree_view_insert_column(GtkTreeView *tree_view, | |
GtkTreeViewColumn *column, | |
gint position) | |
t@@ -936,6 +974,11 @@ gint gtk_tree_view_insert_column(GtkTreeView *tree_view, | |
return g_slist_length(tree_view->columns); | |
} | |
+GtkTreeViewColumn *gtk_tree_view_get_column(GtkTreeView *tree_view, gint n) | |
+{ | |
+ return g_slist_nth_data(tree_view->columns, n); | |
+} | |
+ | |
void gtk_tree_view_set_model(GtkTreeView *tree_view, GtkTreeModel *model) | |
{ | |
/* We only support a single model per view, so ignore attempts to remove it … | |
diff --git a/src/gtkport/treeview.h b/src/gtkport/treeview.h | |
t@@ -39,6 +39,9 @@ typedef struct _GtkListStore GtkListStore; | |
typedef struct _GtkListStore GtkTreeModel; | |
typedef struct _GtkCellRenderer GtkCellRenderer; | |
+/* Our TreeModel is sortable, so this can be a synonym */ | |
+typedef struct _GtkListStore GtkTreeSortable; | |
+ | |
/* We only support one selection per tree view, so make them synonyms */ | |
typedef struct _GtkTreeView GtkTreeSelection; | |
t@@ -64,6 +67,7 @@ struct _GtkTreeView { | |
struct _GtkTreeViewColumn { | |
gchar *title; /* header title */ | |
int model_column; /* the index of the column in the GtkTreeModel */ | |
+ gint sort_column_id; /* what to sort by when this column is selected */ | |
gint width; | |
gint optimal_width; | |
GtkJustification justification; | |
t@@ -93,8 +97,12 @@ typedef void (*GtkTreeSelectionForeachFunc) (GtkTreeModel *… | |
#define GTK_TREE_VIEW(obj) ((GtkTreeView *)(obj)) | |
#define GTK_TREE_MODEL(obj) ((GtkTreeModel *)(obj)) | |
+#define GTK_TREE_SORTABLE(obj) ((GtkTreeSortable *)(obj)) | |
#define GTK_LIST_STORE(obj) ((GtkListStore *)(obj)) | |
+#define GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID (-1) | |
+#define GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID (-2) | |
+ | |
GtkListStore *gtk_list_store_new(gint n_columns, ...); | |
void gtk_list_store_clear(GtkListStore *list_store); | |
void gtk_list_store_insert(GtkListStore *list_store, GtkTreeIter *iter, | |
t@@ -104,6 +112,9 @@ gboolean gtk_list_store_remove(GtkListStore *list_store, G… | |
void gtk_list_store_set(GtkListStore *list_store, GtkTreeIter *iter, ...); | |
void gtk_tree_model_get(GtkTreeModel *tree_model, GtkTreeIter *iter, ...); | |
+gboolean gtk_tree_model_iter_nth_child(GtkTreeModel *tree_model, | |
+ GtkTreeIter *iter, | |
+ GtkTreeIter *parent, gint n); | |
GtkWidget *gtk_tree_view_new(void); | |
GtkTreeSelection *gtk_tree_view_get_selection(GtkTreeView *tree_view); | |
t@@ -128,17 +139,24 @@ void gtk_tree_selection_select_path(GtkTreeSelection *se… | |
GtkTreePath *path); | |
void gtk_tree_selection_unselect_path(GtkTreeSelection *selection, | |
GtkTreePath *path); | |
+void gtk_tree_selection_unselect_all(GtkTreeSelection *selection); | |
#define gtk_tree_selection_select_iter(sel, iter) gtk_tree_selection_select_pa… | |
- | |
+#define gtk_tree_selection_unselect_iter(sel, iter) gtk_tree_selection_unselec… | |
+GList *gtk_tree_selection_get_selected_rows(GtkTreeSelection *selection, | |
+ GtkTreeModel **model); | |
+#define gtk_tree_path_free g_free | |
GtkTreeViewColumn *gtk_tree_view_column_new_with_attributes | |
(const gchar *title, GtkCellRenderer *cell, ...); | |
void gtk_tree_view_column_set_resizable(GtkTreeViewColumn *tree_column, | |
gboolean resizable); | |
void gtk_tree_view_column_set_expand(GtkTreeViewColumn *tree_column, | |
gboolean expand); | |
+void gtk_tree_view_column_set_sort_column_id(GtkTreeViewColumn *tree_column, | |
+ gint sort_column_id); | |
gint gtk_tree_view_insert_column(GtkTreeView *tree_view, | |
GtkTreeViewColumn *column, | |
gint position); | |
+GtkTreeViewColumn *gtk_tree_view_get_column(GtkTreeView *tree_view, gint n); | |
GtkCellRenderer *gtk_cell_renderer_text_new(void); | |