2009-11-15 03:24:04 +00:00
|
|
|
#ifndef oxygenclientgroupitemdata_h
|
|
|
|
#define oxygenclientgroupitemdata_h
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// oxygenclientgroupitemdata.h
|
2010-05-22 05:40:39 +00:00
|
|
|
// handles tabs' geometry and animations
|
2009-11-15 03:24:04 +00:00
|
|
|
// -------------------
|
|
|
|
//
|
|
|
|
// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
|
|
//
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
// of this software and associated documentation files (the "Software"), to
|
|
|
|
// deal in the Software without restriction, including without limitation the
|
|
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
|
|
// furnished to do so, subject to the following conditions:
|
|
|
|
//
|
|
|
|
// The above copyright notice and this permission notice shall be included in
|
|
|
|
// all copies or substantial portions of the Software.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
|
|
// IN THE SOFTWARE.
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include "oxygenbutton.h"
|
2010-03-02 03:40:34 +00:00
|
|
|
#include "oxygenanimation.h"
|
2009-11-15 03:24:04 +00:00
|
|
|
|
|
|
|
#include <QtCore/QList>
|
|
|
|
#include <QtCore/QWeakPointer>
|
|
|
|
#include <QtCore/QRect>
|
|
|
|
|
|
|
|
namespace Oxygen
|
|
|
|
{
|
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
class Client;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! animation type
|
|
|
|
enum AnimationType {
|
|
|
|
AnimationNone = 0,
|
|
|
|
AnimationEnter = 1<<0,
|
|
|
|
AnimationMove = 1<<1,
|
|
|
|
AnimationLeave = 1<<2,
|
|
|
|
AnimationSameTarget = 1<<3
|
|
|
|
};
|
|
|
|
|
|
|
|
Q_DECLARE_FLAGS(AnimationTypes, AnimationType)
|
|
|
|
|
|
|
|
//! tab data
|
|
|
|
class ClientGroupItemData
|
|
|
|
{
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
public:
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! constructor
|
|
|
|
explicit ClientGroupItemData( void )
|
|
|
|
{}
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! destructor
|
|
|
|
virtual ~ClientGroupItemData( void )
|
|
|
|
{}
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! reset all rects to argument
|
|
|
|
void reset( const QRect& rect )
|
|
|
|
{
|
|
|
|
refBoundingRect_ = rect;
|
|
|
|
startBoundingRect_ = rect;
|
|
|
|
endBoundingRect_ = rect;
|
|
|
|
boundingRect_ = rect;
|
|
|
|
}
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! tab active rect
|
|
|
|
QRect activeRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! reference bounding rect
|
|
|
|
/*! it is usually identical to activeRect unless there is only one tab in window */
|
|
|
|
QRect refBoundingRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! tab drawing rect
|
|
|
|
QRect startBoundingRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! tab drawing rect
|
|
|
|
QRect endBoundingRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! tab drawing rect
|
|
|
|
QRect boundingRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! tab button
|
|
|
|
typedef QWeakPointer<Button> ButtonPointer;
|
|
|
|
ButtonPointer closeButton_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
};
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
class ClientGroupItemDataList: public QObject, public QList<ClientGroupItemData>
|
|
|
|
{
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
Q_OBJECT
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! declare animation progress property
|
|
|
|
Q_PROPERTY( qreal progress READ progress WRITE setProgress )
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
public:
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! invalid item index
|
|
|
|
enum { NoItem = -1 };
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! constructor
|
|
|
|
ClientGroupItemDataList( Client* parent );
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! dirty state
|
|
|
|
void setDirty( const bool& value )
|
|
|
|
{ dirty_ = value; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! dirty state
|
|
|
|
bool isDirty( void ) const
|
|
|
|
{ return dirty_; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! enable animations
|
|
|
|
void setAnimationsEnabled( bool value )
|
|
|
|
{ animationsEnabled_ = value; }
|
2010-02-12 01:14:43 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! animations enabled
|
|
|
|
bool animationsEnabled( void ) const
|
|
|
|
{ return animationsEnabled_; }
|
2010-02-12 01:14:43 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! true if being animated
|
|
|
|
bool isAnimated( void ) const
|
|
|
|
{ return animationType_ != AnimationNone; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! animation type
|
|
|
|
AnimationTypes animationType( void ) const
|
|
|
|
{ return animationType_; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! return item index matching QPoint, or -1 if none
|
|
|
|
int itemAt( const QPoint&, bool ) const;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! returns true if index is target
|
|
|
|
bool isTarget( int index ) const
|
|
|
|
{ return index == targetItem_; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! start animation
|
|
|
|
/* might need to add the side of the target here */
|
|
|
|
void animate( AnimationTypes, int = NoItem );
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! true if animation is in progress
|
|
|
|
bool isAnimationRunning( void ) const
|
|
|
|
{ return animation().data()->isRunning(); }
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! update button activity
|
|
|
|
void updateButtonActivity( int visibleItem ) const;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! update buttons
|
|
|
|
void updateButtons( bool alsoUpdate ) const;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! target rect
|
|
|
|
const QRect& targetRect( void ) const
|
|
|
|
{ return targetRect_; }
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//!@name animation progress
|
|
|
|
//@{
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! return animation object
|
|
|
|
virtual const Animation::Pointer& animation() const
|
|
|
|
{ return animation_; }
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
void setProgress( qreal value )
|
2010-08-28 02:52:26 +00:00
|
|
|
{
|
|
|
|
if( progress_ == value ) return;
|
|
|
|
progress_ = value;
|
|
|
|
updateBoundingRects();
|
|
|
|
}
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
qreal progress( void ) const
|
|
|
|
{ return progress_; }
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//@}
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-08-28 02:52:26 +00:00
|
|
|
protected:
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! update bounding rects
|
|
|
|
void updateBoundingRects( bool alsoUpdate = true );
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
private:
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! client
|
|
|
|
Client& client_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! dirty flag
|
|
|
|
/* used to trigger update at next paintEvent */
|
|
|
|
bool dirty_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! true if animations are enabled
|
|
|
|
bool animationsEnabled_;
|
2010-02-12 01:14:43 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! animation
|
|
|
|
Animation::Pointer animation_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! last animation type
|
|
|
|
AnimationTypes animationType_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! animation progress
|
|
|
|
qreal progress_;
|
2009-11-17 21:56:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! dragged item
|
|
|
|
int draggedItem_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! target item
|
|
|
|
int targetItem_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
//! target rect
|
|
|
|
QRect targetRect_;
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
};
|
2009-11-15 03:24:04 +00:00
|
|
|
|
2010-05-02 18:34:08 +00:00
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Oxygen::AnimationTypes)
|
2009-11-16 16:11:45 +00:00
|
|
|
|
2009-11-15 03:24:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|