Mercurial > pidgin
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 |