blob: 97d8cc9944e348ff1b106631286b04efdb98c617 [file] [log] [blame]
Stepan Salenikovich61cbab02015-03-16 18:35:10 -04001/*
2 * Copyright (C) 2015 Savoir-Faire Linux Inc.
3 * 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.
18 *
19 * Additional permission under GNU GPL version 3 section 7:
20 *
21 * If you modify this program, or any covered work, by linking or
22 * combining it with the OpenSSL project's OpenSSL library (or a
23 * modified version of that library), containing parts covered by the
24 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
25 * grants you additional permission to convey the resulting work.
26 * Corresponding Source for a non-source form of such a combination
27 * shall include the source code for the parts of OpenSSL used as well
28 * as that of the covered work.
29 */
30
31#include "accountgeneraltab.h"
32
33#include <gtk/gtk.h>
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -040034#include <glib/gi18n.h>
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040035#include <account.h>
36
37struct _AccountGeneralTab
38{
39 GtkBox parent;
40};
41
42struct _AccountGeneralTabClass
43{
44 GtkBoxClass parent_class;
45};
46
47typedef struct _AccountGeneralTabPrivate AccountGeneralTabPrivate;
48
49struct _AccountGeneralTabPrivate
50{
51 Account *account;
52 GtkWidget *grid_account;
53 GtkWidget *grid_parameters;
Stepan Salenikovichbd029582015-03-24 11:00:56 -040054
55 QMetaObject::Connection account_updated;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040056};
57
58G_DEFINE_TYPE_WITH_PRIVATE(AccountGeneralTab, account_general_tab, GTK_TYPE_BOX);
59
60#define ACCOUNT_GENERAL_TAB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ACCOUNT_GENERAL_TAB_TYPE, AccountGeneralTabPrivate))
61
62static void
63account_general_tab_dispose(GObject *object)
64{
Stepan Salenikovichbd029582015-03-24 11:00:56 -040065 AccountGeneralTab *view = ACCOUNT_GENERAL_TAB(object);
66 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
67
68 QObject::disconnect(priv->account_updated);
69
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040070 G_OBJECT_CLASS(account_general_tab_parent_class)->dispose(object);
71}
72
73static void
74account_general_tab_init(AccountGeneralTab *view)
75{
76 gtk_widget_init_template(GTK_WIDGET(view));
77}
78
79static void
80account_general_tab_class_init(AccountGeneralTabClass *klass)
81{
82 G_OBJECT_CLASS(klass)->dispose = account_general_tab_dispose;
83
84 gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS (klass),
85 "/cx/ring/RingGnome/accountgeneraltab.ui");
86
87 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_account);
88 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_parameters);
89}
90
91static void
92account_alias_changed(GtkEditable *entry, AccountGeneralTab *view)
93{
94 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
95 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
96 priv->account->setAlias(QString(gtk_editable_get_chars(entry, 0, -1)));
Stepan Salenikovich75a39172015-07-10 13:21:08 -040097 if (priv->account->protocol() == Account::Protocol::RING)
98 priv->account->setDisplayName(gtk_entry_get_text(GTK_ENTRY(entry)));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040099}
100
101static void
102account_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
200 /* check if its ip2ip account */
201 const QByteArray& alias = priv->account->alias().toLocal8Bit();
202
203 if (strcmp(alias.constData(), "IP2IP") == 0) {
204 label = gtk_label_new("IP2IP");
205 gtk_widget_set_halign(label, GTK_ALIGN_START);
206 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
207 ++grid_row;
208 } else {
209 /* account alias */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400210 label = gtk_label_new(_("Alias"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400211 gtk_widget_set_halign(label, GTK_ALIGN_START);
212 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400213 entry_alias = gtk_entry_new();
214 gtk_entry_set_text(GTK_ENTRY(entry_alias), alias.constData());
215 gtk_widget_set_halign(entry_alias, GTK_ALIGN_START);
216 g_signal_connect(entry_alias, "changed", G_CALLBACK(account_alias_changed), view);
217 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_alias, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400218 ++grid_row;
219
220 /* account type */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400221 label = gtk_label_new(_("Type"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400222 gtk_widget_set_halign(label, GTK_ALIGN_START);
223 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
224
225 label = gtk_label_new("");
226 gtk_widget_set_halign(label, GTK_ALIGN_START);
227 switch (priv->account->protocol()) {
228 case Account::Protocol::SIP:
229 gtk_label_set_text(GTK_LABEL(label), "SIP");
230 break;
231 case Account::Protocol::IAX:
232 gtk_label_set_text(GTK_LABEL(label), "IAX");
233 break;
234 case Account::Protocol::RING:
235 gtk_label_set_text(GTK_LABEL(label), "RING");
236 break;
237 case Account::Protocol::COUNT__:
238 break;
239 }
240
241 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 1, grid_row, 1, 1);
242 ++grid_row;
243 }
244
245 if (priv->account->protocol() == Account::Protocol::RING) {
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400246 label = gtk_label_new("RingID");
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400247 gtk_widget_set_halign(label, GTK_ALIGN_START);
248 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400249 entry_username = gtk_entry_new();
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400250 gtk_entry_set_placeholder_text(GTK_ENTRY(entry_username), _("auto-generating..."));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400251 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
252 g_object_set(G_OBJECT(entry_username), "editable", FALSE, NULL);
253 g_object_set(G_OBJECT(entry_username), "max-width-chars", 50, NULL);
254 gtk_widget_override_font(entry_username, pango_font_description_from_string("monospace"));
255 gtk_entry_set_alignment(GTK_ENTRY(entry_username), 0.5);
256 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400257 ++grid_row;
258 }
259
260 gtk_widget_show_all(priv->grid_account);
261
262 /* build parameters grid */
263 grid_row = 0;
264 if (strcmp(alias.constData(), "IP2IP") != 0) {
265 if (priv->account->protocol() != Account::Protocol::RING) {
266 /* SIP and IAX have the same params */
267
268 /* host name */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400269 label = gtk_label_new(_("Hostname"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400270 gtk_widget_set_halign(label, GTK_ALIGN_START);
271 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400272 entry_hostname = gtk_entry_new();
273 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
274 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
275 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400276 ++grid_row;
277
278 /* user name */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400279 label = gtk_label_new(_("Username"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400280 gtk_widget_set_halign(label, GTK_ALIGN_START);
281 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400282 entry_username = gtk_entry_new();
283 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
284 g_signal_connect(entry_username, "changed", G_CALLBACK(account_username_changed), view);
285 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400286 ++grid_row;
287
288 /* password */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400289 label = gtk_label_new(_("Password"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400290 gtk_widget_set_halign(label, GTK_ALIGN_START);
291 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400292 entry_password = gtk_entry_new();
293 gtk_entry_set_input_purpose(GTK_ENTRY(entry_password), GTK_INPUT_PURPOSE_PASSWORD);
294 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry_password), GTK_ENTRY_ICON_PRIMARY, "dialog-password");
295 gtk_entry_set_visibility(GTK_ENTRY(entry_password), FALSE);
296 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
297 g_signal_connect(entry_password, "changed", G_CALLBACK(account_password_changed), view);
298 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_password, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400299 ++grid_row;
300
301 /* show password */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400302 GtkWidget *checkbutton = gtk_check_button_new_with_label(_("Show password"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400303 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton, 1, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400304 g_signal_connect(checkbutton, "toggled", G_CALLBACK(show_password), entry_password);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400305 ++grid_row;
306
307 /* proxy */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400308 label = gtk_label_new(_("Proxy"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400309 gtk_widget_set_halign(label, GTK_ALIGN_START);
310 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400311 entry_proxy = gtk_entry_new();
312 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
313 g_signal_connect(entry_proxy, "changed", G_CALLBACK(account_proxy_changed), view);
314 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_proxy, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400315 ++grid_row;
316
317 /* voicemail number */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400318 label = gtk_label_new(_("Voicemail number"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400319 gtk_widget_set_halign(label, GTK_ALIGN_START);
320 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400321 entry_voicemail = gtk_entry_new();
322 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
323 g_signal_connect(entry_voicemail, "changed", G_CALLBACK(account_mailbox_changed), view);
324 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_voicemail, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400325 ++grid_row;
326 } else {
327 /* RING accoutn */
328
329 /* bootstrap */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400330 label = gtk_label_new(C_("The DHT bootstrap server url", "Bootstrap"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400331 gtk_widget_set_halign(label, GTK_ALIGN_START);
332 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400333 entry_hostname = gtk_entry_new();
334 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
335 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
336 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400337 ++grid_row;
338 }
339 }
340
341 /* auto answer */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400342 checkbutton_autoanswer = gtk_check_button_new_with_label(_("Auto-answer calls"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400343 gtk_widget_set_halign(checkbutton_autoanswer, GTK_ALIGN_START);
344 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_autoanswer, 0, grid_row, 1, 1);
345 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
346 g_signal_connect(checkbutton_autoanswer, "toggled", G_CALLBACK(auto_answer), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400347 ++grid_row;
348
349 /* upnp */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400350 checkbutton_upnp = gtk_check_button_new_with_label(_("UPnP enabled"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400351 gtk_widget_set_halign(checkbutton_upnp, GTK_ALIGN_START);
352 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_upnp, 0, grid_row, 1, 1);
353 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
354 g_signal_connect(checkbutton_upnp, "toggled", G_CALLBACK(upnp_enabled), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400355 ++grid_row;
356
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400357 /* DTMF tone type */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400358 label = gtk_label_new(_("DTMF tone type:"));
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400359 gtk_widget_set_halign(label, GTK_ALIGN_START);
360 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
361
362 GtkWidget *dtmf_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
363 gtk_button_box_set_layout(GTK_BUTTON_BOX(dtmf_box), GTK_BUTTONBOX_START);
364 gtk_box_set_spacing(GTK_BOX(dtmf_box), 10);
365 radiobutton_dtmf_rtp = gtk_radio_button_new_with_label(NULL, "RTP");
366 radiobutton_dtmf_sip = gtk_radio_button_new_with_label_from_widget(
367 GTK_RADIO_BUTTON(radiobutton_dtmf_rtp),
368 "SIP");
369 gtk_toggle_button_set_active(
370 priv->account->DTMFType() == DtmfType::OverRtp ?
371 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
372 TRUE);
373 g_signal_connect(radiobutton_dtmf_rtp, "toggled", G_CALLBACK(dtmf_set_rtp), view);
374 gtk_box_pack_start(GTK_BOX(dtmf_box),
375 radiobutton_dtmf_rtp,
376 FALSE, TRUE, 0);
377 gtk_box_pack_start(GTK_BOX(dtmf_box),
378 radiobutton_dtmf_sip,
379 FALSE, TRUE, 0);
380 gtk_grid_attach(GTK_GRID(priv->grid_parameters), dtmf_box, 1, grid_row, 1, 1);
381 ++grid_row;
382
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400383 /* update account parameters if model is updated */
384 priv->account_updated = QObject::connect(
385 priv->account,
386 &Account::changed,
387 [=] () {
388 if (strcmp(alias.constData(), "IP2IP") != 0) {
389 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
390 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
391 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
392
393 if (priv->account->protocol() != Account::Protocol::RING) {
394 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
395 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
396 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
397 }
398 }
399
400 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
401 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400402 gtk_toggle_button_set_active(
403 priv->account->DTMFType() == DtmfType::OverRtp ?
404 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
405 TRUE);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400406 }
407 );
408
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400409 gtk_widget_show_all(priv->grid_parameters);
410
411}
412
413GtkWidget *
414account_general_tab_new(Account *account)
415{
416 g_return_val_if_fail(account != NULL, NULL);
417
418 gpointer view = g_object_new(ACCOUNT_GENERAL_TAB_TYPE, NULL);
419
420 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
421 priv->account = account;
422
423 build_tab_view(ACCOUNT_GENERAL_TAB(view));
424
425 return (GtkWidget *)view;
426}