Mercurial > pidgin
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 * |
