--- 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="<<m_index;
+ m_pix = m_pix.scaledToHeight(m_scaledHeight[m_index]);
+ }
+ }
+
+ setupWindow();
+ update();
+
+}
+
+
+void View::handleALS(){
+
+ int lightLevel = m_ambientLightSensor.reading()->lightLevel();
+ qDebug()<<"lightLevel="<<lightLevel;
+
+ switch (lightLevel){
+ case 0:
+ case 1:{
+ // if dark, make image "brighter"
+ QPainter painter;
+ painter.begin(&m_pix);
+ painter.setPen(Qt::NoPen);
+ QColor slightlyOpaqueWhite(255, 255, 255, 63);
+ painter.fillRect(m_pix.rect(), slightlyOpaqueWhite);
+ painter.end();
+ break;
+ }
+ default:{
+ if (m_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");
+
+}
+
+
+