/**************************************************************************** ** ** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQml module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qqmltablemodelcolumn_p.h" #include QT_BEGIN_NAMESPACE /*! \qmltype TableModelColumn \instantiates QQmlTableModelColumn \inqmlmodule Qt.labs.qmlmodels \brief Represents a column in a model. \since 5.14 \section1 Supported Roles TableModelColumn supports all of \l {Qt::ItemDataRole}{Qt's roles}, with the exception of \c Qt::InitialSortOrderRole. \sa TableModel, TableView */ static const QString displayRoleName = QStringLiteral("display"); static const QString decorationRoleName = QStringLiteral("decoration"); static const QString editRoleName = QStringLiteral("edit"); static const QString toolTipRoleName = QStringLiteral("toolTip"); static const QString statusTipRoleName = QStringLiteral("statusTip"); static const QString whatsThisRoleName = QStringLiteral("whatsThis"); static const QString fontRoleName = QStringLiteral("font"); static const QString textAlignmentRoleName = QStringLiteral("textAlignment"); static const QString backgroundRoleName = QStringLiteral("background"); static const QString foregroundRoleName = QStringLiteral("foreground"); static const QString checkStateRoleName = QStringLiteral("checkState"); static const QString accessibleTextRoleName = QStringLiteral("accessibleText"); static const QString accessibleDescriptionRoleName = QStringLiteral("accessibleDescription"); static const QString sizeHintRoleName = QStringLiteral("sizeHint"); QQmlTableModelColumn::QQmlTableModelColumn(QObject *parent) : QObject(parent) { } QQmlTableModelColumn::~QQmlTableModelColumn() { } #define DEFINE_ROLE_PROPERTIES(getterGetterName, getterSetterName, getterSignal, setterGetterName, setterSetterName, setterSignal, roleName) \ QJSValue QQmlTableModelColumn::getterGetterName() const \ { \ return mGetters.value(roleName); \ } \ \ void QQmlTableModelColumn::getterSetterName(const QJSValue &stringOrFunction) \ { \ if (!stringOrFunction.isString() && !stringOrFunction.isCallable()) { \ qmlWarning(this).quote() << "getter for " << roleName << " must be a function"; \ return; \ } \ if (stringOrFunction.strictlyEquals(decoration())) \ return; \ \ mGetters[roleName] = stringOrFunction; \ emit decorationChanged(); \ } \ \ QJSValue QQmlTableModelColumn::setterGetterName() const \ { \ return mSetters.value(roleName); \ } \ \ void QQmlTableModelColumn::setterSetterName(const QJSValue &function) \ { \ if (!function.isCallable()) { \ qmlWarning(this).quote() << "setter for " << roleName << " must be a function"; \ return; \ } \ \ if (function.strictlyEquals(getSetDisplay())) \ return; \ \ mSetters[roleName] = function; \ emit setDisplayChanged(); \ } DEFINE_ROLE_PROPERTIES(display, setDisplay, displayChanged, getSetDisplay, setSetDisplay, setDisplayChanged, displayRoleName) DEFINE_ROLE_PROPERTIES(decoration, setDecoration, decorationChanged, getSetDecoration, setSetDecoration, setDecorationChanged, decorationRoleName) DEFINE_ROLE_PROPERTIES(edit, setEdit, editChanged, getSetEdit, setSetEdit, setEditChanged, editRoleName) DEFINE_ROLE_PROPERTIES(toolTip, setToolTip, toolTipChanged, getSetToolTip, setSetToolTip, setToolTipChanged, toolTipRoleName) DEFINE_ROLE_PROPERTIES(statusTip, setStatusTip, statusTipChanged, getSetStatusTip, setSetStatusTip, setStatusTipChanged, statusTipRoleName) DEFINE_ROLE_PROPERTIES(whatsThis, setWhatsThis, whatsThisChanged, getSetWhatsThis, setSetWhatsThis, setWhatsThisChanged, whatsThisRoleName) DEFINE_ROLE_PROPERTIES(font, setFont, fontChanged, getSetFont, setSetFont, setFontChanged, fontRoleName) DEFINE_ROLE_PROPERTIES(textAlignment, setTextAlignment, textAlignmentChanged, getSetTextAlignment, setSetTextAlignment, setTextAlignmentChanged, textAlignmentRoleName) DEFINE_ROLE_PROPERTIES(background, setBackground, backgroundChanged, getSetBackground, setSetBackground, setBackgroundChanged, backgroundRoleName) DEFINE_ROLE_PROPERTIES(foreground, setForeground, foregroundChanged, getSetForeground, setSetForeground, setForegroundChanged, foregroundRoleName) DEFINE_ROLE_PROPERTIES(checkState, setCheckState, checkStateChanged, getSetCheckState, setSetCheckState, setCheckStateChanged, checkStateRoleName) DEFINE_ROLE_PROPERTIES(accessibleText, setAccessibleText, accessibleTextChanged, getSetAccessibleText, setSetAccessibleText, setAccessibleTextChanged, accessibleTextRoleName) DEFINE_ROLE_PROPERTIES(accessibleDescription, setAccessibleDescription, accessibleDescriptionChanged, getSetAccessibleDescription, setSetAccessibleDescription, setAccessibleDescriptionChanged, accessibleDescriptionRoleName) DEFINE_ROLE_PROPERTIES(sizeHint, setSizeHint, sizeHintChanged, getSetSizeHint, setSetSizeHint, setSizeHintChanged, sizeHintRoleName) QJSValue QQmlTableModelColumn::getterAtRole(const QString &roleName) { auto it = mGetters.find(roleName); if (it == mGetters.end()) return QJSValue(); return *it; } QJSValue QQmlTableModelColumn::setterAtRole(const QString &roleName) { auto it = mSetters.find(roleName); if (it == mSetters.end()) return QJSValue(); return *it; } const QHash QQmlTableModelColumn::getters() const { return mGetters; } const QHash QQmlTableModelColumn::supportedRoleNames() { QHash names; names[Qt::DisplayRole] = QLatin1String("display"); names[Qt::DecorationRole] = QLatin1String("decoration"); names[Qt::EditRole] = QLatin1String("edit"); names[Qt::ToolTipRole] = QLatin1String("toolTip"); names[Qt::StatusTipRole] = QLatin1String("statusTip"); names[Qt::WhatsThisRole] = QLatin1String("whatsThis"); names[Qt::FontRole] = QLatin1String("font"); names[Qt::TextAlignmentRole] = QLatin1String("textAlignment"); names[Qt::BackgroundRole] = QLatin1String("background"); names[Qt::ForegroundRole] = QLatin1String("foreground"); names[Qt::CheckStateRole] = QLatin1String("checkState"); names[Qt::AccessibleTextRole] = QLatin1String("accessibleText"); names[Qt::AccessibleDescriptionRole] = QLatin1String("accessibleDescription"); names[Qt::SizeHintRole] = QLatin1String("sizeHint"); return names; } QT_END_NAMESPACE