//______________________________________________ TabBarData::TabBarData( QObject* parent, QWidget* target, int duration ): AnimationData( parent, target ) { current_.animation_ = new Animation( duration, this ); setupAnimation( currentIndexAnimation(), "currentOpacity" ); currentIndexAnimation().data()->setDirection( Animation::Forward ); previous_.animation_ = new Animation( duration, this ); setupAnimation( previousIndexAnimation(), "previousOpacity" ); previousIndexAnimation().data()->setDirection( Animation::Backward ); }
//______________________________________________ HeaderViewData::HeaderViewData( QObject* parent, QWidget* target, int duration ): AnimationData( parent, target ) { target->installEventFilter( this ); _current._animation = new Animation( duration, this ); setupAnimation( currentIndexAnimation(), "currentOpacity" ); currentIndexAnimation().data()->setDirection( Animation::Forward ); _previous._animation = new Animation( duration, this ); setupAnimation( previousIndexAnimation(), "previousOpacity" ); previousIndexAnimation().data()->setDirection( Animation::Backward ); }
//______________________________________________ Animation::Pointer TabBarData::animation( const QPoint& position ) const { if ( !enabled() ) return Animation::Pointer(); const QTabBar* local( qobject_cast<const QTabBar*>( target().data() ) ); if ( !local ) return Animation::Pointer(); int index( local->tabAt( position ) ); if ( index < 0 ) return Animation::Pointer(); else if ( index == currentIndex() ) return currentIndexAnimation(); else if ( index == previousIndex() ) return previousIndexAnimation(); else return Animation::Pointer(); }
//______________________________________________ Animation::Pointer HeaderViewData::animation( const QPoint& position ) const { if( !enabled() ) return Animation::Pointer(); const QHeaderView* local( qobject_cast<const QHeaderView*>( target().data() ) ); if( !local ) return Animation::Pointer(); int index( local->logicalIndexAt( position ) ); if( index < 0 ) return Animation::Pointer(); else if( index == currentIndex() ) return currentIndexAnimation(); else if( index == previousIndex() ) return previousIndexAnimation(); else return Animation::Pointer(); }
//______________________________________________ bool HeaderViewData::updateState( const QPoint& position , bool hovered ) { if( !enabled() ) return false; const QHeaderView* local( qobject_cast<const QHeaderView*>( target().data() ) ); if( !local ) return false; int index( local->logicalIndexAt( position ) ); if( index < 0 ) return false; if( hovered ) { if( index != currentIndex() ) { if( currentIndex() >= 0 ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); } setCurrentIndex( index ); /* for now animation is only triggered when hovering the sorting section, since no hover effect is implemented for all other sections */ if( index == local->sortIndicatorSection() ) { currentIndexAnimation().data()->restart(); } return true; } else return false; } else if( index == currentIndex() ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); return true; } else return false; }
//______________________________________________ bool TabBarData::updateState( const QPoint& position , bool hovered ) { if( !enabled() ) return false; const QTabBar* local( qobject_cast<const QTabBar*>( target().data() ) ); if( !local ) return false; int index( local->tabAt( position ) ); if( index < 0 ) return false; if( hovered ) { if( index != currentIndex() ) { if( currentIndex() >= 0 ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); } setCurrentIndex( index ); currentIndexAnimation().data()->restart(); return true; } else return false; } else if( index == currentIndex() ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); return true; } else return false; }