Skip to content

Commit

Permalink
API adjustments
Browse files Browse the repository at this point in the history
  • Loading branch information
uwerat committed Mar 10, 2023
1 parent c5a4a5d commit b55e5ee
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 55 deletions.
11 changes: 11 additions & 0 deletions src/common/QskLabelData.cpp
Expand Up @@ -68,6 +68,17 @@ QskHashValue QskLabelData::hash( QskHashValue seed ) const
return m_icon.hash( hash );
}

QVector< QskLabelData > qskCreateLabelData( const QVector< QString >& list )
{
QVector< QskLabelData > labelData;
labelData.reserve( list.size() );

for ( const auto& text : list )
labelData += QskLabelData( text );

return labelData;
}

#ifndef QT_NO_DEBUG_STREAM

#include <qdebug.h>
Expand Down
3 changes: 3 additions & 0 deletions src/common/QskLabelData.h
Expand Up @@ -10,6 +10,7 @@
#include "QskIcon.h"

#include <qstring.h>
#include <qvector.h>
#include <qmetatype.h>
#include <qdebug.h>

Expand Down Expand Up @@ -69,6 +70,8 @@ inline bool QskLabelData::operator!=( const QskLabelData& other ) const noexcept
return ( !( *this == other ) );
}

QSK_EXPORT QVector< QskLabelData > qskCreateLabelData( const QVector< QString >& );

#ifndef QT_NO_DEBUG_STREAM

class QDebug;
Expand Down
5 changes: 5 additions & 0 deletions src/controls/QskComboBox.cpp
Expand Up @@ -140,6 +140,11 @@ int QskComboBox::addOption( const QskLabelData& option )
return count() - 1;
}

void QskComboBox::setOptions( const QStringList& options )
{
setOptions( qskCreateLabelData( options ) );
}

void QskComboBox::setOptions( const QVector< QskLabelData >& options )
{
if ( options == m_data->options )
Expand Down
4 changes: 4 additions & 0 deletions src/controls/QskComboBox.h
Expand Up @@ -7,8 +7,11 @@
#define QSK_COMBO_BOX_H

#include "QskControl.h"
#include <qstringlist.h>

class QskTextOptions;
class QskLabelData;
class QUrl;

class QSK_EXPORT QskComboBox : public QskControl
{
Expand Down Expand Up @@ -52,6 +55,7 @@ class QSK_EXPORT QskComboBox : public QskControl
int addOption( const QskLabelData& );

void setOptions( const QVector< QskLabelData >& );
void setOptions( const QStringList& );

QVector< QskLabelData > options() const;
QskLabelData optionAt( int ) const;
Expand Down
97 changes: 50 additions & 47 deletions src/controls/QskMenu.cpp
Expand Up @@ -37,11 +37,8 @@ class QskMenu::PrivateData
// QVector< bool > enabled;
QVector< int > separators;


// current/selected are not well defined yet, TODO ...
int triggeredIndex = -1;
int currentIndex = -1;
int selectedIndex = -1;

bool isPressed = false;
};

Expand All @@ -62,6 +59,9 @@ QskMenu::QskMenu( QQuickItem* parent )
// we hide the focus indicator while fading
connect( this, &QskMenu::fadingChanged, this,
&QskControl::focusIndicatorRectChanged );

connect( this, &QskMenu::opened, this,
[this]() { m_data->triggeredIndex = -1; } );
}

QskMenu::~QskMenu()
Expand Down Expand Up @@ -137,10 +137,14 @@ int QskMenu::addOption( const QskLabelData& option )
return count() - 1;
}

void QskMenu::setOptions( const QStringList& options )
{
setOptions( qskCreateLabelData( options ) );
}

void QskMenu::setOptions( const QVector< QskLabelData >& options )
{
m_data->options = options;
m_data->selectedIndex = -1;

if ( m_data->currentIndex >= 0 )
{
Expand All @@ -159,16 +163,8 @@ void QskMenu::setOptions( const QVector< QskLabelData >& options )

void QskMenu::clear()
{
m_data->selectedIndex = m_data->currentIndex = -1;
m_data->separators.clear();

if ( !m_data->options.isEmpty() )
{
m_data->options.clear();

if ( isComponentComplete() )
Q_EMIT optionsChanged();
}
setOptions( QVector< QskLabelData >() );
}

QVector< QskLabelData > QskMenu::options() const
Expand Down Expand Up @@ -204,12 +200,9 @@ int QskMenu::separatorCount() const
return m_data->separators.count();
}

QString QskMenu::currentText() const
int QskMenu::currentIndex() const
{
if ( m_data->currentIndex >= 0 )
return optionAt( m_data->currentIndex ).text();

return QString();
return m_data->currentIndex;
}

void QskMenu::setCurrentIndex( int index )
Expand All @@ -229,9 +222,19 @@ void QskMenu::setCurrentIndex( int index )
}
}

int QskMenu::currentIndex() const
QString QskMenu::currentText() const
{
return m_data->currentIndex;
return optionAt( m_data->currentIndex ).text();
}

int QskMenu::triggeredIndex() const
{
return m_data->triggeredIndex;
}

QString QskMenu::triggeredText() const
{
return optionAt( m_data->triggeredIndex ).text();
}

void QskMenu::keyPressEvent( QKeyEvent* event )
Expand Down Expand Up @@ -267,18 +270,14 @@ void QskMenu::keyPressEvent( QKeyEvent* event )
case Qt::Key_Escape:
case Qt::Key_Cancel:
{
setSelectedIndex( -1 );
close();
return;
}

