qskinny/src/controls/QskFocusIndicator.h

66 lines
1.6 KiB
C++

/******************************************************************************
* QSkinny - Copyright (C) The authors
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#ifndef QSK_FOCUS_INDICATOR_H
#define QSK_FOCUS_INDICATOR_H
#include "QskControl.h"
class QSK_EXPORT QskFocusIndicator : public QskControl
{
Q_OBJECT
using Inherited = QskControl;
Q_PROPERTY( int duration READ duration
WRITE setDuration NOTIFY durationChanged )
public:
QSK_SUBCONTROLS( Panel )
QskFocusIndicator( QQuickItem* parent = nullptr );
~QskFocusIndicator() override;
/*
duration until the indicator goes into disabled state after being enabled.
A duration of 0 disables automatic state changes.
*/
void setDuration( int ms );
int duration() const;
bool contains( const QPointF& ) const override;
QRectF clipRect() const override;
bool eventFilter( QObject*, QEvent* ) override;
Q_SIGNALS:
void durationChanged( int );
protected:
void windowChangeEvent( QskWindowChangeEvent* ) override;
void timerEvent( QTimerEvent* ) override;
virtual QRectF focusRect() const;
void updateFocusFrame();
private:
void onFocusItemGeometryChanged();
void onWindowSizeChanged( int );
void onFocusItemChanged();
void onFocusItemDestroyed();
void resetTimer();
void maybeEnable( bool );
void connectWindow( const QQuickWindow*, bool on );
QVector< QMetaObject::Connection > connectItem( const QQuickItem* );
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
#endif