summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/maemoFremantle/N900.pngbin238581 -> 232898 bytes
-rw-r--r--models/maemoFremantle/fremantle_landscape.pngbin31735 -> 0 bytes
-rw-r--r--models/maemoFremantle/fremantle_portrait.pngbin12229 -> 0 bytes
-rw-r--r--models/maemoFremantle/maemoFremantle.config16
-rw-r--r--models/symbian3/symbian3.config1
-rw-r--r--models/symbianNonTouch/n95landscape.pngbin13437 -> 0 bytes
-rw-r--r--models/symbianNonTouch/n95portrait.pngbin21398 -> 0 bytes
-rw-r--r--models/symbianNonTouch/symbianNonTouch.config8
-rw-r--r--models/symbianTouch/menu_landscape.pngbin23415 -> 0 bytes
-rw-r--r--models/symbianTouch/menu_portrait.pngbin7337 -> 0 bytes
-rw-r--r--models/symbianTouch/symbianTouch.config8
-rw-r--r--src/mobility/mobilitydata.cpp75
-rw-r--r--src/mobility/mobilitydata.h4
-rw-r--r--src/other/configurationreader.cpp53
-rw-r--r--src/other/deviceitem.cpp385
-rw-r--r--src/other/deviceitem.h49
-rw-r--r--src/ui/configurationwidget.cpp60
-rw-r--r--src/ui/configurationwidget.h6
-rw-r--r--src/ui/icons/facedown.pngbin0 -> 9076 bytes
-rw-r--r--src/ui/icons/faceup.pngbin0 -> 23505 bytes
-rw-r--r--src/ui/icons/leftup.pngbin0 -> 8761 bytes
-rw-r--r--src/ui/icons/rightup.pngbin0 -> 9019 bytes
-rw-r--r--src/ui/icons/topdown.pngbin0 -> 9194 bytes
-rw-r--r--src/ui/icons/topup.pngbin0 -> 9292 bytes
-rw-r--r--src/ui/inspector.ui196
-rw-r--r--src/ui/mainwindow.cpp20
-rw-r--r--src/ui/sensorsui.cpp1
-rw-r--r--src/ui/ui.qrc6
28 files changed, 631 insertions, 257 deletions
diff --git a/models/maemoFremantle/N900.png b/models/maemoFremantle/N900.png
index 27fb3cd..83c8d6d 100644
--- a/models/maemoFremantle/N900.png
+++ b/models/maemoFremantle/N900.png
Binary files differ
diff --git a/models/maemoFremantle/fremantle_landscape.png b/models/maemoFremantle/fremantle_landscape.png
deleted file mode 100644
index efb8326..0000000
--- a/models/maemoFremantle/fremantle_landscape.png
+++ /dev/null
Binary files differ
diff --git a/models/maemoFremantle/fremantle_portrait.png b/models/maemoFremantle/fremantle_portrait.png
deleted file mode 100644
index 4e2c02b..0000000
--- a/models/maemoFremantle/fremantle_portrait.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 159a628..0000000
--- a/models/symbianNonTouch/n95landscape.png
+++ /dev/null
Binary files differ
diff --git a/models/symbianNonTouch/n95portrait.png b/models/symbianNonTouch/n95portrait.png
deleted file mode 100644
index 33021bd..0000000
--- a/models/symbianNonTouch/n95portrait.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 25d80d5..0000000
--- a/models/symbianTouch/menu_landscape.png
+++ /dev/null
Binary files differ
diff --git a/models/symbianTouch/menu_portrait.png b/models/symbianTouch/menu_portrait.png
deleted file mode 100644
index c954310..0000000
--- a/models/symbianTouch/menu_portrait.png
+++ /dev/null
Binary files differ
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
new file mode 100644
index 0000000..2e65212
--- /dev/null
+++ b/src/ui/icons/facedown.png
Binary files differ
diff --git a/src/ui/icons/faceup.png b/src/ui/icons/faceup.png
new file mode 100644
index 0000000..13943d0
--- /dev/null
+++ b/src/ui/icons/faceup.png
Binary files differ
diff --git a/src/ui/icons/leftup.png b/src/ui/icons/leftup.png
new file mode 100644
index 0000000..9576a82
--- /dev/null
+++ b/src/ui/icons/leftup.png
Binary files differ
diff --git a/src/ui/icons/rightup.png b/src/ui/icons/rightup.png
new file mode 100644
index 0000000..186ac37
--- /dev/null
+++ b/src/ui/icons/rightup.png
Binary files differ
diff --git a/src/ui/icons/topdown.png b/src/ui/icons/topdown.png
new file mode 100644
index 0000000..7846ed4
--- /dev/null
+++ b/src/ui/icons/topdown.png
Binary files differ
diff --git a/src/ui/icons/topup.png b/src/ui/icons/topup.png
new file mode 100644
index 0000000..343da8c
--- /dev/null
+++ b/src/ui/icons/topup.png
Binary files differ
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>