diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-11-03 12:54:26 +0100 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2010-11-03 14:20:14 +0100 |
commit | 22a92c06e1cb452401c1188901d17cbd6bbb0fb6 (patch) | |
tree | ee54bd17112434e1686be6a1053085dc42fd1bfc | |
parent | dbf507069c98beb91d1947baa28502388c5a2d80 (diff) |
Feedback: Enable control of actuator properties from Simulator.
-rw-r--r-- | src/mobility/feedback.cpp | 40 | ||||
-rw-r--r-- | src/mobility/feedback.h | 4 | ||||
-rw-r--r-- | src/mobility/mobilitymanager.cpp | 11 | ||||
-rw-r--r-- | src/mobility/mobilitymanager.h | 1 | ||||
-rw-r--r-- | src/ui/feedbackui.cpp | 27 | ||||
-rw-r--r-- | src/ui/feedbackui.h | 1 |
6 files changed, 79 insertions, 5 deletions
diff --git a/src/mobility/feedback.cpp b/src/mobility/feedback.cpp index 986c857..1711891 100644 --- a/src/mobility/feedback.cpp +++ b/src/mobility/feedback.cpp @@ -77,13 +77,18 @@ void Feedback::setInitialData() { ActuatorData data; data.id = mNextActuatorId++; - data.name = tr("simulated actuator"); + data.name = tr("vibration actuator"); data.enabled = true; data.state = QFeedbackActuator::Ready; mActuators.insert(data.id, data); - mDefaultActuator = data.id; + emit actuatorAdded(data); + data.id = mNextActuatorId++; + data.name = tr("audio actuator"); + data.enabled = false; + data.state = QFeedbackActuator::Ready; + mActuators.insert(data.id, data); emit actuatorAdded(data); } @@ -201,6 +206,37 @@ void Feedback::setActuatorEnabled(int actuatorId, bool enabled) emit actuatorChanged(actuator); } +void Feedback::setDefaultActuatorId(int actuatorId) +{ + if (actuatorId == mDefaultActuator) + return; + mDefaultActuator = actuatorId; + emit defaultActuatorIdChanged(actuatorId); +} + +void Feedback::setActuatorData(const ActuatorData &data) +{ + if (!mActuators.contains(data.id)) + return; + const ActuatorData &old = mActuators.value(data.id); + if (old.name == data.name + && old.enabled == data.enabled + && old.state == data.state) { + return; + } + + // setting the state to ready kills a running effect + const EffectData &runningEffect = effectForActuator(data.id); + if (data.state == QFeedbackActuator::Ready && runningEffect.actuatorId == data.id) { + stopEffect(mTimerToEffectId.value(runningEffect.timer)); + return; + } + + // else just set it + mActuators.insert(data.id, data); + emit actuatorChanged(data); +} + void Feedback::doneWithEffect() { QTimer *timer = qobject_cast<QTimer *>(sender()); diff --git a/src/mobility/feedback.h b/src/mobility/feedback.h index a7f1402..01d1e73 100644 --- a/src/mobility/feedback.h +++ b/src/mobility/feedback.h @@ -66,12 +66,16 @@ public: void setEffectDuration(int effectId, int duration); void setActuatorEnabled(int actuatorId, bool enabled); + void setDefaultActuatorId(int actuatorId); + void setActuatorData(const QtMobility::ActuatorData &data); + public slots: void setInitialData(); signals: void actuatorAdded(QtMobility::ActuatorData data); void actuatorChanged(QtMobility::ActuatorData data); + void defaultActuatorIdChanged(int actuatorId); void effectStateChanged(int effectId, QtMobility::QFeedbackEffect::State state); private slots: diff --git a/src/mobility/mobilitymanager.cpp b/src/mobility/mobilitymanager.cpp index 821d278..cc5deac 100644 --- a/src/mobility/mobilitymanager.cpp +++ b/src/mobility/mobilitymanager.cpp @@ -482,6 +482,8 @@ void MobilityClient::setRequestsFeedback() this, SLOT(sendActuatorChange(QtMobility::ActuatorData))); connect(feedback, SIGNAL(effectStateChanged(int,QtMobility::QFeedbackEffect::State)), this, SLOT(sendEffectStateChange(int,QtMobility::QFeedbackEffect::State))); + connect(feedback, SIGNAL(defaultActuatorIdChanged(int)), + this, SLOT(sendDefaultActuatorIdChange(int))); foreach (const QtMobility::ActuatorData &data, feedback->actuators()) { QtSimulatorPrivate::RemoteMetacall<void>::call(mSendSocket, QtSimulatorPrivate::NoSync, @@ -872,6 +874,14 @@ void MobilityClient::sendActuatorChange(const QtMobility::ActuatorData &actuator "setActuator", actuator); } +void MobilityClient::sendDefaultActuatorIdChange(int actuatorId) +{ + if (!mNotifyClientOnFeedbackChange) + return; + QtSimulatorPrivate::RemoteMetacall<void>::call(mSendSocket, QtSimulatorPrivate::NoSync, + "setDefaultActuator", actuatorId); +} + void MobilityClient::sendEffectStateChange(int effectId, QtMobility::QFeedbackEffect::State state) { if (!mNotifyClientOnFeedbackChange) @@ -879,4 +889,3 @@ void MobilityClient::sendEffectStateChange(int effectId, QtMobility::QFeedbackEf QtSimulatorPrivate::RemoteMetacall<void>::call(mSendSocket, QtSimulatorPrivate::NoSync, "setFeedbackEffectState", effectId, static_cast<int>(state)); } - diff --git a/src/mobility/mobilitymanager.h b/src/mobility/mobilitymanager.h index c352f7c..71be5ba 100644 --- a/src/mobility/mobilitymanager.h +++ b/src/mobility/mobilitymanager.h @@ -124,6 +124,7 @@ private slots: void sendRemoveOrganizerCollections(const QList<QOrganizerCollectionId> &); void sendActuatorChange(const QtMobility::ActuatorData &); + void sendDefaultActuatorIdChange(int actuatorId); void sendEffectStateChange(int effectId, QtMobility::QFeedbackEffect::State state); // called remotely diff --git a/src/ui/feedbackui.cpp b/src/ui/feedbackui.cpp index c1cacd0..8f718c9 100644 --- a/src/ui/feedbackui.cpp +++ b/src/ui/feedbackui.cpp @@ -88,6 +88,9 @@ FeedbackUi::FeedbackUi(Feedback *feedback, QWidget *parent) connect(mFeedback, SIGNAL(actuatorChanged(QtMobility::ActuatorData)), SLOT(showActuatorInfo())); connect(mFeedback, SIGNAL(effectStateChanged(int,QtMobility::QFeedbackEffect::State)), SLOT(showActuatorInfo())); connect(mFeedback, SIGNAL(actuatorAdded(QtMobility::ActuatorData)), SLOT(addActuator(QtMobility::ActuatorData))); + connect(mActuatorDefault, SIGNAL(toggled(bool)), SLOT(changeActuatorData())); + connect(mActuatorEnabled, SIGNAL(toggled(bool)), SLOT(changeActuatorData())); + connect(mActuatorState, SIGNAL(currentIndexChanged(int)), SLOT(changeActuatorData())); // connect(systemInfoAddDrive, SIGNAL(clicked()), SLOT(addDriveClicked())); // connect(systemInfoRemoveDrive, SIGNAL(clicked()), SLOT(removeDriveClicked())); // connect(systemInfoChangeDriveName, SIGNAL(clicked()), SLOT(renameDriveClicked())); @@ -122,6 +125,7 @@ void FeedbackUi::showActuatorInfo() } mActuatorDefault->setChecked(actuatorId == mFeedback->defaultActuatorId()); + mActuatorDefault->setEnabled(!mActuatorDefault->isChecked()); mActuatorEnabled->setChecked(actuator.enabled); mActuatorState->setCurrentIndex(static_cast<int>(actuator.state)); @@ -148,6 +152,27 @@ void FeedbackUi::addActuator(const QtMobility::ActuatorData &data) showActuatorInfo(); } +void FeedbackUi::changeActuatorData() +{ + if (mActuators->count() == 0) + return; + + int actuatorId = mActuators->itemData(mActuators->currentIndex()).toInt(); + const QtMobility::ActuatorData &actuator = mFeedback->actuator(actuatorId); + if (actuator.id != actuatorId) + return; + + if (mActuatorDefault->isChecked()) { + mFeedback->setDefaultActuatorId(actuatorId); + mActuatorDefault->setEnabled(false); + } + + QtMobility::ActuatorData newData = actuator; + newData.enabled = mActuatorEnabled->isChecked(); + newData.state = static_cast<QtMobility::QFeedbackActuator::State>(mActuatorState->currentIndex()); + mFeedback->setActuatorData(newData); +} + void FeedbackUi::initializeOptions() { // must match enums @@ -169,5 +194,3 @@ void FeedbackUi::setEnabled(bool enabled) mActuatorState->setEnabled(enabled); mEffectState->setEnabled(enabled); } - - diff --git a/src/ui/feedbackui.h b/src/ui/feedbackui.h index c4fe972..beb7e14 100644 --- a/src/ui/feedbackui.h +++ b/src/ui/feedbackui.h @@ -49,6 +49,7 @@ signals: private slots: void showActuatorInfo(); void addActuator(const QtMobility::ActuatorData &data); + void changeActuatorData(); private: void initializeOptions(); |