More work on merging history view
[ephy-soc.git] / lib / ephy-node.h
blob09c4a9adbd2b2676fb46e19054daabc0ae2b455c
1 /*
2 * Copyright © 2002 Jorn Baayen <jorn@nl.linux.org>
3 * Copyright © 2003 Marco Pesenti Gritti
4 * Copyright © 2003 Christian Persch
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 * $Id: ephy-node.h 6952 2007-03-11 19:42:02Z chpe $
23 #ifndef EPHY_NODE_H
24 #define EPHY_NODE_H
26 #include <libxml/tree.h>
27 #include <libxml/xmlwriter.h>
29 G_BEGIN_DECLS
31 #define EPHY_TYPE_NODE (ephy_node_get_type ())
32 #define EPHY_IS_NODE(o) (o != NULL)
34 typedef struct _EphyNode EphyNode;
36 typedef enum
38 EPHY_NODE_DESTROY, /* EphyNode *node */
39 EPHY_NODE_RESTORED, /* EphyNode *node */
40 EPHY_NODE_CHANGED, /* EphyNode *node, guint property_id */
41 EPHY_NODE_CHILD_ADDED, /* EphyNode *node, EphyNode *child */
42 EPHY_NODE_CHILD_CHANGED, /* EphyNode *node, EphyNode *child, guint property_id */
43 EPHY_NODE_CHILD_REMOVED, /* EphyNode *node, EphyNode *child, guint old_index */
44 EPHY_NODE_CHILDREN_REORDERED /* EphyNode *node, int *new_order */
45 } EphyNodeSignalType;
47 #include "ephy-node-db.h"
49 typedef void (*EphyNodeCallback) (EphyNode *node, ...);
50 typedef gboolean (*EphyNodeFilterFunc) (EphyNode *, gpointer);
52 GType ephy_node_get_type (void) G_GNUC_CONST;
54 EphyNode *ephy_node_new (EphyNodeDb *db);
56 EphyNode *ephy_node_new_with_id (EphyNodeDb *db,
57 guint reserved_id);
59 EphyNodeDb *ephy_node_get_db (EphyNode *node);
61 /* unique node ID */
62 guint ephy_node_get_id (EphyNode *node);
64 /* refcounting */
65 void ephy_node_ref (EphyNode *node);
66 void ephy_node_unref (EphyNode *node);
68 /* signals */
69 int ephy_node_signal_connect_object (EphyNode *node,
70 EphyNodeSignalType type,
71 EphyNodeCallback callback,
72 GObject *object);
74 guint ephy_node_signal_disconnect_object (EphyNode *node,
75 EphyNodeSignalType type,
76 EphyNodeCallback callback,
77 GObject *object);
79 void ephy_node_signal_disconnect (EphyNode *node,
80 int signal_id);
82 /* properties */
83 void ephy_node_set_property (EphyNode *node,
84 guint property_id,
85 const GValue *value);
86 gboolean ephy_node_get_property (EphyNode *node,
87 guint property_id,
88 GValue *value);
90 const char *ephy_node_get_property_string (EphyNode *node,
91 guint property_id);
92 void ephy_node_set_property_string (EphyNode *node,
93 guint property_id,
94 const char *value);
95 gboolean ephy_node_get_property_boolean (EphyNode *node,
96 guint property_id);
97 void ephy_node_set_property_boolean (EphyNode *node,
98 guint property_id,
99 gboolean value);
100 long ephy_node_get_property_long (EphyNode *node,
101 guint property_id);
102 void ephy_node_set_property_long (EphyNode *node,
103 guint property_id,
104 long value);
105 int ephy_node_get_property_int (EphyNode *node,
106 guint property_id);
107 void ephy_node_set_property_int (EphyNode *node,
108 guint property_id,
109 int value);
110 double ephy_node_get_property_double (EphyNode *node,
111 guint property_id);
112 void ephy_node_set_property_double (EphyNode *node,
113 guint property_id,
114 double value);
115 float ephy_node_get_property_float (EphyNode *node,
116 guint property_id);
117 void ephy_node_set_property_float (EphyNode *node,
118 guint property_id,
119 float value);
120 EphyNode *ephy_node_get_property_node (EphyNode *node,
121 guint property_id);
123 /* xml storage */
124 int ephy_node_write_to_xml (EphyNode *node,
125 xmlTextWriterPtr writer);
126 EphyNode *ephy_node_new_from_xml (EphyNodeDb *db,
127 xmlNodePtr xml_node);
129 /* DAG structure */
130 void ephy_node_add_child (EphyNode *node,
131 EphyNode *child);
132 void ephy_node_remove_child (EphyNode *node,
133 EphyNode *child);
134 void ephy_node_sort_children (EphyNode *node,
135 GCompareFunc compare_func);
136 gboolean ephy_node_has_child (EphyNode *node,
137 EphyNode *child);
138 void ephy_node_reorder_children (EphyNode *node,
139 int *new_order);
140 GPtrArray *ephy_node_get_children (EphyNode *node);
141 int ephy_node_get_n_children (EphyNode *node);
142 EphyNode *ephy_node_get_nth_child (EphyNode *node,
143 guint n);
144 int ephy_node_get_child_index (EphyNode *node,
145 EphyNode *child);
146 EphyNode *ephy_node_get_next_child (EphyNode *node,
147 EphyNode *child);
148 EphyNode *ephy_node_get_previous_child (EphyNode *node,
149 EphyNode *child);
150 void ephy_node_set_is_drag_source (EphyNode *node,
151 gboolean allow);
152 gboolean ephy_node_get_is_drag_source (EphyNode *node);
153 void ephy_node_set_is_drag_dest (EphyNode *node,
154 gboolean allow);
155 gboolean ephy_node_get_is_drag_dest (EphyNode *node);
157 G_END_DECLS
159 #endif /* __EPHY_NODE_H */