Warning, /frameworks/kquickcharts/examples/charts/BarChart.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * This file is part of KQuickCharts
0003  * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 import QtQuick
0009 import QtQuick.Controls
0010 import QtQuick.Layouts
0011 
0012 import org.kde.kirigami as Kirigami
0013 import org.kde.kquickcontrols
0014 
0015 import org.kde.quickcharts as Charts
0016 import org.kde.quickcharts.controls as ChartsControls
0017 
0018 Kirigami.Page {
0019     title: "Bar Chart"
0020 
0021     ListModel {
0022         id: barModel;
0023         dynamicRoles: true;
0024 
0025         Component.onCompleted: {
0026             append({label: "Item 1", value1: 0, value2: 15, value3: 20})
0027             append({label: "Item 2", value1: 10, value2: 25, value3: 25})
0028             append({label: "Item 3", value1: 15, value2: 20, value3: 30})
0029             append({label: "Item 4", value1: 10, value2: 10, value3: 35})
0030             append({label: "Item 5", value1: 20, value2: 5, value3: 40})
0031         }
0032     }
0033 
0034     ColumnLayout {
0035         anchors.fill: parent
0036         anchors.margins: Kirigami.Units.largeSpacing
0037         spacing: Kirigami.Units.largeSpacing
0038 
0039         Kirigami.AbstractCard {
0040             Layout.fillHeight: false
0041             Layout.preferredHeight: 400
0042             Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0043 
0044             ChartsControls.GridLines {
0045                 anchors.fill: barChart
0046 
0047                 chart: barChart
0048 
0049                 major.visible: false
0050 
0051                 minor.count: 4
0052                 minor.lineWidth: 1
0053                 minor.color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
0054             }
0055 
0056             ChartsControls.GridLines {
0057                 anchors.fill: barChart
0058 
0059                 chart: barChart
0060 
0061                 direction: ChartsControls.GridLines.Vertical;
0062 
0063                 major.count: 1
0064                 major.lineWidth: 2
0065                 major.color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
0066 
0067                 minor.count: 3
0068                 minor.lineWidth: 1
0069                 minor.color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
0070             }
0071 
0072             ChartsControls.AxisLabels {
0073                 id: yAxisLabels
0074 
0075                 anchors {
0076                     left: parent.left
0077                     top: parent.top
0078                     bottom: xAxisLabels.top
0079                 }
0080 
0081                 direction: ChartsControls.AxisLabels.VerticalBottomTop
0082                 delegate: Label { text: ChartsControls.AxisLabels.label }
0083                 source: Charts.ChartAxisSource { chart: barChart; axis: Charts.ChartAxisSource.YAxis; itemCount: 5 }
0084             }
0085 
0086             ChartsControls.AxisLabels {
0087                 id: xAxisLabels
0088 
0089                 anchors {
0090                     left: yAxisLabels.right
0091                     right: parent.right
0092                     bottom: legend.top
0093                 }
0094 
0095                 delegate: Label { text: ChartsControls.AxisLabels.label }
0096                 source: Charts.ModelSource { model: barModel; roleName: "label" }
0097             }
0098 
0099             ChartsControls.Legend {
0100                 id: legend
0101 
0102                 anchors {
0103                     left: yAxisLabels.right
0104                     right: parent.right
0105                     bottom: parent.bottom
0106                     bottomMargin: Kirigami.Units.smallSpacing
0107                 }
0108 
0109                 chart: barChart
0110             }
0111 
0112             Charts.BarChart {
0113                 id: barChart
0114                 anchors {
0115                     top: parent.top
0116                     left: yAxisLabels.right
0117                     right: parent.right
0118                     bottom: xAxisLabels.top
0119                 }
0120 
0121                 xRange {
0122                     from: 0
0123                     to: 10
0124                     automatic: true
0125                 }
0126 
0127                 yRange {
0128                     from: 0
0129                     to: 10
0130                     automatic: true
0131                 }
0132 
0133                 valueSources: [
0134                     Charts.ModelSource { roleName: "value1"; model: barModel },
0135                     Charts.ModelSource { roleName: "value2"; model: barModel },
0136                     Charts.ModelSource { roleName: "value3"; model: barModel }
0137                 ]
0138 
0139                 barWidth: 10
0140                 spacing: 2
0141 
0142                 colorSource: Charts.ArraySource { array: ["red", "green", "blue"] }
0143                 nameSource: Charts.ArraySource { array: ["Example 1", "Example 2", "Example 3"] }
0144 
0145                 backgroundColor: Qt.rgba(0.0, 0.0, 0.0, 0.1)
0146 
0147             }
0148         }
0149 
0150         RangeEditor { label: "X Axis"; range: barChart.xRange }
0151         RangeEditor { label: "Y Axis"; range: barChart.yRange }
0152 
0153         RowLayout {
0154             Button { text: "Add Item"; onClicked: barModel.append({label: "New", value1: 0, value2: 0, value3: 0}) }
0155             Button { text: "Remove Item"; onClicked: barModel.remove(barModel.count - 1)}
0156             Label { text: "Bar Width" }
0157             SpinBox { from: -1; to: 1000; value: barChart.barWidth; onValueModified: barChart.barWidth = value; }
0158             Label { text: "Bar Spacing" }
0159             SpinBox { from: 0; to: 100; value: barChart.spacing; onValueModified: barChart.spacing = value; }
0160             CheckBox { text: "Stacked"; checked: barChart.stacked; onToggled: barChart.stacked = checked }
0161             Label { text: "Radius" }
0162             SpinBox { from: 0; to: 1000; value: barChart.radius; onValueModified: barChart.radius = value; }
0163 
0164             ComboBox {
0165                 model: [
0166                     { text: "Vertical", value: Charts.BarChart.VerticalOrientation },
0167                     { text: "Horizontal", value: Charts.BarChart.HorizontalOrientation }
0168                 ]
0169 
0170                 textRole: "text"
0171                 valueRole: "value"
0172 
0173                 onActivated: barChart.orientation = currentValue
0174             }
0175         }
0176 
0177         Frame {
0178             Layout.fillWidth: true
0179             Layout.fillHeight: true
0180 
0181             leftPadding: 1
0182             rightPadding: 1
0183             topPadding: 1
0184             bottomPadding: 1
0185 
0186             Kirigami.Theme.inherit: false
0187             Kirigami.Theme.colorSet: Kirigami.Theme.View
0188 
0189             ScrollView {
0190                 anchors.fill: parent
0191                 ListView {
0192                     model: barModel;
0193                     delegate: ItemDelegate {
0194                         width: ListView.view.width
0195                         height: Kirigami.Units.gridUnit * 2 + Kirigami.Units.smallSpacing
0196                         contentItem: RowLayout {
0197                             Label { text: "Label" }
0198                             TextField {
0199                                 Layout.preferredWidth: 75
0200                                 text: model.label;
0201                                 onEditingFinished: barModel.setProperty(index, "label", text)
0202                             }
0203                             Label { text: "Value 1" }
0204                             SpinBox {
0205                                 Layout.preferredWidth: 75
0206                                 from: -10000; to: 10000;
0207                                 stepSize: 1;
0208                                 value: model.value1;
0209                                 onValueModified: barModel.setProperty(index, "value1", value)
0210                             }
0211                             Label { text: "Value 2" }
0212                             SpinBox {
0213                                 Layout.preferredWidth: 75
0214                                 from: -10000; to: 10000;
0215                                 stepSize: 1;
0216                                 value: model.value2;
0217                                 onValueModified: barModel.setProperty(index, "value2", value)
0218                             }
0219                             Label { text: "Value 3" }
0220                             SpinBox {
0221                                 Layout.preferredWidth: 75
0222                                 from: -10000; to: 10000;
0223                                 stepSize: 1;
0224                                 value: model.value3;
0225                                 onValueModified: barModel.setProperty(index, "value3", value)
0226                             }
0227                         }
0228                     }
0229                 }
0230             }
0231         }
0232     }
0233 }
0234