173 lines
6.5 KiB
QML
173 lines
6.5 KiB
QML
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the Qt Quick Controls 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$
|
|
**
|
|
****************************************************************************/
|
|
|
|
import QtQuick 2.2
|
|
|
|
/*!
|
|
\qmltype TableViewColumn
|
|
\inqmlmodule QtQuick.Controls
|
|
\since 5.1
|
|
\ingroup viewitems
|
|
\ingroup controls
|
|
\brief Used to define columns in a \l TableView or in a \l TreeView.
|
|
|
|
\image tableview.png
|
|
|
|
TableViewColumn represents a column within a TableView or a TreeView. It provides
|
|
properties to decide how the data in that column is presented.
|
|
|
|
\qml
|
|
TableView {
|
|
TableViewColumn { role: "title"; title: "Title"; width: 100 }
|
|
TableViewColumn { role: "author"; title: "Author"; width: 200 }
|
|
model: libraryModel
|
|
}
|
|
\endqml
|
|
|
|
\sa TableView, TreeView
|
|
*/
|
|
|
|
QtObject {
|
|
|
|
/*! \internal */
|
|
property Item __view: null
|
|
|
|
/*! \internal */
|
|
property int __index: -1
|
|
|
|
/*! The title text of the column. */
|
|
property string title
|
|
|
|
/*! The model \c role of the column. */
|
|
property string role
|
|
|
|
/*! The current width of the column.
|
|
The default value depends on platform. If only one
|
|
column is defined, the width expands to the viewport.
|
|
*/
|
|
property int width: (__view && __view.columnCount === 1) ? __view.viewport.width : 160
|
|
|
|
/*! The visible status of the column. */
|
|
property bool visible: true
|
|
|
|
/*! Determines if the column should be resizable.
|
|
\since QtQuick.Controls 1.1 */
|
|
property bool resizable: true
|
|
|
|
/*! Determines if the column should be movable.
|
|
The default value is \c true.
|
|
\note A non-movable column may get indirectly moved if adjacent columns are movable.
|
|
\since QtQuick.Controls 1.1 */
|
|
property bool movable: true
|
|
|
|
/*! \qmlproperty enumeration TableViewColumn::elideMode
|
|
The text elide mode of the column.
|
|
Allowed values are:
|
|
\list
|
|
\li Text.ElideNone
|
|
\li Text.ElideLeft
|
|
\li Text.ElideMiddle
|
|
\li Text.ElideRight - the default
|
|
\endlist
|
|
\sa {Text::elide}{elide} */
|
|
property int elideMode: Text.ElideRight
|
|
|
|
/*! \qmlproperty enumeration TableViewColumn::horizontalAlignment
|
|
The horizontal text alignment of the column.
|
|
Allowed values are:
|
|
\list
|
|
\li Text.AlignLeft - the default
|
|
\li Text.AlignRight
|
|
\li Text.AlignHCenter
|
|
\li Text.AlignJustify
|
|
\endlist
|
|
\sa {Text::horizontalAlignment}{horizontalAlignment} */
|
|
property int horizontalAlignment: Text.AlignLeft
|
|
|
|
/*! The delegate of the column. This can be used to set the itemDelagate
|
|
of a \l TableView or \l TreeView for a specific column.
|
|
|
|
In the delegate you have access to the following special properties:
|
|
\list
|
|
\li styleData.selected - if the item is currently selected
|
|
\li styleData.value - the value or text for this item
|
|
\li styleData.textColor - the default text color for an item
|
|
\li styleData.row - the index of the row
|
|
\li styleData.column - the index of the column
|
|
\li styleData.elideMode - the elide mode of the column
|
|
\li styleData.textAlignment - the horizontal text alignment of the column
|
|
\endlist
|
|
*/
|
|
property Component delegate
|
|
|
|
Accessible.role: Accessible.ColumnHeader
|
|
|
|
/*! \qmlmethod void TableViewColumn::resizeToContents()
|
|
Resizes the column so that the implicitWidth of the contents on every row will fit.
|
|
\since QtQuick.Controls 1.2 */
|
|
function resizeToContents() {
|
|
var minWidth = 0
|
|
var listdata = __view.__listView.children[0]
|
|
for (var i = 0; __index === -1 && i < __view.__columns.length; ++i) {
|
|
if (__view.__columns[i] === this)
|
|
__index = i
|
|
}
|
|
// ### HACK We don't have direct access to the instantiated item,
|
|
// so we go spelunking. Each 'item' variable check is annotated
|
|
// with the expected object it should point to in BasicTableView.
|
|
for (var row = 0 ; row < listdata.children.length ; ++row) {
|
|
var item = listdata.children[row] ? listdata.children[row].rowItem : undefined
|
|
if (item) { // FocusScope { id: rowitem }
|
|
item = item.children[1]
|
|
if (item) { // Row { id: itemrow }
|
|
item = item.children[__index]
|
|
if (item) { // Repeater.delegate a.k.a. __view.__itemDelegateLoader
|
|
var indent = __view.__isTreeView && __index === 0 ? item.__itemIndentation : 0
|
|
item = item.item
|
|
if (item && item.hasOwnProperty("implicitWidth")) {
|
|
minWidth = Math.max(minWidth, item.implicitWidth + indent)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (minWidth)
|
|
width = minWidth
|
|
}
|
|
}
|