qskinny/src/controls/QskPopup.h

115 lines
2.9 KiB
C
Raw Normal View History

2017-07-21 18:21:34 +02:00
/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#ifndef QSK_POPUP_H
#define QSK_POPUP_H 1
#include "QskControl.h"
class QSK_EXPORT QskPopup : public QskControl
{
Q_OBJECT
Q_PROPERTY( bool open READ isOpen WRITE setOpen NOTIFY openChanged )
2017-07-21 18:21:34 +02:00
Q_PROPERTY( bool modal READ isModal WRITE setModal NOTIFY modalChanged )
Q_PROPERTY( bool overlay READ hasOverlay WRITE setOverlay NOTIFY overlayChanged )
Q_PROPERTY( bool faderEffect READ hasFaderEffect
WRITE setFaderEffect NOTIFY faderEffectChanged )
Q_PROPERTY( uint priority READ priority WRITE setPriority NOTIFY priorityChanged )
2017-07-21 18:21:34 +02:00
using Inherited = QskControl;
2018-08-03 08:15:28 +02:00
public:
2017-07-21 18:21:34 +02:00
QSK_SUBCONTROLS( Overlay )
QSK_STATES( Closed )
2017-07-21 18:21:34 +02:00
2018-07-02 08:08:38 +02:00
enum PopupFlag
{
DeleteOnClose = 1 << 0,
CloseOnPressOutside = 1 << 1
2018-07-02 08:08:38 +02:00
};
Q_ENUM( PopupFlag )
Q_DECLARE_FLAGS( PopupFlags, PopupFlag )
2017-07-21 18:21:34 +02:00
QskPopup( QQuickItem* parent = nullptr );
2018-07-31 17:32:25 +02:00
~QskPopup() override;
2017-07-21 18:21:34 +02:00
2018-07-02 08:08:38 +02:00
void setPopupFlags( PopupFlags );
PopupFlags popupFlags() const;
void setPopupFlag( PopupFlag, bool on = true );
bool testPopupFlag( PopupFlag ) const;
void setModal( bool on = true );
bool isModal() const;
2017-07-21 18:21:34 +02:00
void setOverlay( bool on = true );
bool hasOverlay() const;
// allows for stacking orders based on priorities
void setPriority( uint );
uint priority() const;
void setFaderEffect( bool );
bool hasFaderEffect() const;
QskAspect::Aspect faderAspect() const;
void setFaderAspect( QskAspect::Aspect );
2017-07-21 18:21:34 +02:00
virtual QRectF overlayRect() const;
2018-07-02 08:08:38 +02:00
bool isOpen() const;
bool isFading() const;
2018-07-02 08:08:38 +02:00
2018-08-03 08:15:28 +02:00
public Q_SLOTS:
2018-07-02 08:08:38 +02:00
void open();
void close();
void setOpen( bool );
2017-07-21 18:21:34 +02:00
2018-08-03 08:15:28 +02:00
Q_SIGNALS:
void opened();
2018-07-02 08:08:38 +02:00
void closed();
void openChanged( bool );
void fadingChanged( bool );
void modalChanged( bool );
void overlayChanged( bool );
void priorityChanged( uint );
void faderEffectChanged( bool );
2017-07-21 18:21:34 +02:00
2018-08-03 08:15:28 +02:00
protected:
2018-07-31 17:32:25 +02:00
void aboutToShow() override;
2018-07-31 17:32:25 +02:00
bool event( QEvent* ) override;
2018-08-03 08:15:28 +02:00
void focusInEvent( QFocusEvent* ) override;
void focusOutEvent( QFocusEvent* ) override;
void windowChangeEvent( QskWindowChangeEvent* ) override;
2017-07-21 18:21:34 +02:00
2018-07-31 17:32:25 +02:00
void itemChange( QQuickItem::ItemChange,
2017-07-21 18:21:34 +02:00
const QQuickItem::ItemChangeData& ) override;
virtual QQuickItem* focusSuccessor() const;
bool isTransitionAccepted( QskAspect::Aspect ) const override;
2017-11-02 16:25:15 +01:00
void grabFocus( bool );
2018-08-03 08:15:28 +02:00
private:
void show() = delete;
void hide() = delete;
void setVisible( bool ) = delete;
2017-07-21 18:21:34 +02:00
void updateInputGrabber();
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QskPopup::PopupFlags )
2017-07-21 18:21:34 +02:00
#endif