350 lines
13 KiB
QML
350 lines
13 KiB
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.0
|
|
import HelperWidgets 2.0
|
|
import QtQuick.Layouts 1.0
|
|
import QtQuick.Controls 1.1 as Controls
|
|
|
|
Column {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
|
|
Section {
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
caption: qsTr("Surface3D")
|
|
|
|
SectionLayout {
|
|
Label {
|
|
text: qsTr("renderingMode")
|
|
tooltip: qsTr("Rendering Mode")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
ComboBox {
|
|
backendValue: backendValues.renderingMode
|
|
model: ["RenderIndirect", "RenderDirectToBackground",
|
|
"RenderDirectToBackground_NoClear"]
|
|
Layout.fillWidth: true
|
|
scope: "AbstractGraph3D"
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("msaaSamples")
|
|
tooltip: qsTr("MSAA Sample Count")
|
|
Layout.fillWidth: true
|
|
}
|
|
SpinBox {
|
|
suffix: " x MSAA"
|
|
backendValue: backendValues.msaaSamples
|
|
minimumValue: 0
|
|
maximumValue: 16
|
|
Layout.fillWidth: true
|
|
}
|
|
Label {
|
|
text: qsTr("shadowQuality")
|
|
tooltip: qsTr("Shadow Quality")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
ComboBox {
|
|
backendValue: backendValues.shadowQuality
|
|
model: ["ShadowQualityNone", "ShadowQualityLow", "ShadowQualityMedium",
|
|
"ShadowQualityHigh", "ShadowQualitySoftLow", "ShadowQualitySoftMedium",
|
|
"ShadowQualitySoftHigh"]
|
|
Layout.fillWidth: true
|
|
scope: "AbstractGraph3D"
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("selectionMode")
|
|
tooltip: qsTr("Selection Mode")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
id: selectionLayout
|
|
property bool isInModel: backendValue.isInModel;
|
|
property bool isInSubState: backendValue.isInSubState;
|
|
property bool selectionChangedFlag: selectionChanged
|
|
property variant backendValue: backendValues.selectionMode
|
|
property variant valueFromBackend: backendValue.value
|
|
property string enumScope: "AbstractGraph3D"
|
|
property string enumSeparator: " | "
|
|
property int checkedCount: 0
|
|
property bool selectionItem: false
|
|
property bool selectionRow: false
|
|
property bool selectionColumn: false
|
|
property bool selectionSlice: false
|
|
property bool selectionMulti: false
|
|
|
|
function checkValue(checkedVariable, variableText, expressionBase) {
|
|
var expressionStr = expressionBase
|
|
if (checkedVariable) {
|
|
if (expressionStr !== "") {
|
|
expressionStr += enumSeparator
|
|
}
|
|
expressionStr += enumScope
|
|
expressionStr += "."
|
|
expressionStr += variableText
|
|
checkedCount++
|
|
}
|
|
return expressionStr
|
|
}
|
|
|
|
function composeSelectionMode() {
|
|
var expressionStr = ""
|
|
checkedCount = 0
|
|
expressionStr = checkValue(selectionItem, "SelectionItem", expressionStr)
|
|
expressionStr = checkValue(selectionRow, "SelectionRow", expressionStr)
|
|
expressionStr = checkValue(selectionColumn, "SelectionColumn", expressionStr)
|
|
expressionStr = checkValue(selectionSlice, "SelectionSlice", expressionStr)
|
|
expressionStr = checkValue(selectionMulti, "SelectionMultiSeries", expressionStr)
|
|
|
|
if (checkedCount === 0)
|
|
backendValue.expression = enumScope + ".SelectionNone"
|
|
else
|
|
backendValue.expression = expressionStr
|
|
}
|
|
|
|
function evaluate() {
|
|
if (backendValue.value === undefined)
|
|
return
|
|
|
|
selectionItem = (backendValue.expression.indexOf("SelectionItem") !== -1)
|
|
selectionRow = (backendValue.expression.indexOf("SelectionRow") !== -1)
|
|
selectionColumn = (backendValue.expression.indexOf("SelectionColumn") !== -1)
|
|
selectionSlice = (backendValue.expression.indexOf("SelectionSlice") !== -1)
|
|
selectionMulti = (backendValue.expression.indexOf("SelectionMultiSeries") !== -1)
|
|
|
|
selectionItemBox.checked = selectionItem
|
|
selectionRowBox.checked = selectionRow
|
|
selectionColumnBox.checked = selectionColumn
|
|
selectionSliceBox.checked = selectionSlice
|
|
selectionMultiSeriesBox.checked = selectionMulti
|
|
}
|
|
|
|
onSelectionChangedFlagChanged: evaluate()
|
|
|
|
onIsInModelChanged: evaluate()
|
|
|
|
onIsInSubStateChanged: evaluate()
|
|
|
|
onBackendValueChanged: evaluate()
|
|
|
|
onValueFromBackendChanged: evaluate()
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
|
|
Controls.CheckBox {
|
|
id: selectionItemBox
|
|
style: checkBox.style
|
|
text: "SelectionItem"
|
|
Layout.fillWidth: true
|
|
onClicked: {
|
|
selectionLayout.selectionItem = checked
|
|
selectionLayout.composeSelectionMode()
|
|
}
|
|
}
|
|
Controls.CheckBox {
|
|
id: selectionRowBox
|
|
style: checkBox.style
|
|
text: "SelectionRow"
|
|
Layout.fillWidth: true
|
|
onClicked: {
|
|
selectionLayout.selectionRow = checked
|
|
selectionLayout.composeSelectionMode()
|
|
}
|
|
}
|
|
Controls.CheckBox {
|
|
id: selectionColumnBox
|
|
style: checkBox.style
|
|
text: "SelectionColumn"
|
|
Layout.fillWidth: true
|
|
onClicked: {
|
|
selectionLayout.selectionColumn = checked
|
|
selectionLayout.composeSelectionMode()
|
|
}
|
|
}
|
|
Controls.CheckBox {
|
|
id: selectionSliceBox
|
|
style: checkBox.style
|
|
text: "SelectionSlice"
|
|
Layout.fillWidth: true
|
|
onClicked: {
|
|
selectionLayout.selectionSlice = checked
|
|
selectionLayout.composeSelectionMode()
|
|
}
|
|
}
|
|
Controls.CheckBox {
|
|
id: selectionMultiSeriesBox
|
|
style: checkBox.style
|
|
text: "SelectionMultiSeries"
|
|
Layout.fillWidth: true
|
|
onClicked: {
|
|
selectionLayout.selectionMulti = checked
|
|
selectionLayout.composeSelectionMode()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("measureFps")
|
|
tooltip: qsTr("Measure Frames Per Second")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
CheckBox {
|
|
backendValue: backendValues.measureFps
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("orthoProjection")
|
|
tooltip: qsTr("Use Orthographic Projection")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
CheckBox {
|
|
backendValue: backendValues.orthoProjection
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("aspectRatio")
|
|
tooltip: qsTr("Horizontal to Vertical Aspect Ratio")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
SpinBox {
|
|
backendValue: backendValues.aspectRatio
|
|
minimumValue: 0.1
|
|
maximumValue: 10.0
|
|
stepSize: 0.1
|
|
decimals: 1
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("flipHorizontalGrid")
|
|
tooltip: qsTr("Flip Horizontal Grid")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
CheckBox {
|
|
backendValue: backendValues.flipHorizontalGrid
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("polar")
|
|
tooltip: qsTr("Use Polar Coordinates")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
CheckBox {
|
|
id: polarCheckbox
|
|
backendValue: backendValues.polar
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("radialLabelOffset")
|
|
tooltip: qsTr("Radial Label Offset")
|
|
Layout.fillWidth: true
|
|
visible: polarCheckbox.checked
|
|
}
|
|
SecondColumnLayout {
|
|
visible: polarCheckbox.checked
|
|
SpinBox {
|
|
backendValue: backendValues.radialLabelOffset
|
|
minimumValue: 0.0
|
|
maximumValue: 1.0
|
|
stepSize: 0.01
|
|
decimals: 2
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("horizontalAspectRatio")
|
|
tooltip: qsTr("Horizontal Aspect Ratio")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
SpinBox {
|
|
backendValue: backendValues.horizontalAspectRatio
|
|
minimumValue: 0.0
|
|
maximumValue: 100.0
|
|
stepSize: 0.01
|
|
decimals: 2
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
Label {
|
|
text: qsTr("margin")
|
|
tooltip: qsTr("Graph Margin")
|
|
Layout.fillWidth: true
|
|
}
|
|
SecondColumnLayout {
|
|
SpinBox {
|
|
backendValue: backendValues.margin
|
|
minimumValue: -1.0
|
|
maximumValue: 100.0
|
|
stepSize: 0.1
|
|
decimals: 1
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
|
|
// Kept for debugging
|
|
Label { }
|
|
SecondColumnLayout {
|
|
TextEdit {
|
|
id: debugLabel
|
|
Layout.fillWidth: true
|
|
wrapMode: TextEdit.WordWrap
|
|
textFormat: TextEdit.RichText
|
|
width: 400
|
|
visible: false
|
|
}
|
|
}
|
|
Controls.CheckBox {
|
|
property color textColor: colorLogic.textColor
|
|
id: checkBox
|
|
style: CustomCheckBoxStyle {}
|
|
visible: false
|
|
ColorLogic {
|
|
id: colorLogic
|
|
backendValue: backendValues.selectionMode
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|