blob: 89719e03d1b017556f32df2ad1edef91e0f9c7ba [file] [log] [blame]
Stepan Salenikovich61cbab02015-03-16 18:35:10 -04001/*
Guillaume Roguez77c579d2018-01-30 15:54:02 -05002 * Copyright (C) 2015-2018 Savoir-faire Linux Inc.
Stepan Salenikovich61cbab02015-03-16 18:35:10 -04003 * Author: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040018 */
19
20#include "accountgeneraltab.h"
21
22#include <gtk/gtk.h>
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -040023#include <glib/gi18n.h>
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040024#include <account.h>
aviau9bbb19b2016-05-16 15:53:44 -040025#include "defines.h"
26#include "utils/models.h"
aviau2da3d9c2016-09-06 11:28:36 -040027#include "usernameregistrationbox.h"
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040028
29struct _AccountGeneralTab
30{
31 GtkBox parent;
32};
33
34struct _AccountGeneralTabClass
35{
36 GtkBoxClass parent_class;
37};
38
39typedef struct _AccountGeneralTabPrivate AccountGeneralTabPrivate;
40
41struct _AccountGeneralTabPrivate
42{
43 Account *account;
44 GtkWidget *grid_account;
Sébastien Blin1e191dc2018-02-28 11:14:34 -050045 GtkWidget* frame_parameters;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040046 GtkWidget *grid_parameters;
Stepan Salenikovichbd029582015-03-24 11:00:56 -040047
Sébastien Blinc50a8a32017-09-22 10:13:12 -040048 GtkWidget* entry_current_password;
49 GtkWidget* entry_new_password;
50 GtkWidget* entry_confirm_password;
51 GtkWidget* button_validate_password;
52 GtkWidget* label_error_change_passowrd;
53
Sébastien Blinb5da5ab2018-02-27 16:46:20 -050054 GtkWidget* button_choose_file;
55 GtkWidget* label_export_informations;
56
Stepan Salenikovichbd029582015-03-24 11:00:56 -040057 QMetaObject::Connection account_updated;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040058};
59
60G_DEFINE_TYPE_WITH_PRIVATE(AccountGeneralTab, account_general_tab, GTK_TYPE_BOX);
61
62#define ACCOUNT_GENERAL_TAB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ACCOUNT_GENERAL_TAB_TYPE, AccountGeneralTabPrivate))
63
64static void
65account_general_tab_dispose(GObject *object)
66{
Stepan Salenikovichbd029582015-03-24 11:00:56 -040067 AccountGeneralTab *view = ACCOUNT_GENERAL_TAB(object);
68 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
69
70 QObject::disconnect(priv->account_updated);
71
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040072 G_OBJECT_CLASS(account_general_tab_parent_class)->dispose(object);
73}
74
75static void
76account_general_tab_init(AccountGeneralTab *view)
77{
78 gtk_widget_init_template(GTK_WIDGET(view));
79}
80
81static void
82account_general_tab_class_init(AccountGeneralTabClass *klass)
83{
84 G_OBJECT_CLASS(klass)->dispose = account_general_tab_dispose;
85
86 gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS (klass),
87 "/cx/ring/RingGnome/accountgeneraltab.ui");
88
89 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_account);
Sébastien Blin1e191dc2018-02-28 11:14:34 -050090 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, frame_parameters);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040091 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_parameters);
Sébastien Blinc50a8a32017-09-22 10:13:12 -040092
93 /* change password view */
94 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, entry_current_password);
95 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, entry_new_password);
96 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, entry_confirm_password);
97 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, button_validate_password);
98 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, label_error_change_passowrd);
99
Sébastien Blinb5da5ab2018-02-27 16:46:20 -0500100 /* export account */
101 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, button_choose_file);
102 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, label_export_informations);
103
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400104}
105
106static void
107account_alias_changed(GtkEditable *entry, AccountGeneralTab *view)
108{
109 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
110 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
111 priv->account->setAlias(QString(gtk_editable_get_chars(entry, 0, -1)));
Stepan Salenikovich75a39172015-07-10 13:21:08 -0400112 if (priv->account->protocol() == Account::Protocol::RING)
113 priv->account->setDisplayName(gtk_entry_get_text(GTK_ENTRY(entry)));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400114}
115
116static void
117account_hostname_changed(GtkEditable *entry, AccountGeneralTab *view)
118{
119 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
120 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
121 priv->account->setHostname(QString(gtk_editable_get_chars(entry, 0, -1)));
122}
123
124static void
125account_username_changed(GtkEditable *entry, AccountGeneralTab *view)
126{
127 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
128 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
129 priv->account->setUsername(QString(gtk_editable_get_chars(entry, 0, -1)));
130}
131
132static void
133account_password_changed(GtkEditable *entry, AccountGeneralTab *view)
134{
135 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
136 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
137 priv->account->setPassword(QString(gtk_editable_get_chars(entry, 0, -1)));
138}
139
140static void
141show_password(GtkToggleButton *checkbutton, GtkEntry *entry)
142{
143 gtk_entry_set_visibility(GTK_ENTRY(entry), gtk_toggle_button_get_active(checkbutton));
144}
145
146static void
147account_proxy_changed(GtkEditable *entry, AccountGeneralTab *view)
148{
149 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
150 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
151 priv->account->setProxy(QString(gtk_editable_get_chars(entry, 0, -1)));
152}
153
154static void
155account_mailbox_changed(GtkEditable *entry, AccountGeneralTab *view)
156{
157 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
158 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
159 priv->account->setMailbox(QString(gtk_editable_get_chars(entry, 0, -1)));
160}
161
162static void
Sébastien Blinc50a8a32017-09-22 10:13:12 -0400163reset_change_password(AccountGeneralTab *view)
164{
165 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
166 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
167 gtk_label_set_text(GTK_LABEL(priv->label_error_change_passowrd), "");
168 gtk_button_set_label(GTK_BUTTON(priv->button_validate_password), _("Change password"));
169}
170
Sébastien Blinb5da5ab2018-02-27 16:46:20 -0500171
172static void
173choose_export_file(AccountGeneralTab *view)
174{
175 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
176 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
177 // Sauvegarder path
178 GtkWidget* dialog;
179 GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
180 gint res;
181 gchar* filename = nullptr;
182
183 dialog = gtk_file_chooser_dialog_new(_("Save File"),
184 GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view))),
185 action,
186 _("_Cancel"),
187 GTK_RESPONSE_CANCEL,
188 _("_Save"),
189 GTK_RESPONSE_ACCEPT,
190 nullptr);
191
192 std::string alias = priv->account->alias().toLocal8Bit().constData();
193 std::string uri = alias.empty()? "export.gz" : alias + ".gz";
194 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), uri.c_str());
195 res = gtk_dialog_run (GTK_DIALOG(dialog));
196
197 if (res == GTK_RESPONSE_ACCEPT) {
198 auto chooser = GTK_FILE_CHOOSER(dialog);
199 filename = gtk_file_chooser_get_filename(chooser);
200 }
201 gtk_widget_destroy (dialog);
202
203 if (!filename) return;
204
205 // export account
206 priv->account->exportToFile(filename);
207 // Set informations label
208 std::string label = std::string(_("File exported to destination: ")) + std::string(filename);
209 gtk_label_set_text(GTK_LABEL(priv->label_export_informations), label.c_str());
210}
211
Sébastien Blinc50a8a32017-09-22 10:13:12 -0400212static void
213change_password(AccountGeneralTab *view)
214{
215 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
216 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
217
218 std::string current_password = gtk_entry_get_text(GTK_ENTRY(priv->entry_current_password));
219 std::string new_password = gtk_entry_get_text(GTK_ENTRY(priv->entry_new_password));
220 std::string confirm_password = gtk_entry_get_text(GTK_ENTRY(priv->entry_confirm_password));
221 if (new_password != confirm_password) {
222 gtk_label_set_text(GTK_LABEL(priv->label_error_change_passowrd), _("New password and its confirmation are different"));
223 return;
224 }
225 if (priv->account->changePassword(current_password.c_str(), new_password.c_str())) {
226 gtk_label_set_text(GTK_LABEL(priv->label_error_change_passowrd), "");
227 gtk_entry_set_text(GTK_ENTRY(priv->entry_current_password), "");
228 gtk_entry_set_text(GTK_ENTRY(priv->entry_new_password), "");
229 gtk_entry_set_text(GTK_ENTRY(priv->entry_confirm_password), "");
230 // NOTE: can't use account->archiveHasPassword here, because the account is not updated.
231 gtk_widget_set_visible(priv->entry_current_password, !new_password.empty());
232 gtk_button_set_label(GTK_BUTTON(priv->button_validate_password), _("Password changed!"));
233 } else {
234 gtk_button_set_label(GTK_BUTTON(priv->button_validate_password), _("Change password"));
235 gtk_label_set_text(GTK_LABEL(priv->label_error_change_passowrd), _("Incorrect password"));
236 }
237
238}
239
240static void
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400241build_tab_view(AccountGeneralTab *view)
242{
243 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
244 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
245
246 int grid_row = 0;
247 GtkWidget *label = NULL;
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400248
249 /* separate pointers for each so that we reference them in the account changed callback */
250 GtkWidget *entry_alias = NULL;
251 GtkWidget *entry_username = NULL;
252 GtkWidget *entry_hostname = NULL;
253 GtkWidget *entry_password = NULL;
254 GtkWidget *entry_proxy = NULL;
255 GtkWidget *entry_voicemail = NULL;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400256
257 /* build account grid */
258
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400259 /* account alias */
260 label = gtk_label_new(_("Alias"));
261 gtk_widget_set_halign(label, GTK_ALIGN_START);
262 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
263 entry_alias = gtk_entry_new();
264 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
265 gtk_widget_set_halign(entry_alias, GTK_ALIGN_START);
266 g_signal_connect(entry_alias, "changed", G_CALLBACK(account_alias_changed), view);
267 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_alias, 1, grid_row, 1, 1);
268 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400269
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400270 /* account type */
271 label = gtk_label_new(_("Type"));
272 gtk_widget_set_halign(label, GTK_ALIGN_START);
273 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400274
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400275 label = gtk_label_new("");
276 gtk_widget_set_halign(label, GTK_ALIGN_START);
277 switch (priv->account->protocol()) {
278 case Account::Protocol::SIP:
279 gtk_label_set_text(GTK_LABEL(label), "SIP");
280 break;
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400281 case Account::Protocol::RING:
282 gtk_label_set_text(GTK_LABEL(label), "RING");
283 break;
284 case Account::Protocol::COUNT__:
285 break;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400286 }
287
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400288 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 1, grid_row, 1, 1);
289 ++grid_row;
290
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400291 if (priv->account->protocol() == Account::Protocol::RING) {
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400292 label = gtk_label_new("RingID");
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400293 gtk_widget_set_halign(label, GTK_ALIGN_START);
294 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400295 entry_username = gtk_entry_new();
aviau2da3d9c2016-09-06 11:28:36 -0400296 gtk_widget_set_halign(entry_username, GTK_ALIGN_START);
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400297 gtk_entry_set_placeholder_text(GTK_ENTRY(entry_username), _("auto-generating..."));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400298 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
299 g_object_set(G_OBJECT(entry_username), "editable", FALSE, NULL);
300 g_object_set(G_OBJECT(entry_username), "max-width-chars", 50, NULL);
Houmin68293822017-05-16 12:13:55 +0800301 PangoAttrList *attrs = pango_attr_list_new();
302 PangoAttribute *font_desc = pango_attr_font_desc_new(pango_font_description_from_string("monospace"));
303 pango_attr_list_insert(attrs, font_desc);
304 gtk_entry_set_attributes(GTK_ENTRY(entry_username), attrs);
305 pango_attr_list_unref(attrs);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400306 gtk_entry_set_alignment(GTK_ENTRY(entry_username), 0.5);
307 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400308 ++grid_row;
aviau2da3d9c2016-09-06 11:28:36 -0400309
aviauaf7d6bb2016-11-09 16:41:53 -0500310 label = gtk_label_new(_("Username"));
aviau2da3d9c2016-09-06 11:28:36 -0400311 gtk_widget_set_halign(label, GTK_ALIGN_START);
312 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
313 auto username_registration_box = username_registration_box_new(priv->account, TRUE);
314 gtk_grid_attach(GTK_GRID(priv->grid_account), username_registration_box, 1, grid_row, 2, 2);
315 grid_row+=2;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400316 }
317
318 gtk_widget_show_all(priv->grid_account);
319
320 /* build parameters grid */
321 grid_row = 0;
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400322 if (priv->account->protocol() != Account::Protocol::RING) {
Stepan Salenikovich1a468b92016-06-30 10:46:21 -0400323 /* SIP account */
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400324
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400325 /* host name */
326 label = gtk_label_new(_("Hostname"));
327 gtk_widget_set_halign(label, GTK_ALIGN_START);
328 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
329 entry_hostname = gtk_entry_new();
330 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
331 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
332 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
333 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400334
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400335 /* user name */
336 label = gtk_label_new(_("Username"));
337 gtk_widget_set_halign(label, GTK_ALIGN_START);
338 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
339 entry_username = gtk_entry_new();
340 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
341 g_signal_connect(entry_username, "changed", G_CALLBACK(account_username_changed), view);
342 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_username, 1, grid_row, 1, 1);
343 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400344
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400345 /* password */
346 label = gtk_label_new(_("Password"));
347 gtk_widget_set_halign(label, GTK_ALIGN_START);
348 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
349 entry_password = gtk_entry_new();
350 gtk_entry_set_input_purpose(GTK_ENTRY(entry_password), GTK_INPUT_PURPOSE_PASSWORD);
351 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry_password), GTK_ENTRY_ICON_PRIMARY, "dialog-password");
352 gtk_entry_set_visibility(GTK_ENTRY(entry_password), FALSE);
353 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
354 g_signal_connect(entry_password, "changed", G_CALLBACK(account_password_changed), view);
355 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_password, 1, grid_row, 1, 1);
356 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400357
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400358 /* show password */
359 GtkWidget *checkbutton = gtk_check_button_new_with_label(_("Show password"));
360 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton, 1, grid_row, 1, 1);
361 g_signal_connect(checkbutton, "toggled", G_CALLBACK(show_password), entry_password);
362 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400363
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400364 /* proxy */
365 label = gtk_label_new(_("Proxy"));
366 gtk_widget_set_halign(label, GTK_ALIGN_START);
367 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
368 entry_proxy = gtk_entry_new();
369 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
370 g_signal_connect(entry_proxy, "changed", G_CALLBACK(account_proxy_changed), view);
371 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_proxy, 1, grid_row, 1, 1);
372 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400373
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400374 /* voicemail number */
375 label = gtk_label_new(_("Voicemail number"));
376 gtk_widget_set_halign(label, GTK_ALIGN_START);
377 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
378 entry_voicemail = gtk_entry_new();
379 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
380 g_signal_connect(entry_voicemail, "changed", G_CALLBACK(account_mailbox_changed), view);
381 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_voicemail, 1, grid_row, 1, 1);
382 ++grid_row;
Sébastien Blin1e191dc2018-02-28 11:14:34 -0500383
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400384 } else {
Sébastien Blin1e191dc2018-02-28 11:14:34 -0500385 gtk_widget_hide(priv->frame_parameters);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400386 }
Sébastien Blin1e191dc2018-02-28 11:14:34 -0500387 gtk_widget_show_all(priv->grid_parameters);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400388
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400389 /* update account parameters if model is updated */
390 priv->account_updated = QObject::connect(
391 priv->account,
392 &Account::changed,
393 [=] () {
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400394 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
395 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400396
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400397 if (priv->account->protocol() != Account::Protocol::RING) {
aviau9bbb19b2016-05-16 15:53:44 -0400398 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400399 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
400 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
401 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400402 }
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400403 }
404 );
405
Sébastien Blinc50a8a32017-09-22 10:13:12 -0400406 g_signal_connect_swapped(priv->button_validate_password, "clicked", G_CALLBACK(change_password), view);
407 g_signal_connect_swapped(priv->entry_current_password, "changed", G_CALLBACK(reset_change_password), view);
408 g_signal_connect_swapped(priv->entry_new_password, "changed", G_CALLBACK(reset_change_password), view);
409 g_signal_connect_swapped(priv->entry_confirm_password, "changed", G_CALLBACK(reset_change_password), view);
Sébastien Blinb5da5ab2018-02-27 16:46:20 -0500410 g_signal_connect_swapped(priv->button_choose_file, "clicked", G_CALLBACK(choose_export_file), view);
Sébastien Blinc50a8a32017-09-22 10:13:12 -0400411 gtk_widget_set_visible(priv->entry_current_password, priv->account->archiveHasPassword());
412
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400413}
414
415GtkWidget *
416account_general_tab_new(Account *account)
417{
418 g_return_val_if_fail(account != NULL, NULL);
419
420 gpointer view = g_object_new(ACCOUNT_GENERAL_TAB_TYPE, NULL);
421
422 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
423 priv->account = account;
424
425 build_tab_view(ACCOUNT_GENERAL_TAB(view));
426
427 return (GtkWidget *)view;
428}