Mercurial > pidgin.yaz
comparison console/gntaccount.c @ 13943:25be562aaca8
[gaim-migrate @ 16480]
New widget GntLine to use as a separator.
A partial dialog for add-account callback. Updating the dialog
as a result of selection-change in the prpl dropdown is way ickier
than I had expected it to be. It 'works' now, but quite a bit
quirky. I will try to smooth things up later, perhaps next week.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 10 Jul 2006 23:55:24 +0000 |
parents | ef0d515b9f97 |
children | 0a0d2a1fd2bc |
comparison
equal
deleted
inserted
replaced
13942:b14fdab68eac | 13943:25be562aaca8 |
---|---|
1 #include <gnt.h> | 1 #include <gnt.h> |
2 #include <gntbox.h> | 2 #include <gntbox.h> |
3 #include <gntbutton.h> | 3 #include <gntbutton.h> |
4 #include <gntcombobox.h> | |
5 #include <gntentry.h> | |
4 #include <gntlabel.h> | 6 #include <gntlabel.h> |
7 #include <gntline.h> | |
5 #include <gnttree.h> | 8 #include <gnttree.h> |
6 | 9 |
10 #include <account.h> | |
11 #include <accountopt.h> | |
7 #include <connection.h> | 12 #include <connection.h> |
8 #include <notify.h> | 13 #include <notify.h> |
14 #include <plugin.h> | |
9 #include <request.h> | 15 #include <request.h> |
10 | 16 |
11 #include "gntaccount.h" | 17 #include "gntaccount.h" |
12 #include "gntgaim.h" | 18 #include "gntgaim.h" |
13 | 19 |
17 GntWidget *tree; | 23 GntWidget *tree; |
18 } GGAccountList; | 24 } GGAccountList; |
19 | 25 |
20 static GGAccountList accounts; | 26 static GGAccountList accounts; |
21 | 27 |
28 typedef struct | |
29 { | |
30 GaimAccount *account; /* NULL for a new account */ | |
31 | |
32 GntWidget *window; | |
33 | |
34 GntWidget *protocol; | |
35 GntWidget *screenname; | |
36 GntWidget *password; | |
37 GntWidget *alias; | |
38 | |
39 GntWidget *splits; | |
40 GList *split_entries; | |
41 } AccountEditDialog; | |
42 | |
43 static void | |
44 edit_dialog_destroy(AccountEditDialog *dialog) | |
45 { | |
46 g_free(dialog); | |
47 } | |
48 | |
49 static void | |
50 save_account_cb(AccountEditDialog *dialog) | |
51 { | |
52 } | |
53 | |
54 static void | |
55 update_user_splits(AccountEditDialog *dialog) | |
56 { | |
57 GntWidget *hbox; | |
58 GaimPlugin *plugin; | |
59 GaimPluginProtocolInfo *prplinfo; | |
60 GList *iter; | |
61 char *username = NULL; | |
62 | |
63 if (dialog->splits) | |
64 { | |
65 gnt_box_remove_all(GNT_BOX(dialog->splits)); | |
66 g_list_free(dialog->split_entries); | |
67 } | |
68 else | |
69 { | |
70 dialog->splits = gnt_box_new(FALSE, TRUE); | |
71 gnt_box_set_pad(GNT_BOX(dialog->splits), 0); | |
72 } | |
73 | |
74 dialog->split_entries = NULL; | |
75 | |
76 plugin = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(dialog->protocol)); | |
77 if (!plugin) | |
78 return; | |
79 prplinfo = GAIM_PLUGIN_PROTOCOL_INFO(plugin); | |
80 | |
81 username = g_strdup(gaim_account_get_username(dialog->account)); | |
82 | |
83 for (iter = prplinfo->user_splits; iter; iter = iter->next) | |
84 { | |
85 GaimAccountUserSplit *split = iter->data; | |
86 GntWidget *entry; | |
87 char *buf; | |
88 | |
89 hbox = gnt_box_new(TRUE, FALSE); | |
90 gnt_box_add_widget(GNT_BOX(dialog->splits), hbox); | |
91 | |
92 buf = g_strdup_printf("%s:", gaim_account_user_split_get_text(split)); | |
93 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(buf)); | |
94 | |
95 entry = gnt_entry_new(NULL); | |
96 gnt_box_add_widget(GNT_BOX(hbox), entry); | |
97 | |
98 dialog->split_entries = g_list_append(dialog->split_entries, entry); | |
99 g_free(buf); | |
100 } | |
101 | |
102 /* XXX: Add default/custom values to the splits */ | |
103 g_free(username); | |
104 } | |
105 | |
106 static void | |
107 prpl_changed_cb(GntWidget *combo, GaimPlugin *old, GaimPlugin *new, AccountEditDialog *dialog) | |
108 { | |
109 update_user_splits(dialog); | |
110 gnt_box_readjust(GNT_BOX(dialog->window)); | |
111 gnt_widget_draw(dialog->window); | |
112 } | |
113 | |
114 static void | |
115 add_account(GntWidget *b, gpointer null) | |
116 { | |
117 GntWidget *window, *hbox; | |
118 GntWidget *combo, *button, *entry; | |
119 GList *list, *iter; | |
120 AccountEditDialog *dialog; | |
121 | |
122 dialog = g_new0(AccountEditDialog, 1); | |
123 | |
124 dialog->window = window = gnt_box_new(FALSE, TRUE); | |
125 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
126 gnt_box_set_title(GNT_BOX(window), _("New Account")); | |
127 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); | |
128 gnt_box_set_pad(GNT_BOX(window), 0); | |
129 | |
130 hbox = gnt_box_new(TRUE, FALSE); | |
131 gnt_box_add_widget(GNT_BOX(window), hbox); | |
132 gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); | |
133 | |
134 dialog->protocol = combo = gnt_combo_box_new(); | |
135 list = gaim_plugins_get_protocols(); | |
136 for (iter = list; iter; iter = iter->next) | |
137 { | |
138 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), iter->data, | |
139 ((GaimPlugin*)iter->data)->info->name); | |
140 } | |
141 g_signal_connect(G_OBJECT(combo), "selection-changed", G_CALLBACK(prpl_changed_cb), dialog); | |
142 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Protocol:"))); | |
143 gnt_box_add_widget(GNT_BOX(hbox), combo); | |
144 | |
145 hbox = gnt_box_new(TRUE, FALSE); | |
146 gnt_box_add_widget(GNT_BOX(window), hbox); | |
147 | |
148 dialog->screenname = entry = gnt_entry_new(NULL); | |
149 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Screen name:"))); | |
150 gnt_box_add_widget(GNT_BOX(hbox), entry); | |
151 | |
152 /* User splits */ | |
153 update_user_splits(dialog); | |
154 gnt_box_add_widget(GNT_BOX(window), dialog->splits); | |
155 | |
156 hbox = gnt_box_new(TRUE, FALSE); | |
157 gnt_box_add_widget(GNT_BOX(window), hbox); | |
158 | |
159 dialog->password = entry = gnt_entry_new(NULL); | |
160 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Password:"))); | |
161 gnt_box_add_widget(GNT_BOX(hbox), entry); | |
162 | |
163 hbox = gnt_box_new(TRUE, FALSE); | |
164 gnt_box_add_widget(GNT_BOX(window), hbox); | |
165 | |
166 dialog->alias = entry = gnt_entry_new(NULL); | |
167 gnt_box_add_widget(GNT_BOX(hbox), gnt_label_new(_("Alias:"))); | |
168 gnt_box_add_widget(GNT_BOX(hbox), entry); | |
169 | |
170 gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); | |
171 | |
172 hbox = gnt_box_new(FALSE, FALSE); | |
173 gnt_box_add_widget(GNT_BOX(window), hbox); | |
174 | |
175 button = gnt_button_new(_("Cancel")); | |
176 gnt_box_add_widget(GNT_BOX(hbox), button); | |
177 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), window); | |
178 | |
179 button = gnt_button_new(_("Save")); | |
180 gnt_box_add_widget(GNT_BOX(hbox), button); | |
181 g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(save_account_cb), dialog); | |
182 | |
183 g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(edit_dialog_destroy), dialog); | |
184 | |
185 gnt_widget_show(window); | |
186 } | |
187 | |
22 static void | 188 static void |
23 account_toggled(GntWidget *widget, void *key, gpointer null) | 189 account_toggled(GntWidget *widget, void *key, gpointer null) |
24 { | 190 { |
25 GaimAccount *account = key; | 191 GaimAccount *account = key; |
26 | 192 |
30 void gg_accounts_init() | 196 void gg_accounts_init() |
31 { | 197 { |
32 GList *iter; | 198 GList *iter; |
33 GntWidget *box, *button; | 199 GntWidget *box, *button; |
34 | 200 |
35 accounts.window = gnt_box_new(TRUE, TRUE); | 201 accounts.window = gnt_box_new(FALSE, TRUE); |
36 gnt_box_set_toplevel(GNT_BOX(accounts.window), TRUE); | 202 gnt_box_set_toplevel(GNT_BOX(accounts.window), TRUE); |
37 gnt_box_set_title(GNT_BOX(accounts.window), _("Accounts")); | 203 gnt_box_set_title(GNT_BOX(accounts.window), _("Accounts")); |
38 gnt_box_set_pad(GNT_BOX(accounts.window), 0); | 204 gnt_box_set_pad(GNT_BOX(accounts.window), 0); |
205 gnt_box_set_alignment(GNT_BOX(accounts.window), GNT_ALIGN_MID); | |
39 gnt_widget_set_name(accounts.window, "accounts"); | 206 gnt_widget_set_name(accounts.window, "accounts"); |
40 | 207 |
41 gnt_box_add_widget(GNT_BOX(accounts.window), | 208 gnt_box_add_widget(GNT_BOX(accounts.window), |
42 gnt_label_new(_("You can enable/disable accounts from the following list."))); | 209 gnt_label_new(_("You can enable/disable accounts from the following list."))); |
210 | |
211 gnt_box_add_widget(GNT_BOX(accounts.window), gnt_line_new(FALSE)); | |
43 | 212 |
44 accounts.tree = gnt_tree_new(); | 213 accounts.tree = gnt_tree_new(); |
45 GNT_WIDGET_SET_FLAGS(accounts.tree, GNT_WIDGET_NO_BORDER); | 214 GNT_WIDGET_SET_FLAGS(accounts.tree, GNT_WIDGET_NO_BORDER); |
46 | 215 |
47 for (iter = gaim_accounts_get_all(); iter; iter = iter->next) | 216 for (iter = gaim_accounts_get_all(); iter; iter = iter->next) |
60 g_signal_connect(G_OBJECT(accounts.tree), "toggled", G_CALLBACK(account_toggled), NULL); | 229 g_signal_connect(G_OBJECT(accounts.tree), "toggled", G_CALLBACK(account_toggled), NULL); |
61 | 230 |
62 gnt_widget_set_size(accounts.tree, 40, 10); | 231 gnt_widget_set_size(accounts.tree, 40, 10); |
63 gnt_box_add_widget(GNT_BOX(accounts.window), accounts.tree); | 232 gnt_box_add_widget(GNT_BOX(accounts.window), accounts.tree); |
64 | 233 |
234 gnt_box_add_widget(GNT_BOX(accounts.window), gnt_line_new(FALSE)); | |
235 | |
65 box = gnt_box_new(FALSE, FALSE); | 236 box = gnt_box_new(FALSE, FALSE); |
66 | 237 |
67 button = gnt_button_new(_("Add")); | 238 button = gnt_button_new(_("Add")); |
68 gnt_box_add_widget(GNT_BOX(box), button); | 239 gnt_box_add_widget(GNT_BOX(box), button); |
240 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(add_account), NULL); | |
69 | 241 |
70 button = gnt_button_new(_("Modify")); | 242 button = gnt_button_new(_("Modify")); |
71 gnt_box_add_widget(GNT_BOX(box), button); | 243 gnt_box_add_widget(GNT_BOX(box), button); |
72 | 244 |
73 button = gnt_button_new(_("Delete")); | 245 button = gnt_button_new(_("Delete")); |