1 /* ATK - Accessibility Toolkit
2 * Copyright 2001 Sun Microsystems Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #include <glib-object.h>
24 static void atk_relation_set_class_init (AtkRelationSetClass *klass);
25 static void atk_relation_set_finalize (GObject *object);
28 atk_relation_set_get_type (void)
30 static GType type = 0;
34 static const GTypeInfo typeInfo =
36 sizeof (AtkRelationSetClass),
38 (GBaseFinalizeFunc) NULL,
39 (GClassInitFunc) atk_relation_set_class_init,
40 (GClassFinalizeFunc) NULL,
42 sizeof (AtkRelationSet),
44 (GInstanceInitFunc) NULL,
46 type = g_type_register_static (G_TYPE_OBJECT, "AtkRelationSet", &typeInfo, 0) ;
52 atk_relation_set_class_init (AtkRelationSetClass *klass)
54 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
56 gobject_class->finalize = atk_relation_set_finalize;
60 * atk_relation_set_new:
62 * Creates a new empty relation set.
64 * Returns: a new #AtkRelationSet
67 atk_relation_set_new (void)
69 AtkRelationSet *relation_set;
71 relation_set = g_object_new (ATK_TYPE_RELATION_SET, NULL);
76 * atk_relation_set_contains:
77 * @set: a #AtkRelationSet
78 * @relationship: a #AtkRelationType
80 * Determines whether the relation set contains a relation that matches the
83 * Returns: %TRUE if @relationtype is the relationship type of a relation in @set.
86 atk_relation_set_contains (AtkRelationSet *set,
87 AtkRelationType relationship)
89 GPtrArray *array_item;
93 g_return_val_if_fail (set != NULL, FALSE);
94 g_return_val_if_fail (ATK_IS_RELATION_SET (set), FALSE);
96 array_item = set->relations;
97 if (array_item == NULL)
99 for (i = 0; i < array_item->len; i++)
101 item = g_ptr_array_index (array_item, i);
102 if (item->relationship == relationship)
109 * atk_relation_set_remove:
110 * @set: a #AtkRelationSet
111 * @relation: a #AtkRelation
113 * Removes a relation from the relation set.
114 * This function unref's the AtkRelation so it will be deleted unless there
115 * is another reference to it.
118 atk_relation_set_remove (AtkRelationSet *set,
119 AtkRelation *relation)
121 GPtrArray *array_item;
123 g_return_if_fail (set != NULL);
124 g_return_if_fail (ATK_IS_RELATION_SET (set));
125 g_return_if_fail (relation != NULL);
127 array_item = set->relations;
128 if (array_item == NULL)
131 if (g_ptr_array_remove (array_item, relation))
133 g_object_unref (relation);
138 * atk_relation_set_add:
139 * @set: a #AtkRelationSet
140 * @relation: a #AtkRelation
142 * Add a new relation to the current relation set if it is not already
144 * This function ref's the AtkRelation so the caller of this function
145 * should unref it to ensure that it will be destroyed when the AtkRelationSet
149 atk_relation_set_add (AtkRelationSet *set,
150 AtkRelation *relation)
152 g_return_if_fail (set != NULL);
153 g_return_if_fail (ATK_IS_RELATION_SET (set));
154 g_return_if_fail (relation != NULL);
156 if (set->relations == NULL)
158 set->relations = g_ptr_array_new ();
160 g_ptr_array_add (set->relations, relation);
161 g_object_ref (relation);
165 * atk_relation_set_get_n_relations:
166 * @set: a #AtkRelationSet
168 * Determines the number of relations in a relation set.
170 * Returns: a gint representing the number of relations in the set.
173 atk_relation_set_get_n_relations (AtkRelationSet *set)
175 g_return_val_if_fail (set != NULL, 0);
176 g_return_val_if_fail (ATK_IS_RELATION_SET (set), FALSE);
178 if (set->relations == NULL)
181 return set->relations->len;
185 * atk_relation_set_get_relation
186 * @set: a #AtkRelationSet
187 * @i: a gint representing a position in the set, starting from 0.
189 * Determines the relation at the specified position in the relation set.
191 * Returns: a #AtkRelation, which is the relation at position i in the set.
194 atk_relation_set_get_relation (AtkRelationSet *set,
197 GPtrArray *array_item;
200 g_return_val_if_fail (set != NULL, NULL);
201 g_return_val_if_fail (ATK_IS_RELATION_SET (set), FALSE);
202 g_return_val_if_fail (i >= 0, NULL);
204 array_item = set->relations;
205 if (array_item == NULL)
207 item = g_ptr_array_index (array_item, i);
215 * atk_relation_set_get_relation_by_type:
216 * @set: a #AtkRelationSet
217 * @relationship: a #AtkRelationType
219 * Finds a relation that matches the specified type.
221 * Returns: a #AtkRelation, which is a relation matching the specified type.
224 atk_relation_set_get_relation_by_type (AtkRelationSet *set,
225 AtkRelationType relationship)
227 GPtrArray *array_item;
231 g_return_val_if_fail (set != NULL, NULL);
232 g_return_val_if_fail (ATK_IS_RELATION_SET (set), FALSE);
234 array_item = set->relations;
235 if (array_item == NULL)
237 for (i = 0; i < array_item->len; i++)
239 item = g_ptr_array_index (array_item, i);
240 if (item->relationship == relationship)
247 atk_relation_set_finalize (GObject *object)
249 AtkRelationSet *relation_set;
253 g_return_if_fail (ATK_IS_RELATION_SET (object));
255 relation_set = ATK_RELATION_SET (object);
256 array = relation_set->relations;
260 for (i = 0; i < array->len; i++)
262 g_object_unref (g_ptr_array_index (array, i));
264 g_ptr_array_free (array, TRUE);