VerticalFactValueGrid.qml 6.32 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

import QtQuick          2.12
import QtQuick.Layouts  1.2
import QtQuick.Controls 2.5
import QtQml            2.12

import QGroundControl.Templates     1.0 as T
import QGroundControl.Controls      1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Controllers   1.0
import QGroundControl.Palette       1.0
import QGroundControl.FlightMap     1.0
import QGroundControl               1.0

// Note: This control will spit out qWarnings like this: "QGridLayoutEngine::addItem: Cell (0, 1) already taken"
// This is due to Qt bug https://bugreports.qt.io/browse/QTBUG-65121
// If this becomes a problem I'll implement our own grid layout control

T.VerticalFactValueGrid {
    id:         _root
    height:     childrenRect.height

    property bool   settingsUnlocked:       false

    QGCPalette { id: qgcPal; colorGroupEnabled: enabled }

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
    QGCFlickable {
        width:              parent.width
        height:             topLevelRowLayout.height
        flickableDirection: QGCFlickable.HorizontalFlick
        contentWidth:       topLevelRowLayout.width

        RowLayout {
            id:         topLevelRowLayout
            spacing:    0

            ColumnLayout {
                spacing: 0

                GridLayout {
                    id:                     valueGrid
                    Layout.minimumWidth:    _root.width - (columnButtons.visible? columnButtons.width + columnSpacing : 0)
                    rows:                   _root.rows.count * 2
                    rowSpacing:             0
                    columnSpacing:          5
54

55 56 57 58 59 60
                    Repeater {
                        model: _root.rows

                        Repeater {
                            id:     labelRepeater
                            model:  object
61

62
                            property real _index: index
63

64 65 66 67 68 69 70 71 72
                            InstrumentValueLabel {
                                Layout.row:             labelRepeater._index * 2
                                Layout.column:          index
                                Layout.fillWidth:       true
                                Layout.alignment:       Qt.AlignHCenter
                                instrumentValueData:    object
                            }
                        }
                    }
73 74

                    Repeater {
75 76 77 78 79
                        model: _root.rows

                        Repeater {
                            id:     valueRepeater
                            model:  object
80

81
                            property real _index: index
82

83 84 85 86 87 88 89
                            InstrumentValueValue {
                                Layout.row:             valueRepeater._index * 2 + 1
                                Layout.column:          index
                                Layout.fillWidth:       true
                                Layout.alignment:       Qt.AlignHCenter
                                instrumentValueData:    object
                            }
90 91 92 93
                        }
                    }
                }

94 95 96 97 98 99 100 101 102 103 104 105 106
                RowLayout {
                    id:                 rowButtons
                    height:             ScreenTools.minTouchPixels / 2
                    Layout.fillWidth:   true
                    spacing:            1
                    visible:            settingsUnlocked

                    QGCButton {
                        Layout.fillWidth:       true
                        Layout.preferredHeight: parent.height
                        text:                   qsTr("+")
                        onClicked:              appendRow()
                    }
107

108 109 110 111 112 113
                    QGCButton {
                        Layout.fillWidth:       true
                        Layout.preferredHeight: parent.height
                        text:                   qsTr("-")
                        enabled:                _root.rows.count > 1
                        onClicked:              deleteLastRow()
114 115 116 117
                    }
                }
            }

118 119 120 121 122 123 124
            ColumnLayout {
                id:                     columnButtons
                Layout.fillHeight:      true
                Layout.bottomMargin:    rowButtons.height
                width:                  ScreenTools.minTouchPixels / 2
                spacing:                1
                visible:                settingsUnlocked
125 126

                QGCButton {
127 128 129
                    Layout.fillHeight:      true
                    Layout.preferredHeight: ScreenTools.minTouchPixels
                    Layout.preferredWidth:  parent.width
130
                    text:                   qsTr("+")
131
                    onClicked:              appendColumn()
132 133 134
                }

                QGCButton {
135 136 137
                    Layout.fillHeight:      true
                    Layout.preferredHeight: ScreenTools.minTouchPixels
                    Layout.preferredWidth:  parent.width
138
                    text:                   qsTr("-")
139 140
                    enabled:                _root.columnCount > 1
                    onClicked:              deleteLastColumn()
141 142 143 144
                }
            }
        }

145 146 147 148 149 150 151 152 153 154 155 156
        QGCMouseArea {
            x:          valueGrid.x
            y:          valueGrid.y
            width:      valueGrid.width
            height:     valueGrid.height
            visible:    settingsUnlocked
            onClicked: {
                var item = valueGrid.childAt(mouse.x, mouse.y)
                //console.log(item, item ? item.instrumentValueData : "null", item && item.parent ? item.parent.instrumentValueData : "null")
                if (item && item.instrumentValueData !== undefined) {
                    mainWindow.showPopupDialogFromComponent(valueEditDialog, { instrumentValueData: item.instrumentValueData })
                }
157 158
            }

159
            /*Rectangle {
160 161 162 163 164
            anchors.fill: parent
            border.color: "green"
            border.width: 1
            color: "transparent"
        }*/
165
        }
166 167 168 169 170 171 172 173 174
    }

    Component {
        id: valueEditDialog

        InstrumentValueEditDialog { }
    }
}