progress br added

This commit is contained in:
Uwe Rathmann 2020-08-06 09:28:38 +02:00
parent 27a95ee60f
commit 85b6a4cf57

View File

@ -9,15 +9,20 @@
#include <QskAspect.h>
#include <QskPageIndicator.h>
#include <QskProgressBar.h>
#include <QskRgbValue.h>
#include <QskStackBox.h>
#include <QskStackBoxAnimator.h>
#include <QskTextLabel.h>
#include <QElapsedTimer>
namespace
{
class StackBox : public QskStackBox
{
Q_OBJECT
public:
StackBox( QQuickItem* parent = nullptr )
: QskStackBox( parent )
@ -27,8 +32,6 @@ namespace
setBackgroundColor( Qt::white );
setDefaultAlignment( Qt::AlignCenter );
setMargins( 30 );
addRectangle( "Gold" );
addRectangle( "SeaGreen" );
addRectangle( "SlateBlue" );
@ -41,7 +44,6 @@ namespace
}
}
public:
void incrementFading( int offset )
{
auto animator = dynamic_cast< QskStackBoxAnimator3* >( this->animator() );
@ -55,6 +57,8 @@ namespace
setAnimator( animator );
setCurrentIndex( incrementedIndex( offset ) );
Q_EMIT transitionStarted( animator->duration() );
}
void incrementScrolling( Qt::Orientation orientation, int offset )
@ -71,8 +75,13 @@ namespace
setAnimator( animator );
setCurrentIndex( incrementedIndex( offset ) );
Q_EMIT transitionStarted( animator->duration() );
}
Q_SIGNALS:
void transitionStarted( int ms );
private:
void addRectangle( const char* colorName )
{
@ -94,6 +103,55 @@ namespace
return newIndex;
}
};
class ProgressBar : public QskProgressBar
{
public:
ProgressBar( QQuickItem* parent = nullptr )
: QskProgressBar( parent )
{
setValue( 0.0 );
setMaximumWidth( 200 );
}
void startProgressing( int ms )
{
reset();
if ( ms > 0 )
{
m_duration = ms;
m_elapsed.start();
m_timerId = startTimer( 5 );
}
}
protected:
void timerEvent( QTimerEvent* ) override
{
if ( m_elapsed.elapsed() >= m_duration )
reset();
else
setValue( m_elapsed.elapsed() / m_duration * 100.0 );
}
private:
void reset()
{
if ( m_timerId )
{
killTimer( m_timerId );
m_timerId = 0;
}
setValue( 0.0 );
m_duration = 0.0;
}
int m_timerId = 0;
qreal m_duration = 0.0;
QElapsedTimer m_elapsed;
};
}
StackLayoutPage::StackLayoutPage( QQuickItem* parent )
@ -104,9 +162,9 @@ StackLayoutPage::StackLayoutPage( QQuickItem* parent )
setMargins( 10 );
setBackgroundColor( QskRgbValue::LightSteelBlue );
auto* box = new StackBox();
auto box = new StackBox();
auto* buttonBox = new ButtonBox();
auto buttonBox = new ButtonBox();
buttonBox->setLayoutAlignmentHint( Qt::AlignTop | Qt::AlignLeft );
buttonBox->addButton( "<<", [ box ]() { box->incrementScrolling( Qt::Horizontal, +1 ); } );
@ -115,15 +173,28 @@ StackLayoutPage::StackLayoutPage( QQuickItem* parent )
buttonBox->addButton( "v", [ box ]() { box->incrementScrolling( Qt::Vertical, +1 ); } );
buttonBox->addButton( "Fading", [ box ]() { box->incrementFading( +1 ); } );
// page indicator
auto pageIndicator = new QskPageIndicator();
pageIndicator->setCount( box->itemCount() );
pageIndicator->setCurrentIndex( box->currentIndex() );
pageIndicator->setLayoutAlignmentHint( Qt::AlignCenter );
// progress bar
auto progressBar = new ProgressBar();
progressBar->setMargins( QMarginsF( 0, 0, 10, 0 ) );
addItem( buttonBox );
addItem( pageIndicator );
addItem( box );
addItem( progressBar, Qt::AlignRight );
connect( box, &QskStackBox::currentIndexChanged,
pageIndicator, &QskPageIndicator::setCurrentIndex );
connect( box, &StackBox::transitionStarted,
progressBar, &ProgressBar::startProgressing );
}
#include "StackLayoutPage.moc"