blob: 93da0642de471451ad2e0acb95dc941fec49b0c4 [file] [log] [blame]
/****************************************************************************
**
** 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 <QtQml/qqmlinfo.h>
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<QString, QJSValue> QQmlTableModelColumn::getters() const
{
return mGetters;
}
const QHash<int, QString> QQmlTableModelColumn::supportedRoleNames()
{
QHash<int, QString> 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