diff options
author | Olli Werwolff <qt-info@nokia.com> | 2010-11-09 09:31:29 +0100 |
---|---|---|
committer | Olli Werwolff <qt-info@nokia.com> | 2010-11-09 09:31:29 +0100 |
commit | fcabc90caa05e7589d583bba26098f795fb3b78e (patch) | |
tree | 7799ea511d43fffeff0c280015c82e77da72c262 | |
parent | b1942be8afd78aa112314b7070c71c4826d35f6a (diff) |
Added missing cameraui.h/.cpp
-rw-r--r-- | src/ui/cameraui.cpp | 311 | ||||
-rw-r--r-- | src/ui/cameraui.h | 129 |
2 files changed, 440 insertions, 0 deletions
diff --git a/src/ui/cameraui.cpp b/src/ui/cameraui.cpp new file mode 100644 index 0000000..a078cde --- /dev/null +++ b/src/ui/cameraui.cpp @@ -0,0 +1,311 @@ +/************************************************************************** +** +** This file is part of Qt Simulator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "cameraui.h" +#include "configurationwidget.h" + +#include <QtCore/QMetaEnum> +#include <QtGui/QComboBox> +#include <QtGui/QLineEdit> +#include <QtGui/QSlider> +#include <QtGui/QDoubleValidator> +#include <QtGui/QPushButton> +#include <QtGui/QRadioButton> +#include <QtGui/QBoxLayout> +#include <QtGui/QDateTimeEdit> +#include <QtGui/QGroupbox> +#include <QtGui/QFormLayout> +#include <QtGui/QInputDialog> +#include <QtGui/QFileDialog> +#include <qmath.h> + +CameraUi::CameraUi(QWidget *parent) + : ToolBoxPage(parent) +{ + qRegisterMetaType<CameraUi::CameraData>("CameraUi::CameraData"); + mScriptInterface = new CameraScriptInterface(this); + + QStringList tags; + QList<OptionsItem *> optionsList; + + mCameras = new QComboBox(); + mRemoveCameraButton = new QPushButton(tr("Remove")); + QPushButton *addCameraButton = new QPushButton(tr("Add")); + QHBoxLayout *hLayout = new QHBoxLayout(); + hLayout->addWidget(mRemoveCameraButton); + hLayout->addWidget(addCameraButton); + connect(mCameras, SIGNAL(activated(int)), SLOT(showCameraInfo())); + connect(addCameraButton, SIGNAL(clicked()), SLOT(addCameraClicked())); + connect(mRemoveCameraButton, SIGNAL(clicked()), SLOT(removeCameraClicked())); + QVBoxLayout *vLayout = new QVBoxLayout(); + vLayout->addWidget(mCameras); + vLayout->addLayout(hLayout); + + QFormLayout *cameraLayout = new QFormLayout(); + mDescriptionEdit = new QLineEdit(); + connect(mDescriptionEdit, SIGNAL(editingFinished()), SLOT(editCameraInfo())); + cameraLayout->addRow(tr("Description"), mDescriptionEdit); + mImageEdit = new QLineEdit(); + connect(mImageEdit, SIGNAL(editingFinished()), SLOT(editCameraInfo())); + mImageBrowseButton = new QPushButton(tr("Browse")); + connect(mImageBrowseButton, SIGNAL(clicked()), SLOT(getImagePath())); + hLayout = new QHBoxLayout(); + hLayout->addWidget(mImageEdit); + hLayout->addWidget(mImageBrowseButton); + cameraLayout->addRow(tr("Image"), hLayout); + QGroupBox *cameraPropertyGroupBox = new QGroupBox(tr("Camera Properties")); + cameraPropertyGroupBox->setLayout(cameraLayout); + vLayout->addWidget(cameraPropertyGroupBox); + QWidget *cameras = new QWidget(); + cameras->setLayout(vLayout); + OptionsItem *item = new OptionsItem("", cameras, true); + QStringList cameraTags = tags; + cameraTags << tr("description"); + item->setTags(cameraTags); + optionsList << item; + + setTitle(tr("Camera")); + setOptions(optionsList); + + // when the data changes, update the display + connect(this, SIGNAL(cameraDataChanged(CameraUi::CameraData)), + SLOT(showCameraInfo())); + connect(this, SIGNAL(cameraAdded(QString, CameraUi::CameraData::CameraDetails)), + SLOT(showCameraInfo())); + connect(this, SIGNAL(cameraRemoved(QString)), + SLOT(showCameraInfo())); + connect(this, SIGNAL(cameraChanged(QString, CameraUi::CameraData::CameraDetails)), + SLOT(showCameraInfo())); +} + +CameraUi::~CameraUi() +{ +} + +CameraScriptInterface *CameraUi::scriptInterface() const +{ + return mScriptInterface; +} + +CameraUi::CameraData CameraUi::cameraData() const +{ + return mData; +} + +void CameraUi::setCameraData(const CameraUi::CameraData &data) +{ + setDisplayedCameraData(data); + emit cameraDataChanged(data); +} + +void CameraUi::setDisplayedCameraData(const CameraUi::CameraData &data) +{ + mData = data; + updateCameraList(); +} + +void CameraUi::getImagePath() +{ + mImageEdit->setText(QFileDialog::getOpenFileName(this, tr("Choose image"), + ".", tr("Images (*.png *.xpm *.jpg)"))); + editCameraInfo(); +} + +void CameraUi::emitCameraDataChange() const +{ + emit cameraDataChanged(cameraData()); +} + +void CameraUi::showCameraInfo() +{ + bool editingEnabled = mCameras->count() != 0; + enableCameraControls(editingEnabled); + + if (!editingEnabled) + return; + + const QString curCamera = mCameras->currentText(); + mDescriptionEdit->setText(mScriptInterface->description(curCamera)); + mImageEdit->setText(mScriptInterface->imagePath(curCamera)); +} + +void CameraUi::editCameraInfo() +{ + if (mCameras->count() == 0) + return; + + const QString curCamera = mCameras->currentText(); + CameraData::CameraDetails &details = mData.cameras[curCamera]; + details.description = mDescriptionEdit->text(); + details.imagePath = mImageEdit->text(); + + emit cameraChanged(curCamera, details); +} + +void CameraUi::updateCameraList(const QString &cameraToShow) +{ + QString showCamera = cameraToShow; + if (showCamera.isNull()) + showCamera = mCameras->currentText(); + + mCameras->clear(); + mCameras->addItems(mData.cameras.keys()); + + if (mData.cameras.contains(showCamera)) + mCameras->setCurrentIndex(mData.cameras.keys().indexOf(showCamera)); + + showCameraInfo(); +} + +void CameraUi::addDisplayedCamera(const QString &name) +{ + CameraData::CameraDetails cameraDetails; + mData.cameras.insert(name, cameraDetails); + updateCameraList(name); +} + +void CameraUi::addCameraClicked() +{ + const QString newName = QInputDialog::getText(0, + "Add New Camera", "Enter the new camera name:"); + if (newName.isEmpty()) + return; + + addDisplayedCamera(newName); + CameraUi::CameraData::CameraDetails details; + emit cameraAdded(newName, details); +} + +void CameraUi::removeDisplayedCamera(const QString &name) +{ + mData.cameras.remove(name); + updateCameraList(); +} + +void CameraUi::removeCameraClicked() +{ + if (mCameras->count() == 0) + return; + + emit cameraRemoved(mCameras->currentText()); + removeDisplayedCamera(mCameras->currentText()); +} + +void CameraUi::enableCameraControls(bool enabled) +{ + mDescriptionEdit->setEnabled(enabled); + mImageEdit->setEnabled(enabled); + mRemoveCameraButton->setEnabled(enabled); + mImageBrowseButton->setEnabled(enabled); +} + +/*! + \class CameraScriptInterface + \brief Exposed as camera. +*/ + +CameraScriptInterface::CameraScriptInterface(CameraUi *ui) + : QObject(ui) + , ui(ui) +{ +} + +CameraScriptInterface::~CameraScriptInterface() +{ +} + +QStringList CameraScriptInterface::availableCameras() const +{ + return ui->mData.cameras.keys(); +} + +bool CameraScriptInterface::addCamera(const QString &name, const QString &description, const QString &imagePath) +{ + if (ui->mData.cameras.contains(name)) + return false; + + ui->addDisplayedCamera(name); + CameraUi::CameraData::CameraDetails &details = ui->mData.cameras[name]; + details.description = description; + details.imagePath = imagePath; + emit ui->cameraAdded(name, details); + return true; +} + +bool CameraScriptInterface::removeCamera(const QString &name) +{ + if (!ui->mData.cameras.contains(name)) + return false; + + ui->removeDisplayedCamera(name); + emit ui->cameraRemoved(name); + return true; +} + +bool CameraScriptInterface::setDescription(const QString &camera, const QString &description) +{ + if (!ui->mData.cameras.contains(camera)) + return false; + + if (ui->mData.cameras[camera].description != description) + { + ui->mData.cameras[camera].description = description; + emit ui->cameraChanged(camera, ui->mData.cameras[camera]); + } + return true; +} + +QString CameraScriptInterface::description(const QString &camera) const +{ + if (!ui->mData.cameras.contains(camera)) + return QString(); + + return ui->mData.cameras[camera].description; +} + +bool CameraScriptInterface::setImagePath(const QString &camera, const QString &imagePath) +{ + if (!ui->mData.cameras.contains(camera)) + return false; + + if (ui->mData.cameras[camera].imagePath != imagePath) + { + ui->mData.cameras[camera].imagePath = imagePath; + emit ui->cameraChanged(camera, ui->mData.cameras[camera]); + } + return true; +} + +QString CameraScriptInterface::imagePath(const QString &camera) const +{ + if (!ui->mData.cameras.contains(camera)) + return QString(); + + return ui->mData.cameras[camera].imagePath; +} diff --git a/src/ui/cameraui.h b/src/ui/cameraui.h new file mode 100644 index 0000000..385b54e --- /dev/null +++ b/src/ui/cameraui.h @@ -0,0 +1,129 @@ +/************************************************************************** +** +** This file is part of Qt Simulator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef CAMERAUI_H +#define CAMERAUI_H + +#include <QtCore/QObject> +#include <QtCore/QHash> + +#include <remotecontrolwidget/toolbox.h> + +class ConfigurationWidget; +class QComboBox; +class QLineEdit; +class QPushButton; +class QRadioButton; +class CameraScriptInterface; + +class CameraUi; + +class CameraScriptInterface : public QObject +{ + Q_OBJECT +public: + CameraScriptInterface(CameraUi *ui); + virtual ~CameraScriptInterface(); + +// Q_PROPERTY(QString description READ description WRITE setDescription) + Q_INVOKABLE QStringList availableCameras() const; + +public slots: + bool addCamera(const QString &name, const QString &description = "", const QString &imagePath = ""); + bool removeCamera(const QString &name); + + bool setDescription(const QString &camera, const QString &description); + QString description(const QString &camera) const; + + bool setImagePath(const QString &camera, const QString &imagePath); + QString imagePath(const QString &camera) const; + +private: + CameraUi *ui; +}; + +class CameraUi : public ToolBoxPage +{ + Q_OBJECT +public: + struct CameraData { + struct CameraDetails { + QString description; + QString imagePath; + }; + QHash<QString, CameraDetails> cameras; + }; + + explicit CameraUi(QWidget *parent = 0); + virtual ~CameraUi(); + + CameraScriptInterface *scriptInterface() const; + + CameraUi::CameraData cameraData() const; + +public slots: + void setCameraData(const CameraUi::CameraData &data); + void setDisplayedCameraData(const CameraUi::CameraData &data); + +signals: + void cameraDataChanged(const CameraUi::CameraData &data) const; + void cameraChanged(const QString &name, const CameraUi::CameraData::CameraDetails &details) const; + void cameraAdded(const QString &name, const CameraUi::CameraData::CameraDetails &details) const; + void cameraRemoved(const QString &name) const; + +private slots: + void emitCameraDataChange() const; + void showCameraInfo(); + void editCameraInfo(); + void updateCameraList(const QString &cameraToShow = QString()); + + void getImagePath(); + + void addDisplayedCamera(const QString &name); + void removeDisplayedCamera(const QString &name); + + void addCameraClicked(); + void removeCameraClicked(); + +private: + void enableCameraControls(bool enabled); + + friend class CameraScriptInterface; + CameraScriptInterface *mScriptInterface; + + QComboBox *mCameras; + QLineEdit *mDescriptionEdit; + QLineEdit *mImageEdit; + QPushButton *mRemoveCameraButton; + QPushButton *mImageBrowseButton; + + CameraData mData; +}; + +#endif // CAMERAUI_H |