summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-11-03 12:54:26 +0100
committerChristian Kamm <christian.d.kamm@nokia.com>2010-11-03 14:20:14 +0100
commit22a92c06e1cb452401c1188901d17cbd6bbb0fb6 (patch)
treeee54bd17112434e1686be6a1053085dc42fd1bfc
parentdbf507069c98beb91d1947baa28502388c5a2d80 (diff)
Feedback: Enable control of actuator properties from Simulator.
-rw-r--r--src/mobility/feedback.cpp40
-rw-r--r--src/mobility/feedback.h4
-rw-r--r--src/mobility/mobilitymanager.cpp11
-rw-r--r--src/mobility/mobilitymanager.h1
-rw-r--r--src/ui/feedbackui.cpp27
-rw-r--r--src/ui/feedbackui.h1
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();