|
Packit |
8e9c33 |
/*************************************************************************
|
|
Packit |
8e9c33 |
* Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr> *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is free software; you can redistribute it and/or modify *
|
|
Packit |
8e9c33 |
* it under the terms of the GNU General Public License as published by *
|
|
Packit |
8e9c33 |
* the Free Software Foundation; either version 2 of the License, or *
|
|
Packit |
8e9c33 |
* (at your option) any later version. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* This program is distributed in the hope that it will be useful, *
|
|
Packit |
8e9c33 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
Packit |
8e9c33 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
Packit |
8e9c33 |
* GNU General Public License for more details. *
|
|
Packit |
8e9c33 |
* *
|
|
Packit |
8e9c33 |
* You should have received a copy of the GNU General Public License *
|
|
Packit |
8e9c33 |
* along with this program; if not, write to the *
|
|
Packit |
8e9c33 |
* Free Software Foundation, Inc., *
|
|
Packit |
8e9c33 |
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
Packit |
8e9c33 |
*************************************************************************/
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaitabusyindicatorengine.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaita.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QVariant>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace Adwaita
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_______________________________________________
|
|
Packit |
8e9c33 |
BusyIndicatorEngine::BusyIndicatorEngine( QObject* object ):
|
|
Packit |
8e9c33 |
BaseEngine( object )
|
|
Packit |
8e9c33 |
{}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_______________________________________________
|
|
Packit |
8e9c33 |
bool BusyIndicatorEngine::registerWidget( QObject* object )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// check widget validity
|
|
Packit |
8e9c33 |
if( !object ) return false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// create new data class
|
|
Packit |
8e9c33 |
if( !_data.contains( object ) )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
_data.insert( object, new BusyIndicatorData( this ) );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// connect destruction signal
|
|
Packit |
8e9c33 |
connect( object, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterWidget(QObject*)), Qt::UniqueConnection );
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________
|
|
Packit |
8e9c33 |
bool BusyIndicatorEngine::isAnimated( const QObject* object )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
DataMap<BusyIndicatorData>::Value data( BusyIndicatorEngine::data( object ) );
|
|
Packit |
8e9c33 |
return data && data.data()->isAnimated();
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________
|
|
Packit |
8e9c33 |
void BusyIndicatorEngine::setDuration( int value )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( duration() == value ) return;
|
|
Packit |
8e9c33 |
BaseEngine::setDuration( value );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// restart timer with specified time
|
|
Packit |
8e9c33 |
if( _animation )
|
|
Packit |
8e9c33 |
{ _animation.data()->setDuration( value ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________
|
|
Packit |
8e9c33 |
void BusyIndicatorEngine::setAnimated( const QObject* object, bool value )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
DataMap<BusyIndicatorData>::Value data( BusyIndicatorEngine::data( object ) );
|
|
Packit |
8e9c33 |
if( data )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
// update data
|
|
Packit |
8e9c33 |
data.data()->setAnimated( value );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// start timer if needed
|
|
Packit |
8e9c33 |
if( value )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !_animation )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// create animation if not already there
|
|
Packit |
8e9c33 |
_animation = new Animation( duration(), this );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// setup
|
|
Packit |
8e9c33 |
_animation.data()->setStartValue( 0.0 );
|
|
Packit |
8e9c33 |
_animation.data()->setEndValue( 100.0 );
|
|
Packit |
8e9c33 |
_animation.data()->setTargetObject( this );
|
|
Packit |
8e9c33 |
_animation.data()->setPropertyName( "value" );
|
|
Packit |
8e9c33 |
_animation.data()->setLoopCount( -1 );
|
|
Packit |
8e9c33 |
_animation.data()->setDuration( duration() * 3);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// start if not already running
|
|
Packit |
8e9c33 |
if( !_animation.data()->isRunning() )
|
|
Packit |
8e9c33 |
{ _animation.data()->start(); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//____________________________________________________________
|
|
Packit |
8e9c33 |
DataMap<BusyIndicatorData>::Value BusyIndicatorEngine::data( const QObject* object )
|
|
Packit |
8e9c33 |
{ return _data.find( object ).data(); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_______________________________________________
|
|
Packit |
8e9c33 |
void BusyIndicatorEngine::setValue( int value )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// update
|
|
Packit |
8e9c33 |
_value = value;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
bool animated( false );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// loop over objects in map
|
|
Packit |
8e9c33 |
for( DataMap<BusyIndicatorData>::iterator iter = _data.begin(); iter != _data.end(); ++iter )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( iter.value().data()->isAnimated() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// update animation flag
|
|
Packit |
8e9c33 |
animated = true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
// emit update signal on object
|
|
Packit |
8e9c33 |
if( const_cast<QObject*>( iter.key() )->inherits( "QQuickStyleItem" ))
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//QtQuickControls "rerender" method is updateItem
|
|
Packit |
8e9c33 |
QMetaObject::invokeMethod( const_cast<QObject*>( iter.key() ), "updateItem", Qt::QueuedConnection);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
} else {
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
QMetaObject::invokeMethod( const_cast<QObject*>( iter.key() ), "update", Qt::QueuedConnection);
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
if( _animation && !animated )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
_animation.data()->stop();
|
|
Packit |
8e9c33 |
_animation.data()->deleteLater();
|
|
Packit |
8e9c33 |
_animation.clear();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//__________________________________________________________
|
|
Packit |
8e9c33 |
bool BusyIndicatorEngine::unregisterWidget( QObject* object )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
bool removed( _data.unregisterWidget( object ) );
|
|
Packit |
8e9c33 |
if( _animation && _data.isEmpty() )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
_animation.data()->stop();
|
|
Packit |
8e9c33 |
_animation.data()->deleteLater();
|
|
Packit |
8e9c33 |
_animation.clear();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return removed;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|