Mercurial > pidgin
comparison src/dialogs.c @ 1488:55246babdeb3
[gaim-migrate @ 1498]
buttons, courtesy bmiller
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 09 Feb 2001 07:19:29 +0000 |
| parents | d8f85826995e |
| children | de0b946e86a4 |
comparison
equal
deleted
inserted
replaced
| 1487:7bb7eca3fa14 | 1488:55246babdeb3 |
|---|---|
| 34 #include <netdb.h> | 34 #include <netdb.h> |
| 35 #include <netinet/in.h> | 35 #include <netinet/in.h> |
| 36 #include <unistd.h> | 36 #include <unistd.h> |
| 37 #include <netinet/in.h> | 37 #include <netinet/in.h> |
| 38 #include <arpa/inet.h> | 38 #include <arpa/inet.h> |
| 39 #include <errno.h> | |
| 39 | 40 |
| 40 #include <gtk/gtk.h> | 41 #include <gtk/gtk.h> |
| 41 #include "gaim.h" | 42 #include "gaim.h" |
| 42 #include "gtkimhtml.h" | 43 #include "gtkimhtml.h" |
| 43 #include "prpl.h" | 44 #include "prpl.h" |
| 46 #include "pixmaps/cancel.xpm" | 47 #include "pixmaps/cancel.xpm" |
| 47 #include "pixmaps/save.xpm" | 48 #include "pixmaps/save.xpm" |
| 48 #include "pixmaps/ok.xpm" | 49 #include "pixmaps/ok.xpm" |
| 49 #include "pixmaps/add.xpm" | 50 #include "pixmaps/add.xpm" |
| 50 #include "pixmaps/warn.xpm" | 51 #include "pixmaps/warn.xpm" |
| 52 #include "pixmaps/close.xpm" | |
| 51 | 53 |
| 52 #include "pixmaps/angel.xpm" | 54 #include "pixmaps/angel.xpm" |
| 53 #include "pixmaps/bigsmile.xpm" | 55 #include "pixmaps/bigsmile.xpm" |
| 54 #include "pixmaps/burp.xpm" | 56 #include "pixmaps/burp.xpm" |
| 55 #include "pixmaps/crossedlips.xpm" | 57 #include "pixmaps/crossedlips.xpm" |
| 3640 | 3642 |
| 3641 gtk_widget_show(aliasdlg); | 3643 gtk_widget_show(aliasdlg); |
| 3642 } | 3644 } |
| 3643 | 3645 |
| 3644 | 3646 |
| 3645 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) { | 3647 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) |
| 3648 { | |
| 3646 return TRUE; | 3649 return TRUE; |
| 3650 } | |
| 3651 | |
| 3652 static void do_save_log(GtkWidget *w, GtkWidget *filesel) | |
| 3653 { | |
| 3654 char *file; | |
| 3655 char path[PATHSIZE]; | |
| 3656 char buf[BUF_LONG]; | |
| 3657 char error[BUF_LEN]; | |
| 3658 FILE *fp_old, *fp_new; | |
| 3659 char filename[PATHSIZE]; | |
| 3660 char *name; | |
| 3661 | |
| 3662 name = gtk_object_get_user_data(GTK_OBJECT(filesel)); | |
| 3663 g_snprintf(filename, PATHSIZE, "%s/logs/%s.log", | |
| 3664 gaim_user_dir(), normalize(name)); | |
| 3665 | |
| 3666 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel)); | |
| 3667 strncpy(path, file, PATHSIZE-1); | |
| 3668 if (file_is_dir(path, filesel)) | |
| 3669 return; | |
| 3670 | |
| 3671 if ((fp_new = fopen(path, "w")) == NULL) { | |
| 3672 g_snprintf(error, BUF_LONG, | |
| 3673 "Can't open file %s for writing - %s", | |
| 3674 path, strerror(errno)); | |
| 3675 do_error_dialog(error, "Error"); | |
| 3676 return; | |
| 3677 } | |
| 3678 | |
| 3679 if ((fp_old = fopen(filename, "r")) == NULL) { | |
| 3680 g_snprintf(error, BUF_LONG, | |
| 3681 "Can't open file %s for reading - %s", | |
| 3682 filename, strerror(errno)); | |
| 3683 do_error_dialog(error, "Error"); | |
| 3684 fclose(fp_new); | |
| 3685 return; | |
| 3686 } | |
| 3687 | |
| 3688 while (fgets(buf, BUF_LONG, fp_old)) | |
| 3689 fputs(buf, fp_new); | |
| 3690 fclose(fp_old); | |
| 3691 fclose(fp_new); | |
| 3692 | |
| 3693 dialogwindows = g_list_remove(dialogwindows, filesel); | |
| 3694 gtk_widget_destroy(filesel); | |
| 3695 | |
| 3696 return; | |
| 3697 } | |
| 3698 | |
| 3699 static void show_save_log(GtkWidget *w, gchar *name) | |
| 3700 { | |
| 3701 GtkWidget *filesel; | |
| 3702 gchar buf[BUF_LEN]; | |
| 3703 | |
| 3704 g_snprintf(buf, BUF_LEN - 1, "%s/%s.log", | |
| 3705 getenv("HOME"), normalize(name)); | |
| 3706 | |
| 3707 filesel = gtk_file_selection_new(_("Gaim - Save Log File")); | |
| 3708 dialogwindows = g_list_prepend(dialogwindows, filesel); | |
| 3709 gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", | |
| 3710 GTK_SIGNAL_FUNC(destroy_dialog), filesel); | |
| 3711 | |
| 3712 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel)); | |
| 3713 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), buf); | |
| 3714 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), | |
| 3715 "clicked", GTK_SIGNAL_FUNC(do_save_log), filesel); | |
| 3716 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), | |
| 3717 "clicked", GTK_SIGNAL_FUNC(destroy_dialog), | |
| 3718 filesel); | |
| 3719 gtk_object_set_user_data(GTK_OBJECT(filesel), name); | |
| 3720 | |
| 3721 gtk_widget_realize(filesel); | |
| 3722 aol_icon(filesel->window); | |
| 3723 gtk_widget_show(filesel); | |
| 3724 | |
| 3725 return; | |
| 3726 } | |
| 3727 | |
| 3728 static void do_clear_log_file(GtkWidget *w, gchar *name) | |
| 3729 { | |
| 3730 gchar buf[256]; | |
| 3731 gchar filename[256]; | |
| 3732 GtkWidget *window; | |
| 3733 | |
| 3734 g_snprintf(filename, 256, "%s/logs/%s.log", | |
| 3735 gaim_user_dir(), normalize(name)); | |
| 3736 | |
| 3737 if ((remove(filename)) == -1) { | |
| 3738 g_snprintf(buf, 256, _("Unable to remove file %s - %s"), | |
| 3739 filename, strerror(errno)); | |
| 3740 do_error_dialog(buf, _("Error")); | |
| 3741 } | |
| 3742 | |
| 3743 window = gtk_object_get_user_data(GTK_OBJECT(w)); | |
| 3744 destroy_dialog(NULL, window); | |
| 3745 } | |
| 3746 | |
| 3747 static void show_clear_log(GtkWidget *w, gchar *name) | |
| 3748 { | |
| 3749 GtkWidget *window; | |
| 3750 GtkWidget *box; | |
| 3751 GtkWidget *hbox; | |
| 3752 GtkWidget *button; | |
| 3753 GtkWidget *label; | |
| 3754 GtkWidget *hsep; | |
| 3755 | |
| 3756 window = gtk_window_new(GTK_WINDOW_DIALOG); | |
| 3757 dialogwindows = g_list_prepend(dialogwindows, window); | |
| 3758 gtk_window_set_wmclass(GTK_WINDOW(window), "dialog", "Gaim"); | |
| 3759 gtk_container_set_border_width(GTK_CONTAINER(window), 10); | |
| 3760 gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); | |
| 3761 gtk_signal_connect(GTK_OBJECT(window), "delete_event", | |
| 3762 GTK_SIGNAL_FUNC(destroy_dialog), window); | |
| 3763 gtk_widget_realize(window); | |
| 3764 aol_icon(window->window); | |
| 3765 | |
| 3766 box = gtk_vbox_new(FALSE, 5); | |
| 3767 gtk_container_add(GTK_CONTAINER(window), box); | |
| 3768 | |
| 3769 label = gtk_label_new(_("Really clear log?")); | |
| 3770 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 15); | |
| 3771 | |
| 3772 hsep = gtk_hseparator_new(); | |
| 3773 gtk_box_pack_start(GTK_BOX(box), hsep, FALSE, FALSE, 0); | |
| 3774 | |
| 3775 hbox = gtk_hbox_new(FALSE, 0); | |
| 3776 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); | |
| 3777 gtk_widget_show(hbox); | |
| 3778 | |
| 3779 button = picture_button(window, _("Cancel"), cancel_xpm); | |
| 3780 if (display_options & OPT_DISP_COOL_LOOK) | |
| 3781 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
| 3782 gtk_signal_connect(GTK_OBJECT(button), "clicked", | |
| 3783 GTK_SIGNAL_FUNC(destroy_dialog), window); | |
| 3784 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); | |
| 3785 gtk_widget_show(button); | |
| 3786 | |
| 3787 button = picture_button(window, _("Okay"), ok_xpm); | |
| 3788 if (display_options & OPT_DISP_COOL_LOOK) | |
| 3789 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
| 3790 gtk_object_set_user_data(GTK_OBJECT(button), | |
| 3791 gtk_object_get_user_data(GTK_OBJECT(w))); | |
| 3792 gtk_signal_connect(GTK_OBJECT(button), "clicked", | |
| 3793 GTK_SIGNAL_FUNC(do_clear_log_file), name); | |
| 3794 gtk_signal_connect(GTK_OBJECT(button), "clicked", | |
| 3795 GTK_SIGNAL_FUNC(destroy_dialog), window); | |
| 3796 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); | |
| 3797 gtk_widget_show(button); | |
| 3798 | |
| 3799 gtk_widget_show_all(window); | |
| 3800 | |
| 3801 return; | |
| 3647 } | 3802 } |
| 3648 | 3803 |
| 3649 void | 3804 void |
| 3650 show_log (char *name) | 3805 show_log (char *name) |
| 3651 { | 3806 { |
| 3653 gchar buf[BUF_LONG]; | 3808 gchar buf[BUF_LONG]; |
| 3654 GString *string; | 3809 GString *string; |
| 3655 FILE *fp; | 3810 FILE *fp; |
| 3656 GtkWidget *window; | 3811 GtkWidget *window; |
| 3657 GtkWidget *box; | 3812 GtkWidget *box; |
| 3813 GtkWidget *hbox; | |
| 3658 GtkWidget *sw; | 3814 GtkWidget *sw; |
| 3659 GtkWidget *layout; | 3815 GtkWidget *layout; |
| 3816 GtkWidget *close_button; | |
| 3817 GtkWidget *clear_button; | |
| 3818 GtkWidget *save_button; | |
| 3660 int options; | 3819 int options; |
| 3661 guint block; | 3820 guint block; |
| 3662 | 3821 |
| 3663 string = g_string_new(""); | 3822 string = g_string_new(""); |
| 3664 | 3823 |
| 3665 g_snprintf(filename, 256, "%s/logs/%s.log", | 3824 g_snprintf(filename, 256, "%s/logs/%s.log", |
| 3666 gaim_user_dir(), normalize(name)); | 3825 gaim_user_dir(), normalize(name)); |
| 3667 if ((fp = fopen(filename, "r")) == NULL) { | 3826 if ((fp = fopen(filename, "r")) == NULL) { |
| 3668 g_snprintf(buf, BUF_LONG, "Unable to open log file %s", | 3827 g_snprintf(buf, BUF_LONG, "Unable to open log file %s", filename); |
| 3669 filename); | |
| 3670 do_error_dialog(buf, "Error!"); | 3828 do_error_dialog(buf, "Error!"); |
| 3671 return; | 3829 return; |
| 3672 } | 3830 } |
| 3673 | 3831 |
| 3674 options = GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL; | 3832 options = GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL; |
| 3682 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 3840 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 3683 dialogwindows = g_list_prepend(dialogwindows, window); | 3841 dialogwindows = g_list_prepend(dialogwindows, window); |
| 3684 gtk_window_set_wmclass(GTK_WINDOW(window), "log", "Gaim"); | 3842 gtk_window_set_wmclass(GTK_WINDOW(window), "log", "Gaim"); |
| 3685 g_snprintf(buf, BUF_LONG, "Gaim - Conversations with %s", name); | 3843 g_snprintf(buf, BUF_LONG, "Gaim - Conversations with %s", name); |
| 3686 gtk_window_set_title(GTK_WINDOW(window), buf); | 3844 gtk_window_set_title(GTK_WINDOW(window), buf); |
| 3687 gtk_container_set_border_width(GTK_CONTAINER(window), 15); | 3845 gtk_container_set_border_width(GTK_CONTAINER(window), 10); |
| 3688 gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); | 3846 gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); |
| 3689 block = gtk_signal_connect(GTK_OBJECT(window), "delete_event", | 3847 block = gtk_signal_connect(GTK_OBJECT(window), "delete_event", |
| 3690 GTK_SIGNAL_FUNC(dont_destroy), window); | 3848 GTK_SIGNAL_FUNC(dont_destroy), window); |
| 3691 gtk_widget_realize(window); | 3849 gtk_widget_realize(window); |
| 3692 aol_icon(window->window); | 3850 aol_icon(window->window); |
| 3693 | 3851 |
| 3694 box = gtk_vbox_new(FALSE, 0); | 3852 box = gtk_vbox_new(FALSE, 5); |
| 3695 gtk_container_add(GTK_CONTAINER(window), box); | 3853 gtk_container_add(GTK_CONTAINER(window), box); |
| 3696 | 3854 |
| 3697 sw = gtk_scrolled_window_new(NULL, NULL); | 3855 sw = gtk_scrolled_window_new(NULL, NULL); |
| 3698 gtk_box_pack_start(GTK_BOX(box), sw, TRUE, TRUE, 0); | 3856 gtk_box_pack_start(GTK_BOX(box), sw, TRUE, TRUE, 0); |
| 3699 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | 3857 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |
| 3706 gtk_imhtml_show_smileys(GTK_IMHTML(layout), FALSE); | 3864 gtk_imhtml_show_smileys(GTK_IMHTML(layout), FALSE); |
| 3707 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "C:)", luke03_xpm); | 3865 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "C:)", luke03_xpm); |
| 3708 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "C:-)", luke03_xpm); | 3866 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "C:-)", luke03_xpm); |
| 3709 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "O-)", oneeye_xpm); | 3867 gtk_imhtml_associate_smiley(GTK_IMHTML(layout), "O-)", oneeye_xpm); |
| 3710 | 3868 |
| 3869 hbox = gtk_hbox_new(FALSE, 0); | |
| 3870 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); | |
| 3871 gtk_widget_show(hbox); | |
| 3872 | |
| 3873 close_button = picture_button(window, _("Close"), cancel_xpm); | |
| 3874 gtk_box_pack_end(GTK_BOX(hbox), close_button, FALSE, FALSE, 5); | |
| 3875 gtk_widget_set_sensitive(close_button, FALSE); | |
| 3876 | |
| 3877 clear_button = picture_button(window, _("Clear"), close_xpm); | |
| 3878 gtk_object_set_user_data(GTK_OBJECT(clear_button), window); | |
| 3879 gtk_box_pack_end(GTK_BOX(hbox), clear_button, FALSE, FALSE, 5); | |
| 3880 gtk_widget_set_sensitive(clear_button, FALSE); | |
| 3881 | |
| 3882 save_button = picture_button(window, _("Save"), save_xpm); | |
| 3883 gtk_box_pack_end(GTK_BOX(hbox), save_button, FALSE, FALSE, 5); | |
| 3884 gtk_widget_set_sensitive(save_button, FALSE); | |
| 3885 | |
| 3711 gtk_widget_show_all(window); | 3886 gtk_widget_show_all(window); |
| 3712 | 3887 |
| 3713 while (fgets (buf, BUF_LONG, fp)) { | 3888 while (fgets (buf, BUF_LONG, fp)) { |
| 3714 if (strlen (buf) >= 5 && | 3889 if (strlen (buf) >= 5 && (!strncmp (buf+strlen(buf)-5, "<BR>\n", 5))) |
| 3715 (!strncmp (buf+strlen(buf)-5, "<BR>\n", 5))) | |
| 3716 /* take off the \n */ | 3890 /* take off the \n */ |
| 3717 buf[strlen(buf)-1] = '\0'; | 3891 buf[strlen(buf)-1] = '\0'; |
| 3718 if (strlen (buf) >= 21 && | 3892 if (strlen (buf) >= 21 && strstr (buf, "---- New C")) { |
| 3719 strstr (buf, "---- New C")) { | |
| 3720 gtk_imhtml_append_text (GTK_IMHTML(layout), string->str, options); | 3893 gtk_imhtml_append_text (GTK_IMHTML(layout), string->str, options); |
| 3721 g_string_free (string, TRUE); | 3894 g_string_free (string, TRUE); |
| 3722 string = g_string_new (buf); | 3895 string = g_string_new (buf); |
| 3723 } else { | 3896 } else { |
| 3724 string = g_string_append (string, buf); | 3897 string = g_string_append (string, buf); |
| 3729 gtk_imhtml_append_text (GTK_IMHTML(layout), string->str, options); | 3902 gtk_imhtml_append_text (GTK_IMHTML(layout), string->str, options); |
| 3730 | 3903 |
| 3731 gtk_signal_disconnect(GTK_OBJECT(window), block); | 3904 gtk_signal_disconnect(GTK_OBJECT(window), block); |
| 3732 gtk_signal_connect(GTK_OBJECT(window), "delete_event", | 3905 gtk_signal_connect(GTK_OBJECT(window), "delete_event", |
| 3733 GTK_SIGNAL_FUNC(destroy_dialog), window); | 3906 GTK_SIGNAL_FUNC(destroy_dialog), window); |
| 3907 gtk_signal_connect(GTK_OBJECT(close_button), "clicked", | |
| 3908 GTK_SIGNAL_FUNC(destroy_dialog), window); | |
| 3909 gtk_signal_connect(GTK_OBJECT(clear_button), "clicked", | |
| 3910 GTK_SIGNAL_FUNC(show_clear_log), name); | |
| 3911 gtk_signal_connect(GTK_OBJECT(save_button), "clicked", | |
| 3912 GTK_SIGNAL_FUNC(show_save_log), name); | |
| 3913 gtk_widget_set_sensitive(close_button, TRUE); | |
| 3914 gtk_widget_set_sensitive(clear_button, TRUE); | |
| 3915 gtk_widget_set_sensitive(save_button, TRUE); | |
| 3734 | 3916 |
| 3735 fclose(fp); | 3917 fclose(fp); |
| 3736 g_string_free (string, TRUE); | 3918 g_string_free (string, TRUE); |
| 3737 | 3919 |
| 3738 return; | 3920 return; |
