comparison src/gtkrequest.c @ 7903:d91806e4ea64

[gaim-migrate @ 8563] This *should* be a working list field UI implementation. Untested for now. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 21 Dec 2003 08:52:38 +0000
parents 365d8a67972d
children 9b478c6e0bfa
comparison
equal deleted inserted replaced
7902:3ca501305ac5 7903:d91806e4ea64
576 576
577 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 577 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
578 } 578 }
579 579
580 g_signal_connect(G_OBJECT(widget), "changed", 580 g_signal_connect(G_OBJECT(widget), "changed",
581 G_CALLBACK(field_choice_menu_cb), 581 G_CALLBACK(field_choice_menu_cb), field);
582 field);
583 } 582 }
584 else 583 else
585 { 584 {
586 GtkWidget *box; 585 GtkWidget *box;
587 GtkWidget *first_radio = NULL; 586 GtkWidget *first_radio = NULL;
611 G_CALLBACK(field_choice_option_cb), field); 610 G_CALLBACK(field_choice_option_cb), field);
612 } 611 }
613 } 612 }
614 613
615 return widget; 614 return widget;
615 }
616
617 static void
618 select_field_list_item(GtkTreeModel *model, GtkTreePath *path,
619 GtkTreeIter *iter, gpointer data)
620 {
621 GaimRequestField *field = (GaimRequestField *)data;
622 const char *text;
623
624 gtk_tree_model_get(model, iter, 0, &text, -1);
625
626 gaim_request_field_list_add_selected(field, text);
627 }
628
629 static void
630 list_field_select_changed_cb(GtkTreeSelection *sel, GaimRequestField *field)
631 {
632 gaim_request_field_list_clear_selected(field);
633
634 gtk_tree_selection_selected_foreach(sel, select_field_list_item, field);
635 }
636
637 static GtkWidget *
638 create_list_field(GaimRequestField *field)
639 {
640 GtkWidget *sw;
641 GtkWidget *treeview;
642 GtkListStore *store;
643 GtkCellRenderer *renderer;
644 GtkTreeSelection *sel;
645 GtkTreeViewColumn *column;
646
647 /* Create the scrolled window */
648 sw = gtk_scrolled_window_new(NULL, NULL);
649 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
650 GTK_POLICY_AUTOMATIC,
651 GTK_POLICY_ALWAYS);
652 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
653 GTK_SHADOW_IN);
654 gtk_widget_show(sw);
655
656 /* Create the list store */
657 store = gtk_list_store_new(1, G_TYPE_STRING);
658
659 /* Create the tree view */
660 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
661 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
662 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
663
664 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
665
666 if (gaim_request_field_list_get_multi_select(field))
667 gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);
668
669 g_signal_connect(G_OBJECT(sel), "changed",
670 G_CALLBACK(list_field_select_changed_cb), field);
671
672 column = gtk_tree_view_column_new();
673 gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
674
675 renderer = gtk_cell_renderer_text_new();
676 gtk_tree_view_column_pack_start(column, renderer, TRUE);
677 gtk_tree_view_column_add_attribute(column, renderer, "text", 0);
678
679 gtk_container_add(GTK_CONTAINER(sw), treeview);
680 gtk_widget_show(treeview);
681
682 return sw;
616 } 683 }
617 684
618 static void * 685 static void *
619 gaim_gtk_request_fields(const char *title, const char *primary, 686 gaim_gtk_request_fields(const char *title, const char *primary,
620 const char *secondary, GaimRequestFields *fields, 687 const char *secondary, GaimRequestFields *fields,
809 widget = create_int_field(field); 876 widget = create_int_field(field);
810 else if (type == GAIM_REQUEST_FIELD_BOOLEAN) 877 else if (type == GAIM_REQUEST_FIELD_BOOLEAN)
811 widget = create_bool_field(field); 878 widget = create_bool_field(field);
812 else if (type == GAIM_REQUEST_FIELD_CHOICE) 879 else if (type == GAIM_REQUEST_FIELD_CHOICE)
813 widget = create_choice_field(field); 880 widget = create_choice_field(field);
881 else if (type == GAIM_REQUEST_FIELD_LIST)
882 widget = create_list_field(field);
814 883
815 if (type == GAIM_REQUEST_FIELD_STRING && 884 if (type == GAIM_REQUEST_FIELD_STRING &&
816 gaim_request_field_string_is_multiline(field)) 885 gaim_request_field_string_is_multiline(field))
817 { 886 {
818 gtk_table_attach(GTK_TABLE(table), widget, 887 gtk_table_attach(GTK_TABLE(table), widget,