Skip to content

Commit

Permalink
Merge pull request #8652 from mavlink/ValueIconPicker
Browse files Browse the repository at this point in the history
Instrument Values: Icon picker support
  • Loading branch information
DonLakeFlyer authored Apr 11, 2020
2 parents d8ba733 + 43236ab commit fb5fc24
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 32 deletions.
125 changes: 103 additions & 22 deletions src/FlightMap/Widgets/ValuePageWidget.qml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*
****************************************************************************/

import QtQuick 2.3
import QtQuick 2.12
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
Expand Down Expand Up @@ -304,6 +304,12 @@ Column {
anchors.right: parent.right
spacing: _margins

QGCButton {
Layout.fillWidth: true
text: qsTr("Blank Entry")
onClicked: { _valuePickerInstrumentValue.clearFact(); hideDialog() }
}

RowLayout {
Layout.fillWidth: true
spacing: ScreenTools.defaultFontPixelWidth
Expand All @@ -319,55 +325,74 @@ Column {
RowLayout {
spacing: ScreenTools.defaultFontPixelWidth

QGCLabel { text: qsTr("Font Size (for whole row)") }
QGCLabel { text: qsTr("Font Size") }
QGCComboBox {
id: fontSizeCombo
model: _valuePickerInstrumentValue.fontSizeNames
currentIndex: _valuePickerInstrumentValue.fontSize
sizeToContents: true
onActivated: _valuePickerInstrumentValue.fontSize = index
}
QGCCheckBox {
text: qsTr("Show Units")
checked: _valuePickerInstrumentValue.showUnits
onClicked: _valuePickerInstrumentValue.showUnits = checked
}
}

RowLayout {
spacing: ScreenTools.defaultFontPixelWidth

QGCLabel { text: qsTr("Icon") }
QGCComboBox {
model: _valuePickerInstrumentValue.iconNames
sizeToContents: true
onActivated: _valuePickerInstrumentValue.icon = currentText

Component.onCompleted: {
currentIndex = find(_valuePickerInstrumentValue.icon)
if (currentIndex == -1) {
currentIndex = 0
}
Rectangle {
height: iconPositionCombo.height
width: noIconLabel.width + ScreenTools.defaultFontPixelWidth * 2
color: qgcPal.window
border.color: qgcPal.text
visible: !_valuePickerInstrumentValue.icon

QGCLabel {
id: noIconLabel
anchors.centerIn: parent
text: qsTr("No Icon")
}
}
}

RowLayout {
spacing: ScreenTools.defaultFontPixelWidth
QGCColoredImage {
height: iconPositionCombo.height
width: height
source: _valuePickerInstrumentValue.icon ? "/InstrumentValueIcons/" + _valuePickerInstrumentValue.icon : ""
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: qgcPal.text
visible: _valuePickerInstrumentValue.icon
}

QGCLabel { text: qsTr("Icon Position") }
QGCComboBox {
id: iconPositionCombo
model: _valuePickerInstrumentValue.iconPositionNames
currentIndex: _valuePickerInstrumentValue.iconPosition
sizeToContents: true
onActivated: _valuePickerInstrumentValue.iconPosition = index
}
}

QGCCheckBox {
text: qsTr("Show Units")
checked: _valuePickerInstrumentValue.showUnits
onClicked: _valuePickerInstrumentValue.showUnits = checked
SectionHeader {
id: iconListHeader
Layout.fillWidth: true
text: qsTr("Icons")
checked: false
}

QGCButton {
text: qsTr("Blank Entry")
onClicked: { _valuePickerInstrumentValue.clearFact(); hideDialog() }
Item { width: 1; height: 1 }

Loader {
Layout.fillWidth: true
sourceComponent: iconListHeader.checked ? iconList : undefined
visible: iconListHeader.checked
}

Loader {
Expand All @@ -394,6 +419,62 @@ Column {
}
}

Component {
id: iconList

Flow {
Rectangle {
height: ScreenTools.minTouchPixels
width: noIconLabel.width + ScreenTools.defaultFontPixelWidth * 2
color: isNoIcon ? qgcPal.text : qgcPal.window
border.color: isNoIcon ? qgcPal.window : qgcPal.text

property bool isNoIcon: _valuePickerInstrumentValue.icon === ""

QGCLabel {
id: noIconLabel
anchors.centerIn: parent
color: parent.isNoIcon ? qgcPal.window : qgcPal.text
text: qsTr("No Icon")
}

MouseArea {
anchors.fill: parent
onClicked: _valuePickerInstrumentValue.icon = ""
}
}

Repeater {
model: _valuePickerInstrumentValue.iconNames

Rectangle {
height: ScreenTools.minTouchPixels
width: height
color: currentSelection ? qgcPal.text : qgcPal.window

property bool currentSelection: _valuePickerInstrumentValue.icon == modelData

QGCColoredImage {
anchors.centerIn: parent
height: parent.height * 0.75
width: height
source: "/InstrumentValueIcons/" + modelData
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: currentSelection ? qgcPal.window : qgcPal.text

MouseArea {
anchors.fill: parent
onClicked: _valuePickerInstrumentValue.icon = modelData
}
}
}
}
}
}

Component {
id: factGroupList

Expand Down
11 changes: 3 additions & 8 deletions src/FlightMap/Widgets/ValuesWidgetController.cc
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ const char* InstrumentValue::_iconPositionKey = "iconPosition";

QStringList InstrumentValue::_iconNames;

const QString InstrumentValue::_noIconName = QT_TRANSLATE_NOOP("InstrumentValue", "No Icon");

// Important: The indices of these strings must match the InstrumentValue::IconPosition enumconst QStringList InstrumentValue::_iconPositionNames = {
const QStringList InstrumentValue::_iconPositionNames = {
QT_TRANSLATE_NOOP("InstrumentValue", "Above"),
Expand Down Expand Up @@ -343,7 +341,6 @@ InstrumentValue::InstrumentValue(Vehicle* activeVehicle, FontSize fontSize, QmlO
if (_iconNames.isEmpty()) {
QDir iconDir(":/InstrumentValueIcons/");
_iconNames = iconDir.entryList();
_iconNames.prepend(_noIconName);
}
}

Expand Down Expand Up @@ -482,22 +479,20 @@ void InstrumentValue::clearFact(void)
_fact = nullptr;
_factGroupName.clear();
_label.clear();
_icon.clear();
_showUnits = true;

emit factChanged (_fact);
emit factGroupNameChanged (_factGroupName);
emit labelChanged (_label);
emit iconChanged (_icon);
emit showUnitsChanged (_showUnits);
}

void InstrumentValue::setIcon(const QString& icon)
{
if (icon != _icon) {
if (icon == _noIconName) {
_icon.clear();
} else {
_icon = icon;
}
_icon = icon;
emit iconChanged(_icon);
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/FlightMap/Widgets/ValuesWidgetController.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,6 @@ class InstrumentValue : public QObject
static const char* _showUnitsKey;
static const char* _iconKey;
static const char* _iconPositionKey;

static const QString _noIconName;
};

Q_DECLARE_METATYPE(InstrumentValue::FontSize)
Expand Down

0 comments on commit fb5fc24

Please sign in to comment.