21
21
#include "slidecontainer.moc"
28
#include <QPropertyAnimation>
29
#include <QResizeEvent>
34
static const int SLIDE_DURATION = 250;
29
36
SlideContainer::SlideContainer(QWidget* parent)
32
mTimeLine = new QTimeLine(500, this);
33
connect(mTimeLine, SIGNAL(valueChanged(qreal)), SLOT(slotTimeLineChanged(qreal)) );
34
connect(mTimeLine, SIGNAL(finished()), SLOT(slotTimeLineFinished()) );
39
QWidget* SlideContainer::content() const {
44
void SlideContainer::setContent(QWidget* content) {
46
mContent->setParent(0);
49
mContent->setParent(this);
51
mContent->installEventFilter(this);
55
void SlideContainer::slideIn() {
56
mContent->adjustSize();
57
if (mTimeLine->direction() == QTimeLine::Backward) {
58
mTimeLine->setDirection(QTimeLine::Forward);
60
if (!isVisible() && mTimeLine->state() == QTimeLine::NotRunning) {
67
void SlideContainer::slideOut() {
68
if (mTimeLine->direction() == QTimeLine::Forward) {
69
mTimeLine->setDirection(QTimeLine::Backward);
71
if (mTimeLine->state() == QTimeLine::NotRunning) {
77
void SlideContainer::slotTimeLineChanged(qreal value) {
78
int posY = int( (value - 1.0) * height() );
79
mContent->setGeometry(0, posY, width(), height());
84
void SlideContainer::slotTimeLineFinished() {
85
if (mTimeLine->direction() == QTimeLine::Backward) {
91
QSize SlideContainer::sizeHint() const {
93
return mContent->sizeHint();
100
QSize SlideContainer::minimumSizeHint() const {
102
return mContent->minimumSizeHint();
109
void SlideContainer::resizeEvent(QResizeEvent*) {
111
mContent->resize(size());
116
bool SlideContainer::eventFilter(QObject*, QEvent* event) {
117
if (event->type() == QEvent::Resize) {
118
mContent->resize(width(), mContent->height());
44
QWidget* SlideContainer::content() const
49
void SlideContainer::setContent(QWidget* content)
52
mContent->setParent(0);
53
mContent->removeEventFilter(this);
57
mContent->setParent(this);
58
mContent->installEventFilter(this);
63
void SlideContainer::animTo(int newHeight)
66
QPropertyAnimation* anim = new QPropertyAnimation(this, "slideHeight", this);
67
anim->setDuration(SLIDE_DURATION);
68
anim->setStartValue(slideHeight());
69
anim->setEndValue(newHeight);
70
anim->start(QAbstractAnimation::DeleteWhenStopped);
74
void SlideContainer::slideIn()
78
mContent->adjustSize();
80
if (height() == mContent->height()) {
83
animTo(mContent->height());
86
void SlideContainer::slideOut()
93
connect(mAnim.data(), SIGNAL(finished()), SLOT(slotSlidedOut()));
96
void SlideContainer::slotSlidedOut()
101
QSize SlideContainer::sizeHint() const
104
return mContent->sizeHint();
110
QSize SlideContainer::minimumSizeHint() const
113
return mContent->minimumSizeHint();
119
void SlideContainer::resizeEvent(QResizeEvent* event)
122
if (event->oldSize().width() != width()) {
123
adjustContentGeometry();
128
void SlideContainer::adjustContentGeometry()
131
mContent->setGeometry(0, height() - mContent->height(), width(), mContent->height());
135
bool SlideContainer::eventFilter(QObject*, QEvent* event)
137
if (event->type() == QEvent::Resize) {
138
if (!mSlidingOut && height() != 0) {
139
animTo(mContent->height());
145
int SlideContainer::slideHeight() const
147
return isVisible() ? height() : 0;
150
void SlideContainer::setSlideHeight(int value)
152
setFixedHeight(value);
153
adjustContentGeometry();