qskinny/src/controls/QskListView.h

107 lines
2.9 KiB
C++

/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* SPDX-License-Identifier: BSD-3-Clause
*****************************************************************************/
#ifndef QSK_LIST_VIEW_H
#define QSK_LIST_VIEW_H
#include "QskScrollView.h"
#include "QskTextOptions.h"
class QSK_EXPORT QskListView : public QskScrollView
{
Q_OBJECT
Q_PROPERTY( SelectionMode selectionMode READ selectionMode
WRITE setSelectionMode NOTIFY selectionModeChanged FINAL )
Q_PROPERTY( int selectedRow READ selectedRow
WRITE setSelectedRow NOTIFY selectedRowChanged FINAL )
Q_PROPERTY( QskTextOptions textOptions READ textOptions
WRITE setTextOptions RESET resetTextOptions
NOTIFY textOptionsChanged FINAL )
Q_PROPERTY( bool preferredWidthFromColumns READ preferredWidthFromColumns
WRITE setPreferredWidthFromColumns NOTIFY preferredWidthFromColumnsChanged() )
using Inherited = QskScrollView;
public:
QSK_SUBCONTROLS( Cell, Text, Graphic )
QSK_STATES( Selected )
enum SelectionMode
{
NoSelection,
SingleSelection,
MultiSelection // not implemented yet
};
Q_ENUM( SelectionMode )
QskListView( QQuickItem* parent = nullptr );
~QskListView() override;
void setPreferredWidthFromColumns( bool );
bool preferredWidthFromColumns() const;
void setSelectionMode( SelectionMode );
SelectionMode selectionMode() const;
void setTextOptions( const QskTextOptions& textOptions );
void resetTextOptions();
QskTextOptions textOptions() const;
Q_INVOKABLE int selectedRow() const;
QskAspect::States rowStates( int ) const;
virtual int rowCount() const = 0;
virtual int columnCount() const = 0;
virtual qreal columnWidth( int col ) const = 0;
virtual qreal rowHeight() const = 0;
Q_INVOKABLE virtual QVariant valueAt( int row, int col ) const = 0;
QRectF focusIndicatorRect() const override;
public Q_SLOTS:
void setSelectedRow( int row );
Q_SIGNALS:
void selectedRowChanged( int row );
void selectionModeChanged();
void preferredWidthFromColumnsChanged();
void textOptionsChanged();
protected:
void changeEvent( QEvent* ) override;
void keyPressEvent( QKeyEvent* ) override;
void keyReleaseEvent( QKeyEvent* ) override;
void mousePressEvent( QMouseEvent* ) override;
void mouseReleaseEvent( QMouseEvent* ) override;
void mouseUngrabEvent() override;
void hoverEnterEvent( QHoverEvent* ) override;
void hoverMoveEvent( QHoverEvent* ) override;
void hoverLeaveEvent( QHoverEvent* ) override;
#ifndef QT_NO_WHEELEVENT
virtual QPointF scrollOffset( const QWheelEvent* ) const override;
#endif
void updateScrollableSize();
void componentComplete() override;
private:
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
#endif