platform depending code moved to QskSkin

This commit is contained in:
Uwe Rathmann 2022-03-08 15:59:35 +01:00
parent 7f63392eed
commit cdb17476b5
7 changed files with 43 additions and 32 deletions

View File

@ -321,6 +321,16 @@ bool QskSkin::hasGraphicProvider() const
return m_data->graphicProviders.size() > 0; return m_data->graphicProviders.size() > 0;
} }
QString QskSkin::dialogButtonText( int action ) const
{
const auto theme = QGuiApplicationPrivate::platformTheme();
auto text = theme->standardButtonText( action );
text = QPlatformTheme::removeMnemonics( text );
return text;
}
const int* QskSkin::dialogButtonLayout( Qt::Orientation orientation ) const const int* QskSkin::dialogButtonLayout( Qt::Orientation orientation ) const
{ {
// auto policy = QPlatformDialogHelper::UnknownLayout; // auto policy = QPlatformDialogHelper::UnknownLayout;

View File

@ -75,6 +75,7 @@ class QSK_EXPORT QskSkin : public QObject
bool hasGraphicProvider() const; bool hasGraphicProvider() const;
virtual const int* dialogButtonLayout( Qt::Orientation ) const; virtual const int* dialogButtonLayout( Qt::Orientation ) const;
virtual QString dialogButtonText( int button ) const;
void setStateMask( QskAspect::States ); void setStateMask( QskAspect::States );
QskAspect::States stateMask() const; QskAspect::States stateMask() const;

View File

@ -19,6 +19,8 @@
#include <qpointer.h> #include <qpointer.h>
#include <qquickwindow.h> #include <qquickwindow.h>
#include <qpa/qplatformdialoghelper.h>
static QskDialog::Action qskActionCandidate( const QskDialogButtonBox* buttonBox ) static QskDialog::Action qskActionCandidate( const QskDialogButtonBox* buttonBox )
{ {
// not the fastest code ever, but usually we always // not the fastest code ever, but usually we always
@ -336,4 +338,12 @@ QString QskDialog::select(
} }
QskDialog::ActionRole QskDialog::actionRole( Action action )
{
using Q = QPlatformDialogHelper;
const auto role = Q::buttonRole( static_cast< Q::StandardButton >( action ) );
return static_cast< ActionRole >( role );
}
#include "moc_QskDialog.cpp" #include "moc_QskDialog.cpp"

View File

@ -139,6 +139,8 @@ class QSK_EXPORT QskDialog : public QObject
const QString& title, const QString& text, const QString& title, const QString& text,
const QStringList& entries, int selectedRow = 0 ) const; const QStringList& entries, int selectedRow = 0 ) const;
static ActionRole actionRole( Action action );
Q_SIGNALS: Q_SIGNALS:
void transientParentChanged(); void transientParentChanged();
void policyChanged(); void policyChanged();

View File

@ -5,17 +5,27 @@
#include "QskDialogButton.h" #include "QskDialogButton.h"
#include "QskDialogButtonBox.h" #include "QskDialogButtonBox.h"
#include "QskSkin.h"
QSK_SUBCONTROL( QskDialogButton, Panel ) QSK_SUBCONTROL( QskDialogButton, Panel )
QSK_SUBCONTROL( QskDialogButton, Text ) QSK_SUBCONTROL( QskDialogButton, Text )
QSK_SUBCONTROL( QskDialogButton, Graphic ) QSK_SUBCONTROL( QskDialogButton, Graphic )
static QString qskButtonText(
const QskDialogButton* button, QskDialog::Action action )
{
if ( const auto skin = button->effectiveSkin() )
return skin->dialogButtonText( action );
return QString();
}
QskDialogButton::QskDialogButton( QskDialogButton::QskDialogButton(
QskDialog::Action action, QQuickItem* parent ) QskDialog::Action action, QQuickItem* parent )
: QskPushButton( parent ) : QskPushButton( parent )
, m_action( action ) , m_action( action )
{ {
setText( QskDialogButtonBox::buttonText( m_action ) ); setText( qskButtonText( this, m_action ) );
} }
QskDialogButton::QskDialogButton( QQuickItem* parent ) QskDialogButton::QskDialogButton( QQuickItem* parent )
@ -47,7 +57,7 @@ void QskDialogButton::setAction( QskDialog::Action action )
if ( action != m_action ) if ( action != m_action )
{ {
m_action = action; m_action = action;
setText( QskDialogButtonBox::buttonText( m_action ) ); setText( qskButtonText( this, action ) );
Q_EMIT actionChanged(); Q_EMIT actionChanged();
} }
@ -60,8 +70,12 @@ QskDialog::Action QskDialogButton::action() const
void QskDialogButton::changeEvent( QEvent* event ) void QskDialogButton::changeEvent( QEvent* event )
{ {
if ( event->type() == QEvent::LocaleChange ) switch( static_cast< int >( event->type() ) )
setText( QskDialogButtonBox::buttonText( m_action ) ); {
case QEvent::LocaleChange:
case QEvent::StyleChange:
setText( qskButtonText( this, m_action ) );
}
Inherited::changeEvent( event ); Inherited::changeEvent( event );
} }

View File

@ -15,11 +15,6 @@
#include <qvector.h> #include <qvector.h>
#include <qpa/qplatformdialoghelper.h> #include <qpa/qplatformdialoghelper.h>
#include <qpa/qplatformtheme.h>
QSK_QT_PRIVATE_BEGIN
#include <private/qguiapplication_p.h>
QSK_QT_PRIVATE_END
#include <limits> #include <limits>
@ -31,14 +26,6 @@ static void qskSendEventTo( QObject* object, QEvent::Type type )
QCoreApplication::sendEvent( object, &event ); QCoreApplication::sendEvent( object, &event );
} }
static inline QskDialog::ActionRole qskActionRole( QskDialog::Action action )
{
const auto role = QPlatformDialogHelper::buttonRole(
static_cast< QPlatformDialogHelper::StandardButton >( action ) );
return static_cast< QskDialog::ActionRole >( role );
}
namespace namespace
{ {
class LayoutEngine : public QskLinearLayoutEngine class LayoutEngine : public QskLinearLayoutEngine
@ -346,9 +333,8 @@ void QskDialogButtonBox::addButton(
void QskDialogButtonBox::addAction( QskDialog::Action action ) void QskDialogButtonBox::addAction( QskDialog::Action action )
{ {
QskPushButton* button = createButton( action ); if ( auto button = createButton( action ) )
if ( button ) addButton( button, QskDialog::actionRole( action ) );
addButton( button, qskActionRole( action ) );
} }
void QskDialogButtonBox::removeButton( QskPushButton* button ) void QskDialogButtonBox::removeButton( QskPushButton* button )
@ -591,15 +577,4 @@ bool QskDialogButtonBox::isDefaultButtonKeyEvent( const QKeyEvent* event )
} }
} }
QString QskDialogButtonBox::buttonText( QskDialog::Action action )
{
// should be redirected through the skin !
const auto theme = QGuiApplicationPrivate::platformTheme();
QString text = theme->standardButtonText( action );
text = QPlatformTheme::removeMnemonics( text );
return text;
}
#include "moc_QskDialogButtonBox.cpp" #include "moc_QskDialogButtonBox.cpp"

View File

@ -61,7 +61,6 @@ class QSK_EXPORT QskDialogButtonBox : public QskBox
QskPushButton* defaultButton() const; QskPushButton* defaultButton() const;
static bool isDefaultButtonKeyEvent( const QKeyEvent* ); static bool isDefaultButtonKeyEvent( const QKeyEvent* );
static QString buttonText( QskDialog::Action );
Q_SIGNALS: Q_SIGNALS:
void clicked( QskPushButton* button ); void clicked( QskPushButton* button );