From dbf42fc0028acc0170bb0d0dad966c74b86a456e Mon Sep 17 00:00:00 2001
From: Jens Bache-Wiig <jens.bache-wiig@digia.com>
Date: Mon, 27 May 2013 15:51:08 +0200
Subject: [PATCH] Make GroupBox size respect anchor margins and update Gallery

We now implicitly add the margins to GroupBox so that you
can easily add them to a layout.

This also gets rid of the silly Sidebar example and adds a much
more useful Layout tab for effective testing.

Change-Id: I6026c32b2a198062d9b11a67245df0529aa61f8a
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
---
 .../controls/gallery/content/Layouts.qml      | 108 ++++++++++++++
 .../quick/controls/gallery/content/Panel.qml  | 140 ------------------
 .../quick/controls/gallery/images/page.png    | Bin 639 -> 0 bytes
 .../quick/controls/gallery/images/panel.png   | Bin 1756 -> 0 bytes
 examples/quick/controls/gallery/main.qml      |   4 +-
 examples/quick/controls/gallery/resources.qrc |   4 +-
 src/controls/GroupBox.qml                     |   8 +-
 7 files changed, 117 insertions(+), 147 deletions(-)
 create mode 100644 examples/quick/controls/gallery/content/Layouts.qml
 delete mode 100644 examples/quick/controls/gallery/content/Panel.qml
 delete mode 100644 examples/quick/controls/gallery/images/page.png
 delete mode 100644 examples/quick/controls/gallery/images/panel.png

