diff options
28 files changed, 631 insertions, 257 deletions
diff --git a/models/maemoFremantle/N900.png b/models/maemoFremantle/N900.png Binary files differindex 27fb3cd..83c8d6d 100644 --- a/models/maemoFremantle/N900.png +++ b/models/maemoFremantle/N900.png diff --git a/models/maemoFremantle/fremantle_landscape.png b/models/maemoFremantle/fremantle_landscape.png Binary files differdeleted file mode 100644 index efb8326..0000000 --- a/models/maemoFremantle/fremantle_landscape.png +++ /dev/null diff --git a/models/maemoFremantle/fremantle_portrait.png b/models/maemoFremantle/fremantle_portrait.png Binary files differdeleted file mode 100644 index 4e2c02b..0000000 --- a/models/maemoFremantle/fremantle_portrait.png +++ /dev/null diff --git a/models/maemoFremantle/maemoFremantle.config b/models/maemoFremantle/maemoFremantle.config index 8bcf4d5..8952c8f 100644 --- a/models/maemoFremantle/maemoFremantle.config +++ b/models/maemoFremantle/maemoFremantle.config @@ -1,16 +1,16 @@ name:Maemo Fremantle -resolutionWidth:480 -resolutionHeight:800 +resolutionWidth:800 +resolutionHeight:480 diagonalInInch:3.5 mockup:N900.png -offsetX:72 -offsetY:165 +offsetX:165 +offsetY:72 defaultFontSize:18 forceDpi:96 -menuPortrait:fremantle_leftup.png -availableGeometryPortrait:0,56,480,744 -menuLandscape:fremantle_topup.png -availableGeometryLandscape:0,57,800,423 +menuLeftUp:fremantle_leftup.png +availableGeometryLeftUp:0,56,480,744 +menuTopUp:fremantle_topup.png +availableGeometryTopUp:0,57,800,423 maemoNavigationButtonLandscape:691,0 maemoNavigationButtonPortrait:371,0 maemoNavigationButtonClose:fremantle_close.png diff --git a/models/symbian3/symbian3.config b/models/symbian3/symbian3.config index 5a2d61d..6b68986 100644 --- a/models/symbian3/symbian3.config +++ b/models/symbian3/symbian3.config @@ -7,4 +7,3 @@ offsetX:66 offsetY:153 defaultFontSize:7 style:s60,nseriesblack -nativeOrientation:portrait diff --git a/models/symbianNonTouch/n95landscape.png b/models/symbianNonTouch/n95landscape.png Binary files differdeleted file mode 100644 index 159a628..0000000 --- a/models/symbianNonTouch/n95landscape.png +++ /dev/null diff --git a/models/symbianNonTouch/n95portrait.png b/models/symbianNonTouch/n95portrait.png Binary files differdeleted file mode 100644 index 33021bd..0000000 --- a/models/symbianNonTouch/n95portrait.png +++ /dev/null diff --git a/models/symbianNonTouch/symbianNonTouch.config b/models/symbianNonTouch/symbianNonTouch.config index daa40f0..27e309a 100644 --- a/models/symbianNonTouch/symbianNonTouch.config +++ b/models/symbianNonTouch/symbianNonTouch.config @@ -32,10 +32,10 @@ button:Key_Music,,184,459,59,34 button:Key_Select,,128,461,35,34 button:Key_Spell,,60,493,49,20 button:Key_Backspace,,183,494,48,20 -menuLandscape:n95landscape.png -menuPortrait:n95portrait.png -availableGeometryLandscape:0,21,320,198 -availableGeometryPortrait:0,58,240,235 +menuRightUp:n95rightup.png +menuTopUp:n95topup.png +availableGeometryRightUp:0,21,320,198 +availableGeometryTopUp:0,58,240,235 symbianSoftKeyButtonPortrait:0,0,293,120,27 symbianSoftKeyButtonPortrait:1,120,293,120,27 symbianSoftKeyButtonLandscape:1,220,0,100,21 diff --git a/models/symbianTouch/menu_landscape.png b/models/symbianTouch/menu_landscape.png Binary files differdeleted file mode 100644 index 25d80d5..0000000 --- a/models/symbianTouch/menu_landscape.png +++ /dev/null diff --git a/models/symbianTouch/menu_portrait.png b/models/symbianTouch/menu_portrait.png Binary files differdeleted file mode 100644 index c954310..0000000 --- a/models/symbianTouch/menu_portrait.png +++ /dev/null diff --git a/models/symbianTouch/symbianTouch.config b/models/symbianTouch/symbianTouch.config index 0f01daa..5c029f0 100644 --- a/models/symbianTouch/symbianTouch.config +++ b/models/symbianTouch/symbianTouch.config @@ -10,10 +10,10 @@ style:s60,nseriesblack button:Key_TopMenu,,50,872,62,50 button:Key_Call,,165,864,42,66 button:Key_Hangup,,255,858,43,78 -menuPortrait:menu_portrait.png -availableGeometryPortrait:0,92,360,487 -menuLandscape:menu_landscape.png -availableGeometryLandscape:0,73,502,288 +menuTopUp:menu_topup.png +availableGeometryTopUp:0,92,360,487 +menuRightUp:menu_rightup.png +availableGeometryRightUp:0,73,502,288 symbianSoftKeyButtonPortrait:0,0,579,180,61 symbianSoftKeyButtonPortrait:1,180,579,180,61 symbianSoftKeyButtonLandscape:1,503,0,137,72 diff --git a/src/mobility/mobilitydata.cpp b/src/mobility/mobilitydata.cpp index 0fe4367..6fe6e61 100644 --- a/src/mobility/mobilitydata.cpp +++ b/src/mobility/mobilitydata.cpp @@ -49,7 +49,6 @@ MobilityData::MobilityData(QObject *parent) , mMessaging(new Messaging(this)) , mSensorsUi(0) , mInitialized(false) - , mInitializeWithLandscape(false) { } @@ -69,13 +68,8 @@ void MobilityData::setInitialSensorsData() SensorsUi::SensorsData sensors; sensors.ambientLightLevel = SensorsScriptInterface::Light; - if (mInitializeWithLandscape) { - sensors.accelerometerX = -9.8; - sensors.accelerometerY = 0; - } else { - sensors.accelerometerX = 0; - sensors.accelerometerY = 9.8; - } + sensors.accelerometerX = 0; + sensors.accelerometerY = 9.8; sensors.accelerometerZ = 0; sensors.magnetometerX = 0.5; @@ -256,43 +250,42 @@ void MobilityData::addNewSms() mMessaging->addMessage(inboxId, message); } -void MobilityData::rotateDevice(Orientation current, Orientation native) +void MobilityData::rotateDevice(Orientation to) { SensorsUi::SensorsData sensors = mSensorsUi->sensorsData(); - if (native == landscapeOrientation) { - if (current == portraitOrientation) { - sensors.accelerometerX -= 9.8; - sensors.accelerometerY -= 9.8; - } else { - sensors.accelerometerX += 9.8; - sensors.accelerometerY += 9.8; - } - } else { - if (current == portraitOrientation) { - sensors.accelerometerX -= 9.8; - sensors.accelerometerY += 9.8; - } else { - sensors.accelerometerX += 9.8; - sensors.accelerometerY -= 9.8; - } + switch (to) { + case topUp: + sensors.accelerometerX = 0; + sensors.accelerometerY = 9.8; + sensors.accelerometerZ = 0; + break; + case topDown: + sensors.accelerometerX = 0; + sensors.accelerometerY = -9.8; + sensors.accelerometerZ = 0; + break; + case leftUp: + sensors.accelerometerX = -9.8; + sensors.accelerometerY = 0; + sensors.accelerometerZ = 0; + break; + case rightUp: + sensors.accelerometerX = 9.8; + sensors.accelerometerY = 0; + sensors.accelerometerZ = 0; + break; + case faceUp: + sensors.accelerometerX = 0; + sensors.accelerometerY = 0; + sensors.accelerometerZ = -9.8; + break; + case faceDown: + sensors.accelerometerX = 0; + sensors.accelerometerY = 0; + sensors.accelerometerZ = 9.8; + break; } mSensorsUi->setSensorsData(sensors); } - -void MobilityData::changeDevice(Orientation current, Orientation currentNative, Orientation targetNative) -{ - if (currentNative == targetNative) - return; - - if (!mInitialized) { - if (targetNative == landscapeOrientation) - mInitializeWithLandscape = true; - else - mInitializeWithLandscape = false; - return; - } - - rotateDevice(currentNative, current == landscapeOrientation ? portraitOrientation : landscapeOrientation); -} diff --git a/src/mobility/mobilitydata.h b/src/mobility/mobilitydata.h index 4be7c98..f5dcca8 100644 --- a/src/mobility/mobilitydata.h +++ b/src/mobility/mobilitydata.h @@ -65,8 +65,7 @@ public slots: void addNewSms(); // for adjusting data based on orientation of device - void rotateDevice(Orientation current, Orientation native); - void changeDevice(Orientation current, Orientation currentNative, Orientation targetNative); + void rotateDevice(Orientation to); private: void setInitialSensorsData(); @@ -76,7 +75,6 @@ private: void setInitialSystemInfoGenericData(); bool mInitialized; - bool mInitializeWithLandscape; }; #endif // MOBILITYDATA_H diff --git a/src/other/configurationreader.cpp b/src/other/configurationreader.cpp index 8b14fea..735a5b2 100644 --- a/src/other/configurationreader.cpp +++ b/src/other/configurationreader.cpp @@ -184,7 +184,7 @@ bool ConfigurationReader::processLine(const QByteArray &line, DeviceData *device values[3].toFloat(), values[4].toFloat()); key.landscape = parameter.endsWith("Landscape"); deviceData->symbianSoftKeys.append(key); - } else if (parameter == "availableGeometryPortrait" || parameter == "availableGeometryLandscape") { + } else if (parameter.startsWith("availableGeometry")) { QList<QByteArray> values = value.split(','); if (values.count() != 4) { errorMsg = tr("ConfigurationReader: availableGeometryPortrait/Landscape property requires" @@ -194,27 +194,46 @@ bool ConfigurationReader::processLine(const QByteArray &line, DeviceData *device } QRect geometry = QRect(values[0].toInt(), values[1].toInt(), values[2].toInt(), values[3].toInt()); - if (parameter == "availableGeometryPortrait") - deviceData->portraitMenu.availableGeometry = geometry; - else - deviceData->landscapeMenu.availableGeometry = geometry; - } else if (parameter == "menuPortrait") { - deviceData->portraitMenu.pixmapPath = mCurrentDir->filePath(value); - if (!mCurrentDir->exists(value)) { - errorMsg = tr("Portrait menu file %1 does not exist.").arg(deviceData->portraitMenu.pixmapPath); + if (parameter == "availableGeometryTopUp") { + deviceData->menus[topUp].availableGeometry = geometry; + } else if (parameter == "availableGeometryTopDown") { + deviceData->menus[topDown].availableGeometry = geometry; + } else if (parameter == "availableGeometryLeftUp") { + deviceData->menus[leftUp].availableGeometry = geometry; + } else if (parameter == "availableGeometryRightUp") { + deviceData->menus[rightUp].availableGeometry = geometry; + } else if (parameter == "availableGeometryFaceUp") { + deviceData->menus[faceUp].availableGeometry = geometry; + } else if (parameter == "availableGeometryFaceDown") { + deviceData->menus[faceDown].availableGeometry = geometry; + } else { + errorMsg = tr("ConfigurationReader: unknown parameter: %1").arg(QString(parameter)); return false; } - } else if (parameter == "menuLandscape") { - deviceData->landscapeMenu.pixmapPath = mCurrentDir->filePath(value); + } else if (parameter.startsWith("menu")) { if (!mCurrentDir->exists(value)) { - errorMsg = tr("Landscape menu file %1 does not exist.").arg(deviceData->landscapeMenu.pixmapPath); + errorMsg = tr("Menu file %1 does not exist.").arg(mCurrentDir->filePath(value)); + return false; + } + Orientation current; + if (parameter == "menuTopUp") { + current = topUp; + } else if (parameter == "menuTopDown") { + current = topDown; + } else if (parameter == "menuLeftUp") { + current = leftUp; + } else if (parameter == "menuRightUp") { + current = rightUp; + } else if (parameter == "menuFaceUp") { + current = faceUp; + } else if (parameter == "menuFaceDown") { + current = faceDown; + } else { + errorMsg = tr("ConfigurationReader: unknown parameter: %1").arg(QString(parameter)); return false; } - } else if (parameter == "nativeOrientation") { - if (value == "landscape") - deviceData->nativeOrientation = landscapeOrientation; - else if (value == "portrait") - deviceData->nativeOrientation = portraitOrientation; + deviceData->menus[current].pixmapPath = mCurrentDir->filePath(value); + deviceData->supportedOrientations |= current; } else return false; return true; diff --git a/src/other/deviceitem.cpp b/src/other/deviceitem.cpp index 2961fc1..eddd96e 100644 --- a/src/other/deviceitem.cpp +++ b/src/other/deviceitem.cpp @@ -41,7 +41,7 @@ DeviceItem::DeviceItem(QGraphicsItem *parent) : QGraphicsObject(parent) - , mLandscape(false) + , mCurrentOrientation(topUp) , mDisplay(0) , mMockup(0) , mMaemoNavigationButton(0) @@ -64,29 +64,58 @@ DeviceItem::DeviceItem(QGraphicsItem *parent) mMaemoNavigationButton ->setZValue(SIMULATOR_MENU_Z); connect(mMaemoNavigationButton, SIGNAL(pressed()), this, SIGNAL(closeWindowPressed())); - mLandscapeState = new QState; - mPortraitState = new QState; - const int rotationDuration = 250; - mLandscapeState->assignProperty(this, "rotation", -90); - connect(mLandscapeState, SIGNAL(exited()), this, SLOT(startRotate())); - QSignalTransition *l2p = mLandscapeState->addTransition(this, "rotationSignal()", mPortraitState); - QPropertyAnimation *l2pRotAnim = new QPropertyAnimation(this, "rotation", this); - l2pRotAnim->setDuration(rotationDuration); - l2p->addAnimation(l2pRotAnim); - connect(l2pRotAnim, SIGNAL(finished()), this, SLOT(setPortrait())); - - mPortraitState->assignProperty(this, "rotation", 0); - connect(mPortraitState, SIGNAL(exited()), this, SLOT(startRotate())); - QSignalTransition *p2l = mPortraitState->addTransition(this, "rotationSignal()", mLandscapeState); - QPropertyAnimation *p2lRotAnim = new QPropertyAnimation(this, "rotation", this); - p2lRotAnim->setDuration(rotationDuration); - p2l->addAnimation(p2lRotAnim); - connect(p2lRotAnim, SIGNAL(finished()), this, SLOT(setLandscape())); - - mStateMachine.addState(mPortraitState); - mStateMachine.setInitialState(mPortraitState); - mStateMachine.addState(mLandscapeState); + + stateHash[topUp] = new QState; + stateHash[topDown] = new QState; + stateHash[leftUp] = new QState; + stateHash[rightUp] = new QState; + stateHash[faceUp] = new QState; + stateHash[faceDown] = new QState; + delegationState = new QState; + + stateHash[topUp]->assignProperty(this, "rotation", 0); + stateHash[topDown]->assignProperty(this, "rotation", 180); + stateHash[leftUp]->assignProperty(this, "rotation", 90); + stateHash[rightUp]->assignProperty(this, "rotation", 270); + + connect(delegationState, SIGNAL(exited()), this, SLOT(startRotate())); + connect(delegationState, SIGNAL(entered()), this, SLOT(initiateRotate())); + + stateHash[topUp]->addTransition(this, "rotationSignal()", delegationState); + QSignalTransition *toTopUpTransition = delegationState->addTransition(this, "rotateToTopUp()", stateHash[topUp]); + QPropertyAnimation *toTopUpAnimation = new QPropertyAnimation(this, "rotation", this); + toTopUpAnimation->setDuration(rotationDuration); + toTopUpTransition->addAnimation(toTopUpAnimation); + connect(toTopUpAnimation, SIGNAL(finished()), this, SLOT(setTopUp())); + + stateHash[topDown]->addTransition(this, "rotationSignal()", delegationState); + QSignalTransition *toTopDownTransition = delegationState->addTransition(this, "rotateToTopDown()", stateHash[topDown]); + QPropertyAnimation *toTopDownAnimation = new QPropertyAnimation(this, "rotation", this); + toTopDownAnimation->setDuration(rotationDuration); + toTopDownTransition->addAnimation(toTopDownAnimation); + connect(toTopDownAnimation, SIGNAL(finished()), this, SLOT(setTopDown())); + + stateHash[leftUp]->addTransition(this, "rotationSignal()", delegationState); + QSignalTransition *toLeftUpTransition = delegationState->addTransition(this, "rotateToLeftUp()", stateHash[leftUp]); + QPropertyAnimation *toLeftUpAnimation = new QPropertyAnimation(this, "rotation", this); + toLeftUpAnimation->setDuration(rotationDuration); + toLeftUpTransition->addAnimation(toLeftUpAnimation); + connect(toLeftUpAnimation, SIGNAL(finished()), this, SLOT(setLeftUp())); + + stateHash[rightUp]->addTransition(this, "rotationSignal()", delegationState); + QSignalTransition *toRightUpTransition = delegationState->addTransition(this, "rotateToRightUp()", stateHash[rightUp]); + QPropertyAnimation *toRightUpAnimation = new QPropertyAnimation(this, "rotation", this); + toRightUpAnimation->setDuration(rotationDuration); + toRightUpTransition->addAnimation(toRightUpAnimation); + connect(toRightUpAnimation, SIGNAL(finished()), this, SLOT(setRightUp())); + + mStateMachine.addState(stateHash[topUp]); + mStateMachine.setInitialState(stateHash[topUp]); + mStateMachine.addState(stateHash[topDown]); + mStateMachine.addState(stateHash[leftUp]); + mStateMachine.addState(stateHash[rightUp]); + mStateMachine.addState(delegationState); mStateMachine.start(); } @@ -115,54 +144,43 @@ void DeviceItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option void DeviceItem::changeDevice(const DeviceData &data) { + mDeviceData = data; // the the device mockup was not yet read, do so now - if (!data.mockup) { - data.mockup = QSharedPointer<QPixmap>(new QPixmap(data.mockupPath)); - if (!data.mockup || data.mockup->isNull()) - qFatal("Could not read mockup image %s", qPrintable(data.mockupPath)); + if (!mDeviceData.mockup) { + mDeviceData.mockup = QSharedPointer<QPixmap>(new QPixmap(mDeviceData.mockupPath)); + if (!mDeviceData.mockup || mDeviceData.mockup->isNull()) + qFatal("Could not read mockup image %s", qPrintable(mDeviceData.mockupPath)); } // menu setup // the the menu mockups were not yet read, do so now - if (!data.portraitMenu.pixmapPath.isNull() - && !data.portraitMenu.pixmapPath.isEmpty() - && !data.portraitMenu.pixmap) { - data.portraitMenu.pixmap = QSharedPointer<QPixmap>(new QPixmap(data.portraitMenu.pixmapPath)); - if (!data.portraitMenu.pixmap || data.portraitMenu.pixmap->isNull()) - qFatal("Could not read portrait menu image %s", qPrintable(data.portraitMenu.pixmapPath)); - } - if (!data.landscapeMenu.pixmapPath.isNull() - && !data.landscapeMenu.pixmapPath.isEmpty() - && !data.landscapeMenu.pixmap) { - data.landscapeMenu.pixmap = QSharedPointer<QPixmap>(new QPixmap(data.landscapeMenu.pixmapPath)); - if (!data.landscapeMenu.pixmap || data.landscapeMenu.pixmap->isNull()) - qFatal("Could not read landscape menu image %s", qPrintable(data.landscapeMenu.pixmapPath)); + foreach(const Orientation &orientation, mDeviceData.menus.keys()) + { + MenuData menuData = mDeviceData.menus[orientation]; + if (!menuData.pixmapPath.isNull() + && !menuData.pixmapPath.isEmpty() + && !menuData.pixmap) { + menuData.pixmap = QSharedPointer<QPixmap>(new QPixmap(menuData.pixmapPath)); + if (!menuData.pixmap || menuData.pixmap->isNull()) + qFatal("Could not read menu image %s", qPrintable(menuData.pixmapPath)); + mDeviceData.menus[orientation].pixmap = menuData.pixmap; + } } - // maemo navigation button setup - if (!data.maemoNavigationBackButton.isNull() - && !data.maemoNavigationBackButton.isEmpty() - && !data.maemoBackPixmap) { - data.maemoBackPixmap = QSharedPointer<QPixmap>(new QPixmap(data.maemoNavigationBackButton)); - if (!data.maemoBackPixmap || data.maemoBackPixmap ->isNull()) - qFatal("Could not read maemo back button image %s", qPrintable(data.maemoNavigationBackButton)); - } - if (!data.maemoNavigationCloseButton.isNull() - && !data.maemoNavigationCloseButton.isEmpty() - && !data.maemoClosePixmap) { - data.maemoClosePixmap = QSharedPointer<QPixmap>(new QPixmap(data.maemoNavigationCloseButton)); - if (!data.maemoClosePixmap || data.maemoClosePixmap ->isNull()) - qFatal("Could not read maemo close button image %s", qPrintable(data.maemoNavigationCloseButton)); + if (!mDeviceData.maemoNavigationBackButton.isNull() + && !mDeviceData.maemoNavigationBackButton.isEmpty() + && !mDeviceData.maemoBackPixmap) { + mDeviceData.maemoBackPixmap = QSharedPointer<QPixmap>(new QPixmap(mDeviceData.maemoNavigationBackButton)); + if (!mDeviceData.maemoBackPixmap || mDeviceData.maemoBackPixmap->isNull()) + qFatal("Could not read maemo back button image %s", qPrintable(mDeviceData.maemoNavigationBackButton)); } - Orientation current; - if (mLandscape) - current = landscapeOrientation; - else - current = portraitOrientation; - if (data.nativeOrientation != mDeviceData.nativeOrientation) { - emit deviceChanged(current, mDeviceData.nativeOrientation, data.nativeOrientation); + if (!mDeviceData.maemoNavigationCloseButton.isNull() + && !mDeviceData.maemoNavigationCloseButton.isEmpty() + && !mDeviceData.maemoClosePixmap) { + mDeviceData.maemoClosePixmap = QSharedPointer<QPixmap>(new QPixmap(mDeviceData.maemoNavigationCloseButton)); + if (!mDeviceData.maemoClosePixmap || mDeviceData.maemoClosePixmap->isNull()) + qFatal("Could not read maemo close button image %s", qPrintable(mDeviceData.maemoNavigationCloseButton)); } mMaemoNavigationButton->setPixmap(QPixmap()); - mDeviceData = data; // self size prepareGeometryChange(); @@ -186,84 +204,175 @@ void DeviceItem::changeDevice(const DeviceData &data) mButtons.append(button); } - updateMenuPositionAndSize(); - mDeviceData.availableGeometry = mAvailableGeometry; - // display setup - QPoint newPos(mDeviceData.offset); - QSize newResolution(mDeviceData.resolution); - - if (mLandscape) { - newPos += QPoint(mDeviceData.resolution.width(),0); - newResolution.transpose(); + switch (mCurrentOrientation) { + case topUp: + setTopUp(); + break; + case topDown: + setTopDown(); + break; + case leftUp: + setLeftUp(); + break; + case rightUp: + setRightUp(); + break; } - mDisplay->setPos(newPos); - mDisplay->setSize(newResolution); +} - emit deviceChanged(newResolution, mDeviceData); +void DeviceItem::changeOrientation(Orientation newOrientation) +{ + bool animatedRotate = needsAnimation(mCurrentOrientation, newOrientation); + mCurrentOrientation = newOrientation; + if (animatedRotate) + emit rotationSignal(); + emit orientationChanged(newOrientation); } -void DeviceItem::toggleOrientation() +bool DeviceItem::needsAnimation(Orientation oldValue, Orientation newValue) { - emit rotationSignal(); + if (oldValue == newValue) + return false; + if (oldValue == topUp && (newValue == faceUp || newValue == faceDown)) + return false; + else if (oldValue == faceUp && (newValue == topUp || newValue == faceDown)) + return false; + if (oldValue == faceDown && (newValue == faceUp || newValue == topUp)) + return false; + return true; } -void DeviceItem::setInitialRotation(bool rotate) +void DeviceItem::setInitialRotation(Orientation rotate) { - if (mStateMachine.isRunning()) + if (mStateMachine.isRunning() || mStateMachine.initialState() == stateHash[rotate]) return; - if (rotate) { - if (mStateMachine.initialState() == mLandscapeState) - return; - - // Not setting rotation explicitly causes flickering - // when starting in landscape mode - setRotation(-90); - setLandscape(); - mStateMachine.setInitialState(mLandscapeState); - } else { - if (mStateMachine.initialState() == mPortraitState) - return; - - setRotation(0); - setPortrait(); - mStateMachine.setInitialState(mPortraitState); + mCurrentOrientation = rotate; + switch (rotate) { + case topUp: + case faceUp: + case faceDown: + setRotation(0); + setTopUp(); + mStateMachine.setInitialState(stateHash[topUp]); + break; + case topDown: + setRotation(180); + setTopDown(); + mStateMachine.setInitialState(stateHash[topDown]); + break; + case leftUp: + setRotation(90); + setLeftUp(); + mStateMachine.setInitialState(stateHash[leftUp]); + break; + case rightUp: + setRotation(270); + setRightUp(); + mStateMachine.setInitialState(stateHash[rightUp]); + break; } + emit orientationChanged(rotate); } -void DeviceItem::setLandscape() +void DeviceItem::setTopUp() { - mLandscape = true; + newViewSize(); + + mDisplay->setRotation(0); + mDisplay->setSize(mDeviceData.resolution); + mDisplay->setX(mDeviceData.offset.x()); + mDisplay->setY(mDeviceData.offset.y()); + + updateMenuPositionAndSize(); + mDeviceData.availableGeometry = mAvailableGeometry; + + emit deviceChanged(mDeviceData.resolution, mDeviceData); +} +void DeviceItem::setTopDown() +{ newViewSize(); + if (mDeviceData.supportedOrientations & topDown) { + mDisplay->setRotation(180); + mDisplay->setSize(mDeviceData.resolution); + mDisplay->setX(mDeviceData.offset.x() + mDeviceData.resolution.width()); + mDisplay->setY(mDeviceData.offset.y() + mDeviceData.resolution.height()); + } else { + mDisplay->setRotation(0); + mDisplay->setSize(mDeviceData.resolution); + mDisplay->setX(mDeviceData.offset.x()); + mDisplay->setY(mDeviceData.offset.y()); + } + updateMenuPositionAndSize(); + mDeviceData.availableGeometry = mAvailableGeometry; - mDisplay->setRotation(90); - mDisplay->setX(mDeviceData.offset.x() + mDeviceData.resolution.width()); + emit deviceChanged(mDeviceData.resolution, mDeviceData); +} + +void DeviceItem::setLeftUp() +{ + newViewSize(); QSize newResolution = mDeviceData.resolution; - newResolution.transpose(); - mDisplay->setSize(QSize(mDeviceData.resolution.height(), mDeviceData.resolution.width())); + if (mDeviceData.supportedOrientations & leftUp) { + mDisplay->setRotation(270); + newResolution.transpose(); + mDisplay->setSize(newResolution); + mDisplay->setX(mDeviceData.offset.x()); + mDisplay->setY(mDeviceData.offset.y() + mDeviceData.resolution.height()); + } else { + mDisplay->setRotation(0); + mDisplay->setSize(newResolution); + mDisplay->setX(mDeviceData.offset.x()); + mDisplay->setY(mDeviceData.offset.y()); + } updateMenuPositionAndSize(); mDeviceData.availableGeometry = mAvailableGeometry; emit deviceChanged(newResolution, mDeviceData); - emit orientationChanged(landscapeOrientation, mDeviceData.nativeOrientation); } -void DeviceItem::setPortrait() +void DeviceItem::setRightUp() { - mLandscape = false; - newViewSize(); + QSize newResolution = mDeviceData.resolution; - mDisplay->setRotation(0); - mDisplay->setSize(mDeviceData.resolution); - mDisplay->setX(mDeviceData.offset.x()); - + if (mDeviceData.supportedOrientations & rightUp) { + mDisplay->setRotation(90); + newResolution.transpose(); + mDisplay->setSize(newResolution); + mDisplay->setX(mDeviceData.offset.x() + mDeviceData.resolution.width()); + mDisplay->setY(mDeviceData.offset.y()); + } else { + mDisplay->setRotation(0); + mDisplay->setSize(newResolution); + mDisplay->setX(mDeviceData.offset.x()); + mDisplay->setY(mDeviceData.offset.y()); + } updateMenuPositionAndSize(); mDeviceData.availableGeometry = mAvailableGeometry; - emit deviceChanged(mDeviceData.resolution, mDeviceData); - emit orientationChanged(portraitOrientation, mDeviceData.nativeOrientation); + emit deviceChanged(newResolution, mDeviceData); +} + +void DeviceItem::initiateRotate() +{ + switch (mCurrentOrientation) { + case topUp: + case faceUp: + case faceDown: + emit rotateToTopUp(); + break; + case topDown: + emit rotateToTopDown(); + break; + case leftUp: + emit rotateToLeftUp(); + break; + case rightUp: + emit rotateToRightUp(); + break; + } } void DeviceItem::startRotate() @@ -322,7 +431,7 @@ void DeviceItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void DeviceItem::newViewSize() { QSizeF windowSize = mSize * scale(); - if (mLandscape) + if (mCurrentOrientation == leftUp || mCurrentOrientation == rightUp) windowSize.transpose(); setPos(windowSize.width()/2, windowSize.height()/2); emit viewSizeRequired(windowSize.toSize()); @@ -347,26 +456,40 @@ int DeviceItem::rotationSideLength() void DeviceItem::updateMenuPositionAndSize() { QRect displayRect; - if (mLandscape) { - displayRect.setRect(0, 0, mDeviceData.resolution.height(), mDeviceData.resolution.width()); - if (mDeviceData.landscapeMenu.pixmap) { - mMenu->setPixmap(*mDeviceData.landscapeMenu.pixmap); - mAvailableGeometry = mDeviceData.landscapeMenu.availableGeometry; - } else { - mMenu->setPixmap(QPixmap()); - mAvailableGeometry = displayRect; - } + MenuData menuData; + switch (mCurrentOrientation) { + case topUp: + displayRect.setRect(0, 0, mDeviceData.resolution.width(), mDeviceData.resolution.height()); + menuData = mDeviceData.menus.value(topUp); + mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonLandscape); + break; + case topDown: + displayRect.setRect(0, 0, mDeviceData.resolution.width(), mDeviceData.resolution.height()); + menuData = mDeviceData.menus.value(topDown); + mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonLandscape); + break; + case leftUp: + displayRect.setRect(0, 0, mDeviceData.resolution.height(), mDeviceData.resolution.width()); + menuData = mDeviceData.menus.value(leftUp); + mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonPortrait); + break; + case rightUp: + displayRect.setRect(0, 0, mDeviceData.resolution.height(), mDeviceData.resolution.width()); + menuData = mDeviceData.menus.value(rightUp); + mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonPortrait); + break; + } + if (menuData.pixmap) { + mMenu->setPixmap(*menuData.pixmap); + mAvailableGeometry = menuData.availableGeometry; + } else if (mCurrentOrientation != topUp && mDeviceData.menus.value(topUp).pixmap) { + menuData = mDeviceData.menus.value(topUp); + mMenu->setPixmap(*menuData.pixmap); + mAvailableGeometry = menuData.availableGeometry; mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonLandscape); } else { - displayRect.setRect(0, 0, mDeviceData.resolution.width(), mDeviceData.resolution.height()); - if (mDeviceData.portraitMenu.pixmap) { - mMenu->setPixmap(*mDeviceData.portraitMenu.pixmap); - mAvailableGeometry = mDeviceData.portraitMenu.availableGeometry; - } else { - mMenu->setPixmap(QPixmap()); - mAvailableGeometry = displayRect; - } - mMaemoNavigationButton->setPos(mDeviceData.maemoNavigationButtonPortrait); + mMenu->setPixmap(QPixmap()); + mAvailableGeometry = displayRect; } QHash<int, QString> oldSoftKeyTexts; @@ -375,8 +498,8 @@ void DeviceItem::updateMenuPositionAndSize() qDeleteAll(mSymbianSoftKeyButtons); mSymbianSoftKeyButtons.clear(); foreach (const SymbianSoftKeyButtonData &data, mDeviceData.symbianSoftKeys) { - if (data.landscape != mLandscape) - continue; +// if (data.landscape != mLandscape) +// continue; //TODO hmmm SymbianSoftKeyButton *button = new SymbianSoftKeyButton(data, mMenu); connect(button, SIGNAL(clicked(int)), this, SIGNAL(symbianSoftKeyClicked(int))); diff --git a/src/other/deviceitem.h b/src/other/deviceitem.h index 52c3cc6..4547737 100644 --- a/src/other/deviceitem.h +++ b/src/other/deviceitem.h @@ -32,6 +32,7 @@ #include <QtGui/QGraphicsObject> #include <QtCore/QStateMachine> +#include <QtCore/QHash> #define SIMULATOR_MENU_Z 10000 @@ -43,10 +44,15 @@ struct Button }; enum Orientation { - notSet, - portraitOrientation, - landscapeOrientation, + topUp = 0x0000001, + topDown = 0x0000002, + leftUp = 0x0000004, + rightUp = 0x0000008, + faceUp = 0x0000010, + faceDown = 0x0000020, + notSet = 0x0000040, }; +Q_DECLARE_FLAGS(SupportedOrientations, Orientation) struct MenuData { QString pixmapPath; @@ -76,7 +82,6 @@ struct DeviceData : diagonalInInch(0.) , defaultFontSize(12) , forceDpi(-1) - , nativeOrientation(notSet) {} QString name; @@ -97,9 +102,8 @@ struct DeviceData QList<Button> buttons; QString style; QString styleTheme; - Orientation nativeOrientation; - MenuData landscapeMenu; - MenuData portraitMenu; + SupportedOrientations supportedOrientations; + QHash<Orientation, MenuData> menus; QList<SymbianSoftKeyButtonData> symbianSoftKeys; }; @@ -222,14 +226,14 @@ public: DisplayWidget *display(); - bool isLandscape() { return mLandscape; } + Orientation currentOrientation() { return mCurrentOrientation; } virtual QRectF boundingRect() const; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); public slots: void changeDevice(const DeviceData &data); - void toggleOrientation(); - void setInitialRotation(bool rotate); + void changeOrientation(Orientation newOrientation); + void setInitialRotation(Orientation rotate); void changeScaleFactor(qreal newScaleFactor); void setSymbianSoftKeyText(int buttonNumber, const QString &text); void setMaemoNavigationMode(MaemoNavigationMode mode); @@ -243,8 +247,10 @@ private: void newViewSize(); int rotationSideLength(); void updateMenuPositionAndSize(); + bool needsAnimation(Orientation oldValue, Orientation newValue); + void applyNewOrientation(Orientation orientation); - bool mLandscape; + Orientation mCurrentOrientation; DeviceData mDeviceData; @@ -254,8 +260,8 @@ private: QGraphicsPixmapItem *mMockup; QStateMachine mStateMachine; - QState *mLandscapeState; - QState *mPortraitState; + QHash<Orientation, QState*> stateHash; + QState *delegationState; QPoint mDragOffset; @@ -265,12 +271,22 @@ private: MenuPixmapItem *mMenu; private slots: + void initiateRotate(); void startRotate(); - void setLandscape(); - void setPortrait(); + void setTopUp(); + void setTopDown(); + void setLeftUp(); + void setRightUp(); signals: void rotationSignal(); + void rotationSignal(Orientation newOrientation); + void rotateToTopUp(); + void rotateToTopDown(); + void rotateToLeftUp(); + void rotateToRightUp(); + void rotateToFaceUp(); + void rotateToFaceDown(); void sizeChanged(const QSize &size); void drag(const QPoint &to); // to is the new top-left point of the view in screen coordinates void viewSizeRequired(const QSize &size); @@ -283,8 +299,7 @@ signals: void closeWindowPressed(); void symbianSoftKeyClicked(int buttonNr); - void orientationChanged(Orientation current, Orientation native); - void deviceChanged(Orientation current, Orientation currentNative, Orientation targetNative); + void orientationChanged(Orientation to); }; #endif //DEVICEITEM_H diff --git a/src/ui/configurationwidget.cpp b/src/ui/configurationwidget.cpp index 7059eda..a9e7d88 100644 --- a/src/ui/configurationwidget.cpp +++ b/src/ui/configurationwidget.cpp @@ -39,6 +39,7 @@ #include <QtCore/QSettings> #include <QtCore/QThread> #include <QtCore/QDir> +#include <QtCore/QSignalMapper> #include <QtGui/QDesktopWidget> #include <QtGui/QScrollBar> #include <QtGui/QMessageBox> @@ -73,7 +74,26 @@ void ConfigurationWidget::initializeViewArea() { QWidget *target = new QWidget(); ui_inspector->setupUi(target); - connect(ui_inspector->rotateButton, SIGNAL(clicked()), this, SLOT(rotate())); + QSignalMapper *signalMapper = new QSignalMapper(this); + ui_inspector->topUp->setIcon(QIcon(":/ui/icons/topup.png")); + connect(ui_inspector->topUp, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->topUp, static_cast<int>(topUp)); + ui_inspector->topDown->setIcon(QIcon(":/ui/icons/topdown.png")); + connect(ui_inspector->topDown, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->topDown, static_cast<int>(topDown)); + ui_inspector->leftUp->setIcon(QIcon(":/ui/icons/leftup.png")); + connect(ui_inspector->leftUp, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->leftUp, static_cast<int>(leftUp)); + ui_inspector->rightUp->setIcon(QIcon(":/ui/icons/rightup.png")); + connect(ui_inspector->rightUp, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->rightUp, static_cast<int>(rightUp)); + ui_inspector->faceUp->setIcon(QIcon(":/ui/icons/faceup.png")); + connect(ui_inspector->faceUp, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->faceUp, static_cast<int>(faceUp)); + ui_inspector->faceDown->setIcon(QIcon(":/ui/icons/facedown.png")); + connect(ui_inspector->faceDown, SIGNAL(clicked()), signalMapper, SLOT(map())); + signalMapper->setMapping(ui_inspector->faceDown, static_cast<int>(faceDown)); + connect(signalMapper, SIGNAL(mapped(int)), SLOT(changeOrientation(int))); connect(ui_inspector->scaleSlider, SIGNAL(valueChanged(int)), this, SLOT(changeScaleFactor(int))); connect(ui_inspector->deviceListView, SIGNAL(currentIndexChanged(int)), this, SLOT(changeDeviceSelection(int))); @@ -150,6 +170,30 @@ void ConfigurationWidget::updateTopWidget(Widget *topWidget) mMenuBar->show(); } +void ConfigurationWidget::updateOrientationButtonsState(Orientation orientation) +{ + switch (orientation) { + case topUp: + ui_inspector->topUp->setChecked(true); + break; + case topDown: + ui_inspector->topDown->setChecked(true); + break; + case leftUp: + ui_inspector->leftUp->setChecked(true); + break; + case rightUp: + ui_inspector->rightUp->setChecked(true); + break; + case faceUp: + ui_inspector->faceUp->setChecked(true); + break; + case faceDown: + ui_inspector->faceDown->setChecked(true); + break; + } +} + void ConfigurationWidget::initializeSelection() { if (deviceList.count() == 0) @@ -186,11 +230,6 @@ void ConfigurationWidget::closeEvent(QCloseEvent *event) emit closeMainWindow(); } -void ConfigurationWidget::rotate() -{ - emit rotateRequested(); -} - void ConfigurationWidget::writeSettings(const QString &vendor, const QString &name) const { RemoteControlWidget::writeSettings(vendor, name); @@ -267,6 +306,11 @@ void ConfigurationWidget::showViewConfiguration() } +void ConfigurationWidget::changeOrientation(int orientation) +{ + emit orientationChangeRequested(static_cast<Orientation>(orientation)); +} + bool ConfigurationWidget::initializeDeviceList() { QDir modelsDir("models"); @@ -383,9 +427,9 @@ int SimulatorScriptInterface::deviceCount() const /*! Rotates the current device. */ -void SimulatorScriptInterface::rotate() +void SimulatorScriptInterface::setOrientation(Orientation newOrientation) { - ui->rotate(); + ui->changeOrientation(newOrientation); } /*! diff --git a/src/ui/configurationwidget.h b/src/ui/configurationwidget.h index 8f9f63e..cb81963 100644 --- a/src/ui/configurationwidget.h +++ b/src/ui/configurationwidget.h @@ -73,10 +73,12 @@ public: public slots: void changeDeviceSelection(int newIndex); void updateTopWidget(Widget *topWidget); + void updateOrientationButtonsState(Orientation orientation); signals: void deviceSelectionChanged(const DeviceData &data); void scaleFactorChanged(qreal newScaleFactor); + void orientationChangeRequested(Orientation newOrientation); void rotateRequested(); void closeMainWindow(); void exitButtonClicked(); @@ -87,7 +89,7 @@ protected: private slots: void changeScaleFactor(int sliderPosition); void changeCorrectionFactor(qreal); - void rotate(); + void changeOrientation(int orientation); void showViewConfiguration(); private: @@ -130,7 +132,7 @@ public: Q_INVOKABLE int currentDeviceIndex() const; Q_INVOKABLE QString currentDeviceName() const; Q_INVOKABLE int deviceCount() const; - Q_INVOKABLE void rotate(); + Q_INVOKABLE void setOrientation(Orientation orientation); Q_INVOKABLE void setDevice(const QString & dev); Q_INVOKABLE void setDevice(int index); diff --git a/src/ui/icons/facedown.png b/src/ui/icons/facedown.png Binary files differnew file mode 100644 index 0000000..2e65212 --- /dev/null +++ b/src/ui/icons/facedown.png diff --git a/src/ui/icons/faceup.png b/src/ui/icons/faceup.png Binary files differnew file mode 100644 index 0000000..13943d0 --- /dev/null +++ b/src/ui/icons/faceup.png diff --git a/src/ui/icons/leftup.png b/src/ui/icons/leftup.png Binary files differnew file mode 100644 index 0000000..9576a82 --- /dev/null +++ b/src/ui/icons/leftup.png diff --git a/src/ui/icons/rightup.png b/src/ui/icons/rightup.png Binary files differnew file mode 100644 index 0000000..186ac37 --- /dev/null +++ b/src/ui/icons/rightup.png diff --git a/src/ui/icons/topdown.png b/src/ui/icons/topdown.png Binary files differnew file mode 100644 index 0000000..7846ed4 --- /dev/null +++ b/src/ui/icons/topdown.png diff --git a/src/ui/icons/topup.png b/src/ui/icons/topup.png Binary files differnew file mode 100644 index 0000000..343da8c --- /dev/null +++ b/src/ui/icons/topup.png diff --git a/src/ui/inspector.ui b/src/ui/inspector.ui index 2aacfe8..4338830 100644 --- a/src/ui/inspector.ui +++ b/src/ui/inspector.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>388</width> - <height>126</height> + <height>151</height> </rect> </property> <property name="windowTitle"> @@ -55,21 +55,14 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QPushButton" name="rotateButton"> - <property name="text"> - <string>Rotate Device</string> - </property> - </widget> - </item> - <item row="2" column="0"> + <item row="4" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Zoom</string> </property> </widget> </item> - <item row="2" column="1"> + <item row="4" column="1"> <layout class="QVBoxLayout" name="verticalLayout_5"> <item> <widget class="QSlider" name="scaleSlider"> @@ -120,9 +113,190 @@ </item> </layout> </item> - <item row="3" column="0"> + <item row="5" column="0"> <layout class="QHBoxLayout" name="horizontalLayout_3"/> </item> + <item row="2" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="topUp"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Top up</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="leftUp"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Left up</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="topDown"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Top down</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="rightUp"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Right up</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="faceUp"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Face up</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="faceDown"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>20</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + <property name="toolTip"> + <string>Face Down</string> + </property> + <property name="text"> + <string/> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoExclusive"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </item> diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index fcb7d48..1b81208 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -138,9 +138,7 @@ MainWindow::MainWindow(QWidget *parent) connect(deviceItem, SIGNAL(closeWindowPressed()), widgetManager, SLOT(closeCurrentWindow())); connect(deviceItem, SIGNAL(symbianSoftKeyClicked(int)), widgetManager, SLOT(triggerSymbianSoftKeyAction(int))); connect(deviceItem, SIGNAL(offsetChanged(const QPoint &)), widgetManager, SLOT(changeOffset(const QPoint &))); - connect(deviceItem, SIGNAL(orientationChanged(Orientation, Orientation)), mobility, SLOT(rotateDevice(Orientation, Orientation))); - connect(deviceItem, SIGNAL(deviceChanged(Orientation, Orientation, Orientation)), - mobility, SLOT(changeDevice(Orientation, Orientation, Orientation))); + connect(deviceItem, SIGNAL(orientationChanged(Orientation)), mobility, SLOT(rotateDevice(Orientation))); view->setFrameStyle(QFrame::NoFrame); view->setParent(this); @@ -163,8 +161,9 @@ MainWindow::MainWindow(QWidget *parent) connect(widgetManager, SIGNAL(topWidgetChanged(Widget *)), config, SLOT(updateTopWidget(Widget *))); connect(config, SIGNAL(deviceSelectionChanged(const DeviceData &)), deviceItem, SLOT(changeDevice(const DeviceData &))); connect(deviceItem, SIGNAL(sizeChanged(const QSize &)), this, SLOT(setSizeToDevice(const QSize &))); + connect(deviceItem, SIGNAL(orientationChanged(Orientation)), config, SLOT(updateOrientationButtonsState(Orientation))); connect(config, SIGNAL(closeMainWindow()), this, SLOT(close())); - connect(config, SIGNAL(rotateRequested()), deviceItem, SLOT(toggleOrientation())); + connect(config, SIGNAL(orientationChangeRequested(Orientation)), deviceItem, SLOT(changeOrientation(Orientation))); connect(config, SIGNAL(scaleFactorChanged(qreal)), deviceItem, SLOT(changeScaleFactor(qreal))); connect(config, SIGNAL(exitButtonClicked()), applicationManager, SLOT(killCurrentApplication())); @@ -367,7 +366,8 @@ void MainWindow::writeSettings() const settings.beginGroup("MainWindow"); settings.setValue("pos", pos()); - settings.setValue("rotation", deviceItem->isLandscape()); + int orientationToSave = static_cast<int>(deviceItem->currentOrientation()); + settings.setValue("rotation", orientationToSave); settings.endGroup(); } @@ -384,10 +384,12 @@ void MainWindow::readSettings() const QRect geometry = QApplication::desktop()->availableGeometry(positionToSet); if (geometry.contains(positionToSet + QPoint(height() / 2, width() / 2))) move(positionToSet); - bool rotated = false; - if (settings.contains("rotation")) - rotated = settings.value("rotation").toBool(); - deviceItem->setInitialRotation(rotated); + Orientation orientation = topUp; + if (settings.contains("rotation")) { + int orientationInt = settings.value("rotation").toInt(); + orientation = static_cast<Orientation>(orientationInt); + } + deviceItem->setInitialRotation(orientation); deviceItem->setMaemoNavigationMode(maemoClose); settings.endGroup(); diff --git a/src/ui/sensorsui.cpp b/src/ui/sensorsui.cpp index f6b6d5c..59bd6ad 100644 --- a/src/ui/sensorsui.cpp +++ b/src/ui/sensorsui.cpp @@ -28,7 +28,6 @@ **************************************************************************/ #include "sensorsui.h" - #include "configurationwidget.h" #include <QtCore/QMetaEnum> diff --git a/src/ui/ui.qrc b/src/ui/ui.qrc index f157ed7..a4fef16 100644 --- a/src/ui/ui.qrc +++ b/src/ui/ui.qrc @@ -1,5 +1,11 @@ <RCC> <qresource prefix="/ui"> <file>icons/hicolor/256x256/apps/Nokia-Simulator.png</file> + <file>icons/facedown.png</file> + <file>icons/faceup.png</file> + <file>icons/leftup.png</file> + <file>icons/rightup.png</file> + <file>icons/topdown.png</file> + <file>icons/topup.png</file> </qresource> </RCC> |