src/dialogs.c

changeset 1488
15bf9fc09151
parent 1484
71eddbf73c8a
child 1499
0c3286729687
equal deleted inserted replaced
1487:a85a0f827c83 1488:15bf9fc09151
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;

mercurial