main.qml Example File

qmlaxisformatter/qml/qmlaxisformatter/main.qml
 /****************************************************************************
 **
 ** Copyright (C) 2016 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the Qt Data Visualization module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:GPL$
 ** Commercial License Usage
 ** Licensees holding valid commercial Qt licenses may use this file in
 ** accordance with the commercial license agreement provided with the
 ** Software or, alternatively, in accordance with the terms contained in
 ** a written agreement between you and The Qt Company. For licensing terms
 ** and conditions see https://www.qt.io/terms-conditions. For further
 ** information use the contact form at https://www.qt.io/contact-us.
 **
 ** GNU General Public License Usage
 ** Alternatively, this file may be used under the terms of the GNU
 ** General Public License version 3 or (at your option) any later version
 ** approved by the KDE Free Qt Foundation. The licenses are as published by
 ** the Free Software Foundation and appearing in the file LICENSE.GPL3
 ** included in the packaging of this file. Please review the following
 ** information to ensure the GNU General Public License requirements will
 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 **
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/

 import QtQuick 2.1
 import QtQuick.Layouts 1.0
 import QtDataVisualization 1.1
 import CustomFormatter 1.0
 import "."

 Rectangle {
     id: mainView
     width: 1280
     height: 1024

     Data {
         id: seriesData
     }

     Theme3D {
         id: themeIsabelle
         type: Theme3D.ThemePrimaryColors
         font.family: "Lucida Handwriting"
         font.pointSize: 40
     }

     ValueAxis3D {
         id: dateAxis
         formatter: CustomFormatter {
             originDate:  "2014-01-01"
             selectionFormat: "yyyy-MM-dd HH:mm:ss"
         }
         subSegmentCount: 2
         labelFormat: "yyyy-MM-dd"
         min: 0
         max: 14
     }

     ValueAxis3D {
         id: logAxis
         formatter: LogValueAxis3DFormatter {
             id: logAxisFormatter
             base: 10
             autoSubGrid: true
             showEdgeLabels: true
         }
         labelFormat: "%.2f"
     }

     ValueAxis3D {
         id: linearAxis
         labelFormat: "%.2f"
         min: 0
         max: 500
     }

     ValueAxis3D {
         id: valueAxis
         segmentCount: 5
         subSegmentCount: 2
         labelFormat: "%.2f"
         min: 0
         max: 10
     }

     Item {
         id: dataView
         anchors.bottom: parent.bottom
         width: parent.width
         height: parent.height - buttonLayout.height

         Scatter3D {
             id: scatterGraph
             width: dataView.width
             height: dataView.height
             theme: themeIsabelle
             shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
             scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricRight
             axisZ: valueAxis
             axisY: logAxis
             axisX: dateAxis

             Scatter3DSeries {
                 id: scatterSeries
                 itemLabelFormat: "@xLabel - (@yLabel, @zLabel)"
                 meshSmooth: true
                 ItemModelScatterDataProxy {
                     itemModel: seriesData.model
                     xPosRole: "xPos"
                     yPosRole: "yPos"
                     zPosRole: "zPos"
                 }
             }
         }
     }

     RowLayout {
         id: buttonLayout
         Layout.minimumHeight: exitButton.height
         width: parent.width
         anchors.left: parent.left
         spacing: 0

         NewButton {
             id: yAxisBaseChange
             Layout.fillHeight: true
             Layout.fillWidth: true
             state: "enabled"
             onClicked: {
                 if (logAxisFormatter.base === 10)
                     logAxisFormatter.base = 0
                 else if (logAxisFormatter.base === 2)
                     logAxisFormatter.base = 10
                 else
                     logAxisFormatter.base = 2
             }
             states: [
                 State {
                     name: "enabled"
                     PropertyChanges {
                         target: yAxisBaseChange
                         text: "Y-axis log base: " + logAxisFormatter.base
                         enabled: true
                     }
                 },
                 State {
                     name: "disabled"
                     PropertyChanges {
                         target: yAxisBaseChange
                         text: "Y-axis linear"
                         enabled: false
                     }
                 }
             ]
         }

         NewButton {
             id: yAxisToggle
             Layout.fillHeight: true
             Layout.fillWidth: true
             text: "Toggle Y-axis"
             onClicked: {
                 if (scatterGraph.axisY === linearAxis) {
                     scatterGraph.axisY = logAxis
                     yAxisBaseChange.state = "enabled"
                 } else {
                     scatterGraph.axisY = linearAxis
                     yAxisBaseChange.state = "disabled"
                 }
             }
         }

         NewButton {
             id: exitButton
             Layout.fillHeight: true
             Layout.fillWidth: true
             text: "Quit"
             onClicked: Qt.quit(0);
         }
     }
 }