1 /*
2 *  RAL -- Rubrica Addressbook Library
3 *  file: card.h
4 *
5 *  Copyright (C) Nicola Fragale <nicolafragale@libero.it>
6 *
7 *  This program is free software; you can redistribute it and/or modify
8 *  it under the terms of the GNU General Public License as published by
9 *  the Free Software Foundation; either version 3 of the License
10 *
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.
15 *
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20 
21 #ifndef _R_CARD_H
22 #define _R_CARD_H
23 
24 #include <time.h>
25 #include <glib.h>
26 #include <glib-object.h>
27 #include <libxml/tree.h>
28 
29 #include "types.h"
30 #include "group_box.h"
31 #include "group.h"
32 #include "address.h"
33 #include "net.h"
34 #include "telephone.h"
35 #include "ref.h"
36 
37 
38 
39 #define R_CARD_TYPE            (r_card_get_type())
40 
41 #define R_CARD(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),   \
42                                 R_CARD_TYPE, RCard))
43 
44 #define R_CARD_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),    \
45                                 R_CARD_TYPE, RCardClass))
46 
47 #define IS_R_CARD(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),   \
48                                 R_CARD_TYPE))
49 
50 #define IS_R_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),    \
51                                 R_CARD_TYPE))
52 
53 #define R_CARD_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),    \
54                                 R_CARD_TYPE, RCardClass))
55 
56 
57 typedef enum {
58   R_RATE_NONE = 0,         /* no importance         */
59   R_RATE_FEW,              /* few importance        */
60   R_RATE_NORMAL,           /* normal                */
61   R_RATE_HIGH,             /* high importance       */
62   R_RATE_VERY_HIGH         /* very high importance  */
63 } RRate;
64 
65 
66 enum {
67   UNKNOW_CARD,
68   PERSONAL_CARD,
69   COMPANY_CARD
70 };
71 
72 
73 typedef struct _RCard          RCard;
74 typedef struct _RCardClass     RCardClass;
75 typedef struct _RCardPrivate   RCardPrivate;
76 
77 
78 struct _RCard
79 {
80   GObject parent;
81 
82   RCardPrivate* priv;
83 };
84 
85 
86 struct _RCardClass
87 {
88   GObjectClass parent;
89 
90   /* methods */
91   void     (*free)       (RCard* card);
92 
93   gpointer (*copy)       (RCard* card);
94   RInfos*  (*get_infos)  (RCard* card);
95   gboolean (*search)     (RCard* card, const gchar* str);
96 
97   void     (*print_card) (RCard* card);
98 
99   /* signals */
100 };
101 
102 
103 
104 GType    r_card_get_type             (void);
105 
106 RCard*   r_card_new                  (void);
107 void     r_card_free                 (RCard* card);
108 RCard*   r_card_copy                 (RCard* card);
109 void     r_card_reassign_id          (RCard* card, glong id);
110 
111 gboolean r_card_is_personal          (RCard* card);
112 gboolean r_card_is_deleted           (RCard* card);
113 gboolean r_card_search               (RCard* card, const gchar* str);
114 gboolean r_card_check                (RCard* card, const gchar* property,
115 				      gchar** value);
116 /*  card infos
117 */
118 RInfos*  r_card_get_infos            (RCard* card);
119 void     r_card_free_infos           (RInfos *infos);
120 
121 
122 /*  group
123 */
124 void     r_card_add_group            (RCard* card, RGroup* group);
125 gboolean r_card_delete_group         (RCard* card, gchar* name);
126 gboolean r_card_rename_group         (RCard* card, gchar* oldname,
127 				      gchar* newname);
128 gboolean r_card_change_pixmap        (RCard* card, gchar* grpname,
129 				      gchar* new_uri);
130 gboolean r_card_has_groups           (RCard* card);
131 
132 gpointer r_card_find_group           (RCard* card, gchar* name);
133 gboolean r_card_belong_to_group      (RCard* card, const gchar* group_name);
134 GList*   r_card_get_groups_owned_by  (RCard* card, const gchar* owner);
135 
136 RGroup*  r_card_get_group            (RCard* card);
137 RGroup*  r_card_get_next_group       (RCard* card);
138 RGroup*  r_card_get_prev_group       (RCard* card);
139 void     r_card_reset_group          (RCard* card);
140 void     r_card_foreach_group        (RCard* card, RFunc func,
141 				      gpointer user_data);
142 
143 /*  address
144 */
145 void     r_card_add_address          (RCard* card, RAddress* address);
146 gboolean r_card_delete_address       (RCard* card, RAddress* address);
147 gboolean r_card_replace_address      (RCard* card, RAddress* old,
148 				      RAddress* new);
149 gpointer r_card_get_address          (RCard* card);
150 gpointer r_card_get_next_address     (RCard* card);
151 gpointer r_card_get_prev_address     (RCard* card);
152 void     r_card_reset_address        (RCard* card);
153 gpointer r_card_find_address         (RCard* card, RAddressType type);
154 void     r_card_foreach_address      (RCard* card, RFunc func,
155 				      gpointer user_data);
156 
157 /*  net address
158 */
159 void     r_card_add_net_address      (RCard* card, RNetAddress* net);
160 gboolean r_card_delete_net_address   (RCard* card, RNetAddress* address);
161 gboolean r_card_replace_net_address  (RCard* card, RNetAddress* old,
162 				      RNetAddress* new);
163 gpointer r_card_get_net_address      (RCard* card);
164 gpointer r_card_get_next_net_address (RCard* card);
165 gpointer r_card_get_prev_net_address (RCard* card);
166 void     r_card_reset_net_address    (RCard* card);
167 gpointer r_card_find_net_address     (RCard* card, RNetAddressType type);
168 void     r_card_foreach_net_address  (RCard* card, RFunc func,
169 				      gpointer user_data);
170 
171 
172 /*  telephone
173 */
174 void     r_card_add_telephone        (RCard* card, RTelephone* tel);
175 gboolean r_card_delete_telephone     (RCard* card, RTelephone* phone);
176 gboolean r_card_replace_telephone    (RCard* card, RTelephone* old,
177 				      RTelephone* new);
178 gpointer r_card_get_telephone        (RCard* card);
179 gpointer r_card_get_next_telephone   (RCard* card);
180 gpointer r_card_get_prev_telephone   (RCard* card);
181 void     r_card_reset_telephone      (RCard* card);
182 gpointer r_card_find_telephone       (RCard* card, RTelephoneType type);
183 void     r_card_foreach_telephone    (RCard* card, RFunc func,
184 				      gpointer user_data);
185 
186 
187 /*  references
188  */
189 void     r_card_add_ref              (RCard* card, RRef* ref);
190 gboolean r_card_del_ref              (RCard* card, RRef* ref);
191 gpointer r_card_get_ref              (RCard* card);
192 gpointer r_card_get_next_ref         (RCard* card);
193 gpointer r_card_get_prev_ref         (RCard* card);
194 void     r_card_reset_ref            (RCard* card);
195 void     r_card_foreach_ref          (RCard* card, RFunc func,
196 				      gpointer user_data);
197 gboolean r_card_has_refs             (RCard* card);
198 
199 
200 /*  utils
201 */
202 gchar*   r_card_get_group_owner      (RCard* card, RGroup* group);
203 gchar*   r_card_get_home_page        (RCard* card);
204 gchar*   r_card_get_email            (RCard* card);
205 gchar*   r_card_get_irc              (RCard* card);
206 
207 
208 
209 /* just for tests
210  */
211 void r_card_print     (RCard* card);
212 
213 #endif
214