comparison src/dialogs.c @ 8290:84ec38c3efcc

[gaim-migrate @ 9014] Moved the Get User Info and Insert Link dialogs to the request API. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Thu, 19 Feb 2004 08:06:23 +0000
parents 89d9d004e3f3
children a1b7c7f3d9a7
comparison
equal deleted inserted replaced
8289:e39ea2b4f6cd 8290:84ec38c3efcc
72 struct getuserinfo { 72 struct getuserinfo {
73 GtkWidget *window; 73 GtkWidget *window;
74 GtkWidget *entry; 74 GtkWidget *entry;
75 GtkWidget *account; 75 GtkWidget *account;
76 GaimConnection *gc; 76 GaimConnection *gc;
77 };
78
79 struct linkdlg {
80 GtkWidget *ok;
81 GtkWidget *cancel;
82 GtkWidget *window;
83 GtkWidget *url;
84 GtkWidget *text;
85 GtkWidget *entry;
86 GaimConversation *c;
87 }; 77 };
88 78
89 struct view_log { 79 struct view_log {
90 long offset; 80 long offset;
91 int options; 81 int options;
466 456
467 gtk_widget_show_all(window); 457 gtk_widget_show_all(window);
468 return TRUE; 458 return TRUE;
469 } 459 }
470 460
471 static void do_info(GtkWidget *dialog, int id, struct getuserinfo *info)
472 {
473 char *who;
474 gboolean found = FALSE;
475
476 switch(id) {
477 case GTK_RESPONSE_OK:
478 who = g_strdup(gaim_normalize(info->gc->account, gtk_entry_get_text(GTK_ENTRY(info->entry))));
479
480 if (who && gaim_str_has_suffix(who, "rocksmyworld")) {
481 found = show_ee_dialog(who);
482 }
483
484 if (!found && who && *who && info->gc)
485 serv_get_info(info->gc, who);
486
487 g_free(who);
488 break;
489 }
490
491 gtk_widget_destroy(GTK_WIDGET(dialog));
492 g_free(info);
493 }
494
495 static void
496 show_info_select_account(GObject *w, GaimAccount *account,
497 struct getuserinfo *info)
498 {
499 info->gc = gaim_account_get_connection(account);
500 }
501
502 static void 461 static void
503 new_im_cb(gpointer data, GaimRequestFields *fields) 462 new_im_cb(gpointer data, GaimRequestFields *fields)
504 { 463 {
505 const char *username; 464 const char *username;
506 GaimAccount *account; 465 GaimAccount *account;
549 _("OK"), G_CALLBACK(new_im_cb), 508 _("OK"), G_CALLBACK(new_im_cb),
550 _("Cancel"), NULL, 509 _("Cancel"), NULL,
551 NULL); 510 NULL);
552 } 511 }
553 512
554 void show_info_dialog() 513 static void
555 { 514 get_info_cb(gpointer data, GaimRequestFields *fields)
556 GtkWidget *window, *hbox, *vbox; 515 {
557 GtkWidget *label; 516 char *username;
558 GtkWidget *table; 517 gboolean found = FALSE;
559 GaimGtkBuddyList *gtkblist; 518 GaimAccount *account;
560 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); 519
561 struct getuserinfo *info = g_new0(struct getuserinfo, 1); 520 account = gaim_request_fields_get_account(fields, "account");
562 521
563 gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); 522 username = g_strdup(gaim_normalize(account,
564 523 gaim_request_fields_get_string(fields, "screenname")));
565 info->gc = gaim_connections_get_all()->data; 524
566 525 if (username != NULL && gaim_str_has_suffix(username, "rocksmyworld"))
567 window = gtk_dialog_new_with_buttons(_("Get User Info"), gtkblist->window ? GTK_WINDOW(gtkblist->window) : NULL, 0, 526 found = show_ee_dialog(username);
568 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); 527
569 gtk_dialog_set_default_response (GTK_DIALOG(window), GTK_RESPONSE_OK); 528 if (!found && username != NULL && *username != '\0' && account != NULL)
570 gtk_container_set_border_width (GTK_CONTAINER(window), 6); 529 serv_get_info(gaim_account_get_connection(account), username);
571 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); 530
572 gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); 531 g_free(username);
573 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), 12); 532 }
574 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), 6); 533
575 gtk_dialog_set_response_sensitive(GTK_DIALOG(window), GTK_RESPONSE_OK, FALSE); 534 void
576 535 show_info_dialog(void)
577 hbox = gtk_hbox_new(FALSE, 12); 536 {
578 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); 537 GaimRequestFields *fields;
579 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); 538 GaimRequestFieldGroup *group;
580 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); 539 GaimRequestField *field;
581 540
582 vbox = gtk_vbox_new(FALSE, 0); 541 fields = gaim_request_fields_new();
583 gtk_container_add(GTK_CONTAINER(hbox), vbox); 542
584 543 group = gaim_request_field_group_new(NULL);
585 label = gtk_label_new(_("Please enter the screen name of the person whose info you would like to view.\n")); 544 gaim_request_fields_add_group(fields, group);
586 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); 545
587 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); 546 field = gaim_request_field_string_new("screenname", _("_Screen name"),
588 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); 547 NULL, FALSE);
589 548 gaim_request_field_set_required(field, TRUE);
590 table = gtk_table_new(2, 2, FALSE); 549 gaim_request_field_group_add_field(group, field);
591 gtk_table_set_row_spacings(GTK_TABLE(table), 6); 550
592 gtk_table_set_col_spacings(GTK_TABLE(table), 6); 551 field = gaim_request_field_account_new("account", _("_Account"), NULL);
593 gtk_container_set_border_width(GTK_CONTAINER(table), 12); 552 gaim_request_field_set_visible(field,
594 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); 553 (gaim_connections_get_all() != NULL &&
595 554 gaim_connections_get_all()->next != NULL));
596 label = gtk_label_new(NULL); 555 gaim_request_field_set_required(field, TRUE);
597 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Screen Name:")); 556 gaim_request_field_group_add_field(group, field);
598 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); 557
599 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); 558 gaim_request_fields(gaim_get_blist(), _("Get User Info"),
600 559 NULL,
601 info->entry = gtk_entry_new(); 560 _("Please enter the screen name of the person whose "
602 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); 561 "info you would like to view."),
603 gtk_entry_set_activates_default (GTK_ENTRY(info->entry), TRUE); 562 fields,
604 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(info->entry)); 563 _("OK"), G_CALLBACK(get_info_cb),
605 gaim_set_accessible_label (info->entry, label); 564 _("Cancel"), NULL,
606 565 NULL);
607 g_signal_connect(G_OBJECT(info->entry), "changed",
608 G_CALLBACK(gaim_gtk_set_sensitive_if_input), window);
609
610 if (gaim_connections_get_all()->next) {
611
612 label = gtk_label_new(NULL);
613 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
614 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Account:"));
615 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
616
617 info->account = gaim_gtk_account_option_menu_new(NULL, FALSE,
618 G_CALLBACK(show_info_select_account), NULL, info);
619
620 gtk_table_attach_defaults(GTK_TABLE(table), info->account, 1, 2, 1, 2);
621 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(info->account));
622 gaim_set_accessible_label (info->account, label);
623 }
624
625 g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(do_info), info);
626
627 gtk_widget_show_all(window);
628 gtk_widget_grab_focus(GTK_WIDGET(info->entry));
629 }
630
631
632 /*------------------------------------------------------*/
633 /* Link Dialog */
634 /*------------------------------------------------------*/
635
636 void dialog_link_destroy(GaimConversation *c)
637 {
638 GaimGtkConversation *gtkconv;
639
640 gtkconv = GAIM_GTK_CONVERSATION(c);
641
642 gtk_widget_destroy(gtkconv->dialogs.link);
643 gtkconv->dialogs.link = NULL;
644 }
645
646 static void do_insert_link(GtkWidget *w, int resp, struct linkdlg *a)
647 {
648 GaimGtkConversation *gtkconv;
649 const char *urltext, *showtext;
650
651 gtkconv = GAIM_GTK_CONVERSATION(a->c);
652
653 if (resp == GTK_RESPONSE_OK) {
654 urltext = gtk_entry_get_text(GTK_ENTRY(a->url));
655 showtext = gtk_entry_get_text(GTK_ENTRY(a->text));
656
657 if (!strlen(showtext))
658 showtext = urltext;
659
660 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry), urltext, showtext);
661 gaim_gtk_advance_past(gtkconv, "<A HREF>", "</A>");
662 }
663
664 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), FALSE);
665 }
666
667 static void dialog_link_freedata(GtkWidget *w, gpointer user_data)
668 {
669 struct linkdlg *a = user_data;
670
671 g_free(a);
672 }
673
674 void dialog_link_show(GaimConversation *c)
675 {
676 GaimGtkConversation *gtkconv;
677 GaimGtkWindow *gtkwin;
678 GtkWidget *table;
679 GtkWidget *label;
680 GtkWidget *hbox;
681 GtkWidget *vbox;
682 struct linkdlg *a;
683 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
684
685 gtkconv = GAIM_GTK_CONVERSATION(c);
686 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(c));
687
688 a = g_new0(struct linkdlg, 1);
689
690 a->c = c;
691 a->window = gtk_dialog_new_with_buttons(_("Insert Link"),
692 GTK_WINDOW(gtkwin->window), 0, GTK_STOCK_CANCEL,
693 GTK_RESPONSE_CANCEL, _("_Insert"), GTK_RESPONSE_OK, NULL);
694 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK);
695 g_signal_connect(G_OBJECT(a->window), "response",
696 G_CALLBACK(do_insert_link), a);
697 g_signal_connect(G_OBJECT(a->window), "destroy",
698 G_CALLBACK(dialog_link_freedata), a);
699
700 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK);
701 gtk_container_set_border_width(GTK_CONTAINER(a->window), 6);
702 gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE);
703 gtk_dialog_set_has_separator(GTK_DIALOG(a->window), FALSE);
704 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(a->window)->vbox), 12);
705 gtk_container_set_border_width(
706 GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6);
707 gtk_window_set_role(GTK_WINDOW(a->window), "insert_link");
708 gtk_dialog_set_response_sensitive(GTK_DIALOG(a->window), GTK_RESPONSE_OK, FALSE);
709
710 hbox = gtk_hbox_new(FALSE, 12);
711 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), hbox);
712 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
713 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
714
715 vbox = gtk_vbox_new(FALSE, 0);
716 gtk_container_add(GTK_CONTAINER(hbox), vbox);
717
718 label = gtk_label_new(_("Please enter the URL and description of "
719 "the link that you want to insert. The "
720 "description is optional.\n"));
721 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
722 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
723 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
724
725 table = gtk_table_new(2, 2, FALSE);
726 gtk_table_set_row_spacings(GTK_TABLE(table), 6);
727 gtk_table_set_col_spacings(GTK_TABLE(table), 6);
728 gtk_container_set_border_width(GTK_CONTAINER(table), 0);
729 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
730
731 label = gtk_label_new_with_mnemonic(_("_URL:"));
732 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
733 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
734
735 a->url = gtk_entry_new();
736 gtk_table_attach_defaults(GTK_TABLE(table), a->url, 1, 2, 0, 1);
737 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->url));
738 gaim_set_accessible_label (a->url, label);
739 gtk_widget_grab_focus(a->url);
740
741 gtk_entry_set_activates_default (GTK_ENTRY(a->url), TRUE);
742 g_signal_connect(G_OBJECT(a->url), "changed",
743 G_CALLBACK(gaim_gtk_set_sensitive_if_input), a->window);
744
745 label = gtk_label_new_with_mnemonic(_("_Description:"));
746 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
747 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
748
749 a->text = gtk_entry_new();
750 gtk_table_attach_defaults(GTK_TABLE(table), a->text, 1, 2, 1, 2);
751 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->text));
752 gaim_set_accessible_label (a->text, label);
753 gtk_entry_set_activates_default (GTK_ENTRY(a->text), TRUE);
754
755 gtkconv->dialogs.link = a->window;
756
757 gtk_widget_show_all(gtkconv->dialogs.link);
758 gdk_window_raise(gtkconv->dialogs.link->window);
759 } 566 }
760 567
761 /*------------------------------------------------------*/ 568 /*------------------------------------------------------*/
762 /* Color Selection Dialog */ 569 /* Color Selection Dialog */
763 /*------------------------------------------------------*/ 570 /*------------------------------------------------------*/