summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2013-08-14 12:07:58 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-22 18:29:44 +0100
commit0b575c91d3f2fcd1d22b759ab7c9b6ffe8d4cea0 (patch)
tree9c6062c2af2150913ef06258d2500a31ddca162d
parentb5e1ed76942c1b0feb7a58db5fe9f24ce33e06f2 (diff)
downloadqtquickcontrols-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.qml33
-rw-r--r--src/controls/TableViewColumn.qml21
-rw-r--r--tests/auto/controls/data/tableview/table_resizecolumns.qml58
-rw-r--r--tests/auto/controls/data/tst_tableview.qml16
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)