comparison src/prefs.c @ 1:2846a03bda67

[gaim-migrate @ 10] The other missing files :) committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Thu, 23 Mar 2000 03:13:54 +0000
parents
children effb8a20de26
comparison
equal deleted inserted replaced
0:a5ace2e037bc 1:2846a03bda67
1 /*
2 * gaim
3 *
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22 #include <string.h>
23 #include <sys/time.h>
24
25 #include <sys/types.h>
26 #include <sys/stat.h>
27
28 #include <unistd.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <gtk/gtk.h>
32 #include "gaim.h"
33 #include "proxy.h"
34
35 struct prefs_data *pd = NULL;
36 struct debug_window *dw = NULL;
37
38 GtkWidget *debugbutton;
39
40 struct chat_page {
41 GtkWidget *list1;
42 GtkWidget *list2;
43 };
44
45
46 char debug_buff[BUF_LONG];
47
48 void do_chat_page(GtkWidget *page);
49
50 void list_clicked( GtkWidget *widget, struct away_message *a);
51 void list_unclicked( GtkWidget *widget, struct away_message *a);
52
53
54 void remove_away_message(GtkWidget *widget, void *dummy)
55 {
56 GList *i;
57 struct away_message *a;
58
59 i = GTK_LIST(pd->away_list)->selection;
60
61 a = gtk_object_get_user_data(GTK_OBJECT(i->data));
62
63 rem_away_mess(NULL, a);
64 }
65
66 void away_list_clicked( GtkWidget *widget, struct away_message *a)
67 {
68 gchar buffer[2048];
69 guint text_len;
70
71 pd->cur_message = a;
72
73 /* Get proper Length */
74 text_len = gtk_text_get_length(GTK_TEXT(pd->away_text));
75 pd->edited_message = gtk_editable_get_chars(GTK_EDITABLE(pd->away_text), 0, text_len);
76
77 /* Clear the Box */
78 gtk_text_set_point(GTK_TEXT(pd->away_text), 0 );
79 gtk_text_forward_delete (GTK_TEXT(pd->away_text), text_len);
80
81 /* Fill the text box with new message */
82 strcpy(buffer, a->message);
83 gtk_text_insert(GTK_TEXT(pd->away_text), NULL, NULL, NULL, buffer, -1);
84
85
86 }
87
88 void away_list_unclicked( GtkWidget *widget, struct away_message *a)
89 {
90 if (pd == NULL)
91 return;
92 strcpy(a->message, pd->edited_message);
93 save_prefs();
94 }
95
96
97 void set_option(GtkWidget *w, int *option)
98 {
99 *option = !(*option);
100 }
101
102 void set_display_option(GtkWidget *w, int *option)
103 {
104 display_options = display_options ^ (int)option;
105 save_prefs();
106 }
107
108 void set_sound_option(GtkWidget *w, int *option)
109 {
110 sound_options = sound_options ^ (int)option;
111 save_prefs();
112 }
113
114 void set_font_option(GtkWidget *w, int *option)
115 {
116 font_options = font_options ^ (int)option;
117
118 update_font_buttons();
119
120 save_prefs();
121 }
122
123 void set_general_option(GtkWidget *w, int *option)
124 {
125 general_options = general_options ^ (int)option;
126
127 if ((int)option == OPT_GEN_SHOW_LAGMETER)
128 update_lagometer(-1);
129 if ((int)option == OPT_GEN_LOG_ALL)
130 update_log_convs();
131 save_prefs();
132
133 /*
134 if (data == &show_grp_nums)
135 update_num_groups();
136 if (data == &showidle || data == &showpix)
137 update_show_idlepix();
138 if (data == &button_pix)
139 update_button_pix();
140 if (data == &transparent)
141 update_transparency();
142 */
143
144 }
145
146
147 static gint debug_delete(GtkWidget *w, GdkEvent *event, void *dummy)
148 {
149 if(debugbutton && (general_options & OPT_GEN_DEBUG))
150 {
151 gtk_button_clicked(GTK_BUTTON(debugbutton));
152 }
153 g_free(dw);
154 dw=NULL;
155 return FALSE;
156
157 }
158
159 static gint handle_delete(GtkWidget *w, GdkEvent *event, void *dummy)
160 {
161 guint text_len;
162 struct away_message *a;
163
164
165 if (pd->cur_message) {
166
167 a = pd->cur_message;
168
169
170 /* Get proper Length and grab data */
171 text_len = gtk_text_get_length(GTK_TEXT(pd->away_text));
172 pd->edited_message = gtk_editable_get_chars(GTK_EDITABLE(pd->away_text), 0, text_len);
173
174 /* Store the data for later use */
175 strcpy(a->message, pd->edited_message);
176
177 }
178
179 save_prefs();
180
181 if (event == NULL)
182 {
183 gtk_widget_destroy(pd->window);
184 debugbutton=NULL;
185 }
186 g_free(pd);
187 pd = NULL;
188
189
190 return FALSE;
191 }
192
193 static int
194 manualentry_key_pressed(GtkWidget *w, GdkEvent *event, void *dummy)
195 {
196 g_snprintf(web_command, sizeof(web_command), "%s", gtk_entry_get_text(GTK_ENTRY(pd->browser_entry)));
197 save_prefs();
198 return TRUE;
199 }
200
201 static int
202 connection_key_pressed(GtkWidget *w, GdkEvent *event, void *dummy)
203 {
204 g_snprintf(aim_host, sizeof(aim_host), "%s", gtk_entry_get_text(GTK_ENTRY(pd->aim_host_entry)));
205 sscanf(gtk_entry_get_text(GTK_ENTRY(pd->aim_port_entry)), "%d", &aim_port);
206 g_snprintf(proxy_host, sizeof(proxy_host), "%s", gtk_entry_get_text(GTK_ENTRY(pd->http_proxy_host_entry)));
207 sscanf(gtk_entry_get_text(GTK_ENTRY(pd->http_proxy_port_entry)), "%d", &proxy_port);
208
209 g_snprintf(login_host, sizeof(login_host), "%s", gtk_entry_get_text(GTK_ENTRY(pd->login_host_entry)));
210 sscanf(gtk_entry_get_text(GTK_ENTRY(pd->login_port_entry)), "%d", &login_port);
211 save_prefs();
212 return TRUE;
213 }
214
215
216
217
218 static void set_browser(GtkWidget *w, int *data)
219 {
220 web_browser = (int)data;
221 if (web_browser != BROWSER_MANUAL) {
222 if (pd->browser_entry)
223 gtk_widget_set_sensitive(pd->browser_entry, FALSE);
224 } else {
225 if (pd->browser_entry)
226 gtk_widget_set_sensitive(pd->browser_entry, TRUE);
227 }
228
229 if (web_browser != BROWSER_NETSCAPE) {
230 if (pd->nwbutton)
231 gtk_widget_set_sensitive(pd->nwbutton, FALSE);
232 } else {
233 if (pd->nwbutton)
234 gtk_widget_set_sensitive(pd->nwbutton, TRUE);
235 }
236
237
238 save_prefs();
239 }
240
241 static void set_connect(GtkWidget *w, int *data)
242 {
243 proxy_type = (int)data;
244 if (proxy_type == PROXY_HTTP) {
245 if (pd->http_proxy_host_entry)
246 gtk_widget_set_sensitive(pd->http_proxy_host_entry, TRUE);
247 if (pd->http_proxy_port_entry)
248 gtk_widget_set_sensitive(pd->http_proxy_port_entry, TRUE);
249
250 } else {
251 if (pd->http_proxy_host_entry)
252 gtk_widget_set_sensitive(pd->http_proxy_host_entry, FALSE);
253 if (pd->http_proxy_port_entry)
254 gtk_widget_set_sensitive(pd->http_proxy_port_entry, FALSE);
255
256 }
257
258 save_prefs();
259 }
260
261 static void set_idle(GtkWidget *w, int *data)
262 {
263 report_idle = (int)data;
264 save_prefs();
265 }
266
267
268 GtkWidget *gaim_button(const char *text, int *options, int option, GtkWidget *page)
269 {
270 GtkWidget *button;
271 button = gtk_check_button_new_with_label(text);
272 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (*options & option));
273 gtk_box_pack_start(GTK_BOX(page), button, FALSE, FALSE, 0);
274
275 if (options == &font_options)
276 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_font_option), (int *)option);
277
278 if (options == &sound_options)
279 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_sound_option), (int *)option);
280 if (options == &display_options)
281 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_display_option), (int *)option);
282
283 if (options == &general_options)
284 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(set_general_option), (int *)option);
285 gtk_widget_show(button);
286
287 return button;
288 }
289
290
291 void build_prefs()
292 {
293 GtkWidget *bbox;
294 GtkWidget *vbox;
295 GtkWidget *hbox;
296 GtkWidget *hbox2;
297 GtkWidget *idlebox;
298 GtkWidget *idleframe;
299 GtkWidget *genbox;
300 GtkWidget *fontbox;
301 GtkWidget *fontframe;
302 GtkWidget *appbox;
303 GtkWidget *away_topbox;
304 GtkWidget *away_botbox;
305 GtkWidget *add_away;
306 GtkWidget *remove_away;
307 GtkWidget *close;
308 GtkWidget *notebook;
309 GtkWidget *sound_page;
310 /* GtkWidget *debug_page; */
311 GtkWidget *general_page;
312 GtkWidget *appearance_page;
313 GtkWidget *chat_page;
314 GtkWidget *browser_page;
315 GtkWidget *connection_page;
316 GtkWidget *label;
317 GtkWidget *browseropt;
318 GtkWidget *connectopt;
319 GtkWidget *idleopt;
320
321 GList *awy = away_messages;
322 struct away_message *a;
323 GtkWidget *sw;
324 GtkWidget *sw2;
325 GtkWidget *away_page;
326
327 GtkWidget *list_item;
328
329 gchar buffer[64];
330
331
332 if (!pd)
333 pd = g_new0(struct prefs_data, 1);
334
335 pd->window = gtk_window_new(GTK_WINDOW_DIALOG);
336 gtk_widget_realize(pd->window);
337 aol_icon(pd->window->window);
338 gtk_container_border_width(GTK_CONTAINER(pd->window), 10);
339 gtk_window_set_title(GTK_WINDOW(pd->window), "Gaim - Preferences");
340
341 vbox = gtk_vbox_new(FALSE, 5);
342 gtk_container_add(GTK_CONTAINER(pd->window), vbox);
343
344 /* Notebooks */
345 notebook = gtk_notebook_new();
346 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 5);
347
348
349 /* General page */
350 general_page = gtk_hbox_new(FALSE, 0);
351 label = gtk_label_new("General");
352 gtk_widget_show(label);
353 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), general_page, label);
354
355 genbox = gtk_vbox_new(FALSE, 5);
356 idleframe = gtk_frame_new("Idle");
357 idlebox = gtk_vbox_new(FALSE, 5);
358
359 gtk_box_pack_start(GTK_BOX(general_page), genbox, TRUE, TRUE, 5);
360 gtk_box_pack_start(GTK_BOX(general_page), idleframe, TRUE, TRUE, 5);
361 gtk_container_add(GTK_CONTAINER(idleframe), idlebox);
362
363
364 gaim_button("Enter sends message", &general_options, OPT_GEN_ENTER_SENDS, genbox);
365 gaim_button("Auto-login", &general_options, OPT_GEN_AUTO_LOGIN, genbox);
366 gaim_button("Log All Conversations", &general_options, OPT_GEN_LOG_ALL, genbox);
367 gaim_button("Strip HTML from log files", &general_options, OPT_GEN_STRIP_HTML, genbox);
368 #ifdef USE_APPLET
369 gaim_button("Automatically Show Buddy List", &applet_buddy_auto_show, genbox);
370 #endif
371 gaim_button("Raise windows when message recieved", &general_options, OPT_GEN_POPUP_WINDOWS, genbox);
372 gaim_button("Send URLs as links", &general_options, OPT_GEN_SEND_LINKS, genbox);
373 gaim_button("Show Lag-O-Meter", &general_options, OPT_GEN_SHOW_LAGMETER, genbox);
374 gaim_button("Save some window size/positions", &general_options, OPT_GEN_SAVED_WINDOWS, genbox);
375 gaim_button("Ignore new conversations when away", &general_options, OPT_GEN_DISCARD_WHEN_AWAY, genbox);
376 debugbutton = gaim_button("Enable debug mode", &general_options, OPT_GEN_DEBUG, genbox);
377
378
379 idleopt = gtk_radio_button_new_with_label(NULL, "No Idle");
380 gtk_box_pack_start(GTK_BOX(idlebox), idleopt, FALSE, FALSE, 0);
381 gtk_signal_connect(GTK_OBJECT(idleopt), "clicked", GTK_SIGNAL_FUNC(set_idle), (void *)IDLE_NONE);
382 gtk_widget_show(idleopt);
383 if (report_idle == IDLE_NONE)
384 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(idleopt), TRUE);
385
386 idleopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(idleopt)), "GAIM Use");
387 gtk_box_pack_start(GTK_BOX(idlebox), idleopt, FALSE, FALSE, 0);
388 gtk_signal_connect(GTK_OBJECT(idleopt), "clicked", GTK_SIGNAL_FUNC(set_idle), (void *)IDLE_GAIM);
389 gtk_widget_show(idleopt);
390 if (report_idle == IDLE_GAIM)
391 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(idleopt), TRUE);
392
393 /* idleopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(idleopt)), "X Use");
394 gtk_box_pack_start(GTK_BOX(idlebox), idleopt, FALSE, FALSE, 0);
395 gtk_signal_connect(GTK_OBJECT(idleopt), "clicked", GTK_SIGNAL_FUNC(set_idle), (void *)IDLE_SYSTEM);
396 gtk_widget_show(idleopt);
397 if (report_idle == IDLE_SYSTEM)
398 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(idleopt), TRUE);
399 */
400
401 gtk_widget_show(general_page);
402 gtk_widget_show(genbox);
403 gtk_widget_show(idlebox);
404 gtk_widget_show(idleframe);
405
406
407 // gtk_signal_connect_object( GTK_OBJECT(debugbutton), "clicked", GTK_SIGNAL_FUNC(show_debug), NULL);
408
409 /* Connection */
410
411 connection_page = gtk_vbox_new(FALSE, 0);
412 label = gtk_label_new("Connection");
413 gtk_widget_show(label);
414 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), connection_page, label);
415
416 hbox = gtk_hbox_new(FALSE, 0);
417 label = gtk_label_new("TOC Host:");
418 gtk_widget_show(label);
419 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
420 pd->aim_host_entry = gtk_entry_new();
421 gtk_widget_show(pd->aim_host_entry);
422 gtk_box_pack_start(GTK_BOX(hbox), pd->aim_host_entry, FALSE, FALSE, 0);
423
424 label = gtk_label_new("Port:");
425 gtk_widget_show(label);
426 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
427 pd->aim_port_entry = gtk_entry_new();
428 gtk_widget_show(pd->aim_port_entry);
429 gtk_box_pack_start(GTK_BOX(hbox), pd->aim_port_entry, FALSE, FALSE, 0);
430 gtk_widget_show(hbox);
431
432 gtk_box_pack_start(GTK_BOX(connection_page), hbox, FALSE, FALSE, 0);
433 gtk_entry_set_text(GTK_ENTRY(pd->aim_host_entry), aim_host);
434
435 g_snprintf(buffer, sizeof(buffer), "%d", aim_port);
436 gtk_entry_set_text(GTK_ENTRY(pd->aim_port_entry), buffer);
437
438 hbox2 = gtk_hbox_new(FALSE, 0);
439 label = gtk_label_new("Login Host:");
440 gtk_widget_show(label);
441 gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 5);
442 pd->login_host_entry = gtk_entry_new();
443 gtk_widget_show(pd->login_host_entry);
444 gtk_box_pack_start(GTK_BOX(hbox2), pd->login_host_entry, FALSE, FALSE, 0);
445
446 label = gtk_label_new("Port:");
447 gtk_widget_show(label);
448 gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 5);
449 pd->login_port_entry = gtk_entry_new();
450 gtk_widget_show(pd->login_port_entry);
451 gtk_box_pack_start(GTK_BOX(hbox2), pd->login_port_entry, FALSE, FALSE, 0);
452 gtk_widget_show(hbox2);
453
454 gtk_box_pack_start(GTK_BOX(connection_page), hbox2, FALSE, FALSE, 0);
455 gtk_entry_set_text(GTK_ENTRY(pd->login_host_entry), login_host);
456
457 g_snprintf(buffer, sizeof(buffer), "%d", login_port);
458 gtk_entry_set_text(GTK_ENTRY(pd->login_port_entry), buffer);
459
460 connectopt = gtk_radio_button_new_with_label(NULL, "No Proxy");
461 gtk_box_pack_start(GTK_BOX(connection_page), connectopt, FALSE, FALSE, 0);
462 gtk_signal_connect(GTK_OBJECT(connectopt), "clicked", GTK_SIGNAL_FUNC(set_connect), (void *)PROXY_NONE);
463 gtk_widget_show(connectopt);
464 if (proxy_type == PROXY_NONE)
465 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(connectopt), TRUE);
466
467 connectopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(connectopt)), "HTTP Proxy");
468 gtk_box_pack_start(GTK_BOX(connection_page), connectopt, FALSE, FALSE, 0);
469 gtk_signal_connect(GTK_OBJECT(connectopt), "clicked", GTK_SIGNAL_FUNC(set_connect), (void *)PROXY_HTTP);
470 gtk_widget_show(connectopt);
471 if (proxy_type == PROXY_HTTP)
472 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(connectopt), TRUE);
473
474
475 hbox = gtk_hbox_new(FALSE, 0);
476 label = gtk_label_new("Proxy Host:");
477 gtk_widget_show(label);
478 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
479 pd->http_proxy_host_entry = gtk_entry_new();
480 gtk_widget_show(pd->http_proxy_host_entry);
481 gtk_box_pack_start(GTK_BOX(hbox), pd->http_proxy_host_entry, FALSE, FALSE, 0);
482
483 label = gtk_label_new("Port:");
484 gtk_widget_show(label);
485 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
486 pd->http_proxy_port_entry = gtk_entry_new();
487 gtk_widget_show(pd->http_proxy_port_entry);
488 gtk_box_pack_start(GTK_BOX(hbox), pd->http_proxy_port_entry, FALSE, FALSE, 0);
489 gtk_widget_show(hbox);
490
491 gtk_box_pack_start(GTK_BOX(connection_page), hbox, FALSE, FALSE, 0);
492 gtk_entry_set_text(GTK_ENTRY(pd->http_proxy_host_entry), proxy_host);
493
494 g_snprintf(buffer, sizeof(buffer), "%d", proxy_port);
495 gtk_entry_set_text(GTK_ENTRY(pd->http_proxy_port_entry), buffer);
496
497
498 gtk_widget_show(connection_page);
499
500
501 if (proxy_type == PROXY_HTTP) {
502 if (pd->http_proxy_host_entry)
503 gtk_widget_set_sensitive(pd->http_proxy_host_entry, TRUE);
504 if (pd->http_proxy_port_entry)
505 gtk_widget_set_sensitive(pd->http_proxy_port_entry, TRUE);
506
507 } else {
508 if (pd->http_proxy_host_entry)
509 gtk_widget_set_sensitive(pd->http_proxy_host_entry, FALSE);
510 if (pd->http_proxy_port_entry)
511 gtk_widget_set_sensitive(pd->http_proxy_port_entry, FALSE);
512
513 }
514
515
516
517 gtk_signal_connect(GTK_OBJECT(pd->aim_host_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
518 gtk_signal_connect(GTK_OBJECT(pd->aim_port_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
519 gtk_signal_connect(GTK_OBJECT(pd->login_host_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
520 gtk_signal_connect(GTK_OBJECT(pd->login_port_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
521 gtk_signal_connect(GTK_OBJECT(pd->http_proxy_host_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
522 gtk_signal_connect(GTK_OBJECT(pd->http_proxy_port_entry), "focus_out_event", GTK_SIGNAL_FUNC(connection_key_pressed), NULL);
523
524
525 /* Away */
526
527 a = awaymessage;
528 pd->cur_message = NULL;
529 pd->nwbutton = NULL;
530 pd->browser_entry = NULL;
531
532 away_page = gtk_vbox_new(FALSE, 0);
533 away_topbox = gtk_hbox_new(FALSE, 0);
534 away_botbox = gtk_hbox_new(FALSE, 0);
535
536 label = gtk_label_new("Away");
537 gtk_widget_show(label);
538 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), away_page, label);
539 gtk_widget_show(away_page);
540
541 sw2 = gtk_scrolled_window_new(NULL, NULL);
542 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2),
543 GTK_POLICY_AUTOMATIC,
544 GTK_POLICY_AUTOMATIC);
545 gtk_widget_show(sw2);
546
547 pd->away_list = gtk_list_new();
548 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), pd->away_list);
549 gtk_box_pack_start(GTK_BOX(away_topbox), sw2, TRUE, TRUE, 0);
550
551 sw = gtk_scrolled_window_new(NULL, NULL);
552 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
553 GTK_POLICY_AUTOMATIC,
554 GTK_POLICY_AUTOMATIC);
555 gtk_widget_show(sw);
556
557 pd->away_text = gtk_text_new(NULL, NULL);
558 gtk_container_add(GTK_CONTAINER(sw), pd->away_text);
559 gtk_box_pack_start(GTK_BOX(away_topbox), sw, TRUE, TRUE, 0);
560 gtk_text_set_word_wrap(GTK_TEXT(pd->away_text), TRUE);
561 gtk_text_set_editable(GTK_TEXT(pd->away_text), TRUE );
562
563 add_away = gtk_button_new_with_label("Create Message");
564 gtk_signal_connect(GTK_OBJECT(add_away), "clicked", GTK_SIGNAL_FUNC(create_away_mess), NULL);
565 gtk_box_pack_start(GTK_BOX(away_botbox), add_away, TRUE, FALSE, 5);
566
567 remove_away = gtk_button_new_with_label("Remove Message");
568 gtk_signal_connect(GTK_OBJECT(remove_away), "clicked", GTK_SIGNAL_FUNC(remove_away_message), NULL);
569 gtk_box_pack_start(GTK_BOX(away_botbox), remove_away, TRUE, FALSE, 5);
570
571 gtk_box_pack_start(GTK_BOX(away_page), away_topbox, TRUE, TRUE, 0);
572 gtk_box_pack_start(GTK_BOX(away_page), away_botbox, FALSE, FALSE, 0);
573
574 gtk_widget_show(add_away);
575 gtk_widget_show(remove_away);
576 gtk_widget_show(pd->away_list);
577 gtk_widget_show(pd->away_text);
578 gtk_widget_show(away_topbox);
579 gtk_widget_show(away_botbox);
580
581 if (awy != NULL) {
582 a = (struct away_message *)awy->data;
583 g_snprintf(buffer, sizeof(buffer), "%s", a->message);
584 gtk_text_insert(GTK_TEXT(pd->away_text), NULL, NULL, NULL, buffer, -1);
585 }
586
587 while(awy) {
588 a = (struct away_message *)awy->data;
589 label = gtk_label_new(a->name);
590 list_item = gtk_list_item_new();
591 gtk_container_add(GTK_CONTAINER(list_item), label);
592 gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(away_list_clicked), a);
593 gtk_signal_connect(GTK_OBJECT(list_item), "deselect", GTK_SIGNAL_FUNC(away_list_unclicked), a);
594 gtk_object_set_user_data(GTK_OBJECT(list_item), a);
595
596 gtk_widget_show(label);
597 gtk_container_add(GTK_CONTAINER(pd->away_list), list_item);
598 gtk_widget_show(list_item);
599
600 awy = awy->next;
601
602 }
603
604 /* Sound */
605 sound_page = gtk_vbox_new(FALSE, 0);
606 label = gtk_label_new("Sounds");
607 gtk_widget_show(label);
608 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), sound_page, label);
609 gaim_button("Sound when buddy logs in", &sound_options, OPT_SOUND_LOGIN, sound_page);
610 gaim_button("Sound when buddy logs out", &sound_options, OPT_SOUND_LOGOUT, sound_page);
611 gaim_button("Sound when message is received", &sound_options, OPT_SOUND_RECV, sound_page);
612 gaim_button("Sound when message is sent", &sound_options, OPT_SOUND_SEND, sound_page);
613 gaim_button("Sound when first message is received", &sound_options, OPT_SOUND_FIRST_RCV, sound_page);
614 gaim_button("Sound when message is received if away", &sound_options, OPT_SOUND_WHEN_AWAY, sound_page);
615 gtk_widget_show(sound_page);
616
617
618 /* Browser */
619 browser_page = gtk_vbox_new(FALSE, 0);
620
621 label = gtk_label_new("Browser");
622 gtk_widget_show(label);
623
624
625 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), browser_page, label);
626 browseropt = gtk_radio_button_new_with_label(NULL, "Netscape");
627 gtk_box_pack_start(GTK_BOX(browser_page), browseropt, FALSE, FALSE, 0);
628 gtk_signal_connect(GTK_OBJECT(browseropt), "clicked", GTK_SIGNAL_FUNC(set_browser), (void *)BROWSER_NETSCAPE);
629 gtk_widget_show(browseropt);
630 if (web_browser == BROWSER_NETSCAPE)
631 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(browseropt), TRUE);
632
633 browseropt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(browseropt)), "KFM (The KDE browser)");
634 gtk_box_pack_start(GTK_BOX(browser_page), browseropt, FALSE, FALSE, 0);
635 gtk_signal_connect(GTK_OBJECT(browseropt), "clicked", GTK_SIGNAL_FUNC(set_browser), (void *)BROWSER_KFM);
636 gtk_widget_show(browseropt);
637 if (web_browser == BROWSER_KFM)
638 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(browseropt), TRUE);
639
640
641 browseropt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(browseropt)), "Internal HTML widget (Quite likely a bad idea!)");
642 gtk_box_pack_start(GTK_BOX(browser_page), browseropt, FALSE, FALSE, 0);
643 gtk_signal_connect(GTK_OBJECT(browseropt), "clicked", GTK_SIGNAL_FUNC(set_browser), (void *)BROWSER_INTERNAL);
644 gtk_widget_show(browseropt);
645 if (web_browser == BROWSER_INTERNAL)
646 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(browseropt), TRUE);
647
648
649 browseropt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(browseropt)), "Manual");
650 gtk_box_pack_start(GTK_BOX(browser_page), browseropt, FALSE, FALSE, 0);
651 gtk_signal_connect(GTK_OBJECT(browseropt), "clicked", GTK_SIGNAL_FUNC(set_browser), (void *)BROWSER_MANUAL);
652 gtk_widget_show(browseropt);
653 if (web_browser == BROWSER_MANUAL)
654 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(browseropt), TRUE);
655
656
657 pd->browser_entry = gtk_entry_new();
658 gtk_widget_show(pd->browser_entry);
659
660 gtk_box_pack_start(GTK_BOX(browser_page), pd->browser_entry, FALSE, FALSE, 0);
661 gtk_entry_set_text(GTK_ENTRY(pd->browser_entry), web_command);
662
663 pd->nwbutton = gaim_button("Pop up new window by default", &general_options, OPT_GEN_BROWSER_POPUP, browser_page);
664 gtk_widget_show(browser_page);
665
666 gtk_signal_connect(GTK_OBJECT(pd->browser_entry), "focus_out_event", GTK_SIGNAL_FUNC(manualentry_key_pressed), NULL);
667
668
669
670 if (web_browser != BROWSER_MANUAL) {
671 gtk_widget_set_sensitive(pd->browser_entry, FALSE);
672 } else {
673 gtk_widget_set_sensitive(pd->browser_entry, TRUE);
674 }
675
676 if (web_browser != BROWSER_NETSCAPE) {
677 gtk_widget_set_sensitive(pd->nwbutton, FALSE);
678 } else {
679 gtk_widget_set_sensitive(pd->nwbutton, TRUE);
680 }
681
682
683
684
685 /* Appearance */
686 appearance_page = gtk_hbox_new(FALSE, 0);
687 label = gtk_label_new("Appearance");
688 gtk_widget_show(label);
689 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), appearance_page, label);
690 appbox = gtk_vbox_new(FALSE, 5);
691 fontframe = gtk_frame_new("Font Properties");
692 fontbox = gtk_vbox_new(FALSE, 5);
693
694 gtk_box_pack_start(GTK_BOX(appearance_page), appbox, TRUE, TRUE, 5);
695 gtk_box_pack_start(GTK_BOX(appearance_page), fontframe, TRUE, TRUE, 5);
696 gtk_container_add(GTK_CONTAINER(fontframe), fontbox);
697
698 gaim_button("Show time on messages", &display_options, OPT_DISP_SHOW_TIME, appbox);
699 gaim_button("Show numbers in groups", &display_options, OPT_DISP_SHOW_GRPNUM, appbox );
700 gaim_button("Show buddy-type pixmaps", &display_options, OPT_DISP_SHOW_PIXMAPS, appbox );
701 gaim_button("Show idle times", &display_options, OPT_DISP_SHOW_IDLETIME, appbox );
702 gaim_button("Show button pixmaps", &display_options, OPT_DISP_SHOW_BUTTON_XPM, appbox );
703 gaim_button("Ignore incoming colours", &display_options, OPT_DISP_IGNORE_COLOUR, appbox );
704 #if 0
705 gaim_button("Transparent text window (experimental)", &transparent, appbox );
706 #endif
707 gaim_button("Show logon/logoffs in conversation windows", &display_options, OPT_DISP_SHOW_LOGON, appbox );
708
709
710 gaim_button("Bold Text", &font_options, OPT_FONT_BOLD, fontbox);
711 gaim_button("Italics Text", &font_options, OPT_FONT_ITALIC, fontbox);
712 gaim_button("Underlined Text", &font_options, OPT_FONT_UNDERLINE, fontbox);
713 gaim_button("Strike Text", &font_options, OPT_FONT_STRIKE, fontbox);
714
715 gtk_widget_show(appearance_page);
716 gtk_widget_show(fontbox);
717 gtk_widget_show(fontframe);
718 gtk_widget_show(appbox);
719
720
721 /* Buddy Chats */
722 chat_page = gtk_vbox_new(FALSE, 0);
723 label = gtk_label_new("Buddy Chats");
724
725 gtk_widget_show(label);
726 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), chat_page, label);
727
728 do_chat_page(chat_page);
729 gtk_widget_show(chat_page);
730
731 bbox = gtk_hbox_new(FALSE, 5);
732 close = gtk_button_new_with_label("Close");
733
734 /* Pack the button(s) in the button box */
735 gtk_box_pack_end(GTK_BOX(bbox), close, FALSE, FALSE, 5);
736 gtk_box_pack_start(GTK_BOX(vbox),bbox, FALSE, FALSE, 5);
737
738 gtk_widget_show(notebook);
739 gtk_widget_show(close);
740
741 gtk_widget_show(bbox);
742 gtk_widget_show(vbox);
743
744 gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(handle_delete), NULL);
745 gtk_signal_connect(GTK_OBJECT(pd->window),"delete_event", GTK_SIGNAL_FUNC(handle_delete), NULL);
746
747 }
748
749 void show_prefs()
750 {
751 if (!pd || !pd->window)
752 build_prefs();
753 gtk_widget_show(pd->window);
754 }
755 void add_chat(GtkWidget *w, struct chat_page *cp)
756 {
757 GList *sel = GTK_LIST(cp->list1)->selection;
758 struct chat_room *cr, *cr2;
759 GList *crs = chat_rooms;
760 GtkWidget *item;
761
762 if (sel) {
763 cr = (struct chat_room *)gtk_object_get_user_data(GTK_OBJECT(sel->data));
764 } else
765 return;
766
767 while(crs) {
768 cr2 = (struct chat_room *)crs->data;
769 if (!strcasecmp(cr->name, cr2->name))
770 return;
771 crs = crs->next;
772 }
773 item = gtk_list_item_new_with_label(cr->name);
774 cr2 = g_new0(struct chat_room, 1);
775 strcpy(cr2->name, cr->name);
776 cr2->exchange = cr->exchange;
777 gtk_object_set_user_data(GTK_OBJECT(item), cr2);
778 gtk_widget_show(item);
779 sel = g_list_append(NULL, item);
780 gtk_list_append_items(GTK_LIST(cp->list2), sel);
781 chat_rooms = g_list_append(chat_rooms, cr2);
782
783 setup_buddy_chats();
784 save_prefs();
785
786
787 }
788
789 void remove_chat(GtkWidget *w, struct chat_page *cp)
790 {
791 GList *sel = GTK_LIST(cp->list2)->selection;
792 struct chat_room *cr;
793 GList *crs;
794 GtkWidget *item;
795
796 if (sel) {
797 item = (GtkWidget *)sel->data;
798 cr = (struct chat_room *)gtk_object_get_user_data(GTK_OBJECT(item));
799 } else
800 return;
801
802 chat_rooms = g_list_remove(chat_rooms, cr);
803
804
805 gtk_list_clear_items(GTK_LIST(cp->list2), 0, -1);
806
807 if (g_list_length(chat_rooms) == 0)
808 chat_rooms = NULL;
809
810 crs = chat_rooms;
811
812 while(crs) {
813 cr = (struct chat_room *)crs->data;
814 item = gtk_list_item_new_with_label(cr->name);
815 gtk_object_set_user_data(GTK_OBJECT(item), cr);
816 gtk_widget_show(item);
817 gtk_list_append_items(GTK_LIST(cp->list2), g_list_append(NULL, item));
818
819
820 crs = crs->next;
821 }
822
823 setup_buddy_chats();
824 save_prefs();
825 }
826
827 void refresh_list(GtkWidget *w, struct chat_page *cp)
828 {
829 char *text = grab_url("http://www.aol.com/community/chat/allchats.html");
830 char *c;
831 int len = strlen(text);
832 GtkWidget *item;
833 GList *items = GTK_LIST(cp->list1)->children;
834 struct chat_room *cr;
835 c = text;
836
837 while(items) {
838 g_free(gtk_object_get_user_data(GTK_OBJECT(items->data)));
839 items = items->next;
840 }
841
842 items = NULL;
843
844 gtk_list_clear_items(GTK_LIST(cp->list1), 0, -1);
845
846 item = gtk_list_item_new_with_label("Gaim Chat");
847 cr = g_new0(struct chat_room, 1);
848 strcpy(cr->name, "Gaim Chat");
849 cr->exchange = 4;
850 gtk_object_set_user_data(GTK_OBJECT(item), cr);
851 gtk_widget_show(item);
852
853 items = g_list_append(NULL, item);
854
855 while(c) {
856 if (c - text > len - 30)
857 break; /* assume no chat rooms 30 from end, padding */
858 if (!strncasecmp(AOL_SRCHSTR, c, strlen(AOL_SRCHSTR))) {
859 char *t;
860 int len=0;
861 int exchange;
862 char *name = NULL;
863
864 c += strlen(AOL_SRCHSTR);
865 t = c;
866 while(t) {
867 len++;
868 name = g_realloc(name, len);
869 if (*t == '+')
870 name[len - 1] = ' ';
871 else if (*t == '&') {
872 name[len - 1] = 0;
873 sscanf(t, "&Exchange=%d", &exchange);
874 c = t + strlen("&Exchange=x");
875 break;
876 } else
877 name[len - 1] = *t;
878 t++;
879 }
880 cr = g_new0(struct chat_room, 1);
881 strcpy(cr->name, name);
882 cr->exchange = exchange;
883 item = gtk_list_item_new_with_label(name);
884 gtk_widget_show(item);
885 items = g_list_append(items, item);
886 gtk_object_set_user_data(GTK_OBJECT(item), cr);
887 g_free(name);
888 }
889 c++;
890 }
891 gtk_list_append_items(GTK_LIST(cp->list1), items);
892 g_free(text);
893 }
894
895
896
897 void do_chat_page(GtkWidget *page)
898 {
899 GtkWidget *table;
900 GtkWidget *rem_button, *add_button, *ref_button;
901 GtkWidget *list1, *list2;
902 GtkWidget *label;
903 GtkWidget *sw1, *sw2;
904 GtkWidget *item;
905 struct chat_page *cp = g_new0(struct chat_page, 1);
906 GList *crs = chat_rooms;
907 GList *items = NULL;
908 struct chat_room *cr;
909
910 table = gtk_table_new(4, 2, FALSE);
911 gtk_widget_show(table);
912
913
914 gtk_box_pack_start(GTK_BOX(page), table, TRUE, TRUE, 0);
915
916
917 list1 = gtk_list_new();
918 list2 = gtk_list_new();
919 sw1 = gtk_scrolled_window_new(NULL, NULL);
920 sw2 = gtk_scrolled_window_new(NULL, NULL);
921 ref_button = gtk_button_new_with_label("Refresh");
922 add_button = gtk_button_new_with_label("Add");
923 rem_button = gtk_button_new_with_label("Remove");
924 gtk_widget_show(list1);
925 gtk_widget_show(sw1);
926 gtk_widget_show(list2);
927 gtk_widget_show(sw2);
928 gtk_widget_show(ref_button);
929 gtk_widget_show(add_button);
930 gtk_widget_show(rem_button);
931
932 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw1), list1);
933 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), list2);
934
935 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw1),
936 GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
937 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2),
938 GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
939
940 cp->list1 = list1;
941 cp->list2 = list2;
942
943 gtk_signal_connect(GTK_OBJECT(ref_button), "clicked",
944 GTK_SIGNAL_FUNC(refresh_list), cp);
945 gtk_signal_connect(GTK_OBJECT(rem_button), "clicked",
946 GTK_SIGNAL_FUNC(remove_chat), cp);
947 gtk_signal_connect(GTK_OBJECT(add_button), "clicked",
948 GTK_SIGNAL_FUNC(add_chat), cp);
949
950
951
952 label = gtk_label_new("List of available chats");
953 gtk_widget_show(label);
954
955 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
956 GTK_SHRINK, GTK_SHRINK, 0, 0);
957 gtk_table_attach(GTK_TABLE(table), ref_button, 0, 1, 1, 2,
958 GTK_SHRINK, GTK_SHRINK, 0, 0);
959 gtk_table_attach(GTK_TABLE(table), sw1, 0, 1, 2, 3,
960 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
961 5, 5);
962 gtk_table_attach(GTK_TABLE(table), add_button, 0, 1, 3, 4,
963 GTK_SHRINK, GTK_SHRINK, 0, 0);
964
965
966 label = gtk_label_new("List of subscribed chats");
967 gtk_widget_show(label);
968
969 gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1,
970 GTK_SHRINK, GTK_SHRINK, 0, 0);
971 gtk_table_attach(GTK_TABLE(table), sw2, 1, 2, 2, 3,
972 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
973 5, 5);
974 gtk_table_attach(GTK_TABLE(table), rem_button, 1, 2, 3, 4,
975 GTK_SHRINK, GTK_SHRINK, 0, 0);
976
977
978 item = gtk_list_item_new_with_label("Gaim Chat");
979 cr = g_new0(struct chat_room, 1);
980 strcpy(cr->name, "Gaim Chat");
981 cr->exchange = 4;
982 gtk_object_set_user_data(GTK_OBJECT(item), cr);
983 gtk_widget_show(item);
984 gtk_list_append_items(GTK_LIST(list1), g_list_append(NULL, item));
985
986
987 while(crs) {
988 cr = (struct chat_room *)crs->data;
989 item = gtk_list_item_new_with_label(cr->name);
990 gtk_object_set_user_data(GTK_OBJECT(item), cr);
991 gtk_widget_show(item);
992 items = g_list_append(items, item);
993
994 crs = crs->next;
995 }
996
997 gtk_list_append_items(GTK_LIST(list2), items);
998 }
999
1000
1001
1002
1003
1004 void debug_print(char *chars)
1005 {
1006 if(general_options & OPT_GEN_DEBUG)
1007 gtk_text_insert(GTK_TEXT(dw->entry),NULL, NULL, NULL, chars, strlen(chars));
1008 #ifdef DEBUG
1009 printf("%s\n", chars);
1010 #endif
1011 }
1012
1013
1014 void build_debug()
1015 {
1016 GtkWidget *scroll;
1017 GtkWidget *box;
1018 if (!dw)
1019 dw = g_new0(struct debug_window, 1);
1020
1021 box = gtk_hbox_new(FALSE,0);
1022 dw->window = gtk_window_new(GTK_WINDOW_DIALOG);
1023 gtk_window_set_title(GTK_WINDOW(dw->window), "GAIM debug output window");
1024 gtk_container_add(GTK_CONTAINER(dw->window), box);
1025 dw->entry = gtk_text_new(NULL,NULL);
1026 gtk_widget_set_usize(dw->entry, 500, 200);
1027 scroll = gtk_vscrollbar_new(GTK_TEXT(dw->entry)->vadj);
1028 gtk_box_pack_start(GTK_BOX(box), dw->entry, TRUE,TRUE,0);
1029 gtk_box_pack_end(GTK_BOX(box), scroll,FALSE,FALSE,0);
1030 gtk_widget_show(dw->entry);
1031 gtk_widget_show(scroll);
1032 gtk_widget_show(box);
1033 gtk_signal_connect(GTK_OBJECT(dw->window),"delete_event", GTK_SIGNAL_FUNC(debug_delete), NULL);
1034 gtk_widget_show(dw->window);
1035 }
1036
1037
1038
1039 void show_debug(GtkObject * object)
1040 {
1041 if((general_options & OPT_GEN_DEBUG)) {
1042 if(!dw || !dw->window)
1043 build_debug();
1044 gtk_widget_show(dw->window);
1045 } else {
1046 gtk_widget_destroy(dw->window);
1047 dw->window = NULL;
1048 }
1049 }
1050