default:
{
const int steps = qskFocusChainIncrement( event );

if( steps != 0 )
{
if ( const int steps = qskFocusChainIncrement( event ) )
traverse( steps );
}
}
}
}
Expand All @@ -288,7 +287,12 @@ void QskMenu::keyReleaseEvent( QKeyEvent* )
if( m_data->isPressed )
{
m_data->isPressed = false;
setSelectedIndex( m_data->currentIndex );

if ( m_data->currentIndex >= 0 )
{
trigger( m_data->currentIndex );
close();
}
}
}

Expand Down Expand Up @@ -359,9 +363,14 @@ void QskMenu::mouseReleaseEvent( QMouseEvent* event )
{
m_data->isPressed = false;

const auto index = indexAtPosition( qskMousePosition( event ) );
if ( index == m_data->currentIndex )
setSelectedIndex( index );
const auto index = m_data->currentIndex;

if ( ( index >= 0 )
&& ( index == indexAtPosition( qskMousePosition( event ) ) ) )
{
trigger( m_data->currentIndex );
close();
}
}

return;
Expand Down Expand Up @@ -394,20 +403,6 @@ QRectF QskMenu::focusIndicatorRect() const
return Inherited::focusIndicatorRect();
}

void QskMenu::setSelectedIndex( int index )
{
if ( !isOpen() )
return;

if ( index >= 0 )
setCurrentIndex( index );

m_data->selectedIndex = index;
Q_EMIT triggered( index );

close();
}

QRectF QskMenu::cellRect( int index ) const
{
return effectiveSkinlet()->sampleRect(
Expand All @@ -420,11 +415,19 @@ int QskMenu::indexAtPosition( const QPointF& pos ) const
this, contentsRect(), QskMenu::Segment, pos );
}

void QskMenu::trigger( int index )
{
if ( index >= 0 && index < m_data->options.count() )
{
m_data->triggeredIndex = index;
Q_EMIT triggered( index );
}
}

int QskMenu::exec()
{
m_data->selectedIndex = -1;
(void) execPopup();
return m_data->selectedIndex;
return m_data->triggeredIndex;
}

#include "moc_QskMenu.cpp"
16 changes: 11 additions & 5 deletions src/controls/QskMenu.h
Expand Up @@ -7,12 +7,11 @@
#define QSK_MENU_H

#include "QskPopup.h"

#include <qurl.h>
#include <qstring.h>
#include <qstringlist.h>

class QskTextOptions;
class QskLabelData;
class QUrl;

class QSK_EXPORT QskMenu : public QskPopup
{
Expand All @@ -32,7 +31,10 @@ class QSK_EXPORT QskMenu : public QskPopup
Q_PROPERTY( int currentIndex READ currentIndex
WRITE setCurrentIndex NOTIFY currentIndexChanged )

Q_PROPERTY( QString currentText READ currentText )
Q_PROPERTY( int triggeredIndex READ triggeredIndex NOTIFY triggered )

Q_PROPERTY( QString triggeredText READ triggeredText NOTIFY triggered )
Q_PROPERTY( QString currentText READ currentText NOTIFY currentIndexChanged )

using Inherited = QskPopup;

Expand All @@ -58,6 +60,7 @@ class QSK_EXPORT QskMenu : public QskPopup
int addOption( const QskLabelData& );

void setOptions( const QVector< QskLabelData >& );
void setOptions( const QStringList& );

QVector< QskLabelData > options() const;
QskLabelData optionAt( int ) const;
Expand All @@ -74,6 +77,9 @@ class QSK_EXPORT QskMenu : public QskPopup
int currentIndex() const;
QString currentText() const;

int triggeredIndex() const;
QString triggeredText() const;

QRectF focusIndicatorRect() const override;

QRectF cellRect( int index ) const;
Expand Down Expand Up @@ -106,10 +112,10 @@ class QSK_EXPORT QskMenu : public QskPopup
void mouseReleaseEvent( QMouseEvent* ) override;

void aboutToShow() override;
void trigger( int );

private:
void traverse( int steps );
void setSelectedIndex( int index );

class PrivateData;
std::unique_ptr< PrivateData > m_data;
Expand Down
5 changes: 5 additions & 0 deletions src/controls/QskSegmentedBar.cpp
Expand Up @@ -124,6 +124,11 @@ QskLabelData QskSegmentedBar::optionAt( int index ) const
return m_data->options.value( index );
}

void QskSegmentedBar::setOptions( const QStringList& options )
{
setOptions( qskCreateLabelData( options ) );
}

void QskSegmentedBar::setOptions( const QVector< QskLabelData >& options )
{
m_data->options = options;
Expand Down
6 changes: 3 additions & 3 deletions src/controls/QskSegmentedBar.h
Expand Up @@ -7,12 +7,11 @@
#define QSK_SEGMENTED_BAR_H

#include "QskControl.h"

#include <qurl.h>
#include <qstring.h>
#include <qstringlist.h>

class QskTextOptions;
class QskLabelData;
class QUrl;

class QSK_EXPORT QskSegmentedBar : public QskControl
{
Expand Down Expand Up @@ -55,6 +54,7 @@ class QSK_EXPORT QskSegmentedBar : public QskControl
int addOption( const QskLabelData& );

void setOptions( const QVector< QskLabelData >& );
void setOptions( const QStringList& );

QVector< QskLabelData > options() const;
QskLabelData optionAt( int ) const;
Expand Down

0 comments on commit b55e5ee

Please sign in to comment.