| /**************************************************************************** |
| ** |
| ** 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 |
| } |
| } |