/****************************************************************************** * QSkinny - Copyright (C) The authors * SPDX-License-Identifier: BSD-3-Clause *****************************************************************************/ #ifndef QSK_SEGMENTED_BAR_H #define QSK_SEGMENTED_BAR_H #include "QskControl.h" #include class QskTextOptions; class QskLabelData; class QUrl; class QSK_EXPORT QskSegmentedBar : public QskControl { Q_OBJECT Q_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged ) Q_PROPERTY( QVector< QskLabelData > options READ options WRITE setOptions NOTIFY optionsChanged ) Q_PROPERTY( int count READ count ) Q_PROPERTY( int selectedIndex READ selectedIndex WRITE setSelectedIndex NOTIFY selectedIndexChanged USER true ) Q_PROPERTY( int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged ) Q_PROPERTY( QString currentText READ currentText ) using Inherited = QskControl; public: QSK_SUBCONTROLS( Panel, Splash, Segment, Separator, Cursor, Text, Icon ) QSK_STATES( Selected, Pressed ) QskSegmentedBar( QQuickItem* parent = nullptr ); QskSegmentedBar( Qt::Orientation, QQuickItem* parent = nullptr ); ~QskSegmentedBar() override; void setOrientation( Qt::Orientation ); Qt::Orientation orientation() const; void setTextOptions( const QskTextOptions& ); QskTextOptions textOptions() const; int addOption( const QUrl&, const QString& ); int addOption( const QskLabelData& ); void setOptions( const QVector< QskLabelData >& ); void setOptions( const QStringList& ); QVector< QskLabelData > options() const; QskLabelData optionAt( int ) const; void clear(); int selectedIndex() const; int currentIndex() const; QString currentText() const; int count() const; void setSegmentEnabled( int, bool ); bool isSegmentEnabled( int ) const; int indexAtPosition( const QPointF& ) const; QRectF focusIndicatorRect() const override final; QskAspect::Variation effectiveVariation() const override; public Q_SLOTS: void setSelectedIndex( int index ); void setCurrentIndex( int index ); Q_SIGNALS: void selectedIndexChanged( int ); void currentIndexChanged( int ); void optionsChanged(); void orientationChanged(); protected: void mousePressEvent( QMouseEvent* ) override; void mouseReleaseEvent( QMouseEvent* ) override; void mouseUngrabEvent() override; void keyPressEvent( QKeyEvent* ) override; void keyReleaseEvent( QKeyEvent* ) override; void hoverEnterEvent( QHoverEvent* ) override; void hoverMoveEvent( QHoverEvent* ) override; void hoverLeaveEvent( QHoverEvent* ) override; void focusInEvent( QFocusEvent* ) override; void focusOutEvent( QFocusEvent* ) override; private: int nextIndex( int index, bool forward ) const; class PrivateData; std::unique_ptr< PrivateData > m_data; }; #endif