Update copyright year in Digia's license headers
[qt:qtgraphicaleffects.git] / tools / pngdumper / pngdumper.qml
1 /****************************************************************************
2 **
3 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the Qt Graphical Effects module.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** You may use this file under the terms of the BSD license as follows:
10 **
11 ** "Redistribution and use in source and binary forms, with or without
12 ** modification, are permitted provided that the following conditions are
13 ** met:
14 **   * Redistributions of source code must retain the above copyright
15 **     notice, this list of conditions and the following disclaimer.
16 **   * Redistributions in binary form must reproduce the above copyright
17 **     notice, this list of conditions and the following disclaimer in
18 **     the documentation and/or other materials provided with the
19 **     distribution.
20 **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21 **     of its contributors may be used to endorse or promote products derived
22 **     from this software without specific prior written permission.
23 **
24 **
25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
36 **
37 ** $QT_END_LICENSE$
38 **
39 ****************************************************************************/
40
41 import QtQuick 2.0
42 import com.nokia.mt.pngdumper 1.0
43
44 Rectangle {
45     id: main
46     width: 300
47     height: width
48     property real size: width
49     property real timerInterval: 1
50     property color background: "white"
51     property bool checkerboard: false
52     color: background
53
54     Rectangle {
55         id: blurMask
56         anchors.fill: parent
57         visible: false
58         gradient: Gradient {
59                  GradientStop { position: 0.3; color: "#ff000000" }
60                  GradientStop { position: 0.7; color: "#00000000" }
61         }
62     }
63
64
65     Gradient {
66         id: firstGradient
67         GradientStop { position: 0.000; color: Qt.rgba(1, 0, 0, 1) }
68         GradientStop { position: 0.167; color: Qt.rgba(1, 1, 0, 1) }
69         GradientStop { position: 0.333; color: Qt.rgba(0, 1, 0, 1) }
70         GradientStop { position: 0.500; color: Qt.rgba(0, 1, 1, 1) }
71         GradientStop { position: 0.667; color: Qt.rgba(0, 0, 1, 1) }
72         GradientStop { position: 0.833; color: Qt.rgba(1, 0, 1, 1) }
73         GradientStop { position: 1.000; color: Qt.rgba(1, 0, 0, 1) }
74     }
75     Gradient {
76         id: secondGradient
77         GradientStop { position: 0.0; color: "#F0F0F0" }
78         GradientStop { position: 0.5; color: "#000000" }
79         GradientStop { position: 1.0; color: "#F0F0F0" }
80     }
81     Gradient {
82         id: thirdGradient
83         GradientStop { position: 0.0; color: "#00000000" }
84         GradientStop { position: 1.0; color: "#FF000000" }
85     }
86
87     ItemModel {
88         id: itemModel
89     }
90
91     Item {
92         id: container
93         width: size
94         height: size
95         clip: true
96
97         Image {
98             source: '../../tests/manual/testbed/images/checker.png'
99             smooth: true
100             anchors.fill: parent
101             fillMode: Image.Tile
102             visible: main.checkerboard
103         }
104
105         ListView {
106             id: list
107             width: size
108             height: size
109             model: itemModel
110             highlightMoveDuration: 1
111             spacing: size
112             anchors.centerIn: parent
113             cacheBuffer: size
114         }
115     }
116
117     // Sources
118     Image {
119         id: bug
120         source: "../../tests/manual/testbed/images/bug.jpg"
121         smooth: true
122         width: size
123         height: width
124         fillMode: Image.PreserveAspectFit
125         visible: false
126     }
127     ShaderEffectSource {
128         id: butterfly
129         smooth: true
130         width: size
131         height: width
132         visible: false
133         sourceItem:
134             Image {
135             //id: butterfly
136             source: "../../tests/manual/testbed/images/butterfly.png"
137             smooth: true
138             width: size
139             height: width
140             fillMode: Image.PreserveAspectFit
141             visible: false
142         }
143     }
144     Image {
145         id: fog
146         source: "../../tests/manual/testbed/images/fog.png"
147         smooth: true
148         width: size
149         height: width
150         fillMode: Image.PreserveAspectFit
151         visible: false
152     }
153     Rectangle {
154         id: rect
155         width: size / 2
156         height: size / 2
157         anchors.centerIn: container
158         color: "#dde4ff"
159         visible: false
160     }
161     Rectangle {
162         id: displacementMapSource
163         visible: false
164         color: Qt.rgba(0.5, 0.5, 1.0, 1.0)
165         smooth: true
166         anchors.fill: bug
167         Image {
168             id: di
169             x: (parent.width - width) / 2
170             y: (parent.height - height) / 2
171             sourceSize: Qt.size(128, 128)
172             source: "../../tests/manual/testbed/images/glass_normal.png"
173             smooth: true
174         }
175     }
176
177     ItemCapturer {
178         id: capturer
179     }
180
181     Timer {
182         interval: 1000
183         running: true
184         onTriggered: {
185             // Ugly workaround for listview not updating itself
186             list.contentX = 1
187             eval("list.currentItem."+list.currentItem.__varyingProperty+"=list.currentItem.__values[0]");
188             list.contentX = 0
189             if (list.currentItem.init != undefined) list.currentItem.init()
190             timer.running = true
191         }
192     }
193
194
195     property int i: 0
196     Connections {
197         target: capturer
198         onImageSaved: {
199             if (i >= list.currentItem.__values.length - 1) {
200                 var filename = list.currentItem.__name + "_" + list.currentItem.__varyingProperty + (i + 1) + ".png"
201                 filename = filename.replace(/\"/g,"")
202                 capturer.document("\\table\n")
203                 capturer.document("\\header\n")
204                 capturer.document("\\o Output examples with different " + list.currentItem.__varyingProperty + " values\n")
205                 capturer.document("\\o\n\\o\n\\row\n")
206                 var ii = 0
207                 for(ii = 0; ii < list.currentItem.__values.length; ii++) {
208                     filename = list.currentItem.__name + "_" + list.currentItem.__varyingProperty + (ii + 1) + ".png"
209                     filename = filename.replace(/\"/g,"")
210                     //filename = filename.toLowerCase();
211                     capturer.document("    \\o \\image " + filename + "\n")
212                 }
213                 capturer.document("\\row\n")
214                 for(ii = 0; ii < list.currentItem.__values.length; ii++) {
215                     capturer.document("    \\o \\bold { " + list.currentItem.__varyingProperty + ": " + list.currentItem.__values[ii] + " }\n")
216                 }
217                 for (var p = 0; p < list.currentItem.__properties.length; p++) {
218                     if (list.currentItem.__properties[p] == list.currentItem.__varyingProperty) continue;
219
220                     capturer.document("\\row\n")
221
222                     for(ii = 0; ii < list.currentItem.__values.length; ii++) {
223                         capturer.document("    \\o \\l " + list.currentItem.__properties[p] + ": " + eval("list.currentItem."+list.currentItem.__properties[p]) + "\n")
224                     }
225                 }
226                 capturer.document("\\endtable\n")
227
228                 if (list.currentIndex < list.count-1) {
229                     i = 0
230                     if (list.currentItem.uninit != undefined) list.currentItem.uninit()
231                     list.currentIndex++
232                     list.positionViewAtIndex(list.currentIndex, ListView.Center)
233                     if (list.currentItem.init != undefined) list.currentItem.init()
234                 } else Qt.quit()
235             } else i++
236
237             eval("list.currentItem."+list.currentItem.__varyingProperty+"=list.currentItem.__values[i]");
238             timer.running = true
239         }
240     }
241
242     Timer {
243         id: timer
244         interval: timerInterval
245         running: false
246         onTriggered: {
247             var filename = list.currentItem.__name + "_" + list.currentItem.__varyingProperty + (i + 1) + ".png"
248             filename = filename.replace(/\"/g,"")
249             capturer.grabItem(container, filename)
250         }
251     }
252 }