comparison src/dialogs.c @ 1213:1bdb08cc5d59

[gaim-migrate @ 1223] redid the away msg dialog a bit committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 08 Dec 2000 06:21:44 +0000
parents 265abea9db72
children 64d67198c458
comparison
equal deleted inserted replaced
1212:a487b35ac05a 1213:1bdb08cc5d59
39 39
40 #include <gtk/gtk.h> 40 #include <gtk/gtk.h>
41 #include "gaim.h" 41 #include "gaim.h"
42 #include "gtkhtml.h" 42 #include "gtkhtml.h"
43 43
44 #include "pixmaps/gnome_preferences.xpm"
44 #include "pixmaps/cancel.xpm" 45 #include "pixmaps/cancel.xpm"
45 #include "pixmaps/save.xpm" 46 #include "pixmaps/save.xpm"
46 #include "pixmaps/ok.xpm" 47 #include "pixmaps/ok.xpm"
47 #include "pixmaps/add.xpm" 48 #include "pixmaps/add.xpm"
48 #include "pixmaps/warn.xpm" 49 #include "pixmaps/warn.xpm"
82 83
83 struct create_away { 84 struct create_away {
84 GtkWidget *window; 85 GtkWidget *window;
85 GtkWidget *entry; 86 GtkWidget *entry;
86 GtkWidget *text; 87 GtkWidget *text;
87 GtkWidget *checkbx;
88 struct away_message *mess; 88 struct away_message *mess;
89 }; 89 };
90 90
91 91
92 struct warning { 92 struct warning {
3029 3029
3030 /*------------------------------------------------------------------------*/ 3030 /*------------------------------------------------------------------------*/
3031 /* The dialog for new away messages */ 3031 /* The dialog for new away messages */
3032 /*------------------------------------------------------------------------*/ 3032 /*------------------------------------------------------------------------*/
3033 3033
3034 void save_away_mess(GtkWidget *widget, struct create_away *ca) 3034 static struct away_message *save_away_message(struct create_away *ca)
3035 { 3035 {
3036 struct away_message *am; 3036 struct away_message *am;
3037 guint text_len; 3037 guint text_len;
3038 gchar *away_message; 3038 gchar *away_message;
3039 3039
3047 3047
3048 g_snprintf(am->message, sizeof(am->message), "%s", away_message); 3048 g_snprintf(am->message, sizeof(am->message), "%s", away_message);
3049 g_free(away_message); 3049 g_free(away_message);
3050 3050
3051 if (!ca->mess) { 3051 if (!ca->mess) {
3052 away_messages = g_slist_append(away_messages, am); 3052 away_messages = g_slist_insert_sorted(away_messages, am, sort_awaymsg_list);
3053 if (GTK_TOGGLE_BUTTON(ca->checkbx)->active)
3054 do_away_message(NULL, am);
3055 } 3053 }
3056 3054
3057 save_prefs(); 3055 save_prefs();
3058 do_away_menu(); 3056 do_away_menu();
3059 if (prefs_away_list != NULL) 3057 if (prefs_away_list != NULL)
3060 gtk_list_select_item(GTK_LIST(prefs_away_list), g_slist_index(away_messages, am)); 3058 gtk_list_select_item(GTK_LIST(prefs_away_list), g_slist_index(away_messages, am));
3061 3059
3060 return am;
3061 }
3062
3063 void save_away_mess(GtkWidget *widget, struct create_away *ca)
3064 {
3065 save_away_message(ca);
3062 destroy_dialog(NULL, ca->window); 3066 destroy_dialog(NULL, ca->window);
3063 3067 g_free(ca);
3064 return; 3068 }
3069
3070 void use_away_mess(GtkWidget *widget, struct create_away *ca)
3071 {
3072 static struct away_message am;
3073 guint text_len;
3074 gchar *away_message;
3075
3076 g_snprintf(am.name, sizeof(am.name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry)));
3077 text_len = gtk_text_get_length(GTK_TEXT(ca->text));
3078 if (text_len < 0) return;
3079 away_message = gtk_editable_get_chars(GTK_EDITABLE(ca->text), 0, text_len);
3080
3081 g_snprintf(am.message, sizeof(am.message), "%s", away_message);
3082 g_free(away_message);
3083
3084 do_away_message(NULL, &am);
3085
3086 destroy_dialog(NULL, ca->window);
3087 g_free(ca);
3088 }
3089
3090 void su_away_mess(GtkWidget *widget, struct create_away *ca)
3091 {
3092 do_away_message(NULL, save_away_message(ca));
3093 destroy_dialog(NULL, ca->window);
3094 g_free(ca);
3065 } 3095 }
3066 3096
3067 void create_away_mess(GtkWidget *widget, void *dummy) 3097 void create_away_mess(GtkWidget *widget, void *dummy)
3068 { 3098 {
3069 GtkWidget *hbox; 3099 GtkWidget *hbox;
3077 3107
3078 struct create_away *ca = g_new0(struct create_away, 1); 3108 struct create_away *ca = g_new0(struct create_away, 1);
3079 3109
3080 /* Set up window */ 3110 /* Set up window */
3081 ca->window = gtk_window_new(GTK_WINDOW_DIALOG); 3111 ca->window = gtk_window_new(GTK_WINDOW_DIALOG);
3082 gtk_widget_set_usize(ca->window, 275, 200);
3083 gtk_container_border_width(GTK_CONTAINER(ca->window), 5); 3112 gtk_container_border_width(GTK_CONTAINER(ca->window), 5);
3084 gtk_window_set_wmclass(GTK_WINDOW(ca->window), "away_mess", "Gaim"); 3113 gtk_window_set_wmclass(GTK_WINDOW(ca->window), "away_mess", "Gaim");
3085 gtk_window_set_title(GTK_WINDOW(ca->window), _("Gaim - New away message")); 3114 gtk_window_set_title(GTK_WINDOW(ca->window), _("Gaim - New away message"));
3086 gtk_widget_show(ca->window);
3087 gtk_signal_connect(GTK_OBJECT(ca->window),"delete_event", 3115 gtk_signal_connect(GTK_OBJECT(ca->window),"delete_event",
3088 GTK_SIGNAL_FUNC(destroy_dialog), ca->window); 3116 GTK_SIGNAL_FUNC(destroy_dialog), ca->window);
3089 3117 gtk_widget_realize(ca->window);
3090 /* top level box */ 3118 aol_icon(ca->window->window);
3091 3119
3092 tbox = gtk_vbox_new(FALSE, 5); 3120 tbox = gtk_vbox_new(FALSE, 5);
3093 gtk_container_add(GTK_CONTAINER(ca->window), tbox); 3121 gtk_container_add(GTK_CONTAINER(ca->window), tbox);
3094 3122 gtk_widget_show(tbox);
3095 /* Put frame and button-box in the toplevel */
3096 3123
3097 frame = gtk_frame_new(_("New away message")); 3124 frame = gtk_frame_new(_("New away message"));
3098 gtk_container_set_border_width(GTK_CONTAINER(frame), 0); 3125 gtk_container_set_border_width(GTK_CONTAINER(frame), 0);
3099 gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 0); 3126 gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 0);
3127 gtk_widget_show(frame);
3128
3100 fbox = gtk_vbox_new(FALSE, 5); 3129 fbox = gtk_vbox_new(FALSE, 5);
3101 gtk_container_border_width(GTK_CONTAINER(fbox), 5);
3102 gtk_container_add(GTK_CONTAINER(frame), fbox); 3130 gtk_container_add(GTK_CONTAINER(frame), fbox);
3103 3131 gtk_widget_show(fbox);
3104 hbox = gtk_hbox_new(FALSE, 5);
3105 gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0);
3106
3107 /* Make a label for away entry */
3108 3132
3109 titlebox = gtk_hbox_new(FALSE, 5); 3133 titlebox = gtk_hbox_new(FALSE, 5);
3134 gtk_box_pack_start(GTK_BOX(fbox), titlebox, FALSE, FALSE, 0);
3135 gtk_widget_show(titlebox);
3136
3110 label = gtk_label_new(_("Away title: ")); 3137 label = gtk_label_new(_("Away title: "));
3111 gtk_box_pack_start(GTK_BOX(titlebox), label, FALSE, FALSE, 0); 3138 gtk_box_pack_start(GTK_BOX(titlebox), label, FALSE, FALSE, 0);
3112 gtk_widget_show(label); 3139 gtk_widget_show(label);
3113 gtk_box_pack_start(GTK_BOX(fbox), titlebox, FALSE, FALSE, 0);
3114
3115 /* make away title entry */
3116 3140
3117 ca->entry = gtk_entry_new(); 3141 ca->entry = gtk_entry_new();
3118 gtk_box_pack_start(GTK_BOX(titlebox), ca->entry, TRUE, TRUE, 0); 3142 gtk_box_pack_start(GTK_BOX(titlebox), ca->entry, TRUE, TRUE, 0);
3143 gtk_widget_grab_focus(ca->entry);
3144 gtk_widget_show(ca->entry);
3119 3145
3120 sw = gtk_scrolled_window_new(NULL, NULL); 3146 sw = gtk_scrolled_window_new(NULL, NULL);
3121 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), 3147 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
3122 GTK_POLICY_AUTOMATIC, 3148 GTK_POLICY_AUTOMATIC,
3123 GTK_POLICY_AUTOMATIC); 3149 GTK_POLICY_AUTOMATIC);
3150 gtk_box_pack_start(GTK_BOX(fbox), sw, TRUE, TRUE, 0);
3124 gtk_widget_show(sw); 3151 gtk_widget_show(sw);
3125
3126 /* create and format text box */
3127 3152
3128 ca->text = gtk_text_new(NULL, NULL); 3153 ca->text = gtk_text_new(NULL, NULL);
3129 gtk_text_set_word_wrap(GTK_TEXT(ca->text), TRUE); 3154 gtk_text_set_word_wrap(GTK_TEXT(ca->text), TRUE);
3130 gtk_text_set_editable(GTK_TEXT(ca->text), TRUE); 3155 gtk_text_set_editable(GTK_TEXT(ca->text), TRUE);
3131 gtk_container_add(GTK_CONTAINER(sw), ca->text); 3156 gtk_container_add(GTK_CONTAINER(sw), ca->text);
3132 gtk_widget_show(ca->text); 3157 gtk_widget_show(ca->text);
3133 gtk_box_pack_start(GTK_BOX(fbox), sw, TRUE, TRUE, 0); 3158
3134
3135 /* fill hbox */
3136
3137 button = picture_button(ca->window, _("Cancel"), cancel_xpm);
3138 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), ca->window);
3139 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3140
3141 button = picture_button(ca->window, _("Save"), save_xpm);
3142 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_away_mess), ca);
3143 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3144
3145 if (dummy && GTK_LIST(prefs_away_list)->selection) { 3159 if (dummy && GTK_LIST(prefs_away_list)->selection) {
3146 GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data; 3160 GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data;
3147 struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item)); 3161 struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item));
3148 int pos = 0; 3162 int pos = 0;
3149 gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); 3163 gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name);
3150 gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message, strlen(amt->message), &pos); 3164 gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message,
3165 strlen(amt->message), &pos);
3151 ca->mess = amt; 3166 ca->mess = amt;
3152 } else { 3167 }
3153 /* Checkbox for showing away msg */ 3168
3154 ca->checkbx = gtk_check_button_new_with_label(_("Make Away Now")); 3169 hbox = gtk_hbox_new(FALSE, 5);
3155 gtk_box_pack_start(GTK_BOX(fbox), ca->checkbx, FALSE, FALSE, 0); 3170 gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0);
3156 gtk_widget_show(ca->checkbx);
3157 }
3158
3159 /* let the world see what we have done. */
3160 gtk_widget_show(label);
3161 gtk_widget_show(ca->entry);
3162 gtk_widget_show(titlebox);
3163 gtk_widget_show(hbox); 3171 gtk_widget_show(hbox);
3164 gtk_widget_show(tbox); 3172
3165 gtk_widget_show(fbox); 3173 button = picture_button(ca->window, _("Cancel"), cancel_xpm);
3166 gtk_widget_show(frame); 3174 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), ca->window);
3167 3175 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3168 gtk_widget_realize(ca->window); 3176
3169 aol_icon(ca->window->window); 3177 button = picture_button(ca->window, _("Use"), gnome_preferences_xpm);
3170 gtk_widget_grab_focus(ca->entry); 3178 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(use_away_mess), ca);
3179 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3180
3181 button = picture_button(ca->window, _("Save & Use"), add_xpm);
3182 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(su_away_mess), ca);
3183 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3184
3185 button = picture_button(ca->window, _("Save"), ok_xpm);
3186 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_away_mess), ca);
3187 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3188
3189 gtk_widget_show(ca->window);
3171 } 3190 }
3172 3191
3173 /* smiley dialog */ 3192 /* smiley dialog */
3174 3193
3175 void close_smiley_dialog(GtkWidget *widget, struct conversation *c) 3194 void close_smiley_dialog(GtkWidget *widget, struct conversation *c)