diff -r 06b8e2af4411 -r 6fbed849b4f4 qtmobility/examples/sensors/panorama/view.cpp --- a/qtmobility/examples/sensors/panorama/view.cpp Fri Jun 11 14:26:25 2010 +0300 +++ b/qtmobility/examples/sensors/panorama/view.cpp Wed Jun 23 19:08:38 2010 +0300 @@ -6,29 +6,31 @@ #include "rotationcontroller.h" #include "orientationcontroller.h" #include "compasscontroller.h" +#include "tapcontroller.h" int View::m_imageWidth; int View::m_imageHeight; QString View::m_currentSensor; +bool View::m_isToBeZoomed; +int View::m_lightLevel = -1; +int View::m_scaledHeight[4]; +int View::m_index = 3; View::View(QGraphicsScene *scene) : QGraphicsView(scene), m_timer(this) ,m_delay(30){ - m_controller = 0; - QPixmap bgPix(":/images/koskipuisto_pieni.jpg"); m_pix = bgPix; - m_imageWidth = bgPix.width(); - m_imageHeight = bgPix.height(); - int h= height(); + setupWindow(); + m_scaledHeight[0] = m_imageHeight*1.5; + m_scaledHeight[1] = m_imageHeight*2; + m_scaledHeight[2] = (int)(m_imageHeight*0.5); + m_scaledHeight[3] = m_imageHeight; + + int h = height(); int y = qAbs(m_imageHeight-h)/2; setSceneRect(0, y, width(), h); - setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); - setBackgroundBrush(bgPix); - setCacheMode(QGraphicsView::CacheBackground); - setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); - setWindowTitle("Panorama"); m_sensors.append(InputController::QACCELEROMETER); m_sensors.append(InputController::QORIENTATIONSENSOR); @@ -40,16 +42,30 @@ m_menu = new QMenu(this); - createActions(); handleAction(NULL,InputController::QACCELEROMETER); m_timer.setSingleShot(false); m_timer.start(m_delay); connect(&m_timer, SIGNAL(timeout()), this, SLOT(update())); + + + m_proximitySensor.connectToBackend(); + m_proximitySensor.start(); + connect(&m_proximitySensor, SIGNAL(readingChanged()), this, SLOT(handleProximity())); + + m_ambientLightSensor.connectToBackend(); + m_ambientLightSensor.start(); + connect(&m_ambientLightSensor, SIGNAL(readingChanged()), this, SLOT(handleALS())); + } -View::~View(){ if (m_controller) delete m_controller;} + +View::~View(){ + m_timer.stop(); + if (m_controller) delete m_controller; + if (m_exController) delete m_exController; +} void View::resizeEvent(QResizeEvent *event) @@ -155,19 +171,6 @@ } -void View::update(){ - if (m_mouseMode){ - m_x = checkX(m_x + m_dx); - m_y = checkY(m_y+ m_dy); - } - else{ - if (m_controller){ - m_x = checkX(m_controller->getX()); - m_y = checkY(m_controller->getY()); - } - } - setSceneRect(m_x, m_y, width(), height()); -} void View::keyPressEvent(QKeyEvent *e) @@ -185,45 +188,44 @@ m_controller =0; } - do{ - if (sensor==InputController::QACCELEROMETER){ - m_controller = new AccelerometerController(); - break; - } - if (sensor==InputController::QROTATIONSENSOR){ - m_controller = new RotationController(); - break; - } - if (sensor==InputController::QMAGNETOMETER){ - m_controller = new MagnetometerController(); - break; - } - if (sensor==InputController::QORIENTATIONSENSOR){ - m_controller = new OrientationController(); - break; - } + if (sensor==InputController::QACCELEROMETER){ + m_controller = new AccelerometerController(); + return; + } + if (sensor==InputController::QROTATIONSENSOR){ + m_controller = new RotationController(); + return; + } + if (sensor==InputController::QMAGNETOMETER){ + m_controller = new MagnetometerController(); + return; + } + if (sensor==InputController::QORIENTATIONSENSOR){ + m_controller = new OrientationController(); + return; + } + if (sensor==InputController::QTAPSENSOR){ + m_controller = new TapController(); + return; + } + if (sensor==InputController::QCOMPASS){ + m_controller = new CompassController(); + return; + } + if (sensor==InputController::QKEYS){ + m_controller = new KeyController(); + return; + } - if (sensor==InputController::QTAPSENSOR){ - break; - } - if (sensor==InputController::QCOMPASS){ - m_controller = new CompassController(); - break; - } - if (sensor==InputController::QKEYS){ - m_controller = new KeyController(); - break; - } - }while (true); - - if (m_controller) m_controller->start(); } int View::checkX(int x){ - return qAbs(x) < m_imageWidth ? x : x % m_imageWidth; + int tmpX = qAbs(x) < m_imageWidth ? x : x % m_imageWidth; + m_mouseMode?m_exController->setX(tmpX):m_controller->setX(tmpX); + return tmpX; } @@ -231,21 +233,13 @@ int limit = m_imageHeight-height(); if (y<0){ y = limit<0?-limit/2:0; - if (m_controller) m_controller->setY(y); - return y; } - - if (limit<0){ + else if (limit<0){ y=-limit/2; - if (m_controller) m_controller->setY(y); - return y; } - + else if (y > limit){y=limit;} - if (y< limit){ return y;} - - y = limit; - if (m_controller) m_controller->setY(y); + m_mouseMode?m_exController->setY(y):m_controller->setY(y); return y; } @@ -258,49 +252,151 @@ } - void View::mouseMoveEvent(QMouseEvent* event){ - if (m_mouseMode){ - - m_dx = m_eventX - event->x(); - m_dy = m_eventY - event->y(); - - update(); - + // first time + if (!m_mouseMode){ + m_mouseMode = true; m_eventX = event->x(); m_eventY = event->y(); return; } - if (m_mousePressTime.msecsTo(QTime::currentTime())>200){ - m_menu->setVisible(false); - m_mouseMode = true; - m_eventX = event->x(); - m_eventY = event->y(); - m_controller = 0; + if (m_menu->isVisible()){ + if (m_mousePressTime.msecsTo(QTime::currentTime())>300) + m_menu->setVisible(false); } + int cur_x = event->x(); + int cur_y = event->y(); + + m_dx = m_eventX - cur_x; + m_dy = m_eventY - cur_y; + + m_eventX = cur_x; + m_eventY = cur_y; + + update(); + } void View::mouseReleaseEvent(QMouseEvent* event){ m_controller = m_exController; - - if (m_mouseMode){ - if (m_controller){ - m_controller->setX(m_x); - m_controller->setY(m_y); - } - } + m_exController = 0; m_mouseMode = false; - if (m_mousePressTime.msecsTo(QTime::currentTime())>200) return; + if (m_menu->isVisible()){ + m_menu->setVisible(false); + return; + } + + // slow press -> move + if (m_mousePressTime.msecsTo(QTime::currentTime())>300) return; + + // quick press -> show menu int x = event->x(); int y = event->y(); m_menu->move(x, y); m_menu->setVisible(true); } + + +void View::update(){ + if (!m_mouseMode) + m_controller->updateCoordinates(); + + if (m_menu->isVisible()){ + if (m_mousePressTime.msecsTo(QTime::currentTime())>5000) + m_menu->setVisible(false); + } + + + int x = m_mouseMode?m_exController->getX():m_controller->getX(); + int y = m_mouseMode?m_exController->getY():m_controller->getY(); + + x = checkX(m_mouseMode?x+m_dx:x); + y = checkY(m_mouseMode?y+m_dy:y); + + setSceneRect(x, y, width(), height()); +} + + + + +void View::handleProximity(){ + + // close - not close - close, quite fast sequence required for zoom + // zoom factors 0.5, 1, 2, 3 - cyclic iterations + + bool isClose = m_proximitySensor.reading()->close(); + + + // zoom-in, once? + if (isClose){ + if (!m_isToBeZoomed){ + m_zoomTime = QTime::currentTime(); + m_isToBeZoomed = true; + } + else{ + m_isToBeZoomed = false; // ready to start again + + if (m_zoomTime.msecsTo(QTime::currentTime())>1000) return; + m_index = m_index==3?0:m_index+1; + qDebug()<< " m_index="<lightLevel(); + qDebug()<<"lightLevel="<1) break; + QPixmap bgPix(":/images/koskipuisto_pieni.jpg"); + m_pix = bgPix.scaledToHeight(m_scaledHeight[m_index]); + break; + } + } + m_lightLevel = lightLevel; + +} + + +void View::setupWindow(){ + m_imageWidth = m_pix.width(); + m_imageHeight = m_pix.height(); + + setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + setBackgroundBrush(m_pix); + setCacheMode(QGraphicsView::CacheBackground); + setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); + setWindowTitle("Panorama"); + +} + + +