blob: a6912188c3efc692280bd78de6daef111afa23de [file] [log] [blame]
Edric Milaret627500d2015-03-27 16:41:40 -04001/***************************************************************************
Edric Milaret5f316da2015-09-28 11:57:42 -04002 * Copyright (C) 2015 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"
33
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 Milaret4bba46d2015-04-29 16:33:38 -040042#include "utils.h"
Edric Milaret627500d2015-03-27 16:41:40 -040043
44ConfigurationWidget::ConfigurationWidget(QWidget *parent) :
45 NavWidget(Nav, parent),
46 ui(new Ui::ConfigurationWidget),
47 accountModel_(AccountModel::instance()),
48 deviceModel_(Video::DeviceModel::instance()),
49 accountDetails_(new AccountDetails())
50{
51 ui->setupUi(this);
52
53 ui->accountView->setModel(accountModel_);
Edric Milaret01f23842015-06-22 14:46:01 -040054 accountStateDelegate_ = new AccountStateDelegate();
55 ui->accountView->setItemDelegate(accountStateDelegate_);
Edric Milaret627500d2015-03-27 16:41:40 -040056
Edric Milaret627500d2015-03-27 16:41:40 -040057 isLoading_ = true;
58 ui->deviceBox->setModel(deviceModel_);
Edric Milaret94b4aab2015-05-08 12:10:44 -040059 connect(deviceModel_, SIGNAL(currentIndexChanged(int)),
60 this, SLOT(deviceIndexChanged(int)));
Edric Milaret627500d2015-03-27 16:41:40 -040061
62 connect(ui->accountView->selectionModel(),
Edric Milaret3aeae3a2015-06-01 17:31:54 -040063 SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
64 this, SLOT(accountSelected(QItemSelection)));
Edric Milaret627500d2015-03-27 16:41:40 -040065
66 ui->accountView->setCurrentIndex(accountModel_->index(0));
67 ui->accountDetailLayout->addWidget(accountDetails_);
Edric Milaret627500d2015-03-27 16:41:40 -040068 ui->accountTypeBox->setModel(accountModel_->protocolModel());
Edric Milaret4bba46d2015-04-29 16:33:38 -040069 ui->startupBox->setChecked(Utils::CheckStartupLink());
Edric Milaret1eece872015-06-10 13:37:51 -040070
71 ui->ringtonesBox->setModel(RingtoneModel::instance());
Edric Milaretb25af972015-06-17 16:55:45 -040072 ui->historyDaySettingsSpinBox->setValue(
73 CategorizedHistoryModel::instance()->historyLimit());
74 ui->closeOrMinCheckBox->setChecked(settings_.value(
75 SettingsKey::closeOrMinimized).toBool());
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040076 connect(ui->tabWidget, QTabWidget::currentChanged, [](int index) {
77 if (index == 1
78 && CallModel::instance()->getActiveCalls().size() == 0) {
79 Video::PreviewManager::instance()->startPreview();
80 } else {
81 if (CallModel::instance()->getActiveCalls().size() == 0
82 && Video::PreviewManager::instance()->isPreviewing()) {
83 Video::PreviewManager::instance()->stopPreview();
84 }
85 }
86 });
Edric Milaret627500d2015-03-27 16:41:40 -040087}
88
Edric Milaretfb5fc5c2015-09-24 14:32:49 -040089void
90ConfigurationWidget::showEvent(QShowEvent *event) {
91 QWidget::showEvent(event);
92 if (ui->tabWidget->currentIndex() == 1
93 && CallModel::instance()->getActiveCalls().size() == 0) {
94 Video::PreviewManager::instance()->startPreview();
95 }
96}
97
98void
99ConfigurationWidget::atExit() {
100 if (CallModel::instance()->getActiveCalls().size() == 0
101 && Video::PreviewManager::instance()->isPreviewing()) {
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400102 Video::PreviewManager::instance()->stopPreview();
103 }
Edric Milaret627500d2015-03-27 16:41:40 -0400104 accountModel_->save();
105 accountDetails_->save();
106}
107
108ConfigurationWidget::~ConfigurationWidget()
109{
110 delete ui;
Edric Milaret01f23842015-06-22 14:46:01 -0400111 delete accountStateDelegate_;
Edric Milaret627500d2015-03-27 16:41:40 -0400112}
113
114void
Edric Milaret94b4aab2015-05-08 12:10:44 -0400115ConfigurationWidget::deviceIndexChanged(int index) {
116 ui->deviceBox->setCurrentIndex(index);
117}
118
119void
Edric Milaret627500d2015-03-27 16:41:40 -0400120ConfigurationWidget::on_deviceBox_currentIndexChanged(int index)
121{
122 if (index < 0)
123 return;
124
125 if (!isLoading_)
126 deviceModel_->setActive(index);
127
128 auto device = deviceModel_->activeDevice();
129
130 ui->sizeBox->clear();
131
132 isLoading_ = true;
133 if (device->channelList().size() > 0) {
134 for (auto resolution : device->channelList()[0]->validResolutions()) {
135 ui->sizeBox->addItem(resolution->name());
136 }
137 }
138 ui->sizeBox->setCurrentIndex(
139 device->channelList()[0]->activeResolution()->relativeIndex());
140 isLoading_ = false;
141}
142
143void
144ConfigurationWidget::on_sizeBox_currentIndexChanged(int index)
145{
146 auto device = deviceModel_->activeDevice();
147
148 ui->rateBox->clear();
149
150 if (index < 0)
151 return;
152 if (!isLoading_)
153 device->channelList()[0]->setActiveResolution(
154 device->channelList()[0]->validResolutions()[index]);
155
156 isLoading_ = true;
157 for (auto rate
158 : device->channelList()[0]->validResolutions()[index]->validRates()) {
159 ui->rateBox->addItem(rate->name());
160 }
161 ui->rateBox->setCurrentIndex(
162 device->channelList()[0]->
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400163 activeResolution()->activeRate()->relativeIndex());
Edric Milaret627500d2015-03-27 16:41:40 -0400164 isLoading_ = false;
165}
166
167void
168ConfigurationWidget::on_rateBox_currentIndexChanged(int index)
169{
170 if (index < 0 || isLoading_)
171 return;
172 auto device = deviceModel_->activeDevice();
173 device->channelList()[0]->activeResolution()->setActiveRate(index);
174}
175
176void
177ConfigurationWidget::accountSelected(QItemSelection itemSel) {
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400178
Edric Milaret627500d2015-03-27 16:41:40 -0400179 Q_UNUSED(itemSel)
Edric Milaret3e6aefe2015-06-05 16:07:26 -0400180 auto account = accountModel_->getAccountByModelIndex(
181 ui->accountView->currentIndex());
182 accountDetails_->setAccount(account);
183 AccountSerializationAdapter adapter(account, accountDetails_);
Edric Milaret627500d2015-03-27 16:41:40 -0400184}
185
186void
Edric Milaret627500d2015-03-27 16:41:40 -0400187ConfigurationWidget::on_deleteAccountButton_clicked()
188{
189 auto account = accountModel_->getAccountByModelIndex(
190 ui->accountView->currentIndex());
191 if (account != accountModel_->ip2ip())
192 accountModel_->remove(account);
193}
194
195void
196ConfigurationWidget::on_addAccountButton_clicked()
197{
Edric Milaret53ac6e52015-09-14 13:37:06 -0400198 auto account = accountModel_->add(tr("New Account"),
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400199 ui->accountTypeBox->model()->index(
200 ui->accountTypeBox->currentIndex(), 0));
Edric Milaret031c3052015-04-29 18:14:18 -0400201 account->setRingtonePath(Utils::GetRingtonePath());
Edric Milaret627500d2015-03-27 16:41:40 -0400202 accountModel_->save();
203}
Edric Milaret4bba46d2015-04-29 16:33:38 -0400204
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400205void
206ConfigurationWidget::on_startupBox_toggled(bool checked)
Edric Milaret4bba46d2015-04-29 16:33:38 -0400207{
208 if (checked)
209 Utils::CreateStartupLink();
210 else
211 Utils::DeleteStartupLink();
212}
Edric Milaret3aeae3a2015-06-01 17:31:54 -0400213
214void
Edric Milaret1eece872015-06-10 13:37:51 -0400215ConfigurationWidget::on_clearHistoryButton_clicked()
216{
217 QMessageBox confirmationDialog;
218
Edric Milaret53ac6e52015-09-14 13:37:06 -0400219 confirmationDialog.setText(tr("Are you sure you want to clear all your history?"));
Edric Milaret1eece872015-06-10 13:37:51 -0400220 confirmationDialog.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
221 auto ret = confirmationDialog.exec();
222
223 if (ret == QMessageBox::Ok)
224 CategorizedHistoryModel::instance()->clearAllCollections();
225}
226
227void
228ConfigurationWidget::on_historyDaySettingsSpinBox_valueChanged(int limit)
229{
230 if (CategorizedHistoryModel::instance()->historyLimit() != limit)
231 CategorizedHistoryModel::instance()->setHistoryLimit(limit);
232}
Edric Milaretb25af972015-06-17 16:55:45 -0400233
234void
235ConfigurationWidget::on_closeOrMinCheckBox_toggled(bool checked)
236{
237 settings_.setValue(SettingsKey::closeOrMinimized, checked);
238}