blob: 5f3ddd8671c2d54166ed6db47ea10d156850b957 [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>
25
26struct _AccountGeneralTab
27{
28 GtkBox parent;
29};
30
31struct _AccountGeneralTabClass
32{
33 GtkBoxClass parent_class;
34};
35
36typedef struct _AccountGeneralTabPrivate AccountGeneralTabPrivate;
37
38struct _AccountGeneralTabPrivate
39{
40 Account *account;
41 GtkWidget *grid_account;
42 GtkWidget *grid_parameters;
Stepan Salenikovichbd029582015-03-24 11:00:56 -040043
44 QMetaObject::Connection account_updated;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040045};
46
47G_DEFINE_TYPE_WITH_PRIVATE(AccountGeneralTab, account_general_tab, GTK_TYPE_BOX);
48
49#define ACCOUNT_GENERAL_TAB_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ACCOUNT_GENERAL_TAB_TYPE, AccountGeneralTabPrivate))
50
51static void
52account_general_tab_dispose(GObject *object)
53{
Stepan Salenikovichbd029582015-03-24 11:00:56 -040054 AccountGeneralTab *view = ACCOUNT_GENERAL_TAB(object);
55 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
56
57 QObject::disconnect(priv->account_updated);
58
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040059 G_OBJECT_CLASS(account_general_tab_parent_class)->dispose(object);
60}
61
62static void
63account_general_tab_init(AccountGeneralTab *view)
64{
65 gtk_widget_init_template(GTK_WIDGET(view));
66}
67
68static void
69account_general_tab_class_init(AccountGeneralTabClass *klass)
70{
71 G_OBJECT_CLASS(klass)->dispose = account_general_tab_dispose;
72
73 gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS (klass),
74 "/cx/ring/RingGnome/accountgeneraltab.ui");
75
76 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_account);
77 gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS (klass), AccountGeneralTab, grid_parameters);
78}
79
80static void
81account_alias_changed(GtkEditable *entry, AccountGeneralTab *view)
82{
83 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
84 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
85 priv->account->setAlias(QString(gtk_editable_get_chars(entry, 0, -1)));
Stepan Salenikovich75a39172015-07-10 13:21:08 -040086 if (priv->account->protocol() == Account::Protocol::RING)
87 priv->account->setDisplayName(gtk_entry_get_text(GTK_ENTRY(entry)));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -040088}
89
90static void
91account_hostname_changed(GtkEditable *entry, AccountGeneralTab *view)
92{
93 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
94 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
95 priv->account->setHostname(QString(gtk_editable_get_chars(entry, 0, -1)));
96}
97
98static void
99account_username_changed(GtkEditable *entry, AccountGeneralTab *view)
100{
101 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
102 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
103 priv->account->setUsername(QString(gtk_editable_get_chars(entry, 0, -1)));
104}
105
106static void
107account_password_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->setPassword(QString(gtk_editable_get_chars(entry, 0, -1)));
112}
113
114static void
115show_password(GtkToggleButton *checkbutton, GtkEntry *entry)
116{
117 gtk_entry_set_visibility(GTK_ENTRY(entry), gtk_toggle_button_get_active(checkbutton));
118}
119
120static void
121account_proxy_changed(GtkEditable *entry, AccountGeneralTab *view)
122{
123 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
124 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
125 priv->account->setProxy(QString(gtk_editable_get_chars(entry, 0, -1)));
126}
127
128static void
129account_mailbox_changed(GtkEditable *entry, AccountGeneralTab *view)
130{
131 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
132 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
133 priv->account->setMailbox(QString(gtk_editable_get_chars(entry, 0, -1)));
134}
135
136static void
137auto_answer(GtkToggleButton *checkbutton, AccountGeneralTab *view)
138{
139 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
140 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
141 priv->account->setAutoAnswer(gtk_toggle_button_get_active(checkbutton));
142}
143
144static void
145upnp_enabled(GtkToggleButton *checkbutton, AccountGeneralTab *view)
146{
147 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
148 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
149 priv->account->setUpnpEnabled(gtk_toggle_button_get_active(checkbutton));
150}
151
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400152static void
153dtmf_set_rtp(GtkToggleButton *toggle_rtp, AccountGeneralTab *view)
154{
155 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
156 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
157 if (gtk_toggle_button_get_active(toggle_rtp)) {
158 g_debug("set DTMF over RTP");
159 priv->account->setDTMFType(DtmfType::OverRtp);
160 } else {
161 g_debug("set DTMF over SIP");
162 priv->account->setDTMFType(DtmfType::OverSip);
163 }
164}
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400165
166static void
167build_tab_view(AccountGeneralTab *view)
168{
169 g_return_if_fail(IS_ACCOUNT_GENERAL_TAB(view));
170 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
171
172 int grid_row = 0;
173 GtkWidget *label = NULL;
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400174
175 /* separate pointers for each so that we reference them in the account changed callback */
176 GtkWidget *entry_alias = NULL;
177 GtkWidget *entry_username = NULL;
178 GtkWidget *entry_hostname = NULL;
179 GtkWidget *entry_password = NULL;
180 GtkWidget *entry_proxy = NULL;
181 GtkWidget *entry_voicemail = NULL;
182 GtkWidget *checkbutton_autoanswer = NULL;
183 GtkWidget *checkbutton_upnp = NULL;
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400184 GtkWidget *radiobutton_dtmf_rtp = NULL;
185 GtkWidget *radiobutton_dtmf_sip = NULL;
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400186
187 /* build account grid */
188
189 /* check if its ip2ip account */
190 const QByteArray& alias = priv->account->alias().toLocal8Bit();
191
192 if (strcmp(alias.constData(), "IP2IP") == 0) {
193 label = gtk_label_new("IP2IP");
194 gtk_widget_set_halign(label, GTK_ALIGN_START);
195 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
196 ++grid_row;
197 } else {
198 /* account alias */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400199 label = gtk_label_new(_("Alias"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400200 gtk_widget_set_halign(label, GTK_ALIGN_START);
201 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400202 entry_alias = gtk_entry_new();
203 gtk_entry_set_text(GTK_ENTRY(entry_alias), alias.constData());
204 gtk_widget_set_halign(entry_alias, GTK_ALIGN_START);
205 g_signal_connect(entry_alias, "changed", G_CALLBACK(account_alias_changed), view);
206 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_alias, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400207 ++grid_row;
208
209 /* account type */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400210 label = gtk_label_new(_("Type"));
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);
213
214 label = gtk_label_new("");
215 gtk_widget_set_halign(label, GTK_ALIGN_START);
216 switch (priv->account->protocol()) {
217 case Account::Protocol::SIP:
218 gtk_label_set_text(GTK_LABEL(label), "SIP");
219 break;
220 case Account::Protocol::IAX:
221 gtk_label_set_text(GTK_LABEL(label), "IAX");
222 break;
223 case Account::Protocol::RING:
224 gtk_label_set_text(GTK_LABEL(label), "RING");
225 break;
226 case Account::Protocol::COUNT__:
227 break;
228 }
229
230 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 1, grid_row, 1, 1);
231 ++grid_row;
232 }
233
234 if (priv->account->protocol() == Account::Protocol::RING) {
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400235 label = gtk_label_new("RingID");
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400236 gtk_widget_set_halign(label, GTK_ALIGN_START);
237 gtk_grid_attach(GTK_GRID(priv->grid_account), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400238 entry_username = gtk_entry_new();
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400239 gtk_entry_set_placeholder_text(GTK_ENTRY(entry_username), _("auto-generating..."));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400240 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
241 g_object_set(G_OBJECT(entry_username), "editable", FALSE, NULL);
242 g_object_set(G_OBJECT(entry_username), "max-width-chars", 50, NULL);
243 gtk_widget_override_font(entry_username, pango_font_description_from_string("monospace"));
244 gtk_entry_set_alignment(GTK_ENTRY(entry_username), 0.5);
245 gtk_grid_attach(GTK_GRID(priv->grid_account), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400246 ++grid_row;
247 }
248
249 gtk_widget_show_all(priv->grid_account);
250
251 /* build parameters grid */
252 grid_row = 0;
253 if (strcmp(alias.constData(), "IP2IP") != 0) {
254 if (priv->account->protocol() != Account::Protocol::RING) {
255 /* SIP and IAX have the same params */
256
257 /* host name */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400258 label = gtk_label_new(_("Hostname"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400259 gtk_widget_set_halign(label, GTK_ALIGN_START);
260 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400261 entry_hostname = gtk_entry_new();
262 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
263 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
264 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400265 ++grid_row;
266
267 /* user name */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400268 label = gtk_label_new(_("Username"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400269 gtk_widget_set_halign(label, GTK_ALIGN_START);
270 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400271 entry_username = gtk_entry_new();
272 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
273 g_signal_connect(entry_username, "changed", G_CALLBACK(account_username_changed), view);
274 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_username, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400275 ++grid_row;
276
277 /* password */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400278 label = gtk_label_new(_("Password"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400279 gtk_widget_set_halign(label, GTK_ALIGN_START);
280 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400281 entry_password = gtk_entry_new();
282 gtk_entry_set_input_purpose(GTK_ENTRY(entry_password), GTK_INPUT_PURPOSE_PASSWORD);
283 gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry_password), GTK_ENTRY_ICON_PRIMARY, "dialog-password");
284 gtk_entry_set_visibility(GTK_ENTRY(entry_password), FALSE);
285 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
286 g_signal_connect(entry_password, "changed", G_CALLBACK(account_password_changed), view);
287 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_password, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400288 ++grid_row;
289
290 /* show password */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400291 GtkWidget *checkbutton = gtk_check_button_new_with_label(_("Show password"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400292 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton, 1, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400293 g_signal_connect(checkbutton, "toggled", G_CALLBACK(show_password), entry_password);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400294 ++grid_row;
295
296 /* proxy */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400297 label = gtk_label_new(_("Proxy"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400298 gtk_widget_set_halign(label, GTK_ALIGN_START);
299 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400300 entry_proxy = gtk_entry_new();
301 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
302 g_signal_connect(entry_proxy, "changed", G_CALLBACK(account_proxy_changed), view);
303 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_proxy, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400304 ++grid_row;
305
306 /* voicemail number */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400307 label = gtk_label_new(_("Voicemail number"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400308 gtk_widget_set_halign(label, GTK_ALIGN_START);
309 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400310 entry_voicemail = gtk_entry_new();
311 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
312 g_signal_connect(entry_voicemail, "changed", G_CALLBACK(account_mailbox_changed), view);
313 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_voicemail, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400314 ++grid_row;
315 } else {
316 /* RING accoutn */
317
318 /* bootstrap */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400319 label = gtk_label_new(C_("The DHT bootstrap server url", "Bootstrap"));
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400320 gtk_widget_set_halign(label, GTK_ALIGN_START);
321 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400322 entry_hostname = gtk_entry_new();
323 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
324 g_signal_connect(entry_hostname, "changed", G_CALLBACK(account_hostname_changed), view);
325 gtk_grid_attach(GTK_GRID(priv->grid_parameters), entry_hostname, 1, grid_row, 1, 1);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400326 ++grid_row;
327 }
328 }
329
330 /* auto answer */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400331 checkbutton_autoanswer = gtk_check_button_new_with_label(_("Auto-answer calls"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400332 gtk_widget_set_halign(checkbutton_autoanswer, GTK_ALIGN_START);
333 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_autoanswer, 0, grid_row, 1, 1);
334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
335 g_signal_connect(checkbutton_autoanswer, "toggled", G_CALLBACK(auto_answer), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400336 ++grid_row;
337
338 /* upnp */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400339 checkbutton_upnp = gtk_check_button_new_with_label(_("UPnP enabled"));
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400340 gtk_widget_set_halign(checkbutton_upnp, GTK_ALIGN_START);
341 gtk_grid_attach(GTK_GRID(priv->grid_parameters), checkbutton_upnp, 0, grid_row, 1, 1);
342 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
343 g_signal_connect(checkbutton_upnp, "toggled", G_CALLBACK(upnp_enabled), view);
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400344 ++grid_row;
345
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400346 /* DTMF tone type */
Stepan Salenikovicha1b8cb32015-09-11 14:58:35 -0400347 label = gtk_label_new(_("DTMF tone type:"));
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400348 gtk_widget_set_halign(label, GTK_ALIGN_START);
349 gtk_grid_attach(GTK_GRID(priv->grid_parameters), label, 0, grid_row, 1, 1);
350
351 GtkWidget *dtmf_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
352 gtk_button_box_set_layout(GTK_BUTTON_BOX(dtmf_box), GTK_BUTTONBOX_START);
353 gtk_box_set_spacing(GTK_BOX(dtmf_box), 10);
354 radiobutton_dtmf_rtp = gtk_radio_button_new_with_label(NULL, "RTP");
355 radiobutton_dtmf_sip = gtk_radio_button_new_with_label_from_widget(
356 GTK_RADIO_BUTTON(radiobutton_dtmf_rtp),
357 "SIP");
358 gtk_toggle_button_set_active(
359 priv->account->DTMFType() == DtmfType::OverRtp ?
360 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
361 TRUE);
362 g_signal_connect(radiobutton_dtmf_rtp, "toggled", G_CALLBACK(dtmf_set_rtp), view);
363 gtk_box_pack_start(GTK_BOX(dtmf_box),
364 radiobutton_dtmf_rtp,
365 FALSE, TRUE, 0);
366 gtk_box_pack_start(GTK_BOX(dtmf_box),
367 radiobutton_dtmf_sip,
368 FALSE, TRUE, 0);
369 gtk_grid_attach(GTK_GRID(priv->grid_parameters), dtmf_box, 1, grid_row, 1, 1);
370 ++grid_row;
371
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400372 /* update account parameters if model is updated */
373 priv->account_updated = QObject::connect(
374 priv->account,
375 &Account::changed,
376 [=] () {
377 if (strcmp(alias.constData(), "IP2IP") != 0) {
378 gtk_entry_set_text(GTK_ENTRY(entry_alias), priv->account->alias().toLocal8Bit().constData());
379 gtk_entry_set_text(GTK_ENTRY(entry_username), priv->account->username().toLocal8Bit().constData());
380 gtk_entry_set_text(GTK_ENTRY(entry_hostname), priv->account->hostname().toLocal8Bit().constData());
381
382 if (priv->account->protocol() != Account::Protocol::RING) {
383 gtk_entry_set_text(GTK_ENTRY(entry_password), priv->account->password().toLocal8Bit().constData());
384 gtk_entry_set_text(GTK_ENTRY(entry_proxy), priv->account->proxy().toLocal8Bit().constData());
385 gtk_entry_set_text(GTK_ENTRY(entry_voicemail), priv->account->mailbox().toLocal8Bit().constData());
386 }
387 }
388
389 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_autoanswer), priv->account->isAutoAnswer());
390 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_upnp), priv->account->isUpnpEnabled());
Stepan Salenikovich96ee9a02015-04-28 10:23:13 -0400391 gtk_toggle_button_set_active(
392 priv->account->DTMFType() == DtmfType::OverRtp ?
393 GTK_TOGGLE_BUTTON(radiobutton_dtmf_rtp) : GTK_TOGGLE_BUTTON(radiobutton_dtmf_sip),
394 TRUE);
Stepan Salenikovichbd029582015-03-24 11:00:56 -0400395 }
396 );
397
Stepan Salenikovich61cbab02015-03-16 18:35:10 -0400398 gtk_widget_show_all(priv->grid_parameters);
399
400}
401
402GtkWidget *
403account_general_tab_new(Account *account)
404{
405 g_return_val_if_fail(account != NULL, NULL);
406
407 gpointer view = g_object_new(ACCOUNT_GENERAL_TAB_TYPE, NULL);
408
409 AccountGeneralTabPrivate *priv = ACCOUNT_GENERAL_TAB_GET_PRIVATE(view);
410 priv->account = account;
411
412 build_tab_view(ACCOUNT_GENERAL_TAB(view));
413
414 return (GtkWidget *)view;
415}