comparison src/request.c @ 8286:89d9d004e3f3

[gaim-migrate @ 9010] Improved the field request API, adding required fields and account fields, as well as some new utility API functions and bug fixes. These changes allowed me to migrate the New IM dialog over to the field request API, removing a lot of code and improving consistency. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Wed, 18 Feb 2004 07:22:53 +0000
parents d335cc7bca54
children e39ea2b4f6cd
comparison
equal deleted inserted replaced
8285:d335cc7bca54 8286:89d9d004e3f3
56 GList *l; 56 GList *l;
57 GaimRequestFieldGroup *group; 57 GaimRequestFieldGroup *group;
58 58
59 g_return_if_fail(fields != NULL); 59 g_return_if_fail(fields != NULL);
60 60
61 for (l = fields->groups; l != NULL; l = l->next) { 61 for (l = fields->groups; l != NULL; l = l->next)
62 {
62 group = l->data; 63 group = l->data;
63 64
64 gaim_request_field_group_destroy(group); 65 gaim_request_field_group_destroy(group);
65 } 66 }
66 67
67 g_list_free(fields->groups); 68 if (fields->groups != NULL)
69 g_list_free(fields->groups);
70
71 if (fields->required_fields != NULL)
72 g_list_free(fields->required_fields);
68 73
69 g_hash_table_destroy(fields->fields); 74 g_hash_table_destroy(fields->fields);
70 75
71 g_free(fields); 76 g_free(fields);
72 } 77 }
102 g_return_val_if_fail(fields != NULL, NULL); 107 g_return_val_if_fail(fields != NULL, NULL);
103 108
104 return fields->groups; 109 return fields->groups;
105 } 110 }
106 111
112 gboolean
113 gaim_request_fields_exists(const GaimRequestFields *fields, const char *id)
114 {
115 g_return_val_if_fail(fields != NULL, FALSE);
116 g_return_val_if_fail(id != NULL, FALSE);
117
118 return (g_hash_table_lookup(fields->fields, id) != NULL);
119 }
120
121 const GList *
122 gaim_request_fields_get_required(const GaimRequestFields *fields)
123 {
124 g_return_val_if_fail(fields != NULL, NULL);
125
126 return fields->required_fields;
127 }
128
129 gboolean
130 gaim_request_fields_is_field_required(const GaimRequestFields *fields,
131 const char *id)
132 {
133 GaimRequestField *field;
134
135 g_return_val_if_fail(fields != NULL, FALSE);
136 g_return_val_if_fail(id != NULL, FALSE);
137
138 if ((field = gaim_request_fields_get_field(fields, id)) == NULL)
139 return FALSE;
140
141 return gaim_request_field_is_required(field);
142 }
143
144 gboolean
145 gaim_request_fields_all_required_filled(const GaimRequestFields *fields)
146 {
147 GList *l;
148
149 g_return_val_if_fail(fields != NULL, FALSE);
150
151 for (l = fields->required_fields; l != NULL; l = l->next)
152 {
153 GaimRequestField *field = (GaimRequestField *)l->data;
154
155 switch (gaim_request_field_get_type(field))
156 {
157 case GAIM_REQUEST_FIELD_STRING:
158 if (gaim_request_field_string_get_value(field) == NULL)
159 return FALSE;
160
161 break;
162
163 default:
164 break;
165 }
166 }
167
168 return TRUE;
169 }
170
107 GaimRequestField * 171 GaimRequestField *
108 gaim_request_fields_get_field(const GaimRequestFields *fields, const char *id) 172 gaim_request_fields_get_field(const GaimRequestFields *fields, const char *id)
109 { 173 {
110 GaimRequestField *field; 174 GaimRequestField *field;
111 175
174 return -1; 238 return -1;
175 239
176 return gaim_request_field_choice_get_value(field); 240 return gaim_request_field_choice_get_value(field);
177 } 241 }
178 242
243 GaimAccount *
244 gaim_request_fields_get_account(const GaimRequestFields *fields,
245 const char *id)
246 {
247 GaimRequestField *field;
248
249 g_return_val_if_fail(fields != NULL, NULL);
250 g_return_val_if_fail(id != NULL, NULL);
251
252 if ((field = gaim_request_fields_get_field(fields, id)) == NULL)
253 return NULL;
254
255 return gaim_request_field_account_get_value(field);
256 }
257
179 GaimRequestFieldGroup * 258 GaimRequestFieldGroup *
180 gaim_request_field_group_new(const char *title) 259 gaim_request_field_group_new(const char *title)
181 { 260 {
182 GaimRequestFieldGroup *group; 261 GaimRequestFieldGroup *group;
183 262
218 g_return_if_fail(group != NULL); 297 g_return_if_fail(group != NULL);
219 g_return_if_fail(field != NULL); 298 g_return_if_fail(field != NULL);
220 299
221 group->fields = g_list_append(group->fields, field); 300 group->fields = g_list_append(group->fields, field);
222 301
223 if (group->fields_list != NULL) { 302 if (group->fields_list != NULL)
303 {
224 g_hash_table_insert(group->fields_list->fields, 304 g_hash_table_insert(group->fields_list->fields,
225 g_strdup(gaim_request_field_get_id(field)), field); 305 g_strdup(gaim_request_field_get_id(field)), field);
306 }
307
308 field->group = group;
309
310 if (gaim_request_field_is_required(field))
311 {
312 group->fields_list->required_fields =
313 g_list_append(group->fields_list->required_fields, field);
226 } 314 }
227 } 315 }
228 316
229 const char * 317 const char *
230 gaim_request_field_group_get_title(const GaimRequestFieldGroup *group) 318 gaim_request_field_group_get_title(const GaimRequestFieldGroup *group)
342 g_free(field->type_hint); 430 g_free(field->type_hint);
343 431
344 field->type_hint = (type_hint == NULL ? NULL : g_strdup(type_hint)); 432 field->type_hint = (type_hint == NULL ? NULL : g_strdup(type_hint));
345 } 433 }
346 434
435 void
436 gaim_request_field_set_required(GaimRequestField *field, gboolean required)
437 {
438 g_return_if_fail(field != NULL);
439
440 if (field->required == required)
441 return;
442
443 field->required = required;
444
445 if (field->group != NULL)
446 {
447 if (required)
448 {
449 field->group->fields_list->required_fields =
450 g_list_append(field->group->fields_list->required_fields,
451 field);
452 }
453 else
454 {
455 field->group->fields_list->required_fields =
456 g_list_remove(field->group->fields_list->required_fields,
457 field);
458 }
459 }
460 }
461
347 GaimRequestFieldType 462 GaimRequestFieldType
348 gaim_request_field_get_type(const GaimRequestField *field) 463 gaim_request_field_get_type(const GaimRequestField *field)
349 { 464 {
350 g_return_val_if_fail(field != NULL, GAIM_REQUEST_FIELD_NONE); 465 g_return_val_if_fail(field != NULL, GAIM_REQUEST_FIELD_NONE);
351 466
380 gaim_request_field_get_type_hint(const GaimRequestField *field) 495 gaim_request_field_get_type_hint(const GaimRequestField *field)
381 { 496 {
382 g_return_val_if_fail(field != NULL, NULL); 497 g_return_val_if_fail(field != NULL, NULL);
383 498
384 return field->type_hint; 499 return field->type_hint;
500 }
501
502 gboolean
503 gaim_request_field_is_required(const GaimRequestField *field)
504 {
505 g_return_val_if_fail(field != NULL, FALSE);
506
507 return field->required;
385 } 508 }
386 509
387 GaimRequestField * 510 GaimRequestField *
388 gaim_request_field_string_new(const char *id, const char *text, 511 gaim_request_field_string_new(const char *id, const char *text,
389 const char *default_value, gboolean multiline) 512 const char *default_value, gboolean multiline)
851 g_return_val_if_fail(text != NULL, NULL); 974 g_return_val_if_fail(text != NULL, NULL);
852 975
853 field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_LABEL); 976 field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_LABEL);
854 977
855 return field; 978 return field;
979 }
980
981
982 GaimRequestField *
983 gaim_request_field_account_new(const char *id, const char *text,
984 GaimAccount *account)
985 {
986 GaimRequestField *field;
987
988 g_return_val_if_fail(id != NULL, NULL);
989 g_return_val_if_fail(text != NULL, NULL);
990
991 field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_ACCOUNT);
992
993 if (account == NULL && gaim_connections_get_all() != NULL)
994 {
995 account = gaim_connection_get_account(
996 (GaimConnection *)gaim_connections_get_all()->data);
997 }
998
999 gaim_request_field_account_set_default_value(field, account);
1000 gaim_request_field_account_set_value(field, account);
1001
1002 return field;
1003 }
1004
1005 void
1006 gaim_request_field_account_set_default_value(GaimRequestField *field,
1007 GaimAccount *default_value)
1008 {
1009 g_return_if_fail(field != NULL);
1010 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT);
1011
1012 field->u.account.default_account = default_value;
1013 }
1014
1015 void
1016 gaim_request_field_account_set_value(GaimRequestField *field,
1017 GaimAccount *value)
1018 {
1019 g_return_if_fail(field != NULL);
1020 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT);
1021
1022 field->u.account.account = value;
1023 }
1024
1025 void
1026 gaim_request_field_account_set_show_all(GaimRequestField *field,
1027 gboolean show_all)
1028 {
1029 g_return_if_fail(field != NULL);
1030 g_return_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT);
1031
1032 if (field->u.account.show_all == show_all)
1033 return;
1034
1035 field->u.account.show_all = show_all;
1036
1037 if (!show_all)
1038 {
1039 if (gaim_account_is_connected(field->u.account.default_account))
1040 {
1041 gaim_request_field_account_set_default_value(field,
1042 (GaimAccount *)gaim_connections_get_all()->data);
1043 }
1044
1045 if (gaim_account_is_connected(field->u.account.account))
1046 {
1047 gaim_request_field_account_set_value(field,
1048 (GaimAccount *)gaim_connections_get_all()->data);
1049 }
1050 }
1051 }
1052
1053 GaimAccount *
1054 gaim_request_field_account_get_default_value(const GaimRequestField *field)
1055 {
1056 g_return_val_if_fail(field != NULL, NULL);
1057 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT, NULL);
1058
1059 return field->u.account.default_account;
1060 }
1061
1062 GaimAccount *
1063 gaim_request_field_account_get_value(const GaimRequestField *field)
1064 {
1065 g_return_val_if_fail(field != NULL, NULL);
1066 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT, NULL);
1067
1068 return field->u.account.account;
1069 }
1070
1071 gboolean
1072 gaim_request_field_account_get_show_all(const GaimRequestField *field)
1073 {
1074 g_return_val_if_fail(field != NULL, FALSE);
1075 g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_ACCOUNT, FALSE);
1076
1077 return field->u.account.show_all;
856 } 1078 }
857 1079
858 /* -- */ 1080 /* -- */
859 1081
860 void * 1082 void *