aboutsummaryrefslogtreecommitdiff
path: root/src/gtkutils.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-09 09:26:26 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-09 09:26:26 +0000
commit9a51810579d03b582f44919cb82d1fb757e93bea (patch)
treefcc9c9253e35f5827f334a52f032ca8459479961 /src/gtkutils.c
parentcfba26004dba1af652c6e82e489d75ef049a803d (diff)
reimplemented summary view with GtkTreeView.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@237 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/gtkutils.c')
-rw-r--r--src/gtkutils.c90
1 files changed, 89 insertions, 1 deletions
diff --git a/src/gtkutils.c b/src/gtkutils.c
index 5f845cae..6993314d 100644
--- a/src/gtkutils.c
+++ b/src/gtkutils.c
@@ -415,6 +415,60 @@ gboolean gtkut_tree_model_next(GtkTreeModel *model, GtkTreeIter *iter)
return FALSE;
}
+gboolean gtkut_tree_model_prev(GtkTreeModel *model, GtkTreeIter *iter)
+{
+ GtkTreeIter iter_, child, next, parent;
+ GtkTreePath *path;
+ gboolean found = FALSE;
+
+ iter_ = *iter;
+
+ path = gtk_tree_model_get_path(model, &iter_);
+
+ if (gtk_tree_path_prev(path)) {
+ gtk_tree_model_get_iter(model, &child, path);
+
+ while (gtk_tree_model_iter_has_child(model, &child)) {
+ iter_ = child;
+ gtk_tree_model_iter_children(model, &child, &iter_);
+ next = child;
+ while (gtk_tree_model_iter_next(model, &next))
+ child = next;
+ }
+
+ *iter = child;
+ found = TRUE;
+ } else if (gtk_tree_model_iter_parent(model, &parent, &iter_)) {
+ *iter = parent;
+ found = TRUE;
+ }
+
+ gtk_tree_path_free(path);
+
+ return found;
+}
+
+gboolean gtkut_tree_model_get_iter_last(GtkTreeModel *model, GtkTreeIter *iter)
+{
+ GtkTreeIter iter_, child, next;
+
+ if (!gtk_tree_model_get_iter_first(model, &iter_))
+ return FALSE;
+
+ for (;;) {
+ next = iter_;
+ while (gtk_tree_model_iter_next(model, &next))
+ iter_ = next;
+ if (gtk_tree_model_iter_children(model, &child, &iter_))
+ iter_ = child;
+ else
+ break;
+ }
+
+ *iter = iter_;
+ return TRUE;
+}
+
gboolean gtkut_tree_model_find_by_column_data(GtkTreeModel *model,
GtkTreeIter *iter,
GtkTreeIter *start,
@@ -449,13 +503,32 @@ gboolean gtkut_tree_model_find_by_column_data(GtkTreeModel *model,
return FALSE;
}
+gboolean gtkut_tree_row_reference_get_iter(GtkTreeModel *model,
+ GtkTreeRowReference *ref,
+ GtkTreeIter *iter)
+{
+ GtkTreePath *path;
+ gboolean valid = FALSE;
+
+ if (ref) {
+ path = gtk_tree_row_reference_get_path(ref);
+ if (path) {
+ valid = gtk_tree_model_get_iter(model, iter, path);
+ gtk_tree_path_free(path);
+ }
+ }
+
+ return valid;
+}
+
gboolean gtkut_tree_row_reference_equal(GtkTreeRowReference *ref1,
GtkTreeRowReference *ref2)
{
GtkTreePath *path1, *path2;
gint result;
- g_return_val_if_fail(ref1 != NULL && ref2 != NULL, FALSE);
+ if (ref1 == NULL || ref2 == NULL)
+ return FALSE;
path1 = gtk_tree_row_reference_get_path(ref1);
path2 = gtk_tree_row_reference_get_path(ref2);
@@ -497,6 +570,21 @@ gboolean gtkut_tree_view_find_collapsed_parent(GtkTreeView *treeview,
return FALSE;
}
+void gtkut_tree_view_expand_parent_all(GtkTreeView *treeview, GtkTreeIter *iter)
+{
+ GtkTreeModel *model;
+ GtkTreeIter parent;
+ GtkTreePath *path;
+
+ model = gtk_tree_view_get_model(treeview);
+
+ if (gtk_tree_model_iter_parent(model, &parent, iter)) {
+ path = gtk_tree_model_get_path(model, &parent);
+ gtk_tree_view_expand_to_path(treeview, path);
+ gtk_tree_path_free(path);
+ }
+}
+
#define SCROLL_EDGE_SIZE 15
/* borrowed from gtktreeview.c */