Skip to content
Snippets Groups Projects
  • Gus Grubba's avatar
    6940e70c
    Plan View Work · 6940e70c
    Gus Grubba authored
    Toggle Rally Point insertion on/off.
    Highlight current Rally Point and current Waypoint.
    Use tab bar instead of a row of radio buttons for selection (Mission, Fence, Rally).
    Fix QGCHoverButton to handle proper checked state toggle.
    Get rid of the many arrays used to define behaviors for the ToolStrip. They are now all defined within its model.
    Fixed color for disabled text within ToolStrip (it was invisible)
    6940e70c
    History
    Plan View Work
    Gus Grubba authored
    Toggle Rally Point insertion on/off.
    Highlight current Rally Point and current Waypoint.
    Use tab bar instead of a row of radio buttons for selection (Mission, Fence, Rally).
    Fix QGCHoverButton to handle proper checked state toggle.
    Get rid of the many arrays used to define behaviors for the ToolStrip. They are now all defined within its model.
    Fixed color for disabled text within ToolStrip (it was invisible)
ToolStrip.qml 3.77 KiB
/****************************************************************************
 *
 *   (c) 2009-2016 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.11
import QtQuick.Controls 2.2

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0

Rectangle {
    id:         _root
    color:      qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark
    width:      _idealWidth < repeater.contentWidth ? repeater.contentWidth : _idealWidth
    height:     toolStripColumn.height + (toolStripColumn.anchors.margins * 2)
    radius:     ScreenTools.defaultFontPixelWidth / 2

    property alias  model:              repeater.model
    property real   maxHeight           ///< Maximum height for control, determines whether text is hidden to make control shorter

    property AbstractButton lastClickedButton: null

    // Ensure we don't get narrower than content
    property real _idealWidth: (ScreenTools.isMobile ? ScreenTools.minTouchPixels : ScreenTools.defaultFontPixelWidth * 8) + toolStripColumn.anchors.margins * 2

    signal clicked(int index, bool checked)

    function setChecked(idx, check) {
        repeater.itemAt(idx).checked = check
    }

    function getChecked(idx) {
        return repeater.itemAt(idx).checked
    }

    ButtonGroup {
        id:         buttonGroup
        buttons:    toolStripColumn.children
    }

    Column {
        id:                 toolStripColumn
        anchors.margins:    ScreenTools.defaultFontPixelWidth * 0.4
        anchors.top:        parent.top
        anchors.left:       parent.left
        anchors.right:      parent.right
        spacing:            ScreenTools.defaultFontPixelWidth * 0.25

        Repeater {
            id: repeater

            QGCHoverButton {
                id:             buttonTemplate

                anchors.left:   toolStripColumn.left
                anchors.right:  toolStripColumn.right
                height:         width
                radius:         ScreenTools.defaultFontPixelWidth / 2
                fontPointSize:  ScreenTools.smallFontPointSize
                autoExclusive:  true

                enabled:        modelData.buttonEnabled
                visible:        modelData.buttonVisible
                imageSource:    modelData.showAlternateIcon ? modelData.alternateIconSource : modelData.iconSource
                text:           modelData.name
                checked:        modelData.checked !== undefined ? modelData.checked : checked

                ButtonGroup.group: buttonGroup
                // Only drop pannel and toggleable are checkable
                checkable: modelData.dropPanelComponent !== undefined || (modelData.toggle !== undefined && modelData.toggle)

                onClicked: {
                    dropPanel.hide()    // DropPanel will call hide on "lastClickedButton"
                    if (modelData.dropPanelComponent === undefined) {
                        _root.clicked(index, checked)
                    } else if (checked) {
                        var panelEdgeTopPoint = mapToItem(_root, width, 0)
                        dropPanel.show(panelEdgeTopPoint, height, modelData.dropPanelComponent)
                    }
                    if(_root && buttonTemplate)
                        _root.lastClickedButton = buttonTemplate
                }
            }
        }
    }

    DropPanel {
        id:         dropPanel
        toolStrip:  _root
    }
}