| 288 GList *fields = purple_request_group_get_fields(group); |
288 GList *fields = purple_request_group_get_fields(group); |
| 289 |
289 |
| 290 for (; fields ; fields = fields->next) |
290 for (; fields ; fields = fields->next) |
| 291 { |
291 { |
| 292 PurpleRequestField *field = fields->data; |
292 PurpleRequestField *field = fields->data; |
| 293 PurpleRequestFieldType type = purple_request_field_get_field_type(field); |
|
| 294 if (!purple_request_field_is_visible(field)) |
293 if (!purple_request_field_is_visible(field)) |
| 295 continue; |
294 continue; |
| 296 if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { |
295 if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { |
| 297 GntWidget *check = g_object_get_data(G_OBJECT(field), |
296 GntWidget *check = g_object_get_data(G_OBJECT(field), |
| 298 "finch-ui-data"); |
297 "finch-ui-data"); |
| 319 GntWidget *combo = g_object_get_data(G_OBJECT(field), |
318 GntWidget *combo = g_object_get_data(G_OBJECT(field), |
| 320 "finch-ui-data"); |
319 "finch-ui-data"); |
| 321 gpointer value = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); |
320 gpointer value = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); |
| 322 purple_request_field_choice_set_value(PURPLE_REQUEST_FIELD_CHOICE(field), |
321 purple_request_field_choice_set_value(PURPLE_REQUEST_FIELD_CHOICE(field), |
| 323 value); |
322 value); |
| 324 } |
323 } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { |
| 325 else if (type == PURPLE_REQUEST_FIELD_LIST) |
324 PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); |
| 326 { |
|
| 327 GList *selected = NULL; |
325 GList *selected = NULL; |
| 328 GList *list = purple_request_field_list_get_items(field); |
326 GList *list = purple_request_field_list_get_items(lfield); |
| 329 if (purple_request_field_list_get_multi_select(field)) |
327 if(purple_request_field_list_get_multi_select(lfield)) { |
| 330 { |
|
| 331 GntWidget *tree = g_object_get_data(G_OBJECT(field), |
328 GntWidget *tree = g_object_get_data(G_OBJECT(field), |
| 332 "finch-ui-data"); |
329 "finch-ui-data"); |
| 333 |
330 |
| 334 for (; list; list = list->next) |
331 for (; list; list = list->next) |
| 335 { |
332 { |
| 336 PurpleKeyValuePair *item = list->data; |
333 PurpleKeyValuePair *item = list->data; |
| 337 const char *text = item->key; |
334 const char *text = item->key; |
| 338 gpointer key = purple_request_field_list_get_data(field, text); |
335 gpointer key = NULL; |
| |
336 |
| |
337 key = purple_request_field_list_get_data(lfield, text); |
| 339 if (gnt_tree_get_choice(GNT_TREE(tree), key)) { |
338 if (gnt_tree_get_choice(GNT_TREE(tree), key)) { |
| 340 selected = g_list_prepend(selected, (gpointer)text); |
339 selected = g_list_prepend(selected, (gpointer)text); |
| 341 } |
340 } |
| 342 } |
341 } |
| 343 } |
342 } |
| 348 gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); |
347 gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); |
| 349 |
348 |
| 350 for (; list; list = list->next) { |
349 for (; list; list = list->next) { |
| 351 PurpleKeyValuePair *item = list->data; |
350 PurpleKeyValuePair *item = list->data; |
| 352 const char *text = item->key; |
351 const char *text = item->key; |
| 353 gpointer key = purple_request_field_list_get_data(field, text); |
352 gpointer key = NULL; |
| |
353 |
| |
354 key = purple_request_field_list_get_data(lfield, text); |
| 354 if (key == data) { |
355 if (key == data) { |
| 355 selected = g_list_prepend(selected, (gpointer)text); |
356 selected = g_list_prepend(selected, (gpointer)text); |
| 356 break; |
357 break; |
| 357 } |
358 } |
| 358 } |
359 } |
| 359 } |
360 } |
| 360 |
361 |
| 361 purple_request_field_list_set_selected(field, selected); |
362 purple_request_field_list_set_selected(lfield, selected); |
| 362 g_list_free(selected); |
363 g_list_free(selected); |
| 363 |
364 |
| 364 } else if (PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
365 } else if (PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
| 365 GntWidget *combo = NULL; |
366 GntWidget *combo = NULL; |
| 366 PurpleAccount *acc = NULL; |
367 PurpleAccount *acc = NULL; |
| 486 } |
487 } |
| 487 |
488 |
| 488 static GntWidget* |
489 static GntWidget* |
| 489 create_list_field(PurpleRequestField *field) |
490 create_list_field(PurpleRequestField *field) |
| 490 { |
491 { |
| |
492 PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); |
| 491 GntWidget *ret = NULL; |
493 GntWidget *ret = NULL; |
| 492 GList *list = purple_request_field_list_get_items(field); |
494 GList *list = purple_request_field_list_get_items(lfield); |
| 493 if (purple_request_field_list_get_multi_select(field)) { |
495 if(purple_request_field_list_get_multi_select(lfield)) { |
| 494 GntWidget *tree = gnt_tree_new(); |
496 GntWidget *tree = gnt_tree_new(); |
| 495 |
497 |
| 496 for (; list; list = list->next) |
498 for (; list; list = list->next) |
| 497 { |
499 { |
| 498 PurpleKeyValuePair *item = list->data; |
500 PurpleKeyValuePair *item = list->data; |
| 499 const char *text = item->key; |
501 const char *text = item->key; |
| 500 gpointer key = purple_request_field_list_get_data(field, text); |
502 gpointer key = purple_request_field_list_get_data(lfield, text); |
| 501 gnt_tree_add_choice(GNT_TREE(tree), key, |
503 gnt_tree_add_choice(GNT_TREE(tree), key, |
| 502 gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); |
504 gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); |
| 503 if (purple_request_field_list_is_selected(field, text)) |
505 if(purple_request_field_list_is_selected(lfield, text)) { |
| 504 gnt_tree_set_choice(GNT_TREE(tree), key, TRUE); |
506 gnt_tree_set_choice(GNT_TREE(tree), key, TRUE); |
| |
507 } |
| 505 } |
508 } |
| 506 ret = tree; |
509 ret = tree; |
| 507 } |
510 } |
| 508 else |
511 else |
| 509 { |
512 { |
| 511 |
514 |
| 512 for (; list; list = list->next) |
515 for (; list; list = list->next) |
| 513 { |
516 { |
| 514 PurpleKeyValuePair *item = list->data; |
517 PurpleKeyValuePair *item = list->data; |
| 515 const char *text = item->key; |
518 const char *text = item->key; |
| 516 gpointer key = purple_request_field_list_get_data(field, text); |
519 gpointer key = purple_request_field_list_get_data(lfield, text); |
| 517 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), key, text); |
520 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), key, text); |
| 518 if (purple_request_field_list_is_selected(field, text)) |
521 if(purple_request_field_list_is_selected(lfield, text)) { |
| 519 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), key); |
522 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), key); |
| |
523 } |
| 520 } |
524 } |
| 521 ret = combo; |
525 ret = combo; |
| 522 } |
526 } |
| 523 return ret; |
527 return ret; |
| 524 } |
528 } |
| 639 gnt_label_new_with_format(title, GNT_TEXT_FLAG_BOLD)); |
643 gnt_label_new_with_format(title, GNT_TEXT_FLAG_BOLD)); |
| 640 |
644 |
| 641 for (; fields ; fields = fields->next) |
645 for (; fields ; fields = fields->next) |
| 642 { |
646 { |
| 643 PurpleRequestField *field = fields->data; |
647 PurpleRequestField *field = fields->data; |
| 644 PurpleRequestFieldType type = purple_request_field_get_field_type(field); |
|
| 645 const char *label = purple_request_field_get_label(field); |
648 const char *label = purple_request_field_get_label(field); |
| 646 GntWidget *widget = NULL; |
649 GntWidget *widget = NULL; |
| 647 |
650 |
| 648 if (!purple_request_field_is_visible(field)) |
651 if (!purple_request_field_is_visible(field)) |
| 649 continue; |
652 continue; |
| 667 widget = create_string_field(field, &username); |
670 widget = create_string_field(field, &username); |
| 668 } else if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
671 } else if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
| 669 widget = create_integer_field(field); |
672 widget = create_integer_field(field); |
| 670 } else if(PURPLE_IS_REQUEST_FIELD_CHOICE(field)) { |
673 } else if(PURPLE_IS_REQUEST_FIELD_CHOICE(field)) { |
| 671 widget = create_choice_field(field); |
674 widget = create_choice_field(field); |
| 672 } else if (type == PURPLE_REQUEST_FIELD_LIST) { |
675 } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { |
| 673 widget = create_list_field(field); |
676 widget = create_list_field(field); |
| 674 } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
677 } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
| 675 accountlist = create_account_field(field); |
678 accountlist = create_account_field(field); |
| 676 widget = accountlist; |
679 widget = accountlist; |
| 677 } else { |
680 } else { |
| 867 PurpleRequestGroup *group = list->data; |
870 PurpleRequestGroup *group = list->data; |
| 868 GList *fields = purple_request_group_get_fields(group); |
871 GList *fields = purple_request_group_get_fields(group); |
| 869 |
872 |
| 870 for (; fields ; fields = fields->next) { |
873 for (; fields ; fields = fields->next) { |
| 871 PurpleRequestField *field = fields->data; |
874 PurpleRequestField *field = fields->data; |
| 872 PurpleRequestFieldType type = purple_request_field_get_field_type(field); |
|
| 873 PurplePrefType pt; |
875 PurplePrefType pt; |
| 874 gpointer val = NULL; |
876 gpointer val = NULL; |
| 875 const char *id = purple_request_field_get_id(field); |
877 const char *id = purple_request_field_get_id(field); |
| 876 |
878 |
| 877 if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { |
879 if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { |
| |
880 PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); |
| |
881 val = purple_request_field_list_get_selected(lfield)->data; |
| |
882 val = purple_request_field_list_get_data(lfield, val); |
| |
883 } else if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { |
| 878 PurpleRequestFieldBool *bfield = PURPLE_REQUEST_FIELD_BOOL(field); |
884 PurpleRequestFieldBool *bfield = PURPLE_REQUEST_FIELD_BOOL(field); |
| 879 val = GINT_TO_POINTER(purple_request_field_bool_get_value(bfield)); |
885 val = GINT_TO_POINTER(purple_request_field_bool_get_value(bfield)); |
| 880 } else if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
886 } else if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
| 881 PurpleRequestFieldInt *ifield = PURPLE_REQUEST_FIELD_INT(field); |
887 PurpleRequestFieldInt *ifield = PURPLE_REQUEST_FIELD_INT(field); |
| 882 val = GINT_TO_POINTER(purple_request_field_int_get_value(ifield)); |
888 val = GINT_TO_POINTER(purple_request_field_int_get_value(ifield)); |
| 883 } else if(PURPLE_IS_REQUEST_FIELD_STRING(field)) { |
889 } else if(PURPLE_IS_REQUEST_FIELD_STRING(field)) { |
| 884 PurpleRequestFieldString *sfield = PURPLE_REQUEST_FIELD_STRING(field); |
890 PurpleRequestFieldString *sfield = PURPLE_REQUEST_FIELD_STRING(field); |
| 885 val = (gpointer)purple_request_field_string_get_value(sfield); |
891 val = (gpointer)purple_request_field_string_get_value(sfield); |
| 886 } else { |
|
| 887 switch (type) { |
|
| 888 case PURPLE_REQUEST_FIELD_LIST: |
|
| 889 val = purple_request_field_list_get_selected(field)->data; |
|
| 890 val = purple_request_field_list_get_data(field, val); |
|
| 891 break; |
|
| 892 default: |
|
| 893 break; |
|
| 894 } |
|
| 895 } |
892 } |
| 896 |
893 |
| 897 pt = purple_prefs_get_pref_type(id); |
894 pt = purple_prefs_get_pref_type(id); |
| 898 switch (pt) { |
895 switch (pt) { |
| 899 case PURPLE_PREF_INT: |
896 case PURPLE_PREF_INT: |
| 900 { |
897 { |
| 901 long int tmp = GPOINTER_TO_INT(val); |
898 long int tmp = GPOINTER_TO_INT(val); |
| 902 if (type == PURPLE_REQUEST_FIELD_LIST) { |
899 if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { |
| 903 /* Lists always return string */ |
900 /* Lists always return string */ |
| 904 if (sscanf(val, "%ld", &tmp) != 1) |
901 if (sscanf(val, "%ld", &tmp) != 1) |
| 905 tmp = 0; |
902 tmp = 0; |
| 906 } |
903 } |
| 907 purple_prefs_set_int(id, (gint)tmp); |
904 purple_prefs_set_int(id, (gint)tmp); |
| 931 ret = create_integer_field(field); |
928 ret = create_integer_field(field); |
| 932 } else if(PURPLE_IS_REQUEST_FIELD_CHOICE(field)) { |
929 } else if(PURPLE_IS_REQUEST_FIELD_CHOICE(field)) { |
| 933 ret = create_choice_field(field); |
930 ret = create_choice_field(field); |
| 934 } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
931 } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { |
| 935 ret = create_account_field(field); |
932 ret = create_account_field(field); |
| |
933 } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { |
| |
934 ret = create_list_field(field); |
| 936 } else { |
935 } else { |
| 937 switch (purple_request_field_get_field_type(field)) { |
936 purple_debug_error("GntRequest", "Unimplemented request-field %s", |
| 938 case PURPLE_REQUEST_FIELD_LIST: |
937 G_OBJECT_TYPE_NAME(field)); |
| 939 ret = create_list_field(field); |
|
| 940 break; |
|
| 941 default: |
|
| 942 purple_debug_error("GntRequest", "Unimplemented request-field %d\n", |
|
| 943 purple_request_field_get_field_type(field)); |
|
| 944 break; |
|
| 945 } |
|
| 946 } |
938 } |
| 947 return ret; |
939 return ret; |
| 948 } |
940 } |
| 949 |
941 |