diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2013-08-14 12:07:58 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-22 18:29:44 +0100 |
commit | 0b575c91d3f2fcd1d22b759ab7c9b6ffe8d4cea0 (patch) | |
tree | 9c6062c2af2150913ef06258d2500a31ddca162d | |
parent | b5e1ed76942c1b0feb7a58db5fe9f24ce33e06f2 (diff) | |
download | qtquickcontrols-0b575c91d3f2fcd1d22b759ab7c9b6ffe8d4cea0.tar.gz |
TableView: added resizeToContents and resizeColumnsToContents
These are analogous to QTableView::resizeColumnToContents(i) and
resizeColumnsToContents(). Double-clicking the header
near a width adjustment boundary still provides a means for the user
to do this if the application doesn't do it programmatically.
Change-Id: Ibded0c9f255301b461dac7080901fc6065fdbe5e
Reviewed-by: Caroline Chao <caroline.chao@digia.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
-rw-r--r-- | src/controls/TableView.qml | 33 | ||||
-rw-r--r-- | src/controls/TableViewColumn.qml | 21 | ||||
-rw-r--r-- | tests/auto/controls/data/tableview/table_resizecolumns.qml | 58 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_tableview.qml | 16 |
4 files changed, 115 insertions, 13 deletions
diff --git a/src/controls/TableView.qml b/src/controls/TableView.qml index 6e2c95dc..ae9ad9c6 100644 --- a/src/controls/TableView.qml +++ b/src/controls/TableView.qml @@ -243,6 +243,9 @@ ScrollView { /*! \internal */ property alias __currentRowItem: listView.currentItem + /*! \internal */ + property alias __listView: listView + /*! \qmlsignal TableView::activated(int row) Emitted when the user activates an item by mouse or keyboard interaction. @@ -459,6 +462,21 @@ ScrollView { */ property int selectionMode: SelectionMode.SingleSelection + /*! Resizes all columns to ensure that the column contents and the headers will fit. + \since QtQuick.Controls 1.2 */ + function resizeColumnsToContents () { + for (var i = 0; i < __columns.length; ++i) { + var col = getColumn(i) + var header = repeater.itemAt(i) + if (col) { + col.__index = i + col.resizeToContents() + if (col.width < header.implicitWidth) + col.width = header.implicitWidth + } + } + } + Component.onCompleted: { for (var i = 0; i < __columns.length; ++i) { var column = __columns[i] @@ -868,6 +886,7 @@ ScrollView { delegate: Item { z:-index width: columnCount == 1 ? viewport.width + __verticalScrollBar.width : modelData.width + implicitWidth: headerStyle.implicitWidth visible: modelData.visible height: headerVisible ? headerStyle.height : 0 @@ -972,19 +991,7 @@ ScrollView { } property bool found:false - onDoubleClicked: { - var row - var minWidth = 0 - var listdata = listView.children[0] - for (row = 0 ; row < listdata.children.length ; ++row){ - var item = listdata.children[row+1] - if (item && item.children[1] && item.children[1].children[index] && - item.children[1].children[index].children[0].hasOwnProperty("implicitWidth")) - minWidth = Math.max(minWidth, item.children[1].children[index].children[0].implicitWidth) - } - if (minWidth) - modelData.width = minWidth - } + onDoubleClicked: getColumn(index).resizeToContents() onPressedChanged: if (pressed) offset=mouseX cursorShape: enabled ? Qt.SplitHCursor : Qt.ArrowCursor } diff --git a/src/controls/TableViewColumn.qml b/src/controls/TableViewColumn.qml index cbf20945..30551f90 100644 --- a/src/controls/TableViewColumn.qml +++ b/src/controls/TableViewColumn.qml @@ -53,6 +53,9 @@ QtObject { /*! \internal */ property Item __view: null + /*! \internal */ + property int __index: -1 + /*! The title text of the column. */ property string title @@ -119,4 +122,22 @@ QtObject { property Component delegate Accessible.role: Accessible.ColumnHeader + + /*! 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 < 0 && i < __view.__columns.length; ++i) + if (__view.__columns[i] === this) + __index = i + for (var row = 0 ; row < listdata.children.length ; ++row) { + var item = listdata.children[row+1] + if (item && item.children[1] && item.children[1].children[__index] && item.children[1].children[__index].children[0] && + item.children[1].children[__index].children[0].hasOwnProperty("implicitWidth")) + minWidth = Math.max(minWidth, item.children[1].children[__index].children[0].implicitWidth) + } + if (minWidth) + width = minWidth + } } diff --git a/tests/auto/controls/data/tableview/table_resizecolumns.qml b/tests/auto/controls/data/tableview/table_resizecolumns.qml new file mode 100644 index 00000000..95825d72 --- /dev/null +++ b/tests/auto/controls/data/tableview/table_resizecolumns.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Quick Controls module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.1; +import QtQuick.Controls 1.1; + +TableView { + TableViewColumn { + delegate: Rectangle { + implicitWidth: 50 + height: 10 + border.color: "black" + } + title: "rects" + width: 20 + } + TableViewColumn { + title: "numbers" + } + model: 10 +} diff --git a/tests/auto/controls/data/tst_tableview.qml b/tests/auto/controls/data/tst_tableview.qml index 55da1918..dd09dc5a 100644 --- a/tests/auto/controls/data/tst_tableview.qml +++ b/tests/auto/controls/data/tst_tableview.qml @@ -805,6 +805,22 @@ TestCase { table.destroy() } + function test_resize_columns() { + var component = Qt.createComponent("tableview/table_resizecolumns.qml") + compare(component.status, Component.Ready) + var table = component.createObject(container); + verify(table !== null, "table created is null") + waitForRendering(table) + compare(table.getColumn(0).width, 20) + table.getColumn(0).resizeToContents() + compare(table.getColumn(0).width, 50) + table.getColumn(0).width = 20 + compare(table.getColumn(0).width, 20) + table.resizeColumnsToContents() + compare(table.getColumn(0).width, 50) + table.destroy() + } + // In TableView, drawn text = table.__currentRowItem.children[1].children[1].itemAt(0).children[0].children[0].text function findAChild(item, name) |