ETreeMemory: Further cleanups.

This commit is contained in:
Matthew Barnes
2013-06-15 10:37:01 -04:00
parent 235761ae23
commit 4e394d89cf
2 changed files with 137 additions and 134 deletions

View File

@ -47,7 +47,7 @@ G_DEFINE_TYPE (ETreeMemory, e_tree_memory, E_TYPE_TREE_MODEL)
typedef struct ETreeMemoryPath ETreeMemoryPath;
struct ETreeMemoryPath {
gpointer node_data;
gpointer node_data;
/* parent/child/sibling pointers */
ETreeMemoryPath *parent;
@ -56,7 +56,7 @@ struct ETreeMemoryPath {
ETreeMemoryPath *first_child;
ETreeMemoryPath *last_child;
gint num_children;
gint num_children;
};
struct _ETreeMemoryPrivate {
@ -64,9 +64,9 @@ struct _ETreeMemoryPrivate {
/* whether nodes are created expanded
* or collapsed by default */
gboolean expanded_default;
gboolean expanded_default;
gint frozen;
gint frozen;
};
/* ETreeMemoryPath functions */
@ -80,6 +80,7 @@ e_tree_memory_path_depth (ETreeMemoryPath *path)
for (path = path->parent; path; path = path->parent)
depth++;
return depth;
}
@ -149,47 +150,6 @@ e_tree_path_unlink (ETreeMemoryPath *path)
path->prev_sibling = NULL;
}
/**
* e_tree_memory_freeze:
* @tree_memory: the ETreeModel to freeze.
*
* This function prepares an ETreeModel for a period of much change.
* All signals regarding changes to the tree are deferred until we
* thaw the tree.
*
**/
void
e_tree_memory_freeze (ETreeMemory *tree_memory)
{
ETreeMemoryPrivate *priv = tree_memory->priv;
if (priv->frozen == 0)
e_tree_model_pre_change (E_TREE_MODEL (tree_memory));
priv->frozen++;
}
/**
* e_tree_memory_thaw:
* @tree_memory: the ETreeMemory to thaw.
*
* This function thaws an ETreeMemory. All the defered signals can add
* up to a lot, we don't know - so we just emit a model_changed
* signal.
*
**/
void
e_tree_memory_thaw (ETreeMemory *tree_memory)
{
ETreeMemoryPrivate *priv = tree_memory->priv;
if (priv->frozen > 0)
priv->frozen--;
if (priv->frozen == 0) {
e_tree_model_node_changed (E_TREE_MODEL (tree_memory), priv->root);
}
}
/* virtual methods */
static void
@ -210,20 +170,22 @@ static ETreePath
tree_memory_get_root (ETreeModel *etm)
{
ETreeMemoryPrivate *priv = E_TREE_MEMORY (etm)->priv;
return priv->root;
}
static ETreePath
tree_memory_get_parent (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
return path->parent;
}
static ETreePath
tree_memory_get_first_child (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
@ -232,7 +194,7 @@ tree_memory_get_first_child (ETreeModel *etm,
static ETreePath
tree_memory_get_last_child (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
@ -241,31 +203,34 @@ tree_memory_get_last_child (ETreeModel *etm,
static ETreePath
tree_memory_get_next (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
return path->next_sibling;
}
static ETreePath
tree_memory_get_prev (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
return path->prev_sibling;
}
static gboolean
tree_memory_is_root (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
return e_tree_memory_path_depth (path) == 0;
}
static gboolean
tree_memory_is_expandable (ETreeModel *etm,
ETreePath node)
ETreePath node)
{
ETreeMemoryPath *path = node;
@ -274,8 +239,8 @@ tree_memory_is_expandable (ETreeModel *etm,
static guint
tree_memory_get_children (ETreeModel *etm,
ETreePath node,
ETreePath **nodes)
ETreePath node,
ETreePath **nodes)
{
ETreeMemoryPath *path = node;
guint n_children;
@ -297,7 +262,7 @@ tree_memory_get_children (ETreeModel *etm,
static guint
tree_memory_depth (ETreeModel *etm,
ETreePath path)
ETreePath path)
{
return e_tree_memory_path_depth (path);
}
@ -306,9 +271,8 @@ static gboolean
tree_memory_get_expanded_default (ETreeModel *etm)
{
ETreeMemory *tree_memory = E_TREE_MEMORY (etm);
ETreeMemoryPrivate *priv = tree_memory->priv;
return priv->expanded_default;
return tree_memory->priv->expanded_default;
}
static void
@ -343,62 +307,6 @@ e_tree_memory_init (ETreeMemory *tree_memory)
tree_memory->priv = E_TREE_MEMORY_GET_PRIVATE (tree_memory);
}
/**
* e_tree_memory_set_expanded_default
*
* Sets the state of nodes to be append to a thread.
* They will either be expanded or collapsed, according to
* the value of @expanded.
*/
void
e_tree_memory_set_expanded_default (ETreeMemory *tree_memory,
gboolean expanded)
{
g_return_if_fail (tree_memory != NULL);
tree_memory->priv->expanded_default = expanded;
}
/**
* e_tree_memory_node_get_data:
* @tree_memory:
* @node:
*
*
*
* Return value:
**/
gpointer
e_tree_memory_node_get_data (ETreeMemory *tree_memory,
ETreePath node)
{
ETreeMemoryPath *path = node;
g_return_val_if_fail (path, NULL);
return path->node_data;
}
/**
* e_tree_memory_node_set_data:
* @tree_memory:
* @node:
* @node_data:
*
*
**/
void
e_tree_memory_node_set_data (ETreeMemory *tree_memory,
ETreePath node,
gpointer node_data)
{
ETreeMemoryPath *path = node;
g_return_if_fail (path);
path->node_data = node_data;
}
/**
* e_tree_memory_node_insert:
* @tree_memory:
@ -408,7 +316,7 @@ e_tree_memory_node_set_data (ETreeMemory *tree_memory,
*
*
*
* Return value:
* Returns:
**/
ETreePath
e_tree_memory_node_insert (ETreeMemory *tree_memory,
@ -416,17 +324,13 @@ e_tree_memory_node_insert (ETreeMemory *tree_memory,
gint position,
gpointer node_data)
{
ETreeMemoryPrivate *priv;
ETreeMemoryPath *new_path;
ETreeMemoryPath *parent_path = parent_node;
g_return_val_if_fail (tree_memory != NULL, NULL);
g_return_val_if_fail (E_IS_TREE_MEMORY (tree_memory), NULL);
priv = tree_memory->priv;
g_return_val_if_fail (parent_path != NULL || priv->root == NULL, NULL);
priv = tree_memory->priv;
g_return_val_if_fail (
parent_path != NULL || tree_memory->priv->root == NULL, NULL);
if (!tree_memory->priv->frozen)
e_tree_model_pre_change (E_TREE_MODEL (tree_memory));
@ -442,7 +346,7 @@ e_tree_memory_node_insert (ETreeMemory *tree_memory,
E_TREE_MODEL (tree_memory),
parent_path, new_path);
} else {
priv->root = new_path;
tree_memory->priv->root = new_path;
if (!tree_memory->priv->frozen)
e_tree_model_node_changed (
E_TREE_MODEL (tree_memory), new_path);
@ -471,11 +375,11 @@ child_free (ETreeMemory *tree_memory,
/**
* e_tree_memory_node_remove:
* @tree_memory:
* @path:
* @node:
*
*
*
* Return value:
* Returns:
**/
gpointer
e_tree_memory_node_remove (ETreeMemory *tree_memory,
@ -487,7 +391,7 @@ e_tree_memory_node_remove (ETreeMemory *tree_memory,
gpointer ret = path->node_data;
gint old_position = 0;
g_return_val_if_fail (tree_memory != NULL, NULL);
g_return_val_if_fail (E_IS_TREE_MEMORY (tree_memory), NULL);
if (!tree_memory->priv->frozen) {
e_tree_model_pre_change (E_TREE_MODEL (tree_memory));
@ -498,13 +402,15 @@ e_tree_memory_node_remove (ETreeMemory *tree_memory,
old_position--;
}
/* unlink this node - we only have to unlink the root node being removed,
* since the others are only references from this node */
/* unlink this node - we only have to unlink the root node being
* removed, since the others are only references from this node */
e_tree_path_unlink (path);
/*printf("removing %d nodes from position %d\n", visible, base);*/
if (!tree_memory->priv->frozen)
e_tree_model_node_removed (E_TREE_MODEL (tree_memory), parent, path, old_position);
e_tree_model_node_removed (
E_TREE_MODEL (tree_memory),
parent, path, old_position);
child_free (tree_memory, path);
@ -517,3 +423,102 @@ e_tree_memory_node_remove (ETreeMemory *tree_memory,
return ret;
}
/**
* e_tree_memory_freeze:
* @tree_memory: the ETreeModel to freeze.
*
* This function prepares an ETreeModel for a period of much change.
* All signals regarding changes to the tree are deferred until we
* thaw the tree.
*
**/
void
e_tree_memory_freeze (ETreeMemory *tree_memory)
{
g_return_if_fail (E_IS_TREE_MEMORY (tree_memory));
if (tree_memory->priv->frozen == 0)
e_tree_model_pre_change (E_TREE_MODEL (tree_memory));
tree_memory->priv->frozen++;
}
/**
* e_tree_memory_thaw:
* @tree_memory: the ETreeMemory to thaw.
*
* This function thaws an ETreeMemory. All the defered signals can add
* up to a lot, we don't know - so we just emit a model_changed
* signal.
*
**/
void
e_tree_memory_thaw (ETreeMemory *tree_memory)
{
g_return_if_fail (E_IS_TREE_MEMORY (tree_memory));
if (tree_memory->priv->frozen > 0)
tree_memory->priv->frozen--;
if (tree_memory->priv->frozen == 0)
e_tree_model_node_changed (
E_TREE_MODEL (tree_memory),
tree_memory->priv->root);
}
/**
* e_tree_memory_set_expanded_default
*
* Sets the state of nodes to be append to a thread.
* They will either be expanded or collapsed, according to
* the value of @expanded.
*/
void
e_tree_memory_set_expanded_default (ETreeMemory *tree_memory,
gboolean expanded)
{
g_return_if_fail (E_IS_TREE_MEMORY (tree_memory));
tree_memory->priv->expanded_default = expanded;
}
/**
* e_tree_memory_node_get_data:
* @tree_memory:
* @node:
*
*
*
* Return value:
**/
gpointer
e_tree_memory_node_get_data (ETreeMemory *tree_memory,
ETreePath node)
{
ETreeMemoryPath *path = node;
g_return_val_if_fail (path != NULL, NULL);
return path->node_data;
}
/**
* e_tree_memory_node_set_data:
* @tree_memory:
* @node:
* @node_data:
*
*
**/
void
e_tree_memory_node_set_data (ETreeMemory *tree_memory,
ETreePath node,
gpointer node_data)
{
ETreeMemoryPath *path = node;
g_return_if_fail (path != NULL);
path->node_data = node_data;
}

View File

@ -26,10 +26,8 @@
#error "Only <e-util/e-util.h> should be included directly."
#endif
#ifndef _E_TREE_MEMORY_H_
#define _E_TREE_MEMORY_H_
#include <gdk-pixbuf/gdk-pixbuf.h>
#ifndef E_TREE_MEMORY_H
#define E_TREE_MEMORY_H
#include <e-util/e-tree-model.h>
@ -75,7 +73,7 @@ ETreePath e_tree_memory_node_insert (ETreeMemory *tree_memory,
gint position,
gpointer node_data);
gpointer e_tree_memory_node_remove (ETreeMemory *tree_memory,
ETreePath path);
ETreePath node);
/* Freeze and thaw */
void e_tree_memory_freeze (ETreeMemory *tree_memory);
@ -91,5 +89,5 @@ void e_tree_memory_node_set_data (ETreeMemory *tree_memory,
G_END_DECLS
#endif /* _E_TREE_MEMORY_H */
#endif /* E_TREE_MEMORY_H */