You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.9 KiB
170 lines
5.9 KiB
/**************************************************************************** |
|
* |
|
* (c) 2009-2019 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. |
|
* |
|
* @file |
|
* @author Gus Grubba <gus@auterion.com> |
|
*/ |
|
|
|
import QtQuick 2.11 |
|
import QtQuick.Controls 2.4 |
|
import QtQuick.Layouts 1.11 |
|
|
|
import QGroundControl.Controls 1.0 |
|
import QGroundControl.Palette 1.0 |
|
import QGroundControl.ScreenTools 1.0 |
|
|
|
ComboBox { |
|
id: control |
|
padding: ScreenTools.comboBoxPadding |
|
|
|
property string labelText: qsTr("Options") |
|
|
|
signal itemClicked(int index) |
|
|
|
property var _controlQGCPal: QGCPalette { colorGroupEnabled: enabled } |
|
property bool _flashChecked |
|
property string _flashText |
|
property bool _showFlash: false |
|
|
|
Component.onCompleted: indicator.color = Qt.binding(function() { return _controlQGCPal.text }) |
|
|
|
background: Rectangle { |
|
implicitWidth: ScreenTools.implicitComboBoxWidth |
|
implicitHeight: ScreenTools.implicitComboBoxHeight |
|
color: _controlQGCPal.window |
|
border.width: enabled ? 1 : 0 |
|
border.color: "#999" |
|
} |
|
|
|
/*! Adding the Combobox list item to the theme. */ |
|
|
|
delegate: ItemDelegate { |
|
implicitHeight: modelData.visible ? |
|
(Math.max(background ? background.implicitHeight : 0, Math.max(contentItem.implicitHeight, indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)) : |
|
0 |
|
width: control.width |
|
checkable: true |
|
enabled: modelData.enabled |
|
text: modelData.text |
|
|
|
property var _checkedValue: 1 |
|
property var _uncheckedValue: 0 |
|
property var _itemQGCPal: QGCPalette { colorGroupEnabled: enabled } |
|
property var _control: control |
|
|
|
Binding on checked { value: modelData.fact ? |
|
(modelData.fact.typeIsBool ? (modelData.fact.value === false ? Qt.Unchecked : Qt.Checked) : (modelData.fact.value === 0 ? Qt.Unchecked : Qt.Checked)) : |
|
modelData.checked } |
|
|
|
contentItem: RowLayout { |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
|
|
Rectangle { |
|
height: ScreenTools.defaultFontPixelHeight |
|
width: height |
|
border.color: _itemQGCPal.buttonText |
|
border.width: 1 |
|
color: _itemQGCPal.button |
|
|
|
QGCColoredImage { |
|
anchors.centerIn: parent |
|
width: parent.width * 0.75 |
|
height: width |
|
source: "/qmlimages/checkbox-check.svg" |
|
color: _itemQGCPal.buttonText |
|
mipmap: true |
|
fillMode: Image.PreserveAspectFit |
|
sourceSize.height: height |
|
visible: checked |
|
} |
|
} |
|
|
|
Text { |
|
text: modelData.text |
|
color: _itemQGCPal.buttonText |
|
} |
|
|
|
} |
|
|
|
background: Rectangle { |
|
color: _controlQGCPal.button |
|
} |
|
|
|
onClicked: { |
|
if (modelData.fact) { |
|
modelData.fact.value = (checked ? _checkedValue : _uncheckedValue) |
|
} else { |
|
itemClicked(index) |
|
} |
|
_control._flashChecked = checked |
|
_control._flashText = text |
|
_control._showFlash = true |
|
_control.popup.close() |
|
} |
|
} |
|
|
|
/*! This defines the label of the button. */ |
|
contentItem: Item { |
|
implicitWidth: _showFlash ? flash.implicitWidth : text.implicitWidth |
|
implicitHeight: _showFlash ? flash.implicitHeight : text.implicitHeight |
|
|
|
QGCLabel { |
|
id: text |
|
anchors.verticalCenter: parent.verticalCenter |
|
text: labelText |
|
color: _controlQGCPal.text |
|
visible: !_showFlash |
|
} |
|
|
|
RowLayout { |
|
id: flash |
|
anchors.verticalCenter: parent.verticalCenter |
|
spacing: ScreenTools.defaultFontPixelWidth |
|
visible: _showFlash |
|
|
|
onVisibleChanged: { |
|
if (visible) { |
|
flashTimer.restart() |
|
} |
|
} |
|
|
|
Timer { |
|
id: flashTimer |
|
interval: 1500 |
|
repeat: false |
|
running: false |
|
onTriggered: _showFlash = false |
|
} |
|
|
|
Rectangle { |
|
height: ScreenTools.defaultFontPixelHeight |
|
width: height |
|
border.color: _controlQGCPal.buttonText |
|
border.width: 1 |
|
color: _controlQGCPal.window |
|
|
|
QGCColoredImage { |
|
anchors.centerIn: parent |
|
width: parent.width * 0.75 |
|
height: width |
|
source: "/qmlimages/checkbox-check.svg" |
|
color: _controlQGCPal.text |
|
mipmap: true |
|
fillMode: Image.PreserveAspectFit |
|
sourceSize.height: height |
|
visible: _flashChecked |
|
} |
|
} |
|
|
|
Text { |
|
text: _flashText |
|
color: _controlQGCPal.buttonText |
|
} |
|
|
|
} |
|
} |
|
}
|
|
|