comparison console/gntstatus.c @ 14126:b71bfeaaed58

[gaim-migrate @ 16764] Add a savedstatus dialog, and a "status" command to bring it up. You an also select "Saved..." from the dropdown in the buddylist. The 'Add' and 'Edit' buttons don't do anything yet. They will probably get to work some time tomorrow. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Tue, 15 Aug 2006 06:21:39 +0000
parents
children 2c85b0f97dd0
comparison
equal deleted inserted replaced
14125:7dfa024c1a4a 14126:b71bfeaaed58
1 #include <gnt.h>
2 #include <gntbox.h>
3 #include <gntbutton.h>
4 #include <gntentry.h>
5 #include <gntlabel.h>
6 #include <gnttree.h>
7
8 #include <request.h>
9
10 #include "gntgaim.h"
11 #include "gntstatus.h"
12
13 static struct
14 {
15 GntWidget *window;
16 GntWidget *tree;
17 } statuses;
18
19 static void
20 reset_status_window(GntWidget *widget, gpointer null)
21 {
22 statuses.window = NULL;
23 statuses.tree = NULL;
24 }
25
26 static void
27 populate_statuses(GntTree *tree)
28 {
29 const GList *list;
30
31 for (list = gaim_savedstatuses_get_all(); list; list = list->next)
32 {
33 GaimSavedStatus *saved = list->data;
34 const char *title, *type, *message;
35
36 if (gaim_savedstatus_is_transient(saved))
37 continue;
38
39 title = gaim_savedstatus_get_title(saved);
40 type = gaim_primitive_get_name_from_type(gaim_savedstatus_get_type(saved));
41 message = gaim_savedstatus_get_message(saved); /* XXX: Strip possible markups */
42
43 gnt_tree_add_row_last(tree, saved,
44 gnt_tree_create_row(tree, title, type, message), NULL);
45 }
46 }
47
48 static void
49 really_delete_status(GaimSavedStatus *saved)
50 {
51 /* XXX: Close any modify dialog opened for the savedstatus */
52 if (statuses.tree)
53 gnt_tree_remove(GNT_TREE(statuses.tree), saved);
54
55 gaim_savedstatus_delete(gaim_savedstatus_get_title(saved));
56 }
57
58 static void
59 ask_before_delete(GntWidget *button, gpointer null)
60 {
61 char *ask;
62 GaimSavedStatus *saved;
63
64 g_return_if_fail(statuses.tree != NULL);
65
66 saved = gnt_tree_get_selection_data(GNT_TREE(statuses.tree));
67 ask = g_strdup_printf(_("Are you sure you want to delete \"%s\""),
68 gaim_savedstatus_get_title(saved));
69
70 gaim_request_action(saved, _("Delete Status"), ask, NULL, 0, saved, 2,
71 _("Delete"), really_delete_status, _("Cancel"), NULL);
72 g_free(ask);
73 }
74
75 static void
76 use_savedstatus_cb(GntWidget *widget, gpointer null)
77 {
78 g_return_if_fail(statuses.tree != NULL);
79
80 gaim_savedstatus_activate(gnt_tree_get_selection_data(GNT_TREE(statuses.tree)));
81 }
82
83 void gg_savedstatus_show_all()
84 {
85 GntWidget *window, *tree, *box, *button;
86 if (statuses.window)
87 return;
88
89 statuses.window = window = gnt_vbox_new(FALSE);
90 gnt_box_set_toplevel(GNT_BOX(window), TRUE);
91 gnt_box_set_title(GNT_BOX(window), _("Saved Statuses"));
92 gnt_box_set_fill(GNT_BOX(window), FALSE);
93 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID);
94 gnt_box_set_pad(GNT_BOX(window), 0);
95
96 /* XXX: Add some sorting function to sort alphabetically, perhaps */
97 statuses.tree = tree = gnt_tree_new_with_columns(3);
98 gnt_tree_set_column_titles(GNT_TREE(tree), _("Title"), _("Type"), _("Message"));
99 gnt_tree_set_show_title(GNT_TREE(tree), TRUE);
100 gnt_tree_set_col_width(GNT_TREE(tree), 0, 25);
101 gnt_tree_set_col_width(GNT_TREE(tree), 1, 12);
102 gnt_tree_set_col_width(GNT_TREE(tree), 2, 35);
103 gnt_box_add_widget(GNT_BOX(window), tree);
104
105 populate_statuses(GNT_TREE(tree));
106
107 box = gnt_hbox_new(FALSE);
108 gnt_box_add_widget(GNT_BOX(window), box);
109
110 button = gnt_button_new(_("Use"));
111 gnt_box_add_widget(GNT_BOX(box), button);
112 g_signal_connect(G_OBJECT(button), "activate",
113 G_CALLBACK(use_savedstatus_cb), NULL);
114
115 button = gnt_button_new(_("Add"));
116 gnt_box_add_widget(GNT_BOX(box), button);
117
118 button = gnt_button_new(_("Edit"));
119 gnt_box_add_widget(GNT_BOX(box), button);
120
121 button = gnt_button_new(_("Delete"));
122 gnt_box_add_widget(GNT_BOX(box), button);
123 g_signal_connect(G_OBJECT(button), "activate",
124 G_CALLBACK(ask_before_delete), NULL);
125
126 button = gnt_button_new(_("Close"));
127 gnt_box_add_widget(GNT_BOX(box), button);
128 g_signal_connect_swapped(G_OBJECT(button), "activate",
129 G_CALLBACK(gnt_widget_destroy), window);
130
131 g_signal_connect(G_OBJECT(window), "destroy",
132 G_CALLBACK(reset_status_window), NULL);
133 gnt_widget_show(window);
134 }
135
136 void gg_savedstatus_edit(GaimSavedStatus *saved)
137 {
138 }
139