blob: abb6c8d573d310a120d5473ec1cbef9ddb964560 [file] [log] [blame]
Edric Milaret627500d2015-03-27 16:41:40 -04001/***************************************************************************
Edric Milaretbab169d2016-01-07 15:13:33 -05002 * Copyright (C) 2015-2016 by Savoir-faire Linux *
Edric Milaret627500d2015-03-27 16:41:40 -04003 * Author: Edric Ladent Milaret <edric.ladent-milaret@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, see <http://www.gnu.org/licenses/>. *
17 **************************************************************************/
18
19#include "configurationwidget.h"
20#include "ui_configurationwidget.h"
21
Edric Milaret1eece872015-06-10 13:37:51 -040022#include <QMessageBox>
23
Edric Milaret627500d2015-03-27 16:41:40 -040024#include "video/devicemodel.h"
25#include "video/channel.h"
26#include "video/resolution.h"
27#include "video/rate.h"
Edric Milaret4bba46d2015-04-29 16:33:38 -040028#include "video/previewmanager.h"
Edric Milaret627500d2015-03-27 16:41:40 -040029
Edric Milaret3e6aefe2015-06-05 16:07:26 -040030#include "accountserializationadapter.h"
Edric Milaretb25af972015-06-17 16:55:45 -040031#include "accountstatedelegate.h"
32#include "settingskey.h"
Edric Milaret79d3f682015-12-09 12:32:52 -050033#include "utils.h"
Edric Milaret3e6aefe2015-06-05 16:07:26 -040034
Edric Milaret627500d2015-03-27 16:41:40 -040035#include "accountmodel.h"
36#include "protocolmodel.h"
37#include "accountdetails.h"
Edric Milaret3aeae3a2015-06-01 17:31:54 -040038#include "callmodel.h"
Edric Milaret1eece872015-06-10 13:37:51 -040039#include "ringtonemodel.h"
40#include "categorizedhistorymodel.h"
Edric Milaret627500d2015-03-27 16:41:40 -040041
Edric Milaret79d3f682015-12-09 12:32:52 -050042#ifdef ENABLE_AUTOUPDATE
43#include "winsparkle.h"
44#endif
Edric Milaret627500d2015-03-27 16:41:40 -040045
46ConfigurationWidget::ConfigurationWidget(QWidget *parent) :
47 NavWidget(Nav, parent),
48 ui(new Ui::ConfigurationWidget),
Edric Milareta3e47282015-10-23 15:20:30 -040049 accountModel_(&AccountModel::instance()),
50 deviceModel_(&Video::DeviceModel::instance()),
Edric Milaret627500d2015-03-27 16:41:40 -040051 accountDetails_(new AccountDetails())
52{
53 ui->setupUi(this);
54
55 ui->accountView->setModel(accountModel_);
Edric Milaret01f23842015-06-22 14:46:01 -040056 accountStateDelegate_ = new AccountStateDelegate();
57 ui->accountView->setItemDelegate(accountStateDelegate_);
Edric Milaret627500d2015-03-27 16:41:40 -040058
Edric Milaret627500d2015-03-27 16:41:40 -040059 isLoading_ = true;
60 ui->deviceBox->setModel(deviceModel_);
Edric Milaret94b4aab2015-05-08 12:10:44 -040061 connect(deviceModel_, SIGNAL(currentIndexChanged(int)),
62 this, SLOT(deviceIndexChanged(int)));
Edric Milaret627500d2015-03-27 16:41:40 -040063
64 connect(ui->accountView->selectionModel(),
Edric Milaret3aeae3a2015-06-01 17:31:54 -040065 SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
66 this, SLOT(accountSelected(QItemSelection)));
Edric Milaret627500d2015-03-27 16:41:40 -040067
68 ui->accountView->setCurrentIndex(accountModel_->index(0));
69 ui->accountDetailLayout->addWidget(accountDetails_);
Edric Milaret627500d2015-03-27 16:41:40 -040070 ui->accountTypeBox->setModel(accountModel_->protocolModel());
Edric Milaret4bba46d2015-04-29 16:33:38 -040071 ui->startupBox->setChecked(Utils::CheckStartupLink());
Edric Milaret1eece872015-06-10 13:37:51 -040072
Edric Milareta3e47282015-10-23 15:20:30 -040073 ui->ringtonesBox->setModel(&RingtoneModel::instance());
Edric Milaretb25af972015-06-17 16:55:45 -040074 ui->historyDaySettingsSpinBox->setValue(
Edric Milareta3e47282015-10-23 15:20:30 -040075 CategorizedHistoryModel::instance().historyLimit());
Edric Milaretb25af972015-06-17 16:55:45 -040076 ui->closeOrMinCheckBox->setChecked(settings_.value(
77 SettingsKey::closeOrMinimized).toBool());
Edric Milareted0b2802015-10-01 15:10:02 -040078 connect(ui->tabWidget, &QTabWidget::currentChanged, [](int index) {
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040079 if (index == 1
Edric Milareta3e47282015-10-23 15:20:30 -040080 && CallModel::instance().getActiveCalls().size() == 0) {
81 Video::PreviewManager::instance().startPreview();
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040082 } else {
Edric Milareta3e47282015-10-23 15:20:30 -040083 if (CallModel::instance().getActiveCalls().size() == 0
84 && Video::PreviewManager::instance().isPreviewing()) {
85 Video::PreviewManager::instance().stopPreview();
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040086 }
87 }
88 });
Edric Milaret0b7fe5d2016-01-27 11:12:43 -050089
90 ui->videoView->setIsFullPreview(true);
Edric Milaret79d3f682015-12-09 12:32:52 -050091#ifndef ENABLE_AUTOUPDATE
92 ui->checkUpdateButton->hide();
93 ui->intervalUpdateCheckSpinBox->hide();
94 ui->updateDayLabel->hide();
95 ui->autoUpdateCheckBox->hide();
96#endif
Edric Milaret627500d2015-03-27 16:41:40 -040097}
98
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040099void
100ConfigurationWidget::showEvent(QShowEvent *event) {
Edric Milaret79d3f682015-12-09 12:32:52 -0500101
102#ifdef ENABLE_AUTOUPDATE
103 if (win_sparkle_get_automatic_check_for_updates()) {
104 ui->autoUpdateCheckBox->setChecked(true);
105 }
106 ui->intervalUpdateCheckSpinBox->setValue(win_sparkle_get_update_check_interval() / 86400);
107#endif
Edric Milaretfb5fc5c2015-09-24 14:32:49 -0400108 QWidget::showEvent(event);
109 if (ui->tabWidget->currentIndex() == 1
Edric Milareta3e47282015-10-23 15:20:30 -0400110 && CallModel::instance().getActiveCalls().size() == 0) {
111 Video::PreviewManager::instance().startPreview();
Edric Milaretfb5fc5c2015-09-24 14:32:49 -0400112 }
113}
114
115void
116ConfigurationWidget::atExit() {
Edric Milareta3e47282015-10-23 15:20:30 -0400117 if (CallModel::instance().getActiveCalls().size() == 0
118 && Video::PreviewManager::instance().isPreviewing()) {
119 Video::PreviewManager::instance().stopPreview();
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400120 }
Edric Milaret627500d2015-03-27 16:41:40 -0400121 accountModel_->save();
122 accountDetails_->save();
123}
124
125ConfigurationWidget::~ConfigurationWidget()
126{
127 delete ui;
Edric Milaret01f23842015-06-22 14:46:01 -0400128 delete accountStateDelegate_;
Edric Milaret627500d2015-03-27 16:41:40 -0400129}
130
131void
Edric Milaret94b4aab2015-05-08 12:10:44 -0400132ConfigurationWidget::deviceIndexChanged(int index) {
133 ui->deviceBox->setCurrentIndex(index);
134}
135
136void
Edric Milaret627500d2015-03-27 16:41:40 -0400137ConfigurationWidget::on_deviceBox_currentIndexChanged(int index)
138{
139 if (index < 0)
140 return;
141
142 if (!isLoading_)
143 deviceModel_->setActive(index);
144
145 auto device = deviceModel_->activeDevice();
146
147 ui->sizeBox->clear();
148
149 isLoading_ = true;
150 if (device->channelList().size() > 0) {
151 for (auto resolution : device->channelList()[0]->validResolutions()) {
152 ui->sizeBox->addItem(resolution->name());
153 }
154 }
155 ui->sizeBox->setCurrentIndex(
156 device->channelList()[0]->activeResolution()->relativeIndex());
157 isLoading_ = false;
158}
159
160void
161ConfigurationWidget::on_sizeBox_currentIndexChanged(int index)
162{
163 auto device = deviceModel_->activeDevice();
164
Edric Milaret627500d2015-03-27 16:41:40 -0400165 if (index < 0)
166 return;
167 if (!isLoading_)
168 device->channelList()[0]->setActiveResolution(
169 device->channelList()[0]->validResolutions()[index]);
Edric Milaret627500d2015-03-27 16:41:40 -0400170}
171
172void
173ConfigurationWidget::accountSelected(QItemSelection itemSel) {
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400174
Edric Milaret627500d2015-03-27 16:41:40 -0400175 Q_UNUSED(itemSel)
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400176 auto account = accountModel_->getAccountByModelIndex(
177 ui->accountView->currentIndex());
178 accountDetails_->setAccount(account);
179 AccountSerializationAdapter adapter(account, accountDetails_);
Edric Milaret627500d2015-03-27 16:41:40 -0400180}
181
182void
Edric Milaret627500d2015-03-27 16:41:40 -0400183ConfigurationWidget::on_deleteAccountButton_clicked()
184{
185 auto account = accountModel_->getAccountByModelIndex(
186 ui->accountView->currentIndex());
187 if (account != accountModel_->ip2ip())
188 accountModel_->remove(account);
189}
190
191void
192ConfigurationWidget::on_addAccountButton_clicked()
193{
Edric Milaret53ac6e52015-09-14 13:37:06 -0400194 auto account = accountModel_->add(tr("New Account"),
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400195 ui->accountTypeBox->model()->index(
196 ui->accountTypeBox->currentIndex(), 0));
Edric Milaret031c3052015-04-29 18:14:18 -0400197 account->setRingtonePath(Utils::GetRingtonePath());
Edric Milaret627500d2015-03-27 16:41:40 -0400198 accountModel_->save();
199}
Edric Milaret4bba46d2015-04-29 16:33:38 -0400200
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400201void
202ConfigurationWidget::on_startupBox_toggled(bool checked)
Edric Milaret4bba46d2015-04-29 16:33:38 -0400203{
204 if (checked)
205 Utils::CreateStartupLink();
206 else
207 Utils::DeleteStartupLink();
208}
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400209
210void
Edric Milaret1eece872015-06-10 13:37:51 -0400211ConfigurationWidget::on_clearHistoryButton_clicked()
212{
213 QMessageBox confirmationDialog;
214
Edric Milaret53ac6e52015-09-14 13:37:06 -0400215 confirmationDialog.setText(tr("Are you sure you want to clear all your history?"));
Edric Milaret1eece872015-06-10 13:37:51 -0400216 confirmationDialog.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
217 auto ret = confirmationDialog.exec();
218
219 if (ret == QMessageBox::Ok)
Edric Milareta3e47282015-10-23 15:20:30 -0400220 CategorizedHistoryModel::instance().clearAllCollections();
Edric Milaret1eece872015-06-10 13:37:51 -0400221}
222
223void
224ConfigurationWidget::on_historyDaySettingsSpinBox_valueChanged(int limit)
225{
Edric Milareta3e47282015-10-23 15:20:30 -0400226 if (CategorizedHistoryModel::instance().historyLimit() != limit)
227 CategorizedHistoryModel::instance().setHistoryLimit(limit);
Edric Milaret1eece872015-06-10 13:37:51 -0400228}
Edric Milaretb25af972015-06-17 16:55:45 -0400229
230void
231ConfigurationWidget::on_closeOrMinCheckBox_toggled(bool checked)
232{
233 settings_.setValue(SettingsKey::closeOrMinimized, checked);
234}
Edric Milaret79d3f682015-12-09 12:32:52 -0500235
236void
237ConfigurationWidget::on_checkUpdateButton_clicked()
238{
239#ifdef ENABLE_AUTOUPDATE
240 win_sparkle_check_update_with_ui();
241#endif
242}
243
244void
245ConfigurationWidget::on_autoUpdateCheckBox_toggled(bool checked)
246{
247#ifdef ENABLE_AUTOUPDATE
248 win_sparkle_set_automatic_check_for_updates(checked);
249#endif
250}
251
252void
253ConfigurationWidget::on_intervalUpdateCheckSpinBox_valueChanged(int arg1)
254{
255#ifdef ENABLE_AUTOUPDATE
256 win_sparkle_set_update_check_interval(arg1 * 86400);
257#endif
258}