Skip to content

Commit

Permalink
libappfw: VariableSliderWidget can be used to adjust Animation values
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Jan 1, 2016
1 parent 7c92586 commit 805f3ec
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 6 deletions.
10 changes: 10 additions & 0 deletions doomsday/sdk/libappfw/include/de/widgets/variablesliderwidget.h
Expand Up @@ -38,10 +38,20 @@ class LIBAPPFW_PUBLIC VariableSliderWidget : public SliderWidget
/// Thrown when the variable is gone and someone tries to access it. @ingroup errors
DENG2_ERROR(VariableMissingError);

enum ValueType
{
Number,
Animation
};

public:
VariableSliderWidget(Variable &variable, Ranged const &range, ddouble step = 0,
String const &name = "");

VariableSliderWidget(ValueType valueType, Variable &variable,
Ranged const &range, ddouble step = 0,
String const &name = "");

Variable &variable() const;

public slots:
Expand Down
53 changes: 47 additions & 6 deletions doomsday/sdk/libappfw/src/widgets/variablesliderwidget.cpp
Expand Up @@ -19,13 +19,16 @@
#include "de/VariableSliderWidget"

#include <de/NumberValue>
#include <de/NativeValue>
#include <de/Animation>

namespace de {

DENG2_PIMPL(VariableSliderWidget)
, DENG2_OBSERVES(Variable, Deletion)
, DENG2_OBSERVES(Variable, Change )
{
ValueType valueType = VariableSliderWidget::Number;
Variable *var;

Instance(Public *i, Variable &variable) : Base(i), var(&variable)
Expand All @@ -43,19 +46,44 @@ DENG2_PIMPL(VariableSliderWidget)
}
}

void init()
{
self.updateFromVariable();
QObject::connect(thisPublic, SIGNAL(valueChangedByUser(double)),
thisPublic, SLOT(setVariableFromWidget()));
}

void updateFromVariable()
{
if(!var) return;

self.setValue(var->value<NumberValue>().asNumber());
switch(valueType)
{
case VariableSliderWidget::Number:
self.setValue(var->value<NumberValue>().asNumber());
break;

case VariableSliderWidget::Animation:
self.setValue(var->value<NativeValue>().nativeObject<de::Animation>()->target());
break;
}
}

void setVariableFromWidget()
{
if(!var) return;

var->audienceForChange() -= this;
var->set(NumberValue(self.value()));
switch(valueType)
{
case VariableSliderWidget::Number:
var->set(NumberValue(self.value()));
break;

case VariableSliderWidget::Animation:
var->value<NativeValue>().nativeObject<de::Animation>()->setValue(float(self.value()));
break;
}
var->audienceForChange() += this;
}

Expand All @@ -73,13 +101,26 @@ DENG2_PIMPL(VariableSliderWidget)

VariableSliderWidget::VariableSliderWidget(Variable &variable, Ranged const &range,
ddouble step, String const &name)
: SliderWidget(name), d(new Instance(this, variable))
: SliderWidget(name)
, d(new Instance(this, variable))
{
if(!variable.value().is<NumberValue>())
{
d->valueType = VariableSliderWidget::Animation;
}
setRange(range, step);
updateFromVariable();
d->init();
}

connect(this, SIGNAL(valueChangedByUser(double)),
this, SLOT(setVariableFromWidget()));
VariableSliderWidget::VariableSliderWidget(ValueType valueType,
Variable &variable, Ranged const &range,
ddouble step, String const &name)
: SliderWidget(name)
, d(new Instance(this, variable))
{
d->valueType = valueType;
setRange(range, step);
d->init();
}

Variable &VariableSliderWidget::variable() const
Expand Down

0 comments on commit 805f3ec

Please sign in to comment.