diff options
Diffstat (limited to 'demos/mobile/qcamera')
-rwxr-xr-x | demos/mobile/qcamera/businesscardhandling.cpp | 145 | ||||
-rwxr-xr-x | demos/mobile/qcamera/businesscardhandling.h | 80 | ||||
-rwxr-xr-x | demos/mobile/qcamera/button.cpp | 107 | ||||
-rwxr-xr-x | demos/mobile/qcamera/button.h | 69 | ||||
-rwxr-xr-x | demos/mobile/qcamera/cameraexample.cpp | 514 | ||||
-rwxr-xr-x | demos/mobile/qcamera/cameraexample.h | 154 | ||||
-rwxr-xr-x | demos/mobile/qcamera/contactsdlg.cpp | 156 | ||||
-rwxr-xr-x | demos/mobile/qcamera/contactsdlg.h | 47 | ||||
-rwxr-xr-x | demos/mobile/qcamera/icons/camera.png | bin | 0 -> 15868 bytes | |||
-rwxr-xr-x | demos/mobile/qcamera/icons/cameramms_icon.svg | 255 | ||||
-rwxr-xr-x | demos/mobile/qcamera/icons/exit.png | bin | 0 -> 14026 bytes | |||
-rwxr-xr-x | demos/mobile/qcamera/icons/mms.png | bin | 0 -> 12281 bytes | |||
-rwxr-xr-x | demos/mobile/qcamera/main.cpp | 124 | ||||
-rwxr-xr-x | demos/mobile/qcamera/messagehandling.cpp | 180 | ||||
-rwxr-xr-x | demos/mobile/qcamera/messagehandling.h | 89 | ||||
-rwxr-xr-x | demos/mobile/qcamera/qcamera.pro | 62 | ||||
-rw-r--r-- | demos/mobile/qcamera/qcamera.pro.user | 582 | ||||
-rwxr-xr-x | demos/mobile/qcamera/resources.qrc | 7 |
18 files changed, 2571 insertions, 0 deletions
diff --git a/demos/mobile/qcamera/businesscardhandling.cpp b/demos/mobile/qcamera/businesscardhandling.cpp new file mode 100755 index 0000000..7c3cd81 --- /dev/null +++ b/demos/mobile/qcamera/businesscardhandling.cpp @@ -0,0 +1,145 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "businesscardhandling.h" +#include <QFile> + +BusinessCardHandling::BusinessCardHandling(QObject *parent) : + QObject(parent) +{ +} + +BusinessCardHandling::~BusinessCardHandling() +{ + delete m_contactManager; +} + +void BusinessCardHandling::createContactManager() +{ +#if defined Q_WS_MAEMO_5 + m_contactManager = new QContactManager("maemo5"); +#elif defined Q_OS_SYMBIAN + m_contactManager = new QContactManager("symbian"); +#endif + + // Use default + if (!m_contactManager) { + m_contactManager = new QContactManager(); + } +} + +void BusinessCardHandling::storeAvatarToContact(QString phoneNumber, QString filename, + QPixmap pixmap) +{ + // Create QContactManager + if (!m_contactManager) { + createContactManager(); + } + + // Search contacts and save avatar + QContact contact; + if (findContact(phoneNumber, contact)) { + saveAvatar(filename, pixmap, contact); + } +} + +bool BusinessCardHandling::findContact(const QString phoneNumber, QContact& c) +{ + // Create QContactManager + if (!m_contactManager) { + createContactManager(); + } + + QContact contact; + QContactDetailFilter phoneFilter; + phoneFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName, + QContactPhoneNumber::FieldNumber); + +#if defined Q_WS_MAEMO_5 + // Workaround for Maemo bug http://bugreports.qt.nokia.com/browse/QTMOBILITY-437 + phoneFilter.setValue(phoneNumber.right(7)); + phoneFilter.setMatchFlags(QContactFilter::MatchContains); +#else + phoneFilter.setValue(phoneNumber); + phoneFilter.setMatchFlags(QContactFilter::MatchPhoneNumber); +#endif + + // Find contacts + QList<QContact> matchingContacts = m_contactManager->contacts(phoneFilter); + if (matchingContacts.size() > 0) { + contact = matchingContacts.at(0); + c = contact; + return true; + } else { + return false; + } +} + +void BusinessCardHandling::saveAvatar(const QString filename, QPixmap p, QContact& contact) +{ + + // Path to store avatar picture + QString path; +#ifdef Q_OS_SYMBIAN + path.append("c:/System/"); +#endif + path.append(filename); + + // Remove same file if exists + QFile file; + if (file.exists(path)) + file.remove(path); + + // Save pixmap into file + bool saveRet = p.save(path); + + if (saveRet) { + // Create avatar + QContactAvatar contactAvatar; + contactAvatar.setImageUrl(QUrl(path)); + bool saveAvatar = contact.saveDetail(&contactAvatar); + + // Save contact + if (saveAvatar) + m_contactManager->saveContact(&contact); + + // NOTE: Do not remove picture, system needs it for showing avatar + // Remove picture file + //bool removeRet = file.remove(path); + } +} + diff --git a/demos/mobile/qcamera/businesscardhandling.h b/demos/mobile/qcamera/businesscardhandling.h new file mode 100755 index 0000000..a4e998d --- /dev/null +++ b/demos/mobile/qcamera/businesscardhandling.h @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BUSINESSCARDHANDLING_H +#define BUSINESSCARDHANDLING_H + +#include <QObject> +#include <QPointer> +#include <QPixmap> + +// QtMobility API headers +// Contacts +#include <QContactDetailFilter> +#include <QContactManager> +#include <QContactPhoneNumber> +#include <QContactSortOrder> +#include <QContact> +#include <QContactName> +#include <QContactAvatar> + + +// QtMobility namespace +QTM_USE_NAMESPACE + +class BusinessCardHandling: public QObject +{ +Q_OBJECT + +public: + BusinessCardHandling(QObject *parent = 0); + ~BusinessCardHandling(); + + bool findContact(const QString phoneNumber, QContact& contact); + +public slots: + void storeAvatarToContact(QString, QString, QPixmap); + +private: + void createContactManager(); + void saveAvatar(const QString filename, QPixmap p, QContact& contact); + +private: + QPointer<QContactManager> m_contactManager; +}; + +#endif // BUSINESSCARDHANDLING_H diff --git a/demos/mobile/qcamera/button.cpp b/demos/mobile/qcamera/button.cpp new file mode 100755 index 0000000..cc09a11 --- /dev/null +++ b/demos/mobile/qcamera/button.cpp @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "button.h" +#include <QMouseEvent> +#include <QPainter> +#include <QTimer> + +Button::Button(QWidget *parent, Qt::WindowFlags f) : + QLabel(parent, f) +{ + m_downPixmap = 0; + m_disabled = false; +} + +Button::~Button() +{ +} + +void Button::disableBtn(bool b) +{ + m_disabled = b; + if (m_disabled) { + setPixmap(m_downPixmap); + } else { + setPixmap(m_upPixmap); + } +} + +void Button::mousePressEvent(QMouseEvent *event) +{ + if (!m_disabled) { + event->accept(); + setPixmap(m_downPixmap); + repaint(); + // Lift button back to up after 300ms + QTimer::singleShot(300, this, SLOT(backToUp())); + } +} + +void Button::backToUp() +{ + setPixmap(m_upPixmap); + repaint(); + emit pressed(); +} + +void Button::setPixmap(const QPixmap& p) +{ + // Set up and down picture for the button + // Set pixmap + if (!p.isNull()) + QLabel::setPixmap(p); + + // Make down pixmap if it does not exists + if (m_downPixmap.isNull()) { + // Store up pixmap + m_upPixmap = *pixmap(); + + // Create down pixmap + // Make m_downPixmap as a transparent m_upPixmap + QPixmap transparent(m_upPixmap.size()); + transparent.fill(Qt::transparent); + QPainter painter(&transparent); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.drawPixmap(0, 0, m_upPixmap); + painter.setCompositionMode(QPainter::CompositionMode_DestinationIn); + painter.fillRect(transparent.rect(), QColor(0, 0, 0, 150)); + painter.end(); + m_downPixmap = transparent; + } + +} diff --git a/demos/mobile/qcamera/button.h b/demos/mobile/qcamera/button.h new file mode 100755 index 0000000..e6f295b --- /dev/null +++ b/demos/mobile/qcamera/button.h @@ -0,0 +1,69 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef BUTTON_H +#define BUTTON_H + +#include <QLabel> +#include <QPixmap> + +class Button: public QLabel +{ +Q_OBJECT + +public: + Button(QWidget *parent = 0, Qt::WindowFlags f = 0); + ~Button(); + + void mousePressEvent(QMouseEvent *); + void disableBtn(bool); + +public Q_SLOTS: + void setPixmap(const QPixmap &); + void backToUp(); + + signals: + void pressed(); + +private: + QPixmap m_upPixmap; + QPixmap m_downPixmap; + bool m_disabled; + +}; + +#endif // BUTTON_H diff --git a/demos/mobile/qcamera/cameraexample.cpp b/demos/mobile/qcamera/cameraexample.cpp new file mode 100755 index 0000000..9b5c71b --- /dev/null +++ b/demos/mobile/qcamera/cameraexample.cpp @@ -0,0 +1,514 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "cameraexample.h" +#include "messagehandling.h" +#include "contactsdlg.h" +#include "button.h" +#include "businesscardhandling.h" +#include <QDebug> + +/***************************************************************************** +* MyVideoSurface +*/ +MyVideoSurface::MyVideoSurface(QWidget* widget, VideoIF* target, QObject* parent) + : QAbstractVideoSurface(parent) +{ + m_targetWidget = widget; + m_target = target; + m_imageFormat = QImage::Format_Invalid; +} + +MyVideoSurface::~MyVideoSurface() +{ +} + +bool MyVideoSurface::start(const QVideoSurfaceFormat &format) +{ + m_videoFormat = format; + const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat()); + const QSize size = format.frameSize(); + + if (imageFormat != QImage::Format_Invalid && !size.isEmpty()) { + m_imageFormat = imageFormat; + QAbstractVideoSurface::start(format); + return true; + } else { + return false; + } +} + +bool MyVideoSurface::present(const QVideoFrame &frame) +{ + m_frame = frame; + if (surfaceFormat().pixelFormat() != m_frame.pixelFormat() || + surfaceFormat().frameSize() != m_frame.size()) { + stop(); + return false; + } else { + m_target->updateVideo(); + return true; + } +} + +void MyVideoSurface::paint(QPainter *painter) + { + if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) { + QImage image( + m_frame.bits(), + m_frame.width(), + m_frame.height(), + m_frame.bytesPerLine(), + m_imageFormat); + + QRect r = m_targetWidget->rect(); + QPoint centerPic((qAbs(r.size().width() - image.size().width())) / 2, (qAbs( + r.size().height() - image.size().height())) / 2); + + if (!image.isNull()) { + painter->drawImage(centerPic,image); + } + + m_frame.unmap(); + } + } + +QList<QVideoFrame::PixelFormat> MyVideoSurface::supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType) const +{ + if (handleType == QAbstractVideoBuffer::NoHandle) { + return QList<QVideoFrame::PixelFormat>() + << QVideoFrame::Format_RGB32 + << QVideoFrame::Format_ARGB32 + << QVideoFrame::Format_ARGB32_Premultiplied + << QVideoFrame::Format_RGB565 + << QVideoFrame::Format_RGB555; + } else { + return QList<QVideoFrame::PixelFormat>(); + } +} + + +/***************************************************************************** +* CameraExample +*/ +CameraExample::CameraExample(QWidget *parent) : + QMainWindow(parent) +{ + setWindowTitle("QCameraExample"); + + // Opitimizations for screen update and drawing qwidget + setAutoFillBackground(false); + + // Prevent to screensaver to activate + m_systemScreenSaver = new QSystemScreenSaver(this); + m_systemScreenSaver->setScreenSaverInhibit(); + + m_myVideoSurface = 0; + pictureCaptured = false; + showViewFinder = false; + m_focusing = false; + + // MMS handling + m_message = new Message(this); + QObject::connect(m_message, SIGNAL(messageStateChanged(int)), this, SLOT(messageStateChanged(int))); + QObject::connect(m_message, SIGNAL(messageReceived(QString,QString,QPixmap)), this, SLOT(messageReceived(QString,QString,QPixmap))); + + // Business card handling (Contact's avatar picture) + m_businessCardHandling = new BusinessCardHandling(this); + + // Black background + QPalette palette = this->palette(); + palette.setColor(QPalette::Background, Qt::black); + setPalette(palette); + + // Main widget & layout + QWidget* mainWidget = new QWidget(this); + mainWidget->setPalette(palette); + + QHBoxLayout* hboxl = new QHBoxLayout; + hboxl->setSpacing(0); + hboxl->setMargin(0); + + // UI stack + m_stackedWidget = new QStackedWidget(); + m_stackedWidget->setPalette(palette); + + // First widget to stack + m_videoWidget = new QWidget(); + m_videoWidget->setPalette(palette); + m_stackedWidget->addWidget(m_videoWidget); + + // Second widget to stack + QWidget* secondWidget = new QWidget(this); + secondWidget->setPalette(palette); + m_stackedWidget->addWidget(secondWidget); + m_stackedWidget->setCurrentIndex(0); + + hboxl->addWidget(m_stackedWidget); + + // Buttons + QSize iconSize(80, 80); + QVBoxLayout* vboxl = new QVBoxLayout; + vboxl->setSpacing(0); + vboxl->setMargin(0); + + // Exit button + m_exit = new Button(this); + QObject::connect(m_exit, SIGNAL(pressed()), qApp, SLOT(quit())); + QPixmap p = QPixmap(":/icons/exit.png"); + m_exit->setPixmap(p.scaled(iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + vboxl->addWidget(m_exit); + vboxl->setAlignment(m_exit, Qt::AlignHCenter | Qt::AlignTop); + + // Camera button + m_cameraBtn = new Button(this); + QObject::connect(m_cameraBtn, SIGNAL(pressed()), this, SLOT(searchAndLock())); + p = QPixmap(":/icons/camera.png"); + m_cameraBtn->setPixmap(p.scaled(iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + vboxl->addWidget(m_cameraBtn); + vboxl->setAlignment(m_cameraBtn, Qt::AlignCenter); + + // Send MMS button + m_mms = new Button(this); + QObject::connect(m_mms, SIGNAL(pressed()), this, SLOT(openContactsDlg())); + p = QPixmap(":/icons/mms.png"); + m_mms->setPixmap(p.scaled(iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + vboxl->addWidget(m_mms); + vboxl->setAlignment(m_mms, Qt::AlignHCenter | Qt::AlignBottom); +#ifndef MESSAGING_ENABLED + m_mms->disableBtn(true); + m_mms->setEnabled(false); +#endif + + hboxl->addLayout(vboxl); + mainWidget->setLayout(hboxl); + + setCentralWidget(mainWidget); + + // Enable camera after 1s, so that the application is started + // and widget is created to landscape orientation + QTimer::singleShot(1000,this,SLOT(enableCamera())); +} + +CameraExample::~CameraExample() +{ +if (m_myVideoSurface) + m_myVideoSurface->stop(); + m_camera->stop(); + delete m_stackedWidget; + delete m_stillImageCapture; + delete m_camera; +} + + +void CameraExample::enableCamera() +{ + m_camera = new QCamera(); + m_camera->setCaptureMode(QCamera::CaptureStillImage); + connect(m_camera, SIGNAL(error(QCamera::Error)), this, SLOT(error(QCamera::Error))); + connect(m_camera, SIGNAL(lockStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason)), this, SLOT(lockStatusChanged(QCamera::LockStatus,QCamera::LockChangeReason))); + + // Own video output drawing that shows camera view finder pictures + //! [0] + QMediaService* ms = m_camera->service(); + QVideoRendererControl* vrc = ms->requestControl<QVideoRendererControl*>(); + m_myVideoSurface = new MyVideoSurface(this,this,this); + vrc->setSurface(m_myVideoSurface); +//! [0] + // Image capturer + m_stillImageCapture = new QCameraImageCapture(m_camera); + connect(m_stillImageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(imageCaptured(int,QImage))); + + // Start camera + if (m_camera->state() == QCamera::ActiveState) { + m_camera->stop(); + } + m_videoWidget->show(); + m_camera->start(); + showViewFinder = true; +} + +void CameraExample::mousePressEvent(QMouseEvent *event) +{ + QMainWindow::mousePressEvent(event); + + if (pictureCaptured) { + // Starting view finder + pictureCaptured = false; + m_stackedWidget->setCurrentIndex(0); + if (m_myVideoSurface) { + showViewFinder = true; + } + } +} + +void CameraExample::searchAndLock() +{ + m_focusing = false; + m_focusMessage.clear(); + + if (pictureCaptured) { + // Starting view finder again + pictureCaptured = false; + m_stackedWidget->setCurrentIndex(0); + if (m_myVideoSurface) { + showViewFinder = true; + } + } + else { + // Search and lock picture (=focus) + if (m_camera->supportedLocks() & QCamera::LockFocus) { + m_focusing = true; + m_focusMessage = "Focusing..."; + m_camera->searchAndLock(QCamera::LockFocus); + } else { + // No focus functionality, take picture right away + captureImage(); + } + } +} + +void CameraExample::lockStatusChanged(QCamera::LockStatus status, QCamera::LockChangeReason reason) +{ + if (status == QCamera::Locked) { + if (reason == QCamera::LockAcquired) { + // Focus locked + m_focusMessage.clear(); + m_focusing = false; + // Capture new image + captureImage(); + // Unlock camera + m_camera->unlock(); + } else { + if (m_focusing) + m_focusMessage = "No focus, try again"; + } + } else if (status == QCamera::Unlocked && m_focusing) { + m_focusMessage = "No focus, try again"; + } +} + +void CameraExample::captureImage() +{ + if (pictureCaptured) { + // Starting view finder again + pictureCaptured = false; + m_stackedWidget->setCurrentIndex(0); + showViewFinder = true; + } + else { + // Capturing image + showViewFinder = false; + // Get picture location where to store captured images + QString path(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)); + QDir dir(path); + + // Get next filename + QStringList files = dir.entryList(QStringList() << "camera_*.jpg"); + int lastImage = 0; + foreach ( QString fileName, files ) { + int imgNumber = fileName.mid(7, fileName.size() - 11).toInt(); + lastImage = qMax(lastImage, imgNumber); + } + // Capture image + if (m_stillImageCapture->isReadyForCapture()) { + m_imageName = QString("camera_%1.jpg").arg(lastImage+1); + m_stillImageCapture->capture(m_imageName); + } + } +} + +void CameraExample::imageCaptured(int id, const QImage &preview) +{ + showViewFinder = false; + m_focusing = false; + + // Image captured, show it to the user + m_stackedWidget->setCurrentIndex(1); + + // Get picture location + QString path(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)); + m_imageName.prepend(path + "/"); + + m_capturedImage = preview; + + // Set suitable size to the image + QSize s = m_videoWidget->size(); + s = s - QSize(20, 20); + m_capturedImage = m_capturedImage.scaled(s, Qt::KeepAspectRatio, Qt::SmoothTransformation); + + pictureCaptured = true; + update(); +} + +void CameraExample::error(QCamera::Error e) +{ + switch (e) { + case QCamera::NoError: + { + break; + } + case QCamera::CameraError: + { + QMessageBox::warning(this, "QCameraExample", "General Camera error"); + break; + } + case QCamera::InvalidRequestError: + { + QMessageBox::warning(this, "QCameraExample", "Camera invalid request error"); + break; + } + case QCamera::ServiceMissingError: + { + QMessageBox::warning(this, "QCameraExample", "Camera service missing error"); + break; + } + case QCamera::NotSupportedFeatureError : + { + QMessageBox::warning(this, "QCameraExample", "Camera not supported error"); + break; + } + }; +} + +void CameraExample::openContactsDlg() +{ + // Open dialog for showing contacts + if (!m_contactsDialog) { + + if (m_capturedImage.isNull()) { + QMessageBox::information(this, "QCameraExample", "Take picture first"); + return; + } + + // Show dialog + m_contactsDialog = new ContactsDialog(this); + QObject::connect(m_contactsDialog, SIGNAL(contactSelected(QString)), + this, SLOT(contactSelected(QString))); + m_contactsDialog->exec(); + QObject::disconnect(m_contactsDialog, SIGNAL(contactSelected(QString)), + this, SLOT(contactSelected(QString))); + + delete m_contactsDialog; + m_contactsDialog = 0; + } +} + +void CameraExample::contactSelected(QString phoneNumber) +{ + m_phoneNumber = phoneNumber; + QTimer::singleShot(1000,this,SLOT(sendMMS())); +} + +void CameraExample::sendMMS() +{ +#ifdef MESSAGING_ENABLED + m_message->sendMMS(m_imageName, m_phoneNumber); +#endif +} + +void CameraExample::messageStateChanged(int /*error*/) +{ +} + +void CameraExample::updateVideo() +{ + if (showViewFinder) { + repaint(); + } +} + +void CameraExample::paintEvent(QPaintEvent *event) +{ + //QMainWindow::paintEvent(event); + + QPainter painter(this); + QRect r = this->rect(); + + QFont font = painter.font(); + font.setPixelSize(20); + painter.setFont(font); + painter.setPen(Qt::white); + + if (showViewFinder && m_myVideoSurface && m_myVideoSurface->isActive()) { + // Show view finder + m_myVideoSurface->paint(&painter); + + // Paint focus message + if (!m_focusMessage.isEmpty()) + painter.drawText(r, Qt::AlignCenter, m_focusMessage); + + } else { + // Draw black + painter.fillRect(event->rect(), palette().background()); + // Show captured image + if (pictureCaptured) { + // Paint captured image + QPoint centerPic((qAbs(r.size().width() - m_capturedImage.size().width())) / 2, (qAbs( + r.size().height() - m_capturedImage.size().height())) / 2); + + painter.drawImage(centerPic, m_capturedImage); + + // Paint filename + painter.drawText(r, Qt::AlignBottom | Qt::AlignCenter, m_imageName); + } + } + +} + +void CameraExample::messageReceived(QString phoneNumber, QString filename, QPixmap pixmap) +{ +#ifdef MESSAGING_ENABLED + // MMS message received + // Check that is came from some of our contact + QContact contact; + if (m_businessCardHandling->findContact(phoneNumber, contact)) { + // Ask from user to store it as sender avatar picture into contacts + if (QMessageBox::question( + this, + "QCameraExample", + QString( + "MMS picture message received from %1. Do you want to store it as sender avatar picture?").arg( + contact.displayLabel()), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + + m_businessCardHandling->storeAvatarToContact(phoneNumber, filename, pixmap); + } + } +#endif +} + diff --git a/demos/mobile/qcamera/cameraexample.h b/demos/mobile/qcamera/cameraexample.h new file mode 100755 index 0000000..77883f9 --- /dev/null +++ b/demos/mobile/qcamera/cameraexample.h @@ -0,0 +1,154 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef QCAMERAEXAMPLE_H +#define QCAMERAEXAMPLE_H + +#include <QtGui> + +// Multimedia API in QtMobility API +// Unlike the other APIs in Qt Mobility, +// the Multimedia API is not in the QtMobility namespace "QTM_USE_NAMESPACE" +#include <QCamera> +#include <QCameraImageCapture> + +// QtMobility API +#include <QSystemScreenSaver> +QTM_USE_NAMESPACE + + +#include <QAbstractVideoSurface> +#include <QVideoRendererControl> +#include <QVideoSurfaceFormat> + +/***************************************************************************** +* MyVideoSurface +*/ +class VideoIF +{ +public: + virtual void updateVideo() = 0; +}; +class MyVideoSurface: public QAbstractVideoSurface +{ +Q_OBJECT + +public: + MyVideoSurface(QWidget* widget, VideoIF* target, QObject * parent = 0); + ~MyVideoSurface(); + + bool start(const QVideoSurfaceFormat &format); + + bool present(const QVideoFrame &frame); + + QList<QVideoFrame::PixelFormat> supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const; + + void paint(QPainter*); + +private: + QWidget* m_targetWidget; + VideoIF* m_target; + QVideoFrame m_frame; + QImage::Format m_imageFormat; + QVideoSurfaceFormat m_videoFormat; +}; + + + +/***************************************************************************** +* CameraExample +*/ +class Message; +class ContactsDialog; +class Button; +class BusinessCardHandling; +class CameraExample: public QMainWindow, public VideoIF +{ +Q_OBJECT + +public: + CameraExample(QWidget *parent = 0); + ~CameraExample(); + + void paintEvent(QPaintEvent*); + void mousePressEvent(QMouseEvent *); + + void updateVideo(); + + +public slots: + void enableCamera(); + void lockStatusChanged(QCamera::LockStatus status, QCamera::LockChangeReason reason); + void searchAndLock(); + void captureImage(); + void imageCaptured(int id, const QImage &preview); + void error(QCamera::Error); + + void openContactsDlg(); + void contactSelected(QString phoneNumber); + + void messageStateChanged(int error); + void messageReceived(QString phoneNumber, QString filename, QPixmap pixmap); + + void sendMMS(); + +private: + QWidget* m_videoWidget; + QCamera* m_camera; + QCameraImageCapture* m_stillImageCapture; + + QStackedWidget* m_stackedWidget; + Button* m_exit; + Button* m_cameraBtn; + Button* m_mms; + QImage m_capturedImage; + QString m_imageName; + QString m_focusMessage; + bool m_focusing; + QString m_phoneNumber; + + Message* m_message; + QPointer<ContactsDialog> m_contactsDialog; + BusinessCardHandling* m_businessCardHandling; + bool pictureCaptured; + bool showViewFinder; + MyVideoSurface* m_myVideoSurface; + QSystemScreenSaver* m_systemScreenSaver; +}; + +#endif // QCAMERA_H diff --git a/demos/mobile/qcamera/contactsdlg.cpp b/demos/mobile/qcamera/contactsdlg.cpp new file mode 100755 index 0000000..fff81fd --- /dev/null +++ b/demos/mobile/qcamera/contactsdlg.cpp @@ -0,0 +1,156 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "contactsdlg.h" +#include <QHBoxLayout> +#include <QApplication> +#include <QAction> +#include <QTimer> +#include <QPushButton> + +ContactsDialog::ContactsDialog(QWidget *parent) : + QDialog(parent) +{ + QHBoxLayout* l = new QHBoxLayout; + m_listWidget = new QListWidget(this); + l->addWidget(m_listWidget); + + QVBoxLayout* lv = new QVBoxLayout; + + QPushButton* backBtn = new QPushButton("Back",this); + QObject::connect(backBtn, SIGNAL(pressed()), this, SLOT(close())); + backBtn->setFixedWidth(100); + lv->addWidget(backBtn); + lv->setAlignment(backBtn,Qt::AlignTop); + + QPushButton* okBtn = new QPushButton("Ok",this); + QObject::connect(okBtn, SIGNAL(pressed()), this, SLOT(selectContact())); + okBtn->setFixedWidth(100); + lv->addWidget(okBtn); + lv->setAlignment(okBtn,Qt::AlignBottom); + + l->addLayout(lv); + + setLayout(l); + + // Remove context menu from the all widgets +#ifdef Q_OS_SYMBIAN + QWidgetList widgets = QApplication::allWidgets(); + QWidget* w = 0; + foreach (w,widgets) + { + w->setContextMenuPolicy(Qt::NoContextMenu); + } +#endif + + // Create QContactManager and search contacts + createContactManager(); + searchContact(); + + showFullScreen(); +} + +ContactsDialog::~ContactsDialog() +{ + delete m_contactManager; +} + +void ContactsDialog::createContactManager() +{ +#if defined Q_WS_MAEMO_5 + m_contactManager = new QContactManager("maemo5"); +#elif defined Q_OS_SYMBIAN + m_contactManager = new QContactManager("symbian"); +#endif + + // Use default + if (!m_contactManager) { + m_contactManager = new QContactManager(); + } + +} + +void ContactsDialog::searchContact() +{ + m_listWidget->clear(); + + // Sort contacts by lastname + QContactSortOrder sort; + sort.setDirection(Qt::AscendingOrder); + sort.setDetailDefinitionName(QContactName::DefinitionName, QContactName::FieldLastName); + + // Build QListWidget from the contact list + QList<QContactLocalId> contactIds = m_contactManager->contactIds(sort); + QContact currContact; + foreach (const QContactLocalId& id, contactIds) + { + QListWidgetItem *currItem = new QListWidgetItem; + currContact = m_contactManager->contact(id); + QContactDisplayLabel dl = currContact.detail(QContactDisplayLabel::DefinitionName); + currItem->setData(Qt::DisplayRole, dl.label()); + currItem->setData(Qt::UserRole, currContact.localId()); // also store the id of the contact + m_listWidget->addItem(currItem); + } + + if (m_listWidget->count()>0) { + m_listWidget->setCurrentRow(0); + } +} + +void ContactsDialog::selectContact() +{ + QList<QListWidgetItem*> items = m_listWidget->selectedItems(); + if (!items.isEmpty()) { + itemClicked(items.first()); + } +} + +void ContactsDialog::itemClicked(QListWidgetItem *item) +{ + QVariant data = item->data(Qt::UserRole); + QContactLocalId id = data.toInt(); + QContact contact = m_contactManager->contact(id); + QContactPhoneNumber cpn = contact.detail<QContactPhoneNumber> (); + + // Emit contact phonenumber + if (!cpn.isEmpty()) { + emit contactSelected(cpn.number()); + // Close dialog + close(); + } +} + diff --git a/demos/mobile/qcamera/contactsdlg.h b/demos/mobile/qcamera/contactsdlg.h new file mode 100755 index 0000000..e9d5c17 --- /dev/null +++ b/demos/mobile/qcamera/contactsdlg.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2011 Nokia Corporation. + */ + +#ifndef CONTACTSDIALOG_H +#define CONTACTSDIALOG_H + +#include <QtGui/QDialog> +#include <QListWidget> +#include <QPointer> + +// QtMobility API headers +// Contacts +#include <QContactManager> +#include <QContactPhoneNumber> +#include <QContactSortOrder> +#include <QContact> +#include <QContactName> + +// QtMobility namespace +QTM_USE_NAMESPACE + +class ContactsDialog: public QDialog +{ +Q_OBJECT + +public: + ContactsDialog(QWidget *parent = 0); + ~ContactsDialog(); + +public slots: + void itemClicked(QListWidgetItem *item); + void selectContact(); + +signals: + void contactSelected(QString phoneNumber); + +private: + void createContactManager(); + void searchContact(); + +private: + QPointer<QContactManager> m_contactManager; + QListWidget* m_listWidget; +}; + +#endif // CONTACTSDIALOG_H diff --git a/demos/mobile/qcamera/icons/camera.png b/demos/mobile/qcamera/icons/camera.png Binary files differnew file mode 100755 index 0000000..dc4ecbf --- /dev/null +++ b/demos/mobile/qcamera/icons/camera.png diff --git a/demos/mobile/qcamera/icons/cameramms_icon.svg b/demos/mobile/qcamera/icons/cameramms_icon.svg new file mode 100755 index 0000000..ae6f354 --- /dev/null +++ b/demos/mobile/qcamera/icons/cameramms_icon.svg @@ -0,0 +1,255 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128" + height="128" + id="svg2" + version="1.1" + inkscape:version="0.48.0 r9654" + sodipodi:docname="camera.svg"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.98994949" + inkscape:cx="474.09541" + inkscape:cy="161.58756" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1098" + inkscape:window-height="864" + inkscape:window-x="565" + inkscape:window-y="18" + inkscape:window-maximized="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-924.36218)"> + <image + y="923.7124" + x="-0.36037713" + id="image3004" + xlink:href="data:image/png;base64,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 +" + height="128" + width="128" /> + </g> +</svg> diff --git a/demos/mobile/qcamera/icons/exit.png b/demos/mobile/qcamera/icons/exit.png Binary files differnew file mode 100755 index 0000000..dbe586a --- /dev/null +++ b/demos/mobile/qcamera/icons/exit.png diff --git a/demos/mobile/qcamera/icons/mms.png b/demos/mobile/qcamera/icons/mms.png Binary files differnew file mode 100755 index 0000000..46a1a73 --- /dev/null +++ b/demos/mobile/qcamera/icons/mms.png diff --git a/demos/mobile/qcamera/main.cpp b/demos/mobile/qcamera/main.cpp new file mode 100755 index 0000000..7d46554 --- /dev/null +++ b/demos/mobile/qcamera/main.cpp @@ -0,0 +1,124 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "cameraexample.h" + +#include <QtGui> +#include <QApplication> +#include <QDebug> + +// Lock Symbian orientation +#ifdef Q_OS_SYMBIAN +#include <eikenv.h> +#include <eikappui.h> +#include <aknenv.h> +#include <aknappui.h> +#endif + + +#ifdef Q_OS_SYMBIAN +#include <QSymbianEvent> +#include <w32std.h> + +#endif + +static const int KGoomMemoryLowEvent = 0x10282DBF; +static const int KGoomMemoryGoodEvent = 0x20026790; + +class MyApplication : public QApplication +{ +public: + MyApplication( int argc, char** argv ) : QApplication( argc, argv ) {} + +#ifdef Q_OS_SYMBIAN +protected: +//! [0] + bool symbianEventFilter( const QSymbianEvent* symbianEvent ) + { + const TWsEvent *event = symbianEvent->windowServerEvent(); + if ( !event ) { + return false; + } + switch ( event->Type() ) { + // GOOM handling enabled + // http://wiki.forum.nokia.com/index.php/Graphics_memory_handling + case EEventUser: { + TApaSystemEvent* eventData = reinterpret_cast<TApaSystemEvent*>(event->EventData()); + if ((*eventData) == EApaSystemEventShutdown) { + eventData++; + if ((*eventData) == KGoomMemoryLowEvent) { + return true; + } + } + break; + } + default: + break; + }; + + // Always return false so we don't stop + // the event from being processed + return false; + } +//! [0] +#endif +}; + + +int main(int argc, char *argv[]) +{ + // NOTE: set this value before creating MyApplication instance + // http://doc.trolltech.com/qapplication.html#setGraphicsSystem + QApplication::setGraphicsSystem("raster"); // NOTE: Seems that raster have to be enabled with Nokia N8 + + MyApplication a(argc, argv); + + // Lock Symbian orientation +#ifdef Q_OS_SYMBIAN + CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi()); + TRAP_IGNORE( + if (appUi) { + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape); + } + ); +#endif + + CameraExample w; + w.showFullScreen(); + + return a.exec(); +} diff --git a/demos/mobile/qcamera/messagehandling.cpp b/demos/mobile/qcamera/messagehandling.cpp new file mode 100755 index 0000000..04d0139 --- /dev/null +++ b/demos/mobile/qcamera/messagehandling.cpp @@ -0,0 +1,180 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "messagehandling.h" +#include <QMessageBox> +#include <QDebug> +#include <QTimerEvent> +#include <QTimer> +#include <QFile> +#include <QPixmap> +#include <QImageReader> + +Message::Message(QObject *parent) : + QObject(parent) +{ + // QMessageService class provides the interface for requesting messaging service operations + m_service = new QMessageService(this); + //QObject::connect(m_service, SIGNAL(stateChanged(QMessageService::State)), this, SLOT(stateChanged(QMessageService::State))); + QObject::connect(m_service, SIGNAL(messagesFound(const QMessageIdList&)), this, SLOT(messagesFound(const QMessageIdList&))); + + // QMessageManager class represents the main interface for storage and + // retrieval of messages, folders and accounts in the system message store + m_manager = new QMessageManager(this); + + QObject::connect(m_manager, SIGNAL(messageAdded(const QMessageId&,const QMessageManager::NotificationFilterIdSet&)), + this, SLOT(messageAdded(const QMessageId&,const QMessageManager::NotificationFilterIdSet&))); + + // Register MMS in inbox (draft in emulator) folder notificationfilter +#ifdef Q_OS_SYMBIAN +#ifdef __WINS__ + m_notifFilterSet.insert(m_manager->registerNotificationFilter(QMessageFilter::byStandardFolder( + QMessage::DraftsFolder))); +#else + m_notifFilterSet.insert(m_manager->registerNotificationFilter(QMessageFilter::byStandardFolder( + QMessage::InboxFolder))); +#endif +#else + m_notifFilterSet.insert(m_manager->registerNotificationFilter(QMessageFilter::byStandardFolder( + QMessage::InboxFolder))); +#endif + +} + +Message::~Message() +{ +} + +void Message::messageAdded(const QMessageId& id, + const QMessageManager::NotificationFilterIdSet& matchingFilterIds) +{ + if (matchingFilterIds.contains(m_notifFilterSet)) { + processIncomingMMS(id); + } +} + + +void Message::checkMessages() +{ +#ifdef Q_OS_SYMBIAN +#ifdef __WINS__ + QMessageFilter folderFilter(QMessageFilter::byStandardFolder(QMessage::DraftsFolder)); +#else + QMessageFilter folderFilter(QMessageFilter::byStandardFolder(QMessage::InboxFolder)); +#endif +#else + QMessageFilter folderFilter(QMessageFilter::byStandardFolder(QMessage::InboxFolder)); +#endif + + m_service->queryMessages(folderFilter); + // Message::messagesFound() is called if MMS messages found + +} + +void Message::messagesFound(const QMessageIdList &ids) +{ + foreach (const QMessageId& id, ids) { + processIncomingMMS(id); + } +} + +void Message::processIncomingMMS(const QMessageId& id) +{ + QMessage message = m_manager->message(id); + + // Handle only MMS messages + if (message.type()!=QMessage::Mms) + return; + + + QMessageContentContainerIdList attachments = message.attachmentIds(); + if (!attachments.isEmpty()) { + QMessageContentContainer messageContent = message.find(attachments[0]); + if (messageContent.isContentAvailable() && messageContent.contentType() == "image") { + + // Create QPixmap from the message image attachment + QPixmap pixmap; + pixmap.loadFromData(messageContent.content()); + + QString from = message.from().addressee(); + QString filename = messageContent.suggestedFileName(); + + // Emit received MMS message info + emit messageReceived(from, filename, pixmap); + } + } +} + +bool Message::sendMMS(QString picturePath, QString phoneNumber) +{ + QString tmpFileName = "c:/System/qcamera_mms.jpg"; + + // Create temp image for MMS + // Delete previous temp image + QFile previousFile(tmpFileName); + if (previousFile.exists()) { + previousFile.remove(); + } + // Create new temp image + QImageReader reader; + reader.setFileName(picturePath); + QSize imageSize = reader.size(); + imageSize.scale(QSize(300,300), Qt::KeepAspectRatio); + reader.setScaledSize(imageSize); + QImage image = reader.read(); + image.save(tmpFileName); + + // Use temp mms image + picturePath = tmpFileName; + + // Send MMS + QMessage message; + message.setType(QMessage::Mms); + message.setParentAccountId(QMessageAccount::defaultAccount(QMessage::Mms)); + message.setTo(QMessageAddress(QMessageAddress::Phone, phoneNumber)); + + QStringList paths; + paths << picturePath; + message.appendAttachments(paths); + + return m_service->send(message); +} + +void Message::stateChanged(QMessageService::State s) +{ + emit messageStateChanged(s); +} diff --git a/demos/mobile/qcamera/messagehandling.h b/demos/mobile/qcamera/messagehandling.h new file mode 100755 index 0000000..b83e25f --- /dev/null +++ b/demos/mobile/qcamera/messagehandling.h @@ -0,0 +1,89 @@ +/** + * Copyright (c) 2011 Nokia Corporation. All rights reserved. + * + * Nokia and Nokia Connecting People are registered trademarks of Nokia + * Corporation. Oracle and Java are registered trademarks of Oracle and/or its + * affiliates. Other product and company names mentioned herein may be + * trademarks or trade names of their respective owners. + * + * + * Subject to the conditions below, you may, without charge: + * + * * Use, copy, modify and/or merge copies of this software and associated + * documentation files (the "Software") + * + * * Publish, distribute, sub-licence and/or sell new software derived from + * or incorporating the Software. + * + * + * + * This file, unmodified, shall be included with all copies or substantial + * portions of the Software that are distributed in source code form. + * + * The Software cannot constitute the primary value of any new software derived + * from or incorporating the Software. + * + * Any person dealing with the Software shall not misrepresent the source of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef MESSAGE_H +#define MESSAGE_H + +#include <QObject> +#include <QPixmap> + +// QtMobility API headers +// Messaging +#include <QMessage> +#include <QMessageManager> +#include <QMessageService> + +// Location +#include <QGeoPositionInfo> + +// QtMobility namespace +QTM_USE_NAMESPACE + +class Message: public QObject +{ +Q_OBJECT + +public: + Message(QObject *parent = 0); + ~Message(); + + void checkMessages(); + bool sendMMS(QString picturePath, QString phoneNumber); + +private: + void processIncomingMMS(const QMessageId& id); + +public slots: + // QMessageService + void stateChanged(QMessageService::State s); + void messagesFound(const QMessageIdList &ids); + + // QMessageManager + void messageAdded(const QMessageId &id, const QMessageManager::NotificationFilterIdSet &matchingFilterIds); + +signals: + void messageStateChanged(int); + void messageReceived(QString from, QString filename, QPixmap pixmap); + +private: + QMessageService* m_service; + QMessageManager* m_manager; + QMessageManager::NotificationFilterIdSet m_notifFilterSet; + QMessageId m_messageId; +}; + +#endif // MESSAGE_H diff --git a/demos/mobile/qcamera/qcamera.pro b/demos/mobile/qcamera/qcamera.pro new file mode 100755 index 0000000..4a6dea6 --- /dev/null +++ b/demos/mobile/qcamera/qcamera.pro @@ -0,0 +1,62 @@ + +# Copyright (c) 2011 Nokia Corporation. + +TEMPLATE = app +TARGET = qcamera + +VERSION = 1.1.0 + +QT += network + +HEADERS += contactsdlg.h \ + cameraexample.h \ + messagehandling.h \ + button.h \ + businesscardhandling.h + +SOURCES += contactsdlg.cpp \ + main.cpp \ + cameraexample.cpp \ + messagehandling.cpp \ + button.cpp \ + businesscardhandling.cpp + +CONFIG += mobility +MOBILITY = contacts \ + messaging \ + multimedia \ + location \ + systeminfo + +RESOURCES += resources.qrc + +ICON = icons/cameramms_icon.svg + +symbian: { + # Because landscape orientation lock + LIBS += -lcone -leikcore -lavkon + TARGET.UID3 = 0xEF642F0E + TARGET = QCamera + TARGET.EPOCSTACKSIZE = 0x14000 + TARGET.EPOCHEAPSIZE = 0x20000 0x8000000 + + # Self-signing capabilities + TARGET.CAPABILITY += NetworkServices \ + ReadUserData \ + WriteUserData \ + LocalServices \ + UserEnvironment + + # QtMobility Messaging module needs these + #DEFINES += MESSAGING_ENABLED + + contains(DEFINES,MESSAGING_ENABLED) { + # Additional capabilities that needs Open Signed Online signing + TARGET.CAPABILITY += ReadDeviceData WriteDeviceData + } +} + +!contains(DEFINES,MESSAGING_ENABLED) { + warning(Qt Mobility Messaging disabled!) +} + diff --git a/demos/mobile/qcamera/qcamera.pro.user b/demos/mobile/qcamera/qcamera.pro.user new file mode 100644 index 0000000..6ac56bc --- /dev/null +++ b/demos/mobile/qcamera/qcamera.pro.user @@ -0,0 +1,582 @@ +<!DOCTYPE QtCreatorProject> +<qtcreator> + <data> + <variable>ProjectExplorer.Project.ActiveTarget</variable> + <value type="int">1</value> + </data> + <data> + <variable>ProjectExplorer.Project.EditorSettings</variable> + <valuemap type="QVariantMap"> + <value key="EditorConfiguration.Codec" type="QByteArray">Default</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.Target.0</variable> + <valuemap type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Desktop</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Desktop</value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.DesktopTarget</value> + <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">2</value> + <value key="ProjectExplorer.Target.ActiveDeployConfiguration" type="int">0</value> + <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Qt in PATH Debug</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-desktop</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Qt in PATH Release</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-desktop</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.2" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Desktop Qt for GCC (Qt SDK) Release</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-desktop</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">4</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.3" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Desktop Qt for GCC (Qt SDK) Debug</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-desktop</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">4</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">4</value> + <valuemap key="ProjectExplorer.Target.DeployConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">0</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Deploy</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">No deployment</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value key="ProjectExplorer.Target.DeployConfigurationCount" type="int">1</value> + <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qcamera</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4RunConfiguration</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase" type="int">2</value> + <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.Qt4RunConfiguration.ProFile" type="QString">qcamera.pro</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix" type="bool">false</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal" type="bool">false</value> + <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetWorkingDirectory" type="bool">false</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory" type="QString"></value> + <value key="RunConfiguration.QmlDebugServerPort" type="uint">3768</value> + <value key="RunConfiguration.UseCppDebugger" type="bool">true</value> + <value key="RunConfiguration.UseQmlDebugger" type="bool">false</value> + </valuemap> + <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.Target.1</variable> + <valuemap type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Qt Simulator</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Qt Simulator</value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.QtSimulatorTarget</value> + <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">3</value> + <value key="ProjectExplorer.Target.ActiveDeployConfiguration" type="int">0</value> + <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Release</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-simulator</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">6</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Debug</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-simulator</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">6</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.2" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Simulator Qt for GCC (Qt SDK) Debug</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-simulator</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">6</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.3" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qmake</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value> + <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/> + <value key="QtProjectManager.QMakeBuildStep.QMakeForced" type="bool">false</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildStepList.Step.1" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">2</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Make</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value> + <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value> + <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"> + <value type="QString">clean</value> + </valuelist> + <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Simulator Qt for GCC (Qt SDK) Release</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-simulator</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">6</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">4</value> + <valuemap key="ProjectExplorer.Target.DeployConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">0</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Deploy</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">No deployment</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value key="ProjectExplorer.Target.DeployConfigurationCount" type="int">1</value> + <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">qcamera</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4RunConfiguration</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase" type="int">2</value> + <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments" type="QVariantList"/> + <value key="Qt4ProjectManager.Qt4RunConfiguration.ProFile" type="QString">qcamera.pro</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix" type="bool">false</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal" type="bool">false</value> + <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetWorkingDirectory" type="bool">false</value> + <value key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory" type="QString"></value> + <value key="RunConfiguration.QmlDebugServerPort" type="uint">3768</value> + <value key="RunConfiguration.UseCppDebugger" type="bool">true</value> + <value key="RunConfiguration.UseQmlDebugger" type="bool">false</value> + </valuemap> + <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.Target.2</variable> + <valuemap type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Remote Compiler</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Remote Compiler</value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.WccCompilerTarget</value> + <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">0</value> + <value key="ProjectExplorer.Target.ActiveDeployConfiguration" type="int">0</value> + <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value> + <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildStepList.Step.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.WccBuildStep</value> + <value key="Qt4ProjectManager.WccBuildStep.CertFile" type="QString"></value> + <value key="Qt4ProjectManager.WccBuildStep.CertKeyFile" type="QString"></value> + <value key="Qt4ProjectManager.WccBuildStep.CertKeyPass" type="QString"></value> + <value key="Qt4ProjectManager.WccBuildStep.PkgOpt" type="int">1</value> + <value key="Qt4ProjectManager.WccBuildStep.PostOp" type="int">1</value> + <value key="Qt4ProjectManager.WccBuildStep.QtVersion" type="QString">4_7_0_m1_0_2</value> + <value key="Qt4ProjectManager.WccBuildStep.SisOpt" type="int">1</value> + <value key="Qt4ProjectManager.WccBuildStep.Target" type="QString">maemo5</value> + </valuemap> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Build</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.1" type="QVariantMap"> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">0</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Clean</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">2</value> + <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value> + <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Remote Compiler</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/jpasion/gitorious/qt-contributor-team/demos/qcamera-build-remote</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">7</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">12</value> + <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value> + </valuemap> + <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">1</value> + <valuemap key="ProjectExplorer.Target.DeployConfiguration.0" type="QVariantMap"> + <valuemap key="ProjectExplorer.BuildConfiguration.BuildStepList.0" type="QVariantMap"> + <value key="ProjectExplorer.BuildStepList.StepsCount" type="int">0</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">Deploy</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value key="ProjectExplorer.BuildConfiguration.BuildStepListCount" type="int">1</value> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString">No deployment</value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value key="ProjectExplorer.Target.DeployConfigurationCount" type="int">1</value> + <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap"> + <value key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName" type="QString"></value> + <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Remote Compiler - Empty Run Configuration</value> + <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.WccRunConfiguration</value> + <value key="Qt4ProjectManager.WccRunConfiguration.ProFile" type="QString">qcamera.pro</value> + <value key="RunConfiguration.QmlDebugServerPort" type="uint">3768</value> + <value key="RunConfiguration.UseCppDebugger" type="bool">true</value> + <value key="RunConfiguration.UseQmlDebugger" type="bool">false</value> + </valuemap> + <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.TargetCount</variable> + <value type="int">3</value> + </data> + <data> + <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable> + <value type="QString">{7d0e1b67-5eac-4464-8506-ed03165c2662}</value> + </data> + <data> + <variable>ProjectExplorer.Project.Updater.FileVersion</variable> + <value type="int">8</value> + </data> +</qtcreator> diff --git a/demos/mobile/qcamera/resources.qrc b/demos/mobile/qcamera/resources.qrc new file mode 100755 index 0000000..833fa99 --- /dev/null +++ b/demos/mobile/qcamera/resources.qrc @@ -0,0 +1,7 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource prefix="/"> + <file>icons/camera.png</file> + <file>icons/exit.png</file> + <file>icons/mms.png</file> +</qresource> +</RCC> |