blob: bca46914f5b85d6451043fa0a62c5edc16f3460f [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 Milaret79d3f682015-12-09 12:32:52 -050089#ifndef ENABLE_AUTOUPDATE
90 ui->checkUpdateButton->hide();
91 ui->intervalUpdateCheckSpinBox->hide();
92 ui->updateDayLabel->hide();
93 ui->autoUpdateCheckBox->hide();
94#endif
Edric Milaret627500d2015-03-27 16:41:40 -040095}
96
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040097void
98ConfigurationWidget::showEvent(QShowEvent *event) {
Edric Milaret79d3f682015-12-09 12:32:52 -050099
100#ifdef ENABLE_AUTOUPDATE
101 if (win_sparkle_get_automatic_check_for_updates()) {
102 ui->autoUpdateCheckBox->setChecked(true);
103 }
104 ui->intervalUpdateCheckSpinBox->setValue(win_sparkle_get_update_check_interval() / 86400);
105#endif
Edric Milaretfb5fc5c2015-09-24 14:32:49 -0400106 QWidget::showEvent(event);
107 if (ui->tabWidget->currentIndex() == 1
Edric Milareta3e47282015-10-23 15:20:30 -0400108 && CallModel::instance().getActiveCalls().size() == 0) {
109 Video::PreviewManager::instance().startPreview();
Edric Milaretfb5fc5c2015-09-24 14:32:49 -0400110 }
111}
112
113void
114ConfigurationWidget::atExit() {
Edric Milareta3e47282015-10-23 15:20:30 -0400115 if (CallModel::instance().getActiveCalls().size() == 0
116 && Video::PreviewManager::instance().isPreviewing()) {
117 Video::PreviewManager::instance().stopPreview();
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400118 }
Edric Milaret627500d2015-03-27 16:41:40 -0400119 accountModel_->save();
120 accountDetails_->save();
121}
122
123ConfigurationWidget::~ConfigurationWidget()
124{
125 delete ui;
Edric Milaret01f23842015-06-22 14:46:01 -0400126 delete accountStateDelegate_;
Edric Milaret627500d2015-03-27 16:41:40 -0400127}
128
129void
Edric Milaret94b4aab2015-05-08 12:10:44 -0400130ConfigurationWidget::deviceIndexChanged(int index) {
131 ui->deviceBox->setCurrentIndex(index);
132}
133
134void
Edric Milaret627500d2015-03-27 16:41:40 -0400135ConfigurationWidget::on_deviceBox_currentIndexChanged(int index)
136{
137 if (index < 0)
138 return;
139
140 if (!isLoading_)
141 deviceModel_->setActive(index);
142
143 auto device = deviceModel_->activeDevice();
144
145 ui->sizeBox->clear();
146
147 isLoading_ = true;
148 if (device->channelList().size() > 0) {
149 for (auto resolution : device->channelList()[0]->validResolutions()) {
150 ui->sizeBox->addItem(resolution->name());
151 }
152 }
153 ui->sizeBox->setCurrentIndex(
154 device->channelList()[0]->activeResolution()->relativeIndex());
155 isLoading_ = false;
156}
157
158void
159ConfigurationWidget::on_sizeBox_currentIndexChanged(int index)
160{
161 auto device = deviceModel_->activeDevice();
162
Edric Milaret627500d2015-03-27 16:41:40 -0400163 if (index < 0)
164 return;
165 if (!isLoading_)
166 device->channelList()[0]->setActiveResolution(
167 device->channelList()[0]->validResolutions()[index]);
Edric Milaret627500d2015-03-27 16:41:40 -0400168}
169
170void
171ConfigurationWidget::accountSelected(QItemSelection itemSel) {
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400172
Edric Milaret627500d2015-03-27 16:41:40 -0400173 Q_UNUSED(itemSel)
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400174 auto account = accountModel_->getAccountByModelIndex(
175 ui->accountView->currentIndex());
176 accountDetails_->setAccount(account);
177 AccountSerializationAdapter adapter(account, accountDetails_);
Edric Milaret627500d2015-03-27 16:41:40 -0400178}
179
180void
Edric Milaret627500d2015-03-27 16:41:40 -0400181ConfigurationWidget::on_deleteAccountButton_clicked()
182{
183 auto account = accountModel_->getAccountByModelIndex(
184 ui->accountView->currentIndex());
185 if (account != accountModel_->ip2ip())
186 accountModel_->remove(account);
187}
188
189void
190ConfigurationWidget::on_addAccountButton_clicked()
191{
Edric Milaret53ac6e52015-09-14 13:37:06 -0400192 auto account = accountModel_->add(tr("New Account"),
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400193 ui->accountTypeBox->model()->index(
194 ui->accountTypeBox->currentIndex(), 0));
Edric Milaret031c3052015-04-29 18:14:18 -0400195 account->setRingtonePath(Utils::GetRingtonePath());
Edric Milaret627500d2015-03-27 16:41:40 -0400196 accountModel_->save();
197}
Edric Milaret4bba46d2015-04-29 16:33:38 -0400198
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400199void
200ConfigurationWidget::on_startupBox_toggled(bool checked)
Edric Milaret4bba46d2015-04-29 16:33:38 -0400201{
202 if (checked)
203 Utils::CreateStartupLink();
204 else
205 Utils::DeleteStartupLink();
206}
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400207
208void
Edric Milaret1eece872015-06-10 13:37:51 -0400209ConfigurationWidget::on_clearHistoryButton_clicked()
210{
211 QMessageBox confirmationDialog;
212
Edric Milaret53ac6e52015-09-14 13:37:06 -0400213 confirmationDialog.setText(tr("Are you sure you want to clear all your history?"));
Edric Milaret1eece872015-06-10 13:37:51 -0400214 confirmationDialog.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
215 auto ret = confirmationDialog.exec();
216
217 if (ret == QMessageBox::Ok)
Edric Milareta3e47282015-10-23 15:20:30 -0400218 CategorizedHistoryModel::instance().clearAllCollections();
Edric Milaret1eece872015-06-10 13:37:51 -0400219}
220
221void
222ConfigurationWidget::on_historyDaySettingsSpinBox_valueChanged(int limit)
223{
Edric Milareta3e47282015-10-23 15:20:30 -0400224 if (CategorizedHistoryModel::instance().historyLimit() != limit)
225 CategorizedHistoryModel::instance().setHistoryLimit(limit);
Edric Milaret1eece872015-06-10 13:37:51 -0400226}
Edric Milaretb25af972015-06-17 16:55:45 -0400227
228void
229ConfigurationWidget::on_closeOrMinCheckBox_toggled(bool checked)
230{
231 settings_.setValue(SettingsKey::closeOrMinimized, checked);
232}
Edric Milaret79d3f682015-12-09 12:32:52 -0500233
234void
235ConfigurationWidget::on_checkUpdateButton_clicked()
236{
237#ifdef ENABLE_AUTOUPDATE
238 win_sparkle_check_update_with_ui();
239#endif
240}
241
242void
243ConfigurationWidget::on_autoUpdateCheckBox_toggled(bool checked)
244{
245#ifdef ENABLE_AUTOUPDATE
246 win_sparkle_set_automatic_check_for_updates(checked);
247#endif
248}
249
250void
251ConfigurationWidget::on_intervalUpdateCheckSpinBox_valueChanged(int arg1)
252{
253#ifdef ENABLE_AUTOUPDATE
254 win_sparkle_set_update_check_interval(arg1 * 86400);
255#endif
256}