blob: 08ac4e413a36f1950613b9fec4adfb72c55755ec [file] [log] [blame]
Stepan Salenikovich61cbab02015-03-16 18:35:10 -04001/*
Stepan Salenikovichbe87d2c2016-01-25 14:14:34 -05002 * Copyright (C) 2015-2016 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;
45 GtkWidget *grid_parameters;
Stepan Salenikovichbd029582015-03-24 11:00:56 -040046
47 QMetaObject::Connection account_updated;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040048};
49
50G_DEFINE_TYPE_WITH_PRIVATE(AccountGeneralTab, account_general_tab, GTK_TYPE_BOX);
51
52#define ACCOUNT_GENERAL_TAB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ACCOUNT_GENERAL_TAB_TYPE, AccountGeneralTabPrivate))
53
54static void
55account_general_tab_dispose(GObject *object)
56{
Stepan Salenikovichbd029582015-03-24 11:00:56 -040057 AccountGeneralTab *view = ACCOUNT_GENERAL_TAB(object);
58 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
59
60 QObject::disconnect(priv->account_updated);
61
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040062 G_OBJECT_CLASS(account_general_tab_parent_class)->dispose(object);
63}
64
65static void
66account_general_tab_init(AccountGeneralTab *view)
67{
68 gtk_widget_init_template(GTK_WIDGET(view));
69}
70
71static void
72account_general_tab_class_init(AccountGeneralTabClass *klass)
73{
74 G_OBJECT_CLASS(klass)->dispose = account_general_tab_dispose;
75
76 gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS (klass),
77 "/cx/ring/RingGnome/accountgeneraltab.ui");
78
79 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_account);
80 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_parameters);
81}
82
83static void
84account_alias_changed(GtkEditable *entry, AccountGeneralTab *view)
85{
86 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
87 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
88 priv->account->setAlias(QString(gtk_editable_get_chars(entry, 0, -1)));
Stepan Salenikovich75a39172015-07-10 13:21:08 -040089 if (priv->account->protocol() == Account::Protocol::RING)
90 priv->account->setDisplayName(gtk_entry_get_text(GTK_ENTRY(entry)));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040091}
92
93static void
aviau2da3d9c2016-09-06 11:28:36 -040094entry_name_service_url_changed(GtkEditable *entry, AccountGeneralTab *view)
95{
96 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
97 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
98 priv->account->setNameServiceURL(QString(gtk_editable_get_chars(entry, 0, -1)));
99}
100
101static void
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400102account_hostname_changed(GtkEditable *entry, AccountGeneralTab *view)
103{
104 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
105 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
106 priv->account->setHostname(QString(gtk_editable_get_chars(entry, 0, -1)));
107}
108
109static void
110account_username_changed(GtkEditable *entry, AccountGeneralTab *view)
111{
112 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
113 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
114 priv->account->setUsername(QString(gtk_editable_get_chars(entry, 0, -1)));
115}
116
117static void
118account_password_changed(GtkEditable *entry, AccountGeneralTab *view)
119{
120 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
121 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
122 priv->account->setPassword(QString(gtk_editable_get_chars(entry, 0, -1)));
123}
124
125static void
126show_password(GtkToggleButton *checkbutton, GtkEntry *entry)
127{
128 gtk_entry_set_visibility(GTK_ENTRY(entry), gtk_toggle_button_get_active(checkbutton));
129}
130
131static void
132account_proxy_changed(GtkEditable *entry, AccountGeneralTab *view)
133{
134 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
135 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
136 priv->account->setProxy(QString(gtk_editable_get_chars(entry, 0, -1)));
137}
138
139static void
140account_mailbox_changed(GtkEditable *entry, AccountGeneralTab *view)
141{
142 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
143 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
144 priv->account->setMailbox(QString(gtk_editable_get_chars(entry, 0, -1)));
145}
146
147static void
148auto_answer(GtkToggleButton *checkbutton, AccountGeneralTab *view)
149{
150 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
151 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
152 priv->account->setAutoAnswer(gtk_toggle_button_get_active(checkbutton));
153}
154
155static void
156upnp_enabled(GtkToggleButton *checkbutton, AccountGeneralTab *view)
157{
158 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
159 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
160 priv->account->setUpnpEnabled(gtk_toggle_button_get_active(checkbutton));
161}
162
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400163static void
164dtmf_set_rtp(GtkToggleButton *toggle_rtp, AccountGeneralTab *view)
165{
166 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
167 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
168 if (gtk_toggle_button_get_active(toggle_rtp)) {
169 g_debug("set DTMF over RTP");
170 priv->account->setDTMFType(DtmfType::OverRtp);
171 } else {
172 g_debug("set DTMF over SIP");
173 priv->account->setDTMFType(DtmfType::OverSip);
174 }
175}
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400176
177static void
178build_tab_view(AccountGeneralTab *view)
179{
180 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
181 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
182
183 int grid_row = 0;
184 GtkWidget *label = NULL;
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400185
186 /* separate pointers for each so that we reference them in the account changed callback */
187 GtkWidget *entry_alias = NULL;
188 GtkWidget *entry_username = NULL;
189 GtkWidget *entry_hostname = NULL;
190 GtkWidget *entry_password = NULL;
191 GtkWidget *entry_proxy = NULL;
192 GtkWidget *entry_voicemail = NULL;
193 GtkWidget *checkbutton_autoanswer = NULL;
194 GtkWidget *checkbutton_upnp = NULL;
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400195 GtkWidget *radiobutton_dtmf_rtp = NULL;
196 GtkWidget *radiobutton_dtmf_sip = NULL;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400197
198 /* build account grid */
199
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400200 /* account alias */
201 label = gtk_label_new(_("Alias"));
202 gtk_widget_set_halign(label, GTK_ALIGN_START);
203 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
204 entry_alias = gtk_entry_new();
205 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
206 gtk_widget_set_halign(entry_alias, GTK_ALIGN_START);
207 g_signal_connect(entry_alias, "changed", G_CALLBACK(account_alias_changed), view);
208 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_alias, 1, grid_row, 1, 1);
209 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400210
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400211 /* account type */
212 label = gtk_label_new(_("Type"));
213 gtk_widget_set_halign(label, GTK_ALIGN_START);
214 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400215
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400216 label = gtk_label_new("");
217 gtk_widget_set_halign(label, GTK_ALIGN_START);
218 switch (priv->account->protocol()) {
219 case Account::Protocol::SIP:
220 gtk_label_set_text(GTK_LABEL(label), "SIP");
221 break;
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400222 case Account::Protocol::RING:
223 gtk_label_set_text(GTK_LABEL(label), "RING");
224 break;
225 case Account::Protocol::COUNT__:
226 break;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400227 }
228
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400229 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 1, grid_row, 1, 1);
230 ++grid_row;
231
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400232 if (priv->account->protocol() == Account::Protocol::RING) {
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400233 label = gtk_label_new("RingID");
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400234 gtk_widget_set_halign(label, GTK_ALIGN_START);
235 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400236 entry_username = gtk_entry_new();
aviau2da3d9c2016-09-06 11:28:36 -0400237 gtk_widget_set_halign(entry_username, GTK_ALIGN_START);
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400238 gtk_entry_set_placeholder_text(GTK_ENTRY(entry_username), _("auto-generating..."));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400239 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
240 g_object_set(G_OBJECT(entry_username), "editable", FALSE, NULL);
241 g_object_set(G_OBJECT(entry_username), "max-width-chars", 50, NULL);
Houmin68293822017-05-16 12:13:55 +0800242 PangoAttrList *attrs = pango_attr_list_new();
243 PangoAttribute *font_desc = pango_attr_font_desc_new(pango_font_description_from_string("monospace"));
244 pango_attr_list_insert(attrs, font_desc);
245 gtk_entry_set_attributes(GTK_ENTRY(entry_username), attrs);
246 pango_attr_list_unref(attrs);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400247 gtk_entry_set_alignment(GTK_ENTRY(entry_username), 0.5);
248 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400249 ++grid_row;
aviau2da3d9c2016-09-06 11:28:36 -0400250
aviauaf7d6bb2016-11-09 16:41:53 -0500251 label = gtk_label_new(_("Username"));
aviau2da3d9c2016-09-06 11:28:36 -0400252 gtk_widget_set_halign(label, GTK_ALIGN_START);
253 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
254 auto username_registration_box = username_registration_box_new(priv->account, TRUE);
255 gtk_grid_attach(GTK_GRID(priv->grid_account), username_registration_box, 1, grid_row, 2, 2);
256 grid_row+=2;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400257 }
258
259 gtk_widget_show_all(priv->grid_account);
260
261 /* build parameters grid */
262 grid_row = 0;
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400263 if (priv->account->protocol() != Account::Protocol::RING) {
Stepan Salenikovich1a468b92016-06-30 10:46:21 -0400264 /* SIP account */
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400265
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400266 /* host name */
267 label = gtk_label_new(_("Hostname"));
268 gtk_widget_set_halign(label, GTK_ALIGN_START);
269 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
270 entry_hostname = gtk_entry_new();
271 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
272 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
273 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
274 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400275
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400276 /* user name */
277 label = gtk_label_new(_("Username"));
278 gtk_widget_set_halign(label, GTK_ALIGN_START);
279 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
280 entry_username = gtk_entry_new();
281 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
282 g_signal_connect(entry_username, "changed", G_CALLBACK(account_username_changed), view);
283 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_username, 1, grid_row, 1, 1);
284 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400285
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400286 /* password */
287 label = gtk_label_new(_("Password"));
288 gtk_widget_set_halign(label, GTK_ALIGN_START);
289 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
290 entry_password = gtk_entry_new();
291 gtk_entry_set_input_purpose(GTK_ENTRY(entry_password), GTK_INPUT_PURPOSE_PASSWORD);
292 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry_password), GTK_ENTRY_ICON_PRIMARY, "dialog-password");
293 gtk_entry_set_visibility(GTK_ENTRY(entry_password), FALSE);
294 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
295 g_signal_connect(entry_password, "changed", G_CALLBACK(account_password_changed), view);
296 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_password, 1, grid_row, 1, 1);
297 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400298
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400299 /* show password */
300 GtkWidget *checkbutton = gtk_check_button_new_with_label(_("Show password"));
301 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton, 1, grid_row, 1, 1);
302 g_signal_connect(checkbutton, "toggled", G_CALLBACK(show_password), entry_password);
303 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400304
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400305 /* proxy */
306 label = gtk_label_new(_("Proxy"));
307 gtk_widget_set_halign(label, GTK_ALIGN_START);
308 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
309 entry_proxy = gtk_entry_new();
310 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
311 g_signal_connect(entry_proxy, "changed", G_CALLBACK(account_proxy_changed), view);
312 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_proxy, 1, grid_row, 1, 1);
313 ++grid_row;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400314
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400315 /* voicemail number */
316 label = gtk_label_new(_("Voicemail number"));
317 gtk_widget_set_halign(label, GTK_ALIGN_START);
318 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
319 entry_voicemail = gtk_entry_new();
320 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
321 g_signal_connect(entry_voicemail, "changed", G_CALLBACK(account_mailbox_changed), view);
322 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_voicemail, 1, grid_row, 1, 1);
323 ++grid_row;
324 } else {
325 /* RING account */
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400326
aviau2da3d9c2016-09-06 11:28:36 -0400327 /* Name service */
328 label = gtk_label_new(_("Name service URL"));
329 gtk_widget_set_halign(label, GTK_ALIGN_START);
330 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
331 GtkWidget* entry_name_service_url = gtk_entry_new();
332 gtk_widget_set_halign(entry_name_service_url, GTK_ALIGN_START);
333 gtk_entry_set_text(GTK_ENTRY(entry_name_service_url), priv->account->nameServiceURL().toLocal8Bit().constData());
334 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_name_service_url, 1, grid_row, 1, 1);
335 g_signal_connect(entry_name_service_url, "changed", G_CALLBACK(entry_name_service_url_changed), view);
336 ++grid_row;
337
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400338 }
339
340 /* auto answer */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400341 checkbutton_autoanswer = gtk_check_button_new_with_label(_("Auto-answer calls"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400342 gtk_widget_set_halign(checkbutton_autoanswer, GTK_ALIGN_START);
343 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_autoanswer, 0, grid_row, 1, 1);
344 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
345 g_signal_connect(checkbutton_autoanswer, "toggled", G_CALLBACK(auto_answer), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400346 ++grid_row;
347
348 /* upnp */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400349 checkbutton_upnp = gtk_check_button_new_with_label(_("UPnP enabled"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400350 gtk_widget_set_halign(checkbutton_upnp, GTK_ALIGN_START);
351 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_upnp, 0, grid_row, 1, 1);
352 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
353 g_signal_connect(checkbutton_upnp, "toggled", G_CALLBACK(upnp_enabled), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400354 ++grid_row;
355
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400356 /* DTMF tone type */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400357 label = gtk_label_new(_("DTMF tone type:"));
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400358 gtk_widget_set_halign(label, GTK_ALIGN_START);
359 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
360
361 GtkWidget *dtmf_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
362 gtk_button_box_set_layout(GTK_BUTTON_BOX(dtmf_box), GTK_BUTTONBOX_START);
363 gtk_box_set_spacing(GTK_BOX(dtmf_box), 10);
364 radiobutton_dtmf_rtp = gtk_radio_button_new_with_label(NULL, "RTP");
365 radiobutton_dtmf_sip = gtk_radio_button_new_with_label_from_widget(
366 GTK_RADIO_BUTTON(radiobutton_dtmf_rtp),
367 "SIP");
368 gtk_toggle_button_set_active(
369 priv->account->DTMFType() == DtmfType::OverRtp ?
370 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
371 TRUE);
372 g_signal_connect(radiobutton_dtmf_rtp, "toggled", G_CALLBACK(dtmf_set_rtp), view);
373 gtk_box_pack_start(GTK_BOX(dtmf_box),
374 radiobutton_dtmf_rtp,
375 FALSE, TRUE, 0);
376 gtk_box_pack_start(GTK_BOX(dtmf_box),
377 radiobutton_dtmf_sip,
378 FALSE, TRUE, 0);
379 gtk_grid_attach(GTK_GRID(priv->grid_parameters), dtmf_box, 1, grid_row, 1, 1);
380 ++grid_row;
381
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400382 /* update account parameters if model is updated */
383 priv->account_updated = QObject::connect(
384 priv->account,
385 &Account::changed,
386 [=] () {
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400387 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
388 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400389
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400390 if (priv->account->protocol() != Account::Protocol::RING) {
aviau9bbb19b2016-05-16 15:53:44 -0400391 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400392 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
393 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
394 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400395 }
396
397 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
398 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400399 gtk_toggle_button_set_active(
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400400 priv->account->DTMFType() == DtmfType::OverRtp ?
401 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
Stepan Salenikovichfea84052016-05-13 16:32:51 -0400402 TRUE);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400403 }
404 );
405
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400406 gtk_widget_show_all(priv->grid_parameters);
407
408}
409
410GtkWidget *
411account_general_tab_new(Account *account)
412{
413 g_return_val_if_fail(account != NULL, NULL);
414
415 gpointer view = g_object_new(ACCOUNT_GENERAL_TAB_TYPE, NULL);
416
417 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
418 priv->account = account;
419
420 build_tab_view(ACCOUNT_GENERAL_TAB(view));
421
422 return (GtkWidget *)view;
423}