]> git.0d.be Git - empathy.git/blob - libempathy-gtk/empathy-roster-model.c
Updated Greek translation
[empathy.git] / libempathy-gtk / empathy-roster-model.c
1 /*
2  * empathy-roster-model.c
3  *
4  * Copyright (C) 2012 Collabora Ltd. <http://www.collabora.co.uk/>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20 #include "config.h"
21
22 #include "empathy-roster-model.h"
23
24 G_DEFINE_INTERFACE (EmpathyRosterModel, empathy_roster_model, G_TYPE_OBJECT)
25
26 enum
27 {
28   SIG_INDIVIDUAL_ADDED,
29   SIG_INDIVIDUAL_REMOVED,
30   SIG_GROUPS_CHANGED,
31   SIG_TOP_INDIVIDUALS_CHANGED,
32   SIG_FAVOURITES_CHANGED,
33   LAST_SIGNAL
34 };
35
36 static guint signals[LAST_SIGNAL];
37
38 static void
39 empathy_roster_model_default_init (EmpathyRosterModelInterface *iface)
40 {
41   signals[SIG_INDIVIDUAL_ADDED] =
42     g_signal_new ("individual-added",
43         EMPATHY_TYPE_ROSTER_MODEL,
44         G_SIGNAL_RUN_LAST,
45         0, NULL, NULL, NULL,
46         G_TYPE_NONE, 1,
47         FOLKS_TYPE_INDIVIDUAL);
48
49   signals[SIG_INDIVIDUAL_REMOVED] =
50     g_signal_new ("individual-removed",
51         EMPATHY_TYPE_ROSTER_MODEL,
52         G_SIGNAL_RUN_LAST,
53         0, NULL, NULL, NULL,
54         G_TYPE_NONE, 1,
55         FOLKS_TYPE_INDIVIDUAL);
56
57   signals[SIG_GROUPS_CHANGED] =
58     g_signal_new ("groups-changed",
59         EMPATHY_TYPE_ROSTER_MODEL,
60         G_SIGNAL_RUN_LAST,
61         0, NULL, NULL, NULL,
62         G_TYPE_NONE, 3,
63         FOLKS_TYPE_INDIVIDUAL,
64         G_TYPE_STRING,
65         G_TYPE_BOOLEAN);
66
67   signals[SIG_TOP_INDIVIDUALS_CHANGED] =
68     g_signal_new ("top-individuals-changed",
69         EMPATHY_TYPE_ROSTER_MODEL,
70         G_SIGNAL_RUN_LAST,
71         0, NULL, NULL, NULL,
72         G_TYPE_NONE, 0);
73
74   signals[SIG_FAVOURITES_CHANGED] =
75     g_signal_new ("favourites-changed",
76         EMPATHY_TYPE_ROSTER_MODEL,
77         G_SIGNAL_RUN_LAST,
78         0, NULL, NULL, NULL,
79         G_TYPE_NONE, 2,
80         FOLKS_TYPE_INDIVIDUAL,
81         G_TYPE_BOOLEAN);
82 }
83
84 /***** Restricted *****/
85
86 void
87 empathy_roster_model_fire_individual_added (EmpathyRosterModel *self,
88     FolksIndividual *individual)
89 {
90   g_signal_emit (self, signals[SIG_INDIVIDUAL_ADDED], 0, individual);
91 }
92
93 void
94 empathy_roster_model_fire_individual_removed (EmpathyRosterModel *self,
95     FolksIndividual *individual)
96 {
97   g_signal_emit (self, signals[SIG_INDIVIDUAL_REMOVED], 0, individual);
98 }
99
100 void
101 empathy_roster_model_fire_groups_changed (EmpathyRosterModel *self,
102     FolksIndividual *individual,
103     const gchar *group,
104     gboolean is_member)
105 {
106   g_signal_emit (self, signals[SIG_GROUPS_CHANGED], 0, individual, group,
107       is_member);
108 }
109
110 void
111 empathy_roster_model_fire_top_individuals_changed (EmpathyRosterModel *self)
112 {
113   g_signal_emit (self, signals[SIG_TOP_INDIVIDUALS_CHANGED], 0);
114 }
115
116 void
117 empathy_roster_model_fire_favourites_changed (EmpathyRosterModel *self,
118     FolksIndividual *individual,
119     gboolean favourite)
120 {
121   g_signal_emit (self, signals[SIG_FAVOURITES_CHANGED], 0, individual,
122       favourite);
123 }
124
125
126 /***** Public *****/
127
128 /**
129  * empathy_roster_model_get_individuals:
130  * @self: a #EmpathyRosterModel
131  *
132  * Returns all the individuals stored by @self.
133  *
134  * Returns: (transfer container): a #GList of #FolksIndividual
135  */
136 GList *
137 empathy_roster_model_get_individuals (EmpathyRosterModel *self)
138 {
139   EmpathyRosterModelInterface *iface;
140
141   g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
142
143   iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
144   g_return_val_if_fail (iface->get_individuals != NULL, NULL);
145
146   return (* iface->get_individuals) (self);
147 }
148
149 /**
150  * empathy_roster_model_get_groups_for_individual:
151  * @self: a #EmpathyRosterModel
152  * @individual: a #FolksIndidivual
153  *
154  * Returns the groups of which @individual is a member of.
155  *
156  * Returns: (transfer container): a #GList of (const gchar *) representing the
157  * groups of @individual
158  */
159 GList *
160 empathy_roster_model_get_groups_for_individual (EmpathyRosterModel *self,
161     FolksIndividual *individual)
162 {
163   EmpathyRosterModelInterface *iface;
164
165   g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
166
167   iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
168   g_return_val_if_fail (iface->get_groups_for_individual != NULL, NULL);
169
170   return (* iface->get_groups_for_individual) (self, individual);
171 }
172
173 /**
174  * empathy_roster_model_get_top_individuals:
175  * @self: a #EmpathyRosterModel
176  *
177  * Returns a list of the top_individuals.
178  *
179  * Returns: (transfer none): a #GList of #FolksIndividual
180  */
181 GList *
182 empathy_roster_model_get_top_individuals (EmpathyRosterModel *self)
183 {
184   EmpathyRosterModelInterface *iface;
185
186   g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
187
188   iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
189   g_return_val_if_fail (iface->get_top_individuals != NULL, NULL);
190
191   return (* iface->get_top_individuals) (self);
192 }
193
194 /**
195  * empathy_roster_model_contact_in_top:
196  * @self: a #EmpathyRosterModel
197  * @contact: a #EmpathyRosterContact
198  *
199  * Checks if the passed #EmpathyRosterContact should be displayed in
200  * top contacts.
201  *
202  * Returns: %TRUE if it should be displayed in top contacts, %FALSE
203  * if not
204  */
205 gboolean
206 empathy_roster_model_contact_in_top (EmpathyRosterModel *self,
207     EmpathyRosterContact *contact)
208 {
209   EmpathyRosterModelInterface *iface;
210
211   g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), FALSE);
212
213   iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
214   g_return_val_if_fail (iface->contact_in_top != NULL, FALSE);
215
216   return (* iface->contact_in_top) (self, contact);
217 }