comparison src/gtksavedstatuses.c @ 10419:c9b1f3fac753

[gaim-migrate @ 11670] Added some GaimStatusPrimitive<-->text mapping functions Renamed the GaimStatusSaved data types to GaimSavedStatus Modifying a status will now bring up an editor thing with the correct values set committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 26 Dec 2004 02:03:14 +0000
parents bed2c96bc1fb
children 854c972ea863
comparison
equal deleted inserted replaced
10418:bed2c96bc1fb 10419:c9b1f3fac753
96 status_editor_save_cb(GtkButton *button, gpointer user_data) 96 status_editor_save_cb(GtkButton *button, gpointer user_data)
97 { 97 {
98 /* TODO: Save the status */ 98 /* TODO: Save the status */
99 } 99 }
100 100
101 /* TODO: Can this menu be created more automatically? */
102 static GtkWidget * 101 static GtkWidget *
103 create_status_type_menu() 102 create_status_type_menu(GaimStatusPrimitive type)
104 { 103 {
104 int i;
105 GtkWidget *dropdown; 105 GtkWidget *dropdown;
106 GtkWidget *menu; 106 GtkWidget *menu;
107 GtkWidget *item; 107 GtkWidget *item;
108 108
109 dropdown = gtk_option_menu_new(); 109 dropdown = gtk_option_menu_new();
110 menu = gtk_menu_new(); 110 menu = gtk_menu_new();
111 111
112 /* GAIM_STATUS_AVAILABLE */ 112 for (i = 0; i < GAIM_STATUS_NUM_PRIMITIVES; i++)
113 item = gtk_menu_item_new_with_label(_("Available")); 113 {
114 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 114 item = gtk_menu_item_new_with_label(gaim_primitive_get_name_from_type(i));
115 gtk_widget_show(item); 115 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
116 116 gtk_widget_show(item);
117 /* GAIM_STATUS_UNAVAILABLE */ 117 }
118 item = gtk_menu_item_new_with_label(_("Unavailable")); 118
119 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); 119 gtk_menu_set_active(GTK_MENU(menu), type);
120 gtk_widget_show(item);
121
122 /* GAIM_STATUS_HIDDEN */
123 item = gtk_menu_item_new_with_label(_("Hidden"));
124 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
125 gtk_widget_show(item);
126
127 /* GAIM_STATUS_AWAY */
128 item = gtk_menu_item_new_with_label(_("Away"));
129 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
130 gtk_widget_show(item);
131
132 /* GAIM_STATUS_EXTENDED_AWAY */
133 item = gtk_menu_item_new_with_label(_("Extended Away"));
134 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
135 gtk_widget_show(item);
136
137 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); 120 gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu);
138 gtk_widget_show(menu); 121 gtk_widget_show(menu);
139 122
140 return dropdown; 123 return dropdown;
141 } 124 }
232 for (l = gaim_accounts_get_all(); l != NULL; l = l->next) 215 for (l = gaim_accounts_get_all(); l != NULL; l = l->next)
233 status_editor_add_account(dialog, (GaimAccount *)l->data); 216 status_editor_add_account(dialog, (GaimAccount *)l->data);
234 } 217 }
235 218
236 void 219 void
237 gaim_gtk_status_editor_show(void) 220 gaim_gtk_status_editor_show(GaimSavedStatus *status)
238 { 221 {
239 StatusEditor *dialog; 222 StatusEditor *dialog;
240 GtkSizeGroup *sg; 223 GtkSizeGroup *sg;
241 GtkWidget *bbox; 224 GtkWidget *bbox;
242 GtkWidget *button; 225 GtkWidget *button;
282 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 265 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
283 gtk_widget_show(label); 266 gtk_widget_show(label);
284 gtk_size_group_add_widget(sg, label); 267 gtk_size_group_add_widget(sg, label);
285 268
286 entry = gtk_entry_new(); 269 entry = gtk_entry_new();
287 gtk_entry_set_text(GTK_ENTRY(entry), _("Out of the office")); 270 if (status != NULL)
271 gtk_entry_set_text(GTK_ENTRY(entry), gaim_savedstatus_get_title(status));
272 else
273 gtk_entry_set_text(GTK_ENTRY(entry), _("Out of the office"));
288 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); 274 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
289 gtk_widget_show(entry); 275 gtk_widget_show(entry);
290 276
291 /* Status type */ 277 /* Status type */
292 hbox = gtk_hbox_new(FALSE, 6); 278 hbox = gtk_hbox_new(FALSE, 6);
297 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); 283 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
298 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 284 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
299 gtk_widget_show(label); 285 gtk_widget_show(label);
300 gtk_size_group_add_widget(sg, label); 286 gtk_size_group_add_widget(sg, label);
301 287
302 dropdown = create_status_type_menu(); 288 if (status != NULL)
289 dropdown = create_status_type_menu(gaim_savedstatus_get_type(status));
290 else
291 dropdown = create_status_type_menu(GAIM_STATUS_AWAY);
303 gtk_box_pack_start(GTK_BOX(hbox), dropdown, TRUE, TRUE, 0); 292 gtk_box_pack_start(GTK_BOX(hbox), dropdown, TRUE, TRUE, 0);
304 gtk_widget_show(dropdown); 293 gtk_widget_show(dropdown);
305 294
306 /* Status message */ 295 /* Status message */
307 hbox = gtk_hbox_new(FALSE, 6); 296 hbox = gtk_hbox_new(FALSE, 6);
315 gtk_size_group_add_widget(sg, label); 304 gtk_size_group_add_widget(sg, label);
316 305
317 frame = gaim_gtk_create_imhtml(TRUE, &text, &toolbar); 306 frame = gaim_gtk_create_imhtml(TRUE, &text, &toolbar);
318 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); 307 gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
319 gtk_widget_show(frame); 308 gtk_widget_show(frame);
309
310 if (status != NULL)
311 gtk_imhtml_append_text(GTK_IMHTML(text),
312 gaim_savedstatus_get_message(status), 0);
320 313
321 /* Custom status message disclosure */ 314 /* Custom status message disclosure */
322 disclosure = gaim_disclosure_new(_("Use a different status for some accounts"), 315 disclosure = gaim_disclosure_new(_("Use a different status for some accounts"),
323 _("Use a different status for some accounts")); 316 _("Use a different status for some accounts"));
324 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0); 317 gtk_box_pack_start(GTK_BOX(vbox), disclosure, FALSE, FALSE, 0);
424 } 417 }
425 418
426 static void 419 static void
427 status_window_add_cb(GtkButton *button, gpointer user_data) 420 status_window_add_cb(GtkButton *button, gpointer user_data)
428 { 421 {
429 gaim_gtk_status_editor_show(); 422 gaim_gtk_status_editor_show(NULL);
430 } 423 }
431 424
432 static void 425 static void
433 status_window_modify_foreach(GtkTreeModel *model, GtkTreePath *path, 426 status_window_modify_foreach(GtkTreeModel *model, GtkTreePath *path,
434 GtkTreeIter *iter, gpointer user_data) 427 GtkTreeIter *iter, gpointer user_data)
435 { 428 {
436 const char *title; 429 const char *title;
437 GaimStatusSaved *status; 430 GaimSavedStatus *status;
438 431
439 gtk_tree_model_get(model, iter, STATUS_WINDOW_COLUMN_TITLE, &title, -1); 432 gtk_tree_model_get(model, iter, STATUS_WINDOW_COLUMN_TITLE, &title, -1);
440 433
441 status = gaim_savedstatuses_find(title); 434 status = gaim_savedstatus_find(title);
442 /* TODO: Need to show a status editor pre-populated with this status */ 435 gaim_gtk_status_editor_show(status);
443 } 436 }
444 437
445 static void 438 static void
446 status_window_modify_cb(GtkButton *button, gpointer user_data) 439 status_window_modify_cb(GtkButton *button, gpointer user_data)
447 { 440 {
459 GtkTreeIter iter; 452 GtkTreeIter iter;
460 453
461 if (status_window_find_savedstatus(&iter, title)) 454 if (status_window_find_savedstatus(&iter, title))
462 gtk_list_store_remove(status_window->model, &iter); 455 gtk_list_store_remove(status_window->model, &iter);
463 456
464 gaim_savedstatuses_delete(title); 457 gaim_savedstatus_delete(title);
465 458
466 g_free(title); 459 g_free(title);
467 } 460 }
468 461
469 static void 462 static void
518 static void 511 static void
519 populate_saved_status_list(StatusWindow *dialog) 512 populate_saved_status_list(StatusWindow *dialog)
520 { 513 {
521 GtkTreeIter iter; 514 GtkTreeIter iter;
522 const GList *saved_statuses; 515 const GList *saved_statuses;
523 GaimStatusSaved *saved_status; 516 GaimSavedStatus *saved_status;
524 char *message; 517 char *message;
525 518
526 gtk_list_store_clear(dialog->model); 519 gtk_list_store_clear(dialog->model);
527 520
528 for (saved_statuses = gaim_savedstatuses_get_all(); saved_statuses != NULL; 521 for (saved_statuses = gaim_savedstatuses_get_all(); saved_statuses != NULL;
529 saved_statuses = g_list_next(saved_statuses)) 522 saved_statuses = g_list_next(saved_statuses))
530 { 523 {
531 saved_status = (GaimStatusSaved *)saved_statuses->data; 524 saved_status = (GaimSavedStatus *)saved_statuses->data;
532 message = gaim_markup_strip_html(gaim_savedstatuses_get_message(saved_status)); 525 message = gaim_markup_strip_html(gaim_savedstatus_get_message(saved_status));
533 if (strlen(message) > 70) 526 if (strlen(message) > 70)
534 strcpy(&message[68], "..."); 527 strcpy(&message[68], "...");
535 528
536 gtk_list_store_append(dialog->model, &iter); 529 gtk_list_store_append(dialog->model, &iter);
537 gtk_list_store_set(dialog->model, &iter, 530 gtk_list_store_set(dialog->model, &iter,
538 STATUS_WINDOW_COLUMN_TITLE, gaim_savedstatuses_get_title(saved_status), 531 STATUS_WINDOW_COLUMN_TITLE, gaim_savedstatus_get_title(saved_status),
539 STATUS_WINDOW_COLUMN_MESSAGE, message, 532 STATUS_WINDOW_COLUMN_MESSAGE, message,
540 -1); 533 -1);
541 free(message); 534 free(message);
542 } 535 }
543 } 536 }