From 27cfafa52b908caa7be9ec778e079f6069496dfb Mon Sep 17 00:00:00 2001 From: Charles Yin Date: Wed, 20 Jul 2011 16:13:31 +1000 Subject: [PATCH] polish canvas stock chart example Change-Id: Ie79859af8572c3c79185d98c54c2aae35190d257 Reviewed-on: http://codereview.qt.nokia.com/1908 Reviewed-by: Charles Yin --- .../canvas/stockchart/contents/Button.qml | 88 ++++++++ .../canvas/stockchart/contents/ScrollBar.qml | 74 +++++++ .../canvas/stockchart/contents/TitleBar.qml | 71 +++++++ .../canvas/stockchart/contents/ToolBar.qml | 70 ++++++ .../stockchart/contents/images/button-pressed.png | Bin 0 -> 571 bytes .../canvas/stockchart/contents/images/button.png | Bin 0 -> 564 bytes .../canvas/stockchart/contents/images/default.svg | 82 +++++++ .../canvas/stockchart/contents/images/gloss.png | Bin 0 -> 1236 bytes .../canvas/stockchart/contents/images/lineedit.png | Bin 0 -> 1415 bytes .../canvas/stockchart/contents/images/lineedit.sci | 5 + .../canvas/stockchart/contents/images/quit.png | Bin 0 -> 2369 bytes .../canvas/stockchart/contents/images/stripes.png | Bin 0 -> 257 bytes .../canvas/stockchart/contents/images/titlebar.png | Bin 0 -> 1436 bytes .../canvas/stockchart/contents/images/titlebar.sci | 5 + .../stockchart/contents/images/toolbutton.png | Bin 0 -> 2550 bytes .../stockchart/contents/images/toolbutton.sci | 5 + examples/declarative/canvas/stockchart/main.cpp | 2 + examples/declarative/canvas/stockchart/model.cpp | 3 +- examples/declarative/canvas/stockchart/model.h | 1 + examples/declarative/canvas/stockchart/stock.qml | 235 +++++++++++++++------ .../declarative/canvas/stockchart/stockchart.pro | 7 +- .../declarative/canvas/stockchart/stockchart.qrc | 14 ++ 22 files changed, 601 insertions(+), 61 deletions(-) create mode 100644 examples/declarative/canvas/stockchart/contents/Button.qml create mode 100644 examples/declarative/canvas/stockchart/contents/ScrollBar.qml create mode 100644 examples/declarative/canvas/stockchart/contents/TitleBar.qml create mode 100644 examples/declarative/canvas/stockchart/contents/ToolBar.qml create mode 100644 examples/declarative/canvas/stockchart/contents/images/button-pressed.png create mode 100644 examples/declarative/canvas/stockchart/contents/images/button.png create mode 100644 examples/declarative/canvas/stockchart/contents/images/default.svg create mode 100755 examples/declarative/canvas/stockchart/contents/images/gloss.png create mode 100755 examples/declarative/canvas/stockchart/contents/images/lineedit.png create mode 100644 examples/declarative/canvas/stockchart/contents/images/lineedit.sci create mode 100755 examples/declarative/canvas/stockchart/contents/images/quit.png create mode 100755 examples/declarative/canvas/stockchart/contents/images/stripes.png create mode 100755 examples/declarative/canvas/stockchart/contents/images/titlebar.png create mode 100644 examples/declarative/canvas/stockchart/contents/images/titlebar.sci create mode 100755 examples/declarative/canvas/stockchart/contents/images/toolbutton.png create mode 100644 examples/declarative/canvas/stockchart/contents/images/toolbutton.sci diff --git a/examples/declarative/canvas/stockchart/contents/Button.qml b/examples/declarative/canvas/stockchart/contents/Button.qml new file mode 100644 index 0000000..7a88eb5 --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/Button.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: container + + signal clicked + + property string text + width: buttonText.width + 28 + height: buttonText.height + 14 + + BorderImage { + id: buttonImage + source: "images/toolbutton.sci" + width: container.width - 10 + height: container.height + } + BorderImage { + id: pressed + opacity: 0 + source: "images/toolbutton.sci" + width: container.width - 10 + height: container.height + } + MouseArea { + id: mouseRegion + anchors.fill: buttonImage + onClicked: { container.clicked(); } + } + Text { + id: buttonText + color: "white" + anchors.centerIn: buttonImage + font.bold: true + font.pointSize: 15 + text: container.text + style: Text.Raised + styleColor: "black" + } + states: [ + State { + name: "Pressed" + when: mouseRegion.pressed == true + PropertyChanges { target: pressed; opacity: 1 } + } + ] +} diff --git a/examples/declarative/canvas/stockchart/contents/ScrollBar.qml b/examples/declarative/canvas/stockchart/contents/ScrollBar.qml new file mode 100644 index 0000000..ad01b03 --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/ScrollBar.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $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 Nokia Corporation 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.0 + +Item { + id: scrollBar + // The properties that define the scrollbar's state. + // position and pageSize are in the range 0.0 - 1.0. They are relative to the + // height of the page, i.e. a pageSize of 0.5 means that you can see 50% + // of the height of the view. + // orientation can be either 'Vertical' or 'Horizontal' + property real position + property real pageSize + property string orientation : "Vertical" + property alias bgColor: background.color + property alias fgColor: thumb.color + + // A light, semi-transparent background + Rectangle { + id: background + radius: orientation == 'Vertical' ? (width/2 - 1) : (height/2 - 1) + color: "white"; opacity: 0.3 + anchors.fill: parent + } + // Size the bar to the required size, depending upon the orientation. + Rectangle { + id: thumb + opacity: 0.7 + color: "black" + radius: orientation == 'Vertical' ? (width/2 - 1) : (height/2 - 1) + x: orientation == 'Vertical' ? 1 : (scrollBar.position * (scrollBar.width-2) + 1) + y: orientation == 'Vertical' ? (scrollBar.position * (scrollBar.height-2) + 1) : 1 + width: orientation == 'Vertical' ? (parent.width-2) : (scrollBar.pageSize * (scrollBar.width-2)) + height: orientation == 'Vertical' ? (scrollBar.pageSize * (scrollBar.height-2)) : (parent.height-2) + } +} diff --git a/examples/declarative/canvas/stockchart/contents/TitleBar.qml b/examples/declarative/canvas/stockchart/contents/TitleBar.qml new file mode 100644 index 0000000..3a52fcb --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/TitleBar.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: titleBar + property string title: "" + + BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Image { + id: quitButton + anchors.left: parent.left//; anchors.leftMargin: 0 + anchors.verticalCenter: parent.verticalCenter + source: "images/quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + + Text { + id: categoryText + anchors { + left: quitButton.right; right: parent.right; //leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + text: title + font.bold: true; font.pointSize: 20; color: "White"; style: Text.Raised; styleColor: "Black" + } +} diff --git a/examples/declarative/canvas/stockchart/contents/ToolBar.qml b/examples/declarative/canvas/stockchart/contents/ToolBar.qml new file mode 100644 index 0000000..5f8ca68 --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/ToolBar.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: toolbar + + property variant labels + signal buttonClicked(int index) + + BorderImage { + source: "images/titlebar.sci" + width: parent.width + height: parent.height + 14 + y: -7 + } + + Row { + y: 3 + anchors.horizontalCenter: parent.horizontalCenter + Repeater { + model: toolbar.labels + delegate: + Button { + text: modelData + onClicked: toolbar.buttonClicked(model.index) + } + } + } + +} diff --git a/examples/declarative/canvas/stockchart/contents/images/button-pressed.png b/examples/declarative/canvas/stockchart/contents/images/button-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..e434d327f21e98e82676485da0d7b93aa672cf96 GIT binary patch literal 571 zcmV-B0>u4^P)Px#0%A)?L;(MXkIcUS000SaNLh0L01pxX01pxYA)E3u00007bV*G`2iXG>7A_$h zki;_p000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004+Nkl8S{5C!0G?%wPst7rwG;Y}jM8;}<9n5k$&foORFdL#-$!OsS5vVXo5>;1D5L=p;n zDqD9(KIiz1XB?M`D?j}5Wh2d*qp8=iZuHs%mcSj)@DL`7G1-&cxKR^`==xws7IKN`@;_ON*9*ZA!U7 zHkTw=witTT$RRAv>vzz4o7~-pNk=2P48FEa7$~)ix)BEsww@oZFFK?6p;%+?t6KcE zxea`OYn#5(Df4FoX{~&_JGc5^&wn z1&`^6ctCbYilUOJe^EnH31J}1%$<5)v)lrYN2~ommf_eazpH=p!o;!MH+Lrc=vNEi z-nGlGfEO&CIQ7amBXMa=InwLQn5xW7h^I0mH*wvueRAj!e*leMdaFm*MwkEq002ov JPDHLkV1m>V_W1w+ literal 0 HcmV?d00001 diff --git a/examples/declarative/canvas/stockchart/contents/images/button.png b/examples/declarative/canvas/stockchart/contents/images/button.png new file mode 100644 index 0000000000000000000000000000000000000000..56a63ce64168c8e9068da449c584f52bf221f052 GIT binary patch literal 564 zcmV-40?Yl0P)Px#0%A)?L;(MXkIcUS000SaNLh0L01pxX01pxYA)E3u00007bV*G`2iXG>1uYVh z4eQSU000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004#Nkl%$cz^@kX$p1UjTX3V7)P{s;fxK}M~>(~$41h+s~uIsh708A@FoAHt! z-hQW>v+g-5p*Mr7+qY9Kq0pK2^Y%L}JH}=Uc5xwHp<9RZ`mO|8%f?;!-KIgv$yj*= zUFlx~t>&jmM^Ry7GbI%R>(YyyeaztkIh^7I?pQ)K)03ax+pP2a8~u*cQ_kOIR~N0Qdgr`>IzdelzWHK7UKhr$TS&|?hx`KQ(d_C%`_IAv0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + weather-clear + January 2006 + + + Ryan Collier (pseudo) + + + + + http://www.tango-project.org + + + http://www.pseudocode.org + + + weather + applet + notification + + + + + + Garrett LeSage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/declarative/canvas/stockchart/contents/images/gloss.png b/examples/declarative/canvas/stockchart/contents/images/gloss.png new file mode 100755 index 0000000000000000000000000000000000000000..5d370cd93d62ed8c17f43a5d5dc7ed20b4edb5a1 GIT binary patch literal 1236 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 VqK)QbrHcRn002ovPDHLkV1mrKo*@7L literal 0 HcmV?d00001 diff --git a/examples/declarative/canvas/stockchart/contents/images/lineedit.sci b/examples/declarative/canvas/stockchart/contents/images/lineedit.sci new file mode 100644 index 0000000..054bff7 --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/images/lineedit.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 10 +border.bottom: 10 +border.right: 10 +source: lineedit.png diff --git a/examples/declarative/canvas/stockchart/contents/images/quit.png b/examples/declarative/canvas/stockchart/contents/images/quit.png new file mode 100755 index 0000000000000000000000000000000000000000..5bda1b6e0d0effbabf53172040f0ed2eea78e34a GIT binary patch literal 2369 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 literal 0 HcmV?d00001 diff --git a/examples/declarative/canvas/stockchart/contents/images/stripes.png b/examples/declarative/canvas/stockchart/contents/images/stripes.png new file mode 100755 index 0000000000000000000000000000000000000000..9f36727ea424cd0da94bd5a7cee4082447275eeb GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgga4pBxq@gGdLS%5-~o-U3d5|`(m z-N<{$K*aT;^vADLPxXoJET5>DG2xP-Q1*siVN6aag0$kQzm$|0%E+I; z#Y!4I)=g1)z4*}Q$iB}`v_QR literal 0 HcmV?d00001 diff --git a/examples/declarative/canvas/stockchart/contents/images/titlebar.png b/examples/declarative/canvas/stockchart/contents/images/titlebar.png new file mode 100755 index 0000000000000000000000000000000000000000..51c90082d052a94af34488ca9a13842122f7d7a4 GIT binary patch literal 1436 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 M07*qoM6N<$g3{N*E&u=k literal 0 HcmV?d00001 diff --git a/examples/declarative/canvas/stockchart/contents/images/toolbutton.sci b/examples/declarative/canvas/stockchart/contents/images/toolbutton.sci new file mode 100644 index 0000000..9e4f965 --- /dev/null +++ b/examples/declarative/canvas/stockchart/contents/images/toolbutton.sci @@ -0,0 +1,5 @@ +border.left: 15 +border.top: 4 +border.bottom: 4 +border.right: 15 +source: toolbutton.png diff --git a/examples/declarative/canvas/stockchart/main.cpp b/examples/declarative/canvas/stockchart/main.cpp index e10f287..b1e7630 100644 --- a/examples/declarative/canvas/stockchart/main.cpp +++ b/examples/declarative/canvas/stockchart/main.cpp @@ -56,6 +56,8 @@ int main(int argc, char ** argv) view.showFullScreen(); view.raise(); + QObject::connect((QObject*)view.engine(), SIGNAL(quit()), (QObject*)&app, SLOT(quit())); + return app.exec(); } diff --git a/examples/declarative/canvas/stockchart/model.cpp b/examples/declarative/canvas/stockchart/model.cpp index 5c1e138..018da1c 100644 --- a/examples/declarative/canvas/stockchart/model.cpp +++ b/examples/declarative/canvas/stockchart/model.cpp @@ -116,7 +116,8 @@ void StockModel::doRequest() .arg(dataCycleString()); qDebug() << "request stock data:" << query; - _manager->get(QNetworkRequest(QUrl(query))); + QNetworkReply* reply = _manager->get(QNetworkRequest(QUrl(query))); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), SIGNAL(downloadProgress(qint64,qint64))); } } diff --git a/examples/declarative/canvas/stockchart/model.h b/examples/declarative/canvas/stockchart/model.h index c7a0235..ba5f3a8 100644 --- a/examples/declarative/canvas/stockchart/model.h +++ b/examples/declarative/canvas/stockchart/model.h @@ -142,6 +142,7 @@ signals: void startDateChanged(); void endDateChanged(); void dataCycleChanged(); + void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); public slots: void requestData(); diff --git a/examples/declarative/canvas/stockchart/stock.qml b/examples/declarative/canvas/stockchart/stock.qml index 4117932..5011237 100644 --- a/examples/declarative/canvas/stockchart/stock.qml +++ b/examples/declarative/canvas/stockchart/stock.qml @@ -43,15 +43,44 @@ import "contents" Rectangle { id:container - width: 1920; height: 1440 + width: 1920; height: 1200 + color: "#343434"; + Image { source: "contents/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 1 } + + + TitleBar { + id: titleBar + width: parent.width + anchors.top : container.top + height: 40 + opacity: 0.9 + } + StockModel { id:stockModel dataCycle: StockModel.Daily + function dataCycleName() { + if (dataCycle === StockModel.Weekly) + return "Weekly"; + else if (dataCycle === StockModel.Monthly) + return "Monthly"; + return "Daily"; + } + onDataChanged: { if (view.viewType == "chart") { canvas.requestPaint(); } } + onDownloadProgress: { + if (bytesReceived == bytesTotal && bytesTotal != -1) { + progress.opacity = 0; + } else { + progress.opacity = 0.8; + progress.text = "downloading " + stockModel.dataCycleName() + " data ..."+ Math.round(bytesReceived/1000) + " KB"; + } + } + property string description:""; } @@ -60,27 +89,22 @@ Rectangle { Rectangle { id: header width: parent.width - height: childrenRect.height + height: 20 color: "steelblue" - - Text { - id:t - font.pointSize:15 - horizontalAlignment:Text.AlignHCenter - font.bold: true - font.underline:true - } - - function updateCurrent(price) - { - if (price !== undefined) { - t.text =Qt.formatDate(price.date, "yyyy-MM-dd") + " OPEN:" - + Math.round(price.openPrice*100)/100 + " HIGH:" - + Math.round(price.highPrice*100)/100 + " LOW:" - + Math.round(price.lowPrice*100)/100 + " CLOSE:" - + Math.round(price.closePrice*100)/100 + " VOLUME:" - + price.volume + " ADJ:" - + Math.round(price.adjustedPrice*100)/100; + opacity: 0 + Row { + spacing: 2 + Text { + id:t + font.pointSize:15 + horizontalAlignment:Text.AlignHCenter + font.bold: true + font.underline:true + } + Rectangle { + height:20 + width:50 + Text {text:"Stock list"; font.pointSize:15; font.bold: true} } } } @@ -88,14 +112,20 @@ Rectangle { ListView { id:stockList width: parent.width - height: container.height anchors.bottom: container.bottom + anchors.top : titleBar.bottom focus: true keyNavigationWraps: true spacing:1 opacity: 1 model: stocks + Component.onCompleted: opacity = 0.9; + onOpacityChanged: { + titleBar.title = "Top 100 NASDAQ stocks" + } + + delegate : Rectangle { height: 30 width: view.width @@ -116,6 +146,7 @@ Rectangle { stockModel.description = "NASDAQ:" + stockId + " (" + name + ")"; view.opacity = 1; view.viewType = "chart"; + canvas.opacity = 0.7; } onClicked: stockList.currentIndex = index }//mousearea @@ -147,6 +178,13 @@ Rectangle { property int topIndex:indexAt(0,contentY); property int bottomIndex:indexAt(0, contentY+height); + onCountChanged: { + + titleBar.title = stockModel.description + " " + Qt.formatDate(stockModel.startDate, "yyyy-MM-dd") + " - " + + Qt.formatDate(stockModel.endDate, "yyyy-MM-dd") + " " + stockModel.dataCycleName() + + " records:" + view.count; + + } Component { id: listDelegate @@ -240,21 +278,11 @@ Rectangle { view.orientation = ListView.Horizontal; view.delegate = chartDelegate; //comment.opacity = 0.6; - var dataCycle = "Daily"; - - if (stockModel.dataCycle === StockModel.Weekly) - dataCycle = "Weekly"; - else if (stockModel.dataCycle === StockModel.Monthly) - dataCycle = "Monthly"; - - comment.text = stockModel.description + "\n" + - Qt.formatDate(stockModel.startDate, "yyyy-MM-dd") + " - " + - Qt.formatDate(stockModel.endDate, "yyyy-MM-dd") + " " + dataCycle; view.opacity = 1; view.height = 30 - canvas.opacity = 1; + canvas.opacity = 0.7; canvas.requestPaint(); } else { viewType = "list"; @@ -263,7 +291,7 @@ Rectangle { onCurrentIndexChanged: { - header.updateCurrent(stockModel.stockPriceAtIndex(view.currentIndex)); + //header.updateCurrent(stockModel.stockPriceAtIndex(view.currentIndex)); if (viewType == "chart") { canvas.first = Math.round(view.currentIndex - view.currentIndex / canvas.scaleX); canvas.last = Math.round(view.currentIndex + (view.count - view.currentIndex) / canvas.scaleX); @@ -310,11 +338,12 @@ Rectangle { Canvas { id:canvas - anchors.top : header.bottom + anchors.top : titleBar.bottom anchors.bottom : view.top width:container.width; opacity:0 - + property bool running:false + property int frames:first property int mouseX:0; property int mouseY:0; property int mousePressedX:0; @@ -337,26 +366,85 @@ Rectangle { color:"white" opacity: 0.7 focus:false + text: stockModel.description + function updateCurrent(price) + { + if (price !== undefined) { + text =stockModel.description + "\n" + + Qt.formatDate(price.date, "yyyy-MM-dd") + " OPEN:" + + Math.round(price.openPrice*100)/100 + " HIGH:" + + Math.round(price.highPrice*100)/100 + " LOW:" + + Math.round(price.lowPrice*100)/100 + " CLOSE:" + + Math.round(price.closePrice*100)/100 + " VOLUME:" + + price.volume; + } + } } -// Text { -// id:priceAxis -// x:25 -// y:25 -// font.pointSize: 15 -// color:"yellow" -// opacity: 0.7 -// focus: false -// } -// Text { -// id:volumeAxis -// x:canvas.width - 25 -// y:25 -// font.pointSize: 15 -// color:"yellow" -// opacity: 0.7 -// } + Text { + id:priceAxis + x:25 + y:25 + font.pointSize: 15 + color:"yellow" + opacity: 0.7 + focus: false + } + Text { + id:volumeAxis + x:canvas.width - 200 + y:25 + font.pointSize: 15 + color:"yellow" + opacity: 0.7 + } + Rectangle { + id:progress + x:canvas.width/2 - 100 + y:canvas.height/2 + width:childrenRect.width + height: childrenRect.height + opacity: 0 + color:"white" + property string text; + Text { + text:parent.text + font.pointSize: 20 + } + } + + Button { + id:runButton + text:"Run this chart" + y:0 + x:canvas.width/2 - 50 + opacity: 0.5 + onClicked: { + if (canvas.running) { + canvas.running = false; + canvas.frames = canvas.first; + canvas.requestPaint(); + text = "Run this chart"; + comment.text = stockModel.description; + } else { + text = " Stop running "; + canvas.runChart(); + } + } + } + Button { + id:returnButton + text:"Stocks" + y:0 + anchors.left : runButton.right + anchors.leftMargin : 20 + opacity: 0.5 + onClicked: { + stockList.opacity = 1; + canvas.opacity = 0; + } + } PinchArea { anchors.fill: parent onPinchUpdated : { @@ -441,9 +529,14 @@ Rectangle { } } + function runChart() { + canvas.running = true; + requestPaint(); + } + function showPriceAt(x) { var w = (view.width/view.count)*canvas.scaleX; - header.updateCurrent(stockModel.stockPriceAtIndex(canvas.first + Math.round(x/w))); + //header.updateCurrent(stockModel.stockPriceAtIndex(canvas.first + Math.round(x/w))); //console.log("x:" + x + " w:" + w + " index:" + (canvas.first + Math.round(x/w))); } @@ -455,7 +548,7 @@ Rectangle { ctx.beginPath(); //price x axis -// priceAxis.text = "price:" + Math.round(highest); + priceAxis.text = "price:" + Math.round(highest); ctx.font = "bold 12px sans-serif"; ctx.strokeText("price", 25, 25); @@ -479,7 +572,8 @@ Rectangle { var w = canvas.width/points.length; - for (var i = 0; i < points.length; i++) { + var end = canvas.running? canvas.frames - canvas.first :points.length; + for (var i = 0; i < end; i++) { var x = points[i].x; var y = points[i][price]; y += canvas.movedY; @@ -498,7 +592,8 @@ Rectangle { { ctx.globalAlpha = 0.4; ctx.lineWidth = 2; - for (var i = 0; i < points.length; i++) { + var end = canvas.running? canvas.frames - canvas.first :points.length; + for (var i = 0; i < end; i++) { var x = points[i].x; var open = canvas.height * (1 - points[i].open/highest) - canvas.movedY; var close = canvas.height * (1 - points[i].close/highest) - canvas.movedY; @@ -540,7 +635,7 @@ Rectangle { ctx.lineWidth = 1; //volume x axis -// volumeAxis.text = "volume:" + Math.round(highest); + volumeAxis.text = "volume:" + Math.round(highest/(1000*100)) + "M"; for (var j = 1; j < 30; j++) { var val = (highest * j) / 30; val = canvas.height * (1 - val/highest); @@ -558,7 +653,8 @@ Rectangle { ctx.lineTo(canvas.width - 10, canvas.height); ctx.stroke(); - for (var i = 0; i < points.length; i++) { + var end = canvas.running? canvas.frames - canvas.first :points.length; + for (var i = 0; i < end; i++) { var x = points[i].x; var y = points[i][price]; y = canvas.height * (1 - y/highest); @@ -566,6 +662,27 @@ Rectangle { } } + onPainted : { + if (canvas.running) { + if (frames >= last) { + canvas.running = false; + canvas.frames = first; + runButton.text = "Run this chart"; + comment.text = stockModel.description; + requestPaint(); + } else { + frames += Math.round(view.count / 100); + if (frames > last) frames = last; + var price = stockModel.stockPriceAtIndex(frames); + if (price) { + comment.updateCurrent(price); + } + + requestPaint(); + } + } + } + onPaint: { if (view.currentIndex <= 0) first = 0; diff --git a/examples/declarative/canvas/stockchart/stockchart.pro b/examples/declarative/canvas/stockchart/stockchart.pro index 7101c4c..832b2ea 100644 --- a/examples/declarative/canvas/stockchart/stockchart.pro +++ b/examples/declarative/canvas/stockchart/stockchart.pro @@ -12,4 +12,9 @@ CONFIG += console OTHER_FILES += \ stock.qml \ - contents/Stocks.qml + contents/Stocks.qml \ + contents/ScrollBar.qml \ + contents/TitleBar.qml \ + contents/Button.qml \ + contents/ToolBar.qml + diff --git a/examples/declarative/canvas/stockchart/stockchart.qrc b/examples/declarative/canvas/stockchart/stockchart.qrc index 68702ab..1793bda 100644 --- a/examples/declarative/canvas/stockchart/stockchart.qrc +++ b/examples/declarative/canvas/stockchart/stockchart.qrc @@ -2,6 +2,20 @@ stock.qml contents/Stocks.qml + contents/TitleBar.qml + contents/ToolBar.qml + contents/Button.qml + contents/images/button.png + contents/images/button-pressed.png + contents/images/gloss.png + contents/images/lineedit.png + contents/images/lineedit.sci + contents/images/quit.png + contents/images/stripes.png + contents/images/titlebar.png + contents/images/titlebar.sci + contents/images/toolbutton.png + contents/images/toolbutton.sci -- 2.7.4