qskinny/src/controls/QskSkinHintTableEditor.h

436 lines
13 KiB
C
Raw Normal View History

2020-12-26 11:57:08 +00:00
/******************************************************************************
2024-01-17 13:31:45 +00:00
* QSkinny - Copyright (C) The authors
2023-04-06 07:23:37 +00:00
* SPDX-License-Identifier: BSD-3-Clause
2020-12-26 11:57:08 +00:00
*****************************************************************************/
#ifndef QSK_SKIN_HINT_TABLE_EDITOR_H
#define QSK_SKIN_HINT_TABLE_EDITOR_H
#include "QskAspect.h"
#include "QskSkinHintTable.h"
#include "QskAnimationHint.h"
#include "QskStateCombination.h"
2022-08-25 07:39:33 +00:00
#include "QskTextOptions.h"
2020-12-26 11:57:08 +00:00
#include <qcolor.h>
#include <qvariant.h>
#include <qvector.h>
2020-12-26 11:57:08 +00:00
class QskArcMetrics;
2020-12-26 11:57:08 +00:00
class QskMargins;
class QskGradient;
class QskBoxShapeMetrics;
class QskBoxBorderMetrics;
class QskBoxBorderColors;
class QskGraduationMetrics;
class QskShadowMetrics;
class QskStippleMetrics;
class QskGraphic;
2024-02-19 14:51:55 +00:00
class QskFontRole;
2020-12-26 11:57:08 +00:00
class QSK_EXPORT QskSkinHintTableEditor
{
public:
QskSkinHintTableEditor( QskSkinHintTable* = nullptr );
void setTable( QskSkinHintTable* );
QskSkinHintTable* table() const;
// generic access
2021-09-04 14:48:02 +00:00
void setHint( QskAspect, const QVariant&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
template< typename T > void setHint(
QskAspect, const T&, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
2021-09-04 14:48:02 +00:00
const QVariant& hint( QskAspect ) const;
template< typename T > T hint( QskAspect ) const;
bool removeHint( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
QVariant takeHint( QskAspect );
bool hasHint( QskAspect ) const;
// animation hints
2021-09-04 14:48:02 +00:00
void setAnimation( QskAspect, QskAnimationHint,
QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
2021-12-29 14:36:04 +00:00
void setAnimation( QskAspect, uint duration, QEasingCurve::Type,
QskStateCombination = QskStateCombination() );
2021-09-04 14:48:02 +00:00
QskAnimationHint animation( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// metric
2021-09-04 14:48:02 +00:00
void setMetricHint( QskAspect, const QVariant&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
template< typename T > void setMetricHint(
QskAspect, const T&, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeMetricHint( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
2021-09-03 04:51:50 +00:00
QVariant metricHint( QskAspect ) const;
2020-12-26 11:57:08 +00:00
template< typename T > T metricHint( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// color
2021-09-04 14:48:02 +00:00
void setColorHint( QskAspect, const QVariant&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
template< typename T > void setColorHint(
QskAspect, const T&, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeColorHint( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
2021-09-03 04:51:50 +00:00
QVariant colorHint( QskAspect ) const;
2020-12-26 11:57:08 +00:00
template< typename T > T colorHint( QskAspect ) const;
// type specific
void setFlag( QskAspect, int, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
int flag( QskAspect ) const;
void setMetric( QskAspect, qreal metric, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
qreal metric( QskAspect ) const;
void setColor( QskAspect, Qt::GlobalColor, QskStateCombination = QskStateCombination() );
void setColor( QskAspect, QRgb, QskStateCombination = QskStateCombination() );
void setColor( QskAspect, const QColor&, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QColor color( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// gradients
2021-09-04 14:48:02 +00:00
void setHGradient( QskAspect, const QColor&, const QColor&,
QskStateCombination = QskStateCombination() );
2021-09-04 14:48:02 +00:00
void setVGradient( QskAspect, const QColor&, const QColor&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-10-31 13:42:08 +00:00
void setGradient( QskAspect, const QColor&, const QColor&,
QskStateCombination = QskStateCombination() );
2021-09-04 14:48:02 +00:00
void setGradient( QskAspect, const QskGradient&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QskGradient gradient( QskAspect ) const;
2021-12-29 14:36:04 +00:00
// position
void setPosition( QskAspect, qreal,
QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removePosition( QskAspect, QskStateCombination = QskStateCombination() );
2021-12-29 14:36:04 +00:00
qreal position( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// strutSize
2021-09-04 14:48:02 +00:00
void setStrutSize( QskAspect, const QSizeF&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setStrutSize( QskAspect, qreal width, qreal height,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeStrutSize( QskAspect, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QSizeF strutSize( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// margin
2021-09-04 14:48:02 +00:00
void setMargin( QskAspect, const QskMargins&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setMargin( QskAspect,
qreal left, qreal top, qreal right, qreal bottom,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeMargin( QskAspect, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QskMargins margin( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// padding
2021-09-04 14:48:02 +00:00
void setPadding( QskAspect, const QskMargins&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setPadding( QskAspect,
qreal left, qreal top, qreal right, qreal bottom,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removePadding( QskAspect, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QskMargins padding( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// spacing
void setSpacing( QskAspect, qreal, QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removeSpacing( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
qreal spacing( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// alignment
void setAlignment( QskAspect, Qt::Alignment, QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removeAlignment( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
Qt::Alignment alignment( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// fontRole
2024-02-19 14:51:55 +00:00
void setFontRole( QskAspect, const QskFontRole&,
QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removeFontRole( QskAspect, QskStateCombination = QskStateCombination() );
2024-02-19 14:51:55 +00:00
QskFontRole fontRole( QskAspect ) const;
2020-12-26 11:57:08 +00:00
2021-09-03 04:51:50 +00:00
// graphicRole
void setGraphicRole( QskAspect, int, QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removeGraphicRole( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
int graphicRole( QskAspect ) const;
2021-08-04 07:31:16 +00:00
2021-09-03 04:51:50 +00:00
// boxShape
2020-12-26 11:57:08 +00:00
void setBoxShape( QskAspect, qreal radius, Qt::SizeMode = Qt::AbsoluteSize );
2021-09-04 14:48:02 +00:00
2020-12-26 11:57:08 +00:00
void setBoxShape( QskAspect, qreal topLeft, qreal topRight,
qreal bottomLeft, qreal bottomRight, Qt::SizeMode = Qt::AbsoluteSize );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setBoxShape( QskAspect, const QskBoxShapeMetrics&,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeBoxShape( QskAspect, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QskBoxShapeMetrics boxShape( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// boxBorderMetrics
2020-12-26 11:57:08 +00:00
void setBoxBorderMetrics( QskAspect,
qreal borderWidth, Qt::SizeMode = Qt::AbsoluteSize );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
void setBoxBorderMetrics( QskAspect, qreal left, qreal top,
qreal right, qreal bottom, Qt::SizeMode = Qt::AbsoluteSize );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setBoxBorderMetrics( QskAspect,
const QskBoxBorderMetrics&, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeBoxBorderMetric( QskAspect, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2020-12-26 11:57:08 +00:00
QskBoxBorderMetrics boxBorderMetrics( QskAspect ) const;
2021-09-03 04:51:50 +00:00
// boxBorderColors
2021-09-04 14:48:02 +00:00
void setBoxBorderColors( QskAspect,
const QskBoxBorderColors&, QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2021-09-04 14:48:02 +00:00
void setBoxBorderColors( QskAspect,
const QskGradient& left, const QskGradient& top,
const QskGradient& right, const QskGradient& bottom,
QskStateCombination = QskStateCombination() );
2021-09-03 04:51:50 +00:00
2022-03-24 07:01:52 +00:00
bool removeBoxBorderColors( QskAspect, QskStateCombination = QskStateCombination() );
2020-12-26 11:57:08 +00:00
QskBoxBorderColors boxBorderColors( QskAspect ) const;
// shadowMetrics
void setShadowMetrics( QskAspect, qreal, qreal,
const QPointF&, Qt::SizeMode = Qt::AbsoluteSize );
void setShadowMetrics( QskAspect, const QskShadowMetrics&,
QskStateCombination = QskStateCombination() );
bool removeShadowMetric( QskAspect, QskStateCombination = QskStateCombination() );
QskShadowMetrics shadowMetrics( QskAspect ) const;
2022-06-13 11:10:45 +00:00
// shadowColor
void setShadowColor( QskAspect,
const QColor&, QskStateCombination = QskStateCombination() );
void setShadowColor( QskAspect,
Qt::GlobalColor, QskStateCombination = QskStateCombination() );
void setShadowColor( QskAspect,
QRgb, QskStateCombination = QskStateCombination() );
bool removeShadowColor( QskAspect, QskStateCombination = QskStateCombination() );
QColor shadowColor( QskAspect ) const;
// arcMetrics
void setArcMetrics( QskAspect, qreal startAngle, qreal spanAngle,
qreal thickness, Qt::SizeMode = Qt::AbsoluteSize );
void setArcMetrics( QskAspect,
const QskArcMetrics&, QskStateCombination = QskStateCombination() );
2022-03-24 07:01:52 +00:00
bool removeArcMetrics( QskAspect, QskStateCombination = QskStateCombination() );
QskArcMetrics arcMetrics( QskAspect ) const;
// lines
void setStippleMetrics( QskAspect, Qt::PenStyle,
QskStateCombination = QskStateCombination() );
void setStippleMetrics( QskAspect, const QVector< qreal >&,
QskStateCombination = QskStateCombination() );
void setStippleMetrics( QskAspect, const QskStippleMetrics&,
QskStateCombination = QskStateCombination() );
bool removeStippleMetrics( QskAspect, QskStateCombination = QskStateCombination() );
QskStippleMetrics stippleMetrics( QskAspect ) const;
// graduation metrics
void setGraduationMetrics( QskAspect, const QskGraduationMetrics&,
QskStateCombination = QskStateCombination() );
bool removeGraduationMetrics( QskAspect, QskStateCombination = QskStateCombination() );
QskGraduationMetrics graduationMetrics( QskAspect ) const;
2022-08-25 07:39:33 +00:00
// text options flag
void setTextOptions( QskAspect,
Qt::TextElideMode, QskTextOptions::WrapMode,
QskStateCombination = QskStateCombination() );
void setTextOptions( QskAspect,
const QskTextOptions&, QskStateCombination = QskStateCombination() );
bool removeTextOptions( QskAspect, QskStateCombination = QskStateCombination() );
QskTextOptions textOptions( QskAspect ) const;
// symbol
void setSymbol( QskAspect,
const QskGraphic&, QskStateCombination = QskStateCombination() );
bool removeSymbol( QskAspect, QskStateCombination = QskStateCombination() );
QskGraphic symbol( QskAspect ) const;
2020-12-26 11:57:08 +00:00
private:
QskSkinHintTable* m_table = nullptr;
};
// --- generic access ---
template< typename T >
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setHint(
QskAspect aspect, const T& hint, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
setHint( aspect, QVariant::fromValue( hint ), combination );
2020-12-26 11:57:08 +00:00
}
template< typename T >
inline T QskSkinHintTableEditor::hint( QskAspect aspect ) const
{
return hint( aspect ).value< T >();
}
inline const QVariant& QskSkinHintTableEditor::hint( QskAspect aspect ) const
{
return m_table->hint( aspect );
}
inline QVariant QskSkinHintTableEditor::takeHint( QskAspect aspect )
{
return m_table->takeHint( aspect );
}
inline bool QskSkinHintTableEditor::hasHint( QskAspect aspect ) const
{
return m_table->hasHint( aspect );
}
// --- metric ---
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setMetricHint(
QskAspect aspect, const QVariant& hint, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
setHint( aspect | QskAspect::Metric, hint, combination );
2020-12-26 11:57:08 +00:00
}
template< typename T >
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setMetricHint(
QskAspect aspect, const T& hint, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
setHint( aspect | QskAspect::Metric, hint, combination );
2020-12-26 11:57:08 +00:00
}
2022-03-24 07:01:52 +00:00
inline bool QskSkinHintTableEditor::removeMetricHint(
QskAspect aspect, QskStateCombination combination )
2021-09-03 04:51:50 +00:00
{
2022-03-24 07:01:52 +00:00
return removeHint( aspect | QskAspect::Metric, combination );
2020-12-26 11:57:08 +00:00
}
inline QVariant QskSkinHintTableEditor::metricHint( QskAspect aspect ) const
{
return hint( aspect | QskAspect::Metric );
}
template< typename T >
inline T QskSkinHintTableEditor::metricHint( QskAspect aspect ) const
{
return hint< T >( aspect | QskAspect::Metric );
}
// --- color ---
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setColorHint(
QskAspect aspect, const QVariant& hint, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
setHint( aspect | QskAspect::Color, hint, combination );
2021-09-03 04:51:50 +00:00
}
template< typename T >
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setColorHint(
QskAspect aspect, const T& hint, QskStateCombination combination )
2021-09-03 04:51:50 +00:00
{
setHint( aspect | QskAspect::Color, hint, combination );
2021-09-03 04:51:50 +00:00
}
2022-03-24 07:01:52 +00:00
inline bool QskSkinHintTableEditor::removeColorHint(
QskAspect aspect, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
2022-03-24 07:01:52 +00:00
return removeHint( aspect | QskAspect::Color, combination );
2020-12-26 11:57:08 +00:00
}
inline QVariant QskSkinHintTableEditor::colorHint( QskAspect aspect ) const
{
return hint( aspect | QskAspect::Color );
}
template< typename T >
inline T QskSkinHintTableEditor::colorHint( QskAspect aspect ) const
{
return hint< T >( aspect | QskAspect::Color );
}
// --- animation ---
inline QskAnimationHint QskSkinHintTableEditor::animation( QskAspect aspect ) const
{
return m_table->animation( aspect );
}
2021-09-04 14:48:02 +00:00
inline void QskSkinHintTableEditor::setAnimation(
QskAspect aspect, QskAnimationHint hint, QskStateCombination combination )
2020-12-26 11:57:08 +00:00
{
2021-09-04 14:48:02 +00:00
aspect.setAnimator( true );
setHint( aspect, hint, combination );
2020-12-26 11:57:08 +00:00
}
2021-12-29 14:36:04 +00:00
inline void QskSkinHintTableEditor::setAnimation( QskAspect aspect,
uint duration, QEasingCurve::Type curveType, QskStateCombination combination )
{
setAnimation( aspect, QskAnimationHint( duration, curveType ), combination );
}
2020-12-26 11:57:08 +00:00
#endif