diff --git a/examples/quick/controls/gallery/content/Layouts.qml b/examples/quick/controls/gallery/content/Layouts.qml
new file mode 100644
index 000000000..1251947ac
--- /dev/null
+++ b/examples/quick/controls/gallery/content/Layouts.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 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.0
+import QtQuick.Layouts 1.0
+
+Item {
+    id:root
+    anchors.fill: parent
+    anchors.margins: 8
+
+    ColumnLayout {
+        id: mainLayout
+        anchors.fill: parent
+        spacing: 4
+        GroupBox {
+            id: rowBox
+            title: "Row layout"
+            Layout.fillWidth: true
+            RowLayout {
+                id: rowLayout
+                anchors.fill: parent
+                TextField {
+                    placeholderText: "This wants to grow horizontally"
+                    Layout.fillWidth: true
+                }
+                Button {
+                    text: "Button"
+                }
+            }
+        }
+
+        GroupBox {
+            id: gridBox
+            title: "Grid layout"
+            Layout.fillWidth: true
+
+            GridLayout {
+                id: gridLayout
+                anchors.fill: parent
+                anchors.margins: 4
+                rows: 3
+                flow: GridLayout.TopToBottom
+
+                Label { text: "Line 1" }
+                Label { text: "Line 2" }
+                Label { text: "Line 3" }
+
+                TextField { }
+                TextField { }
+                TextField { }
+
+                TextArea {
+                    text: "This widget spans over three rows in the GridLayout.\n"
+                          + "All items in the GridLayout are implicitly positioned from top to bottom."
+                    Layout.rowSpan: 3
+                    Layout.fillHeight: true
+                    Layout.fillWidth: true
+                }
+            }
+        }
+        TextArea {
+            id: t3
+            text: "This fills the whole cell"
+            Layout.minimumHeight: 30
+            Layout.fillHeight: true
+            Layout.fillWidth: true
+        }
+    }
+}
diff --git a/examples/quick/controls/gallery/content/Panel.qml b/examples/quick/controls/gallery/content/Panel.qml
deleted file mode 100644
index bdb10f834..000000000
--- a/examples/quick/controls/gallery/content/Panel.qml
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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.0
-
-Rectangle {
-    id:root
-
-    width: 540
-    height: 340
-    color:"#c3c3c3"
-    ScrollView {
-        frameVisible: false
-        anchors.fill: parent
-
-        Item {
-            width:600
-            height:600
-            BorderImage {
-                id: page
-                source: "../images/page.png"
-                y:10; x:50
-                width: 400; height: 400
-                border.left: 12; border.top: 12
-                border.right: 12; border.bottom: 12
-                Text {
-                    id:text
-                    anchors.fill: parent
-                    anchors.margins: 40
-                    text:textfield.text
-                }
-                Rectangle {
-                    border.color: "#444"
-                    anchors.centerIn: parent
-                    color: Qt.rgba(s1.value, s2.value, s3.value)
-                    width: 200
-                    height: width
-                }
-
-            }
-
-            BorderImage {
-                id: sidebar
-                source: "../images/panel.png"
-                anchors.left: parent.left
-                anchors.top: parent.top
-                width: show ? 160 : 40
-                height:root.height
-                Behavior on width { NumberAnimation { easing.type: Easing.OutSine ; duration: 250 } }
-                property bool show: false
-                border.left: 0;
-                border.right: 26;
-                MouseArea {
-                    id:mouseArea
-                    anchors.fill: parent
-                    onClicked: sidebar.show = !sidebar.show
-                }
-                Column {
-                    id: panel1
-                    opacity: sidebar.show ? 1 : 0
-                    Behavior on opacity { NumberAnimation { easing.type:Easing.InCubic; duration: 600} }
-
-                    scale: sidebar.show ? 1 : 0
-                    Behavior on scale { NumberAnimation { easing.type:Easing.InCubic; duration: 200 } }
-                    transformOrigin: Item.Top
-
-                    anchors.top: parent.top
-                    anchors.left: parent.left
-                    anchors.right: parent.right
-                    anchors.margins: 12
-                    spacing:12
-
-                    Button { width: parent.width - 12; text: "Close Panel"; onClicked: sidebar.show = false}
-                    TextField { id: textfield; text: "Some text" ; width: parent.width - 12}
-                    SpinBox { width: parent.width - 12}
-                    CheckBox{ id: expander; text:"Sliders"}
-                }
-
-                Column {
-                    id: panel2
-                    opacity: expander.checked && sidebar.show ? 1 : 0
-                    scale: opacity
-                    Behavior on opacity{ NumberAnimation { easing.type:Easing.OutSine; duration: 300}}
-                    transformOrigin: Item.Top
-                    anchors.top: panel1.bottom
-                    anchors.left: parent.left
-                    anchors.right: parent.right
-                    anchors.margins: 12
-                    spacing: 12
-                    Slider { id: s1; width:parent.width - 12; value:0.5}
-                    Slider { id: s2; width:parent.width - 12; value:0.5}
-                    Slider { id: s3; width:parent.width - 12; value:0.5}
-
-                }
-            }
-        }
-    }
-}
diff --git a/examples/quick/controls/gallery/images/page.png b/examples/quick/controls/gallery/images/page.png
deleted file mode 100644
index b46f205d3fee81b74000f20b11a73d952e27670f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 639
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|*pj^6T^J67
z;IX1f=|B<A0*}aI1_o|n5N2eUHAey{$X?><>&kwcnTuUqW2NUaL7<RiiEBiObAE1a
zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcIMAwFo-U3d6}R5r4(w|(5MX<-|Lv8eM~*vY
zwm-7CcQ834D=8}|^Lyg<v+KIG-v~dj=WJwGJ>$-;Iy12Su;Sxh=f`K88Q$|LB-hU<
zc00FIPG50KP-%RhI<rjw@mYT!n|*(Bdt2)@DX*2g>RTolme=jSub-Du9@{R!<ic|8
z*7=|RS`B_lZfLRo8y=%49<x6DPM-Ol_vK5b)IC+sX0w><cjIjt14A-TkKqZ+{}QZ=
zmmLT?T+PpLBgd@Z+`%aB<TGE=4+JT<Fg%w@>haLzeYW`eEE|R+5*NSM&i(ED^Mz@D
z!~56M(ks{0ss4Dy_9?o7fklCVk;8$3Nq|V^G@0|Kp13pbu{tO;>3{itho8aMOS@S#
zwjMlR#Tv)N;Bb2zhvI?i{?9*o-rG8HbQqr7))k`3nytI-w(hKDjU5izwib)xnKITY
zDrL-CHf^5u^9$c?8-7l`G>xU#@arsjK{a2-r6H^gcHZZ`zkZ$L-f&IoT9n0etpiV{
z%`8$9T)FC;<&r5`KY!-L=SN-7*1sKax~J!=h@eDr*8j6YvzBok`MzxBN&bUIIa7j8
rSYF>Yd3yyfpJRcl2Lsa@EjtE9!QE<(fmKt0NrA!B)z4*}Q$iB}?3DS-

diff --git a/examples/quick/controls/gallery/images/panel.png b/examples/quick/controls/gallery/images/panel.png
deleted file mode 100644
index 02d655eb034a49874fddb74e94b27d0ce5ffd8b6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1756
zcmV<21|#{2P)<h;3K|Lk000e1NJLTq002G!001Wl1^@s6R~Y*j00001b5ch_0Itp)
z=>Px#24YJ`L;#-vp8%gc>UyRC000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipS*
z2o*W{ljB?f000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000IzNkl<Z
zXx_D2Ns{A65Ce4V2lf~I;rW3tzWV5c2_KjXvWilSB{m~wS}kss8-UDe{`&Pxl2HE+
zK@biJ@bBZ?0RcK70XmNJdjQgL-Yek{APCX{=zNyWi|iiZh<D+L>yP7nFM#7X;-?@S
zI3IP)^(elB>fK*oU-<t1{sX{Y0RD`he*^djz`uy&ksp*FIDVXG6z2&Lg22;Q5@4JY
z<1PY>D+DN?B-nEZ)eFyC)hjs95s(B>wzy?&)Ux>BKOWn|{KysL|FL++JDG+F5LFk@
z9Km=75jSvIXJi6JTZzi1@_4%tb?F-hZ-(y%pOLY(gol^63Lr055RMRdI*6<l6ZU-O
zdot$joOXq#oq7?hPYl-<mPoxw<6g8XADGvWc`+D~4ipGCm<3YgxrU$JEc4gJI^Vbc
z((qjSnoTp|EEcr_B4ekpP#i@$-jTsBUnz0qbgC83ZXYcZ-!)t>?x&}|rr8<6uDM)l
z#F{KjSXU{f;}V@6>CQ}GdZX}-qtdAN)BWMjdwN6;iu9#N$!mhE3a@4^7F72$685^5
zms<DiqdgphDDF!2<;hi}`F^J<Rulw*k++3)Mr$6d`h_YTaAuB{vXW&2Zap4X$vrup
zK{e`Vus`=FF7;>8NlauoG0%w?nZ||kIG%G|i*FgOE!e!I@~+pe;?BU!HIY&OEVkgn
zRjNv2Q>M6Z3<r#l%n{!;oKL;ii!urmr-yW=c-ME*))XWj^%Ym7u58NcyQGiodbyN&
zy9OT5PRJgtE#0^PpIW^Qa+OIf8a>7DRL~mD$c|}JB25$WCI$1<@LtG#nH&Wi4AN+(
zOf{J22~rz1s-x{jVgYdtxVy$--evgS5SZMQFG`yz8DhkQ^@;o`Y=Y+(P?hrtCkebd
z^pW9u^*D7G7NC{+AQ|Ko8VX9z)&#=z4843JCA^YmqoR+r`D??u+g(ve>Y;%U8=+f?
z@oXovJ*`&GmL7F2YVbbA#no7=`X>z6j**N=b%8d0SU672t&p@KWYQ3wkw1Z5*2XU8
zk-_oomUb~&{1L<XT)I|NIHEfeP%ddz>nCVk7e_@??F1R<ff`_nr#!xs%uO|J&4bf7
zg-uv7>efUB<?4>D+UVTPG4O!n$g(iPvc{LB{}1iYYuslMN~w9Bb4gRIUh`slLlZGJ
z=t$MZYPEtyrArwri-10W_Q%sZT~>{T8A~Lhtt3me&4sCk5;nLqPB*nLmSFM}AL8*Q
zn0t(Y$U1q+k&zR%8q7<xoA{`CTTzn<4>l+&fD^{|qK1|1zU|fqW%T3MKw(_Fa2z+D
zWuSL7CROLyl-f#_smEj7x}dnyk3oSy!Q;9ZK&<Qqk6K&8oX)TtELj`DESG@$vvr>(
z<O+>+vBMn1EW?c-6fi!DP(^`VlcD0YPD+E)7$T)AS+Y{mpu_|;$AcV8bMyWWH7OdK
z3$);~$;n#ij&`HD)N?4NBkKE@tFaA>t85B6$5~s1brZN<Td!?M;oWgJCDFIh!J>^&
zrtA1RDtr!WdK@J^39Rm^@uz^viK;mRqkQ73*y?daGD-`ndNnf#x_0w@h3uX=K6M<K
zcl%DtMBWAyR(;O-hmC^iYOkj=*0&T=m&3?<24#&;(MJlTxsP{?;o7BGG%1>sCtZyA
z%LrCOlgfX#tXCRaHmopLdZVIkD-UDW@e{-OH1x~hk8@x))4oNH?}Mf2DX5Hk&&J33
zy>?SG^<MxQe*)DVQZ?$AgM>~6#?fK1C(!Wi119BhY6SWIWHE!9_g~U2Z|KgJoeJMX
zoBBlsVzry%n^|ELdk5%LbzQup%W4p8O3UU57u{jb3FM=&&kUd5GeI@?$egmclmX_Z
zf9d#;b7D298#$}?(|b6{wMnUN@iSt3Ty7ibx`v23g(-0%cE7C#DrupBGM?4fQ*$^`
z@|LC)xsB%TqBHK>uXEn%s(bzk2Gam7sK?%QF%eVpQ~Q>2UaP5=wyiDQAYvX*^^n+G
zKBm@u#?9Od3(d~jD8!hco*5zAS#2j~=~pM_lP6)M{T64wjcwC#>bl(5Kg$?Hej6N)
yF+?~eyEZ1DJ6NbS`nH9)B%x@IdV$Bkd;AB<TVH`D>X`Td0000<MNUMnLSTaXQ9_ge

diff --git a/examples/quick/controls/gallery/main.qml b/examples/quick/controls/gallery/main.qml
index 7da74031e..e34858cd7 100644
--- a/examples/quick/controls/gallery/main.qml
+++ b/examples/quick/controls/gallery/main.qml
@@ -281,8 +281,8 @@ ApplicationWindow {
             Styles { anchors.fill: parent }
         }
         Tab {
-            title: "Sidebar"
-            Panel { anchors.fill:parent }
+            title: "Layouts"
+            Layouts { anchors.fill:parent }
         }
     }
 }
diff --git a/examples/quick/controls/gallery/resources.qrc b/examples/quick/controls/gallery/resources.qrc
index 14e88e52b..21362787f 100644
--- a/examples/quick/controls/gallery/resources.qrc
+++ b/examples/quick/controls/gallery/resources.qrc
@@ -5,18 +5,16 @@
         <file>content/Controls.qml</file>
         <file>content/ImageViewer.qml</file>
         <file>content/ModelView.qml</file>
-        <file>content/Panel.qml</file>
+        <file>content/Layouts.qml</file>
         <file>content/Styles.qml</file>
         <file>images/document-open.png</file>
         <file>images/document-open@2x.png</file>
         <file>images/document-save-as.png</file>
         <file>images/document-save-as@2x.png</file>
         <file>images/folder_new.png</file>
-        <file>images/page.png</file>
         <file>images/tab.png</file>
         <file>images/tab_selected.png</file>
         <file>images/window-new.png</file>
         <file>images/window-new@2x.png</file>
-        <file>images/panel.png</file>
     </qresource>
 </RCC>
diff --git a/src/controls/GroupBox.qml b/src/controls/GroupBox.qml
index e358dd9d0..9bf1c0cc5 100644
--- a/src/controls/GroupBox.qml
+++ b/src/controls/GroupBox.qml
@@ -212,7 +212,11 @@ Item {
             enabled: (!groupbox.checkable || groupbox.checked)
 
             property Item layoutItem: container.children.length === 1 ? container.children[0] : null
-            function calcWidth () { return (layoutItem ? (layoutItem.implicitWidth || layoutItem.width) : container.childrenRect.width) }
-            function calcHeight () { return (layoutItem ? (layoutItem.implicitHeight || layoutItem.height) : container.childrenRect.height) }
+            function calcWidth () { return (layoutItem ? (layoutItem.implicitWidth || layoutItem.width) +
+                                                         (layoutItem.anchors.fill ? layoutItem.anchors.leftMargin +
+                                                                                    layoutItem.anchors.rightMargin : 0) : container.childrenRect.width) }
+            function calcHeight () { return (layoutItem ? (layoutItem.implicitHeight || layoutItem.height) +
+                                                          (layoutItem.anchors.fill ? layoutItem.anchors.topMargin +
+                                                                                     layoutItem.anchors.bottomMargin : 0) : container.childrenRect.height) }
         }]
 }
-- 
GitLab