From 84c40dc590fbc9b6fb41a00d9f7eaa146b02134e Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 28 May 2012 17:46:11 +0200 Subject: [PATCH] * Support manual resizing in AnimatedSplitter. --- src/libtomahawk/widgets/AnimatedSplitter.cpp | 80 ++++++++++++++------ src/libtomahawk/widgets/AnimatedSplitter.h | 9 ++- 2 files changed, 63 insertions(+), 26 deletions(-) diff --git a/src/libtomahawk/widgets/AnimatedSplitter.cpp b/src/libtomahawk/widgets/AnimatedSplitter.cpp index 93a941c83..26a483266 100644 --- a/src/libtomahawk/widgets/AnimatedSplitter.cpp +++ b/src/libtomahawk/widgets/AnimatedSplitter.cpp @@ -63,6 +63,7 @@ AnimatedSplitter::addWidget( AnimatedWidget* widget ) connect( widget, SIGNAL( hideWidget() ), SLOT( onHideRequest() ) ); connect( widget, SIGNAL( sizeHintChanged( QSize ) ), SLOT( onShowRequest() ) ); connect( widget, SIGNAL( sizeChanged( QSize ) ), SLOT( onSizeChanged( QSize ) ) ); + connect( widget, SIGNAL( resizeBy( QPoint ) ), SLOT( onResizeRequest( QPoint ) ) ); connect( this, SIGNAL( shown( QWidget*, bool ) ), widget, SLOT( onShown( QWidget*, bool ) ) ); connect( this, SIGNAL( hidden( QWidget*, bool ) ), widget, SLOT( onHidden( QWidget*, bool ) ) ); @@ -70,32 +71,9 @@ AnimatedSplitter::addWidget( AnimatedWidget* widget ) void -AnimatedSplitter::onShowRequest() +AnimatedSplitter::changeSize( QWidget* child, const QSize& size ) { - AnimatedWidget* w = (AnimatedWidget*)(sender()); - if ( indexOf( w ) > 0 ) - show( indexOf( w ) ); - else - qDebug() << "Could not find widget:" << sender(); -} - - -void -AnimatedSplitter::onHideRequest() -{ - AnimatedWidget* w = (AnimatedWidget*)(sender()); - if ( indexOf( w ) > 0 ) - hide( indexOf( w ) ); - else - qDebug() << "Could not find widget:" << sender(); -} - - -void -AnimatedSplitter::onSizeChanged( const QSize& size ) -{ - AnimatedWidget* w = (AnimatedWidget*)(sender()); - int wi = indexOf( w ); + int wi = indexOf( child ); QList< int > sizes; for ( int i = 0; i < count(); i ++ ) @@ -127,6 +105,58 @@ AnimatedSplitter::onSizeChanged( const QSize& size ) } +void +AnimatedSplitter::onResizeRequest( const QPoint& delta ) +{ + AnimatedWidget* w = (AnimatedWidget*)(sender()); + if ( indexOf( w ) > 0 ) + { + int newheight = w->height() + delta.y(); + if ( newheight <= w->hiddenSize().height() ) + { + w->hide(); + } + else + changeSize( w, QSize( w->width(), newheight ) ); + } + else + Q_ASSERT( false ); +} + + +void +AnimatedSplitter::onShowRequest() +{ + AnimatedWidget* w = (AnimatedWidget*)(sender()); + if ( indexOf( w ) > 0 ) + show( indexOf( w ) ); + else + Q_ASSERT( false ); +} + + +void +AnimatedSplitter::onHideRequest() +{ + AnimatedWidget* w = (AnimatedWidget*)(sender()); + if ( indexOf( w ) > 0 ) + hide( indexOf( w ) ); + else + Q_ASSERT( false ); +} + + +void +AnimatedSplitter::onSizeChanged( const QSize& size ) +{ + AnimatedWidget* w = (AnimatedWidget*)(sender()); + if ( indexOf( w ) > 0 ) + changeSize( w, size ); + else + Q_ASSERT( false ); +} + + void AnimatedSplitter::setGreedyWidget( int index ) { diff --git a/src/libtomahawk/widgets/AnimatedSplitter.h b/src/libtomahawk/widgets/AnimatedSplitter.h index 4e47d77b9..a8ef35325 100644 --- a/src/libtomahawk/widgets/AnimatedSplitter.h +++ b/src/libtomahawk/widgets/AnimatedSplitter.h @@ -49,11 +49,14 @@ protected: virtual QSplitterHandle* createHandle(); private slots: + void changeSize( QWidget* child, const QSize& size ); + void onShowRequest(); void onHideRequest(); void onSizeChanged( const QSize& size ); - + void onResizeRequest( const QPoint& delta ); + private: int m_greedyIndex; }; @@ -95,10 +98,14 @@ public slots: virtual void onShown( QWidget*, bool animated ); virtual void onHidden( QWidget*, bool animated ); + virtual void hide() { emit hideWidget(); } + virtual void show() { emit showWidget(); } + signals: void showWidget(); void hideWidget(); + void resizeBy( const QPoint& delta ); void sizeChanged( const QSize& size ); void sizeHintChanged( const QSize& size ); void hiddenSizeChanged();