diff --git a/src/gui/official/VolumeControl.cpp b/src/gui/official/VolumeControl.cpp index a7b2a6a91a7bf622fc52b9c9585060082141172a..56c230516f0b8f8c2bc98ab073f02f5a914299a8 100644 --- a/src/gui/official/VolumeControl.cpp +++ b/src/gui/official/VolumeControl.cpp @@ -79,8 +79,12 @@ VolumeControl::setMin(int value) void VolumeControl::setValue(int value) { - if(value <= mMax && value >= mMin) { - mValue = value; + if(value != mValue) { + if(value <= mMax && value >= mMin) { + mValue = value; + updateSlider(value); + emit valueUpdated(mValue); + } } } @@ -89,29 +93,71 @@ void VolumeControl::mouseMoveEvent (QMouseEvent *e) { if (mOrientation == VolumeControl::Vertical) { // If the slider for the volume is vertical - int yoffset = e->y() - mPos.y(); - std::cout << "yoffset: " << yoffset << std::endl; - if(yoffset < 0) { - yoffset = 0; + int newpos = mSlider->y() + e->globalY() - mPos.y(); + + mPos = e->globalPos(); + if(newpos < 0) { + mPos.setY(mPos.y() - newpos); + newpos = 0; } - if(yoffset > mMaxPosition) { - yoffset = mMaxPosition; + if(newpos > mMaxPosition) { + mPos.setY(mPos.y() - (newpos - mMaxPosition)); + newpos = mMaxPosition; } - - std::cout << "new yoffset: " << yoffset << std::endl << std::endl; - mSlider->move(mSlider->x(), yoffset); + mSlider->move(mSlider->x(), newpos); + updateValue(); } else { mSlider->move(e->y() - mPos.x(), mSlider->y()); } + +} + +void +VolumeControl::updateValue() +{ + std::cout << "offset: " << offset() << std::endl; + std::cout << "max pos: " << mMaxPosition << std::endl; + std::cout << "min: " << mMin << std::endl; + std::cout << "max: " << mMax << std::endl; + int value = (int)((float)offset() / mMaxPosition * (mMax - mMin)); + std::cout << "Real Value: " << value << std::endl; + mValue = value; + emit valueUpdated(mValue); +} + + +void +VolumeControl::updateSlider(int value) +{ + if(mOrientation == VolumeControl::Vertical) { + std::cout << "Move again to : " << + value / (mMax - mMin) * mMaxPosition << + std::endl << std::endl; + mSlider->move(mSlider->x(), value / (mMax - mMin) * mMaxPosition); + } + else { + mSlider->move(value / (mMax - mMin) * mMaxPosition, mSlider->y()); + } +} + +int +VolumeControl::offset() +{ + if(mOrientation == VolumeControl::Vertical) { + return mSlider->y(); + } + else { + return mSlider->x(); + } } void VolumeControl::mousePressEvent (QMouseEvent *e) { - mPos = e->pos(); + mPos = e->globalPos(); } // EOF diff --git a/src/gui/official/VolumeControl.hpp b/src/gui/official/VolumeControl.hpp index cd6098df7755d66f1aabfbbf04981280f272960a..182987e9067340385af2384cf11adab6f2061315 100644 --- a/src/gui/official/VolumeControl.hpp +++ b/src/gui/official/VolumeControl.hpp @@ -35,17 +35,26 @@ public: int maxValue = 100); ~VolumeControl(void); - void setOrientation(Orientation orientation); + int getValue() + {return mValue;} + + int offset(); + int minY(); + int maxY(); + +signals: + void valueUpdated(int); + +public slots: + void updateValue(); void setMin(int value); void setMax(int value); void setValue(int value); void resize(); - -signals: - void setVolumeValue(int); + void setOrientation(Orientation orientation); private: - + void updateSlider(int value); void mouseMoveEvent(QMouseEvent*); void mousePressEvent(QMouseEvent*);