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
61 * return values: a new #AtkRelationSet
63 * Creates a new empty relation set.
66 atk_relation_set_new (void)
68 AtkRelationSet
*relation_set
;
70 relation_set
= g_object_new (ATK_TYPE_RELATION_SET
, NULL
);
75 * atk_relation_set_contains
76 * @set: a #AtkRelationSet
77 * @relationtype: a #AtkRelationType
78 * return values: %TRUE if @relationtype is the relationship type of a relation in @set.
80 * Determines whether the relation set contains a relation that matches the
84 atk_relation_set_contains (AtkRelationSet
*set
,
85 AtkRelationType relationship
)
87 GPtrArray
*array_item
;
91 g_return_val_if_fail (set
!= NULL
, FALSE
);
92 g_return_val_if_fail (ATK_IS_RELATION_SET (set
), FALSE
);
94 array_item
= set
->relations
;
95 if (array_item
== NULL
)
97 for (i
= 0; i
< array_item
->len
; i
++)
99 item
= g_ptr_array_index (array_item
, i
);
100 if (item
->relationship
== relationship
)
107 * atk_relation_set_remove
108 * @set: a #AtkRelationSet
109 * @relation: a #AtkRelation
111 * Removes a relation from the relation set.
113 * This function unref's the AtkRelation so it will be deleted unless there
114 * is another reference to it.
117 atk_relation_set_remove (AtkRelationSet
*set
,
118 AtkRelation
*relation
)
120 GPtrArray
*array_item
;
122 g_return_if_fail (set
!= NULL
);
123 g_return_if_fail (ATK_IS_RELATION_SET (set
));
124 g_return_if_fail (relation
!= NULL
);
126 array_item
= set
->relations
;
127 if (array_item
== NULL
)
130 if (g_ptr_array_remove (array_item
, relation
))
132 g_object_unref (relation
);
137 * atk_relation_set_add
138 * @set: a #AtkRelationSet
139 * @relation: a #AtkRelation
141 * 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
167 * return values: a gint representing the number of relations in the set.
169 * Determines the number of relations in a relation set.
172 atk_relation_set_get_n_relations (AtkRelationSet
*set
)
174 g_return_val_if_fail (set
!= NULL
, 0);
175 g_return_val_if_fail (ATK_IS_RELATION_SET (set
), FALSE
);
177 if (set
->relations
== NULL
)
180 return set
->relations
->len
;
184 * atk_relation_set_get_relation
185 * @set: a #AtkRelationSet
186 * @i: a gint representing a position in the set, starting from 0.
187 * return values: a #AtkRelation, which is the relation at position i in the set.
189 * Determines the relation at the specified position in the relation set.
192 atk_relation_set_get_relation (AtkRelationSet
*set
,
195 GPtrArray
*array_item
;
198 g_return_val_if_fail (set
!= NULL
, NULL
);
199 g_return_val_if_fail (ATK_IS_RELATION_SET (set
), FALSE
);
200 g_return_val_if_fail (i
>= 0, NULL
);
202 array_item
= set
->relations
;
203 if (array_item
== NULL
)
205 item
= g_ptr_array_index (array_item
, i
);
213 * atk_relation_set_get_relation_type
214 * @set: a #AtkRelationSet
215 * @relationship: a #AtkRelationType
216 * return values: a #AtkRelation, which is a relation matching the specified type.
218 * Finds a relation that matches the specified type.
221 atk_relation_set_get_relation_by_type (AtkRelationSet
*set
,
222 AtkRelationType relationship
)
224 GPtrArray
*array_item
;
228 g_return_val_if_fail (set
!= NULL
, NULL
);
229 g_return_val_if_fail (ATK_IS_RELATION_SET (set
), FALSE
);
231 array_item
= set
->relations
;
232 if (array_item
== NULL
)
234 for (i
= 0; i
< array_item
->len
; i
++)
236 item
= g_ptr_array_index (array_item
, i
);
237 if (item
->relationship
== relationship
)
244 atk_relation_set_finalize (GObject
*object
)
246 AtkRelationSet
*relation_set
;
250 g_return_if_fail (ATK_IS_RELATION_SET (object
));
252 relation_set
= ATK_RELATION_SET (object
);
253 array
= relation_set
->relations
;
257 for (i
= 0; i
< array
->len
; i
++)
259 g_object_unref (g_ptr_array_index (array
, i
));
261 g_ptr_array_free (array
, TRUE
);