comparison src/multi.c @ 1075:2fe18b2d6105

[gaim-migrate @ 1085] rock on committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Tue, 07 Nov 2000 12:13:02 +0000
parents 2cff18c2f9c6
children ce201056e7a6
comparison
equal deleted inserted replaced
1074:2cff18c2f9c6 1075:2fe18b2d6105
36 GSList *connections; 36 GSList *connections;
37 37
38 static GtkWidget *acctedit = NULL; 38 static GtkWidget *acctedit = NULL;
39 static GtkWidget *list = NULL; /* the clist of names in the accteditor */ 39 static GtkWidget *list = NULL; /* the clist of names in the accteditor */
40 static GtkWidget *newmod = NULL; /* the dialog for creating a new account */ 40 static GtkWidget *newmod = NULL; /* the dialog for creating a new account */
41 static GtkWidget *newmain = NULL; /* the frame that holds the possible notebook for options */
41 static struct aim_user tmpusr; 42 static struct aim_user tmpusr;
42 43
43 struct mod_usr_opt { 44 struct mod_usr_opt {
44 struct aim_user *user; 45 struct aim_user *user;
45 int opt; 46 int opt;
225 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u); 226 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u);
226 gtk_clist_set_text(GTK_CLIST(list), i, 2, (u->options & OPT_USR_AUTO) ? "True" : "False"); 227 gtk_clist_set_text(GTK_CLIST(list), i, 2, (u->options & OPT_USR_AUTO) ? "True" : "False");
227 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol)); 228 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol));
228 } else { 229 } else {
229 char *titles[4]; 230 char *titles[4];
231 int i;
230 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name)); 232 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name));
231 if (find_user(txt, tmpusr.protocol)) {
232 gtk_widget_destroy(newmod);
233 return;
234 }
235 u = g_new0(struct aim_user, 1); 233 u = g_new0(struct aim_user, 1);
236 g_snprintf(u->username, sizeof(u->username), "%s", txt); 234 g_snprintf(u->username, sizeof(u->username), "%s", txt);
237 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass)); 235 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass));
238 g_snprintf(u->password, sizeof(u->password), "%s", txt); 236 g_snprintf(u->password, sizeof(u->password), "%s", txt);
239 u->options = tmpusr.options; 237 u->options = tmpusr.options;
244 titles[2] = (u->options & OPT_USR_AUTO) ? "True" : "False"; 242 titles[2] = (u->options & OPT_USR_AUTO) ? "True" : "False";
245 titles[3] = proto_name(u->protocol); 243 titles[3] = proto_name(u->protocol);
246 i = gtk_clist_append(GTK_CLIST(list), titles); 244 i = gtk_clist_append(GTK_CLIST(list), titles);
247 gtk_clist_set_row_data(GTK_CLIST(list), i, u); 245 gtk_clist_set_row_data(GTK_CLIST(list), i, u);
248 aim_users = g_list_append(aim_users, u); 246 aim_users = g_list_append(aim_users, u);
247 for (i = 0; i < 6; i++)
248 g_snprintf(u->proto_opt[i], sizeof(u->proto_opt[i]), "%s", tmpusr.proto_opt[i]);
249 } 249 }
250 save_prefs(); 250 save_prefs();
251 } 251 }
252 252
253 static void cancel_mod(GtkWidget *w, struct aim_user *u) 253 static void cancel_mod(GtkWidget *w, struct aim_user *u)
256 gtk_widget_destroy(u->mod); 256 gtk_widget_destroy(u->mod);
257 } else { 257 } else {
258 gtk_widget_destroy(newmod); 258 gtk_widget_destroy(newmod);
259 } 259 }
260 } 260 }
261
262 static void generate_options(struct aim_user *, GtkWidget *);
261 263
262 static void set_prot(GtkWidget *opt, int proto) 264 static void set_prot(GtkWidget *opt, int proto)
263 { 265 {
264 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); 266 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt));
265 if (u) { 267 if (u) {
266 u->tmp_protocol = proto; 268 u->tmp_protocol = proto;
267 } else { 269 generate_options(u, u->main);
268 tmpusr.protocol = proto; 270 } else {
269 } 271 tmpusr.tmp_protocol = tmpusr.protocol = proto;
270 } 272 generate_options(NULL, newmain);
271 273 }
272 static GtkWidget *make_protocol_menu(GtkWidget *box, struct aim_user *u) 274 }
275
276 static GtkWidget *make_protocol_menu(GtkWidget *box, struct aim_user *u, GtkWidget *frame)
273 { 277 {
274 GtkWidget *optmenu; 278 GtkWidget *optmenu;
275 GtkWidget *menu; 279 GtkWidget *menu;
276 GtkWidget *opt; 280 GtkWidget *opt;
277 GSList *p = protocols; 281 GSList *p = protocols;
278 struct prpl *e; 282 struct prpl *e;
279 283 int count = 0;
280 /* PRPL: should we set some way to update these when new protocols get added? */ 284 gboolean found = FALSE;
285
281 optmenu = gtk_option_menu_new(); 286 optmenu = gtk_option_menu_new();
282 gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5); 287 gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5);
283 gtk_widget_show(optmenu); 288 gtk_widget_show(optmenu);
284 289
285 menu = gtk_menu_new(); 290 menu = gtk_menu_new();
286 291
287 while (p) { 292 while (p) {
288 e = (struct prpl *)p->data; 293 e = (struct prpl *)p->data;
294 if (u) {
295 if (e->protocol == u->tmp_protocol)
296 found = TRUE;
297 if (!found)
298 count++;
299 } else {
300 if (e->protocol == tmpusr.tmp_protocol)
301 found = TRUE;
302 if (!found)
303 count++;
304 }
289 if (e->name) 305 if (e->name)
290 opt = gtk_menu_item_new_with_label((*e->name)()); 306 opt = gtk_menu_item_new_with_label((*e->name)());
291 else 307 else
292 opt = gtk_menu_item_new_with_label("Unknown"); 308 opt = gtk_menu_item_new_with_label("Unknown");
293 gtk_object_set_user_data(GTK_OBJECT(opt), u); 309 gtk_object_set_user_data(GTK_OBJECT(opt), u);
297 gtk_widget_show(opt); 313 gtk_widget_show(opt);
298 p = p->next; 314 p = p->next;
299 } 315 }
300 316
301 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); 317 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
318 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), count);
319
320 return optmenu;
321 }
322
323 static void generate_options(struct aim_user *u, GtkWidget *frame) {
324 GList *tmp;
325 GtkWidget *book;
326 GtkWidget *vbox;
327 GtkWidget *hbox;
328 GtkWidget *label;
329 GtkWidget *name;
330 GtkWidget *pass;
331 struct prpl *p;
332
333 tmp = gtk_container_children(GTK_CONTAINER(frame));
334
335 if (u)
336 p = find_prpl(u->tmp_protocol);
337 else
338 p = find_prpl(tmpusr.protocol);
339
340 if (p && p->user_opts) {
341 if (tmp && !GTK_IS_NOTEBOOK(tmp->data)) {
342 gtk_widget_destroy(tmp->data);
343 tmp = NULL;
344 }
345
346 if (!tmp) {
347 book = gtk_notebook_new();
348 gtk_container_add(GTK_CONTAINER(frame), book);
349 gtk_widget_show(book);
350
351 vbox = gtk_vbox_new(FALSE, 0);
352 gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox,
353 gtk_label_new(_("General Options")));
354 gtk_widget_show(vbox);
355
356 if (u)
357 (*p->user_opts)(book, u);
358 else
359 (*p->user_opts)(book, &tmpusr);
360 } else {
361 book = (GtkWidget *)tmp->data;
362 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1);
363 if (u)
364 (*p->user_opts)(book, u);
365 else
366 (*p->user_opts)(book, &tmpusr);
367 return;
368 }
369 } else {
370 if (tmp && GTK_IS_NOTEBOOK(tmp->data)) {
371 gtk_widget_destroy(tmp->data);
372 tmp = NULL;
373 }
374
375 if (!tmp) {
376 vbox = gtk_vbox_new(FALSE, 0);
377 gtk_container_add(GTK_CONTAINER(frame), vbox);
378 gtk_widget_show(vbox);
379 } else {
380 return;
381 }
382 }
383
384 hbox = gtk_hbox_new(FALSE, 0);
385 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
386 gtk_widget_show(hbox);
387
388 label = gtk_label_new(_("Screenname:"));
389 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
390 gtk_widget_show(label);
391
392 name = gtk_entry_new();
393 gtk_box_pack_start(GTK_BOX(hbox), name, FALSE, FALSE, 5);
394 gtk_widget_show(name);
395
396 hbox = gtk_hbox_new(FALSE, 5);
397 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
398 gtk_widget_show(hbox);
399
400 label = gtk_label_new(_("Password:"));
401 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
402 gtk_widget_show(label);
403
404 pass = gtk_entry_new();
405 gtk_box_pack_start(GTK_BOX(hbox), pass, FALSE, FALSE, 5);
406 gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE);
407 gtk_widget_show(pass);
408
409 hbox = gtk_hbox_new(FALSE, 5);
410 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
411 gtk_widget_show(hbox);
412
413 make_protocol_menu(hbox, u, frame);
414
415 acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox);
416 acct_button(_("Auto-Login"), u, OPT_USR_AUTO, vbox);
417 acct_button(_("Send KeepAlive packet (6 bytes/second)"), u, OPT_USR_KEEPALV, vbox);
418
302 if (u) { 419 if (u) {
303 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), u->protocol); 420 u->name = name;
304 u->tmp_protocol = u->protocol; 421 u->pass = pass;
305 } else { 422 gtk_entry_set_text(GTK_ENTRY(name), u->username);
306 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 423 gtk_entry_set_text(GTK_ENTRY(pass), u->password);
307 ((struct prpl *)protocols->data)->protocol); 424 gtk_entry_set_editable(GTK_ENTRY(name), FALSE);
308 } 425 } else {
309 426 tmpusr.name = name;
310 return optmenu; 427 tmpusr.pass = pass;
428 }
311 } 429 }
312 430
313 static void show_acct_mod(struct aim_user *u) 431 static void show_acct_mod(struct aim_user *u)
314 { 432 {
315 /* here we can have all the aim_user options, including ones not shown in the main acctedit 433 /* here we can have all the aim_user options, including ones not shown in the main acctedit
317 * one the powerful editor. this is where things like name/password are edited, but can 435 * one the powerful editor. this is where things like name/password are edited, but can
318 * also have toggles (and even more complex options) like whether to autologin or whether 436 * also have toggles (and even more complex options) like whether to autologin or whether
319 * to send keepalives or whatever. this would be the perfect place to specify which protocol 437 * to send keepalives or whatever. this would be the perfect place to specify which protocol
320 * to use. make sure to account for the possibility of protocol plugins. */ 438 * to use. make sure to account for the possibility of protocol plugins. */
321 GtkWidget *mod; 439 GtkWidget *mod;
440 GtkWidget *box;
322 GtkWidget *frame; 441 GtkWidget *frame;
323 GtkWidget *vbox;
324 GtkWidget *hbox; 442 GtkWidget *hbox;
325 GtkWidget *label;
326 GtkWidget *name;
327 GtkWidget *pass;
328 GtkWidget *button; 443 GtkWidget *button;
329 444
330 if (!u && newmod) { 445 if (!u && newmod) {
331 gtk_widget_show(newmod); 446 gtk_widget_show(newmod);
332 return; 447 return;
340 gtk_window_set_wmclass(GTK_WINDOW(mod), "account", "Gaim"); 455 gtk_window_set_wmclass(GTK_WINDOW(mod), "account", "Gaim");
341 gtk_widget_realize(mod); 456 gtk_widget_realize(mod);
342 aol_icon(mod->window); 457 aol_icon(mod->window);
343 gtk_container_border_width(GTK_CONTAINER(mod), 10); 458 gtk_container_border_width(GTK_CONTAINER(mod), 10);
344 gtk_window_set_title(GTK_WINDOW(mod), _("Gaim - Modify Account")); 459 gtk_window_set_title(GTK_WINDOW(mod), _("Gaim - Modify Account"));
460 gtk_window_set_policy(GTK_WINDOW(mod), 0, 1, 1); /* i know, i'm odd */
345 gtk_signal_connect(GTK_OBJECT(mod), "destroy", 461 gtk_signal_connect(GTK_OBJECT(mod), "destroy",
346 GTK_SIGNAL_FUNC(delmod), u); 462 GTK_SIGNAL_FUNC(delmod), u);
347 463
464 box = gtk_vbox_new(FALSE, 0);
465 gtk_container_add(GTK_CONTAINER(mod), box);
466 gtk_widget_show(box);
467
348 frame = gtk_frame_new(_("Modify Account")); 468 frame = gtk_frame_new(_("Modify Account"));
349 gtk_container_add(GTK_CONTAINER(mod), frame); 469 gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5);
350 gtk_widget_show(frame); 470 gtk_widget_show(frame);
351 471
352 vbox = gtk_vbox_new(FALSE, 0); 472 if (u) u->tmp_protocol = u->protocol;
353 gtk_container_add(GTK_CONTAINER(frame), vbox); 473 else tmpusr.tmp_protocol = tmpusr.protocol;
354 gtk_widget_show(vbox); 474 generate_options(u, frame);
355
356 hbox = gtk_hbox_new(FALSE, 0);
357 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
358 gtk_widget_show(hbox);
359
360 label = gtk_label_new(_("Screenname:"));
361 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
362 gtk_widget_show(label);
363
364 name = gtk_entry_new();
365 gtk_box_pack_start(GTK_BOX(hbox), name, FALSE, FALSE, 5);
366 gtk_widget_show(name);
367 475
368 hbox = gtk_hbox_new(FALSE, 5); 476 hbox = gtk_hbox_new(FALSE, 5);
369 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); 477 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5);
370 gtk_widget_show(hbox);
371
372 label = gtk_label_new(_("Password:"));
373 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
374 gtk_widget_show(label);
375
376 pass = gtk_entry_new();
377 gtk_box_pack_start(GTK_BOX(hbox), pass, FALSE, FALSE, 5);
378 gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE);
379 gtk_widget_show(pass);
380
381 hbox = gtk_hbox_new(FALSE, 5);
382 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
383 gtk_widget_show(hbox);
384
385 make_protocol_menu(hbox, u);
386
387 acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox);
388 acct_button(_("Auto-Login"), u, OPT_USR_AUTO, vbox);
389 acct_button(_("Send KeepAlive packet (6 bytes/second)"), u, OPT_USR_KEEPALV, vbox);
390
391 hbox = gtk_hbox_new(FALSE, 5);
392 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
393 gtk_widget_show(hbox); 478 gtk_widget_show(hbox);
394 479
395 button = picture_button(mod, _("Cancel"), cancel_xpm); 480 button = picture_button(mod, _("Cancel"), cancel_xpm);
396 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); 481 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
397 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u); 482 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u);
402 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u); 487 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u);
403 gtk_widget_show(button); 488 gtk_widget_show(button);
404 489
405 if (u) { 490 if (u) {
406 u->mod = mod; 491 u->mod = mod;
407 u->name = name; 492 u->main = frame; /* ha, get it? :) */
408 u->pass = pass;
409 u->tmp_options = u->options; 493 u->tmp_options = u->options;
410 gtk_entry_set_text(GTK_ENTRY(name), u->username);
411 gtk_entry_set_text(GTK_ENTRY(pass), u->password);
412 gtk_entry_set_editable(GTK_ENTRY(name), FALSE);
413 } else { 494 } else {
414 newmod = mod; 495 newmod = mod;
415 tmpusr.name = name; 496 newmain = frame;
416 tmpusr.pass = pass;
417 } 497 }
418 498
419 gtk_widget_show(mod); 499 gtk_widget_show(mod);
420 } 500 }
421 501