first Qt-based client version
Refs #68886
Change-Id: I69b44506dc52a18c47f102466472c68fbf08600b
diff --git a/configurationwidget.cpp b/configurationwidget.cpp
new file mode 100644
index 0000000..fd89339
--- /dev/null
+++ b/configurationwidget.cpp
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Copyright (C) 2011-2015 by Savoir-Faire Linux *
+ * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ **************************************************************************/
+
+#include "configurationwidget.h"
+#include "ui_configurationwidget.h"
+
+#include "video/devicemodel.h"
+#include "video/channel.h"
+#include "video/resolution.h"
+#include "video/rate.h"
+
+#include "accountmodel.h"
+#include "protocolmodel.h"
+#include "accountdetails.h"
+
+#include <video/previewmanager.h>
+
+ConfigurationWidget::ConfigurationWidget(QWidget *parent) :
+ NavWidget(Nav, parent),
+ ui(new Ui::ConfigurationWidget),
+ accountModel_(AccountModel::instance()),
+ deviceModel_(Video::DeviceModel::instance()),
+ accountDetails_(new AccountDetails())
+{
+ ui->setupUi(this);
+
+ ui->accountView->setModel(accountModel_);
+
+ //FIXME : Seems to set the active device instead of taking the default one
+ isLoading_ = true;
+ ui->deviceBox->setModel(deviceModel_);
+ ui->deviceBox->setCurrentIndex(deviceModel_->activeIndex());
+
+ connect(ui->accountView->selectionModel(),
+ SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(accountSelected(QItemSelection)));
+
+ ui->accountView->setCurrentIndex(accountModel_->index(0));
+ ui->accountDetailLayout->addWidget(accountDetails_);
+ ui->testVideoButton->setCheckable(true);
+ ui->accountTypeBox->setModel(accountModel_->protocolModel());
+}
+
+void ConfigurationWidget::atExit() {
+ accountModel_->save();
+ accountDetails_->save();
+}
+
+ConfigurationWidget::~ConfigurationWidget()
+{
+ delete ui;
+}
+
+void
+ConfigurationWidget::on_deviceBox_currentIndexChanged(int index)
+{
+ if (index < 0)
+ return;
+
+ if (!isLoading_)
+ deviceModel_->setActive(index);
+
+ auto device = deviceModel_->activeDevice();
+
+ ui->sizeBox->clear();
+
+ isLoading_ = true;
+ if (device->channelList().size() > 0) {
+ for (auto resolution : device->channelList()[0]->validResolutions()) {
+ ui->sizeBox->addItem(resolution->name());
+ }
+ }
+ ui->sizeBox->setCurrentIndex(
+ device->channelList()[0]->activeResolution()->relativeIndex());
+ isLoading_ = false;
+}
+
+void
+ConfigurationWidget::on_sizeBox_currentIndexChanged(int index)
+{
+ auto device = deviceModel_->activeDevice();
+
+ ui->rateBox->clear();
+
+ if (index < 0)
+ return;
+ if (!isLoading_)
+ device->channelList()[0]->setActiveResolution(
+ device->channelList()[0]->validResolutions()[index]);
+
+ isLoading_ = true;
+ for (auto rate
+ : device->channelList()[0]->validResolutions()[index]->validRates()) {
+ ui->rateBox->addItem(rate->name());
+ }
+ ui->rateBox->setCurrentIndex(
+ device->channelList()[0]->
+ activeResolution()->activeRate()->relativeIndex());
+ isLoading_ = false;
+}
+
+void
+ConfigurationWidget::on_rateBox_currentIndexChanged(int index)
+{
+ if (index < 0 || isLoading_)
+ return;
+ auto device = deviceModel_->activeDevice();
+ device->channelList()[0]->activeResolution()->setActiveRate(index);
+}
+
+void
+ConfigurationWidget::accountSelected(QItemSelection itemSel) {
+ Q_UNUSED(itemSel)
+ accountDetails_->setAccount(accountModel_->getAccountByModelIndex(
+ ui->accountView->currentIndex()));
+}
+
+void
+ConfigurationWidget::on_testVideoButton_toggled(bool checked)
+{
+ checked ? Video::PreviewManager::instance()->startPreview()
+ : Video::PreviewManager::instance()->stopPreview();
+}
+
+void
+ConfigurationWidget::on_deleteAccountButton_clicked()
+{
+ auto account = accountModel_->getAccountByModelIndex(
+ ui->accountView->currentIndex());
+ if (account != accountModel_->ip2ip())
+ accountModel_->remove(account);
+}
+
+void
+ConfigurationWidget::on_addAccountButton_clicked()
+{
+ accountModel_->add("New Account",
+ ui->accountTypeBox->model()->index(
+ ui->accountTypeBox->currentIndex(), 0));
+ accountModel_->save();
+}