|
Packit |
8e9c33 |
#ifndef adwaitatransitiondata_h
|
|
Packit |
8e9c33 |
#define adwaitatransitiondata_h
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//////////////////////////////////////////////////////////////////////////////
|
|
Packit |
8e9c33 |
// adwaitatransitiondata.h
|
|
Packit |
8e9c33 |
// data container for generic transitions
|
|
Packit |
8e9c33 |
// -------------------
|
|
Packit |
8e9c33 |
//
|
|
Packit |
8e9c33 |
// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
Packit |
8e9c33 |
//
|
|
Packit |
8e9c33 |
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
Packit |
8e9c33 |
// of this software and associated documentation files (the "Software"), to
|
|
Packit |
8e9c33 |
// deal in the Software without restriction, including without limitation the
|
|
Packit |
8e9c33 |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
Packit |
8e9c33 |
// sell copies of the Software, and to permit persons to whom the Software is
|
|
Packit |
8e9c33 |
// furnished to do so, subject to the following conditions:
|
|
Packit |
8e9c33 |
//
|
|
Packit |
8e9c33 |
// The above copyright notice and this permission notice shall be included in
|
|
Packit |
8e9c33 |
// all copies or substantial portions of the Software.
|
|
Packit |
8e9c33 |
//
|
|
Packit |
8e9c33 |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
Packit |
8e9c33 |
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
Packit |
8e9c33 |
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
Packit |
8e9c33 |
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
Packit |
8e9c33 |
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
Packit |
8e9c33 |
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
Packit |
8e9c33 |
// IN THE SOFTWARE.
|
|
Packit |
8e9c33 |
//////////////////////////////////////////////////////////////////////////////
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include "adwaitatransitionwidget.h"
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#include <QObject>
|
|
Packit |
8e9c33 |
#include <QTime>
|
|
Packit |
8e9c33 |
#include <QWidget>
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
namespace Adwaita
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* generic data
|
|
Packit |
8e9c33 |
class TransitionData: public QObject
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
Q_OBJECT
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
public:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* constructor
|
|
Packit |
8e9c33 |
TransitionData( QObject* parent, QWidget* target, int );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* destructor
|
|
Packit |
8e9c33 |
virtual ~TransitionData( void );
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* enability
|
|
Packit |
8e9c33 |
virtual void setEnabled( bool value )
|
|
Packit |
8e9c33 |
{ _enabled = value; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* enability
|
|
Packit |
8e9c33 |
virtual bool enabled( void ) const
|
|
Packit |
8e9c33 |
{ return _enabled; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* duration
|
|
Packit |
8e9c33 |
virtual void setDuration( int duration )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( _transition )
|
|
Packit |
8e9c33 |
{ _transition.data()->setDuration( duration ); }
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* max render time
|
|
Packit |
8e9c33 |
void setMaxRenderTime( int value )
|
|
Packit |
8e9c33 |
{ _maxRenderTime = value; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* max renderTime
|
|
Packit |
8e9c33 |
const int& maxRenderTime( void ) const
|
|
Packit |
8e9c33 |
{ return _maxRenderTime; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* start clock
|
|
Packit |
8e9c33 |
void startClock( void )
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( _clock.isNull() ) _clock.start();
|
|
Packit |
8e9c33 |
else _clock.restart();
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* check if rendering is two slow
|
|
Packit |
8e9c33 |
bool slow( void ) const
|
|
Packit |
8e9c33 |
{ return !( _clock.isNull() || _clock.elapsed() <= maxRenderTime() ); }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
protected Q_SLOTS:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* initialize animation
|
|
Packit |
8e9c33 |
virtual bool initializeAnimation( void ) = 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* animate
|
|
Packit |
8e9c33 |
virtual bool animate( void ) = 0;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
protected:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* returns true if one parent matches given class name
|
|
Packit |
8e9c33 |
inline bool hasParent( const QWidget*, const char* ) const;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* transition widget
|
|
Packit |
8e9c33 |
virtual const TransitionWidget::Pointer& transition( void ) const
|
|
Packit |
8e9c33 |
{ return _transition; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* used to avoid recursion when grabbing widgets
|
|
Packit |
8e9c33 |
void setRecursiveCheck( bool value )
|
|
Packit |
8e9c33 |
{ _recursiveCheck = value; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* used to avoid recursion when grabbing widgets
|
|
Packit |
8e9c33 |
bool recursiveCheck( void ) const
|
|
Packit |
8e9c33 |
{ return _recursiveCheck; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
private:
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* enability
|
|
Packit |
8e9c33 |
bool _enabled = true;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* used to avoid recursion when grabbing widgets
|
|
Packit |
8e9c33 |
bool _recursiveCheck = false;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* timer used to detect slow rendering
|
|
Packit |
8e9c33 |
QTime _clock;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* max render time
|
|
Packit |
8e9c33 |
/*! used to detect slow rendering */
|
|
Packit |
8e9c33 |
int _maxRenderTime = 200;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//* animation handling
|
|
Packit |
8e9c33 |
TransitionWidget::Pointer _transition;
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
};
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
//_____________________________________________________________________________________
|
|
Packit |
8e9c33 |
bool TransitionData::hasParent( const QWidget* widget, const char* className ) const
|
|
Packit |
8e9c33 |
{
|
|
Packit |
8e9c33 |
if( !widget ) return false;
|
|
Packit |
8e9c33 |
for( QWidget* parent = widget->parentWidget(); parent; parent = parent->parentWidget() )
|
|
Packit |
8e9c33 |
{ if( parent->inherits( className ) ) return true; }
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
return false;
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
}
|
|
Packit |
8e9c33 |
|
|
Packit |
8e9c33 |
#endif
|