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"));