From 72838f6d34f8375501c7facdb1af94b0ac99c5f5 Mon Sep 17 00:00:00 2001 From: vladest Date: Wed, 16 May 2018 17:06:31 +0200 Subject: [PATCH] Implemented radio button preferences. Reimplemented snap smooth turn to radio buttons --- .../preferences/RadioButtonsPreference.qml | 57 +++++++++++++++++++ .../qml/dialogs/preferences/Section.qml | 5 ++ .../tabletWindows/preferences/Section.qml | 5 ++ interface/src/ui/PreferencesDialog.cpp | 10 +++- libraries/shared/src/Preferences.h | 17 +++++- 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 interface/resources/qml/dialogs/preferences/RadioButtonsPreference.qml diff --git a/interface/resources/qml/dialogs/preferences/RadioButtonsPreference.qml b/interface/resources/qml/dialogs/preferences/RadioButtonsPreference.qml new file mode 100644 index 0000000000..77c94c2ae5 --- /dev/null +++ b/interface/resources/qml/dialogs/preferences/RadioButtonsPreference.qml @@ -0,0 +1,57 @@ +// +// RadioButtonsPreference.qml +// +// Created by Cain Kilgore on 20th July 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 + +import "../../controls-uit" + +Preference { + id: root + + height: control.height + hifi.dimensions.controlInterlineHeight + + Component.onCompleted: { + repeater.itemAt(preference.value).checked = true + } + + function save() { + var value = 0; + for (var i = 0; i < repeater.count; i++) { + if (repeater.itemAt(i).checked) { + value = i; + break; + } + } + preference.value = value; + preference.save(); + } + + Row { + id: control + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + spacing: 5 + + Repeater { + id: repeater + model: preference.items.length + delegate: RadioButton { + text: preference.items[index] + anchors { + verticalCenter: parent.verticalCenter + } + colorScheme: hifi.colorSchemes.dark + } + } + } +} diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index 4a16036a69..0284af9d9c 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -74,6 +74,7 @@ Preference { property var comboBoxBuilder: Component { ComboBoxPreference { } } property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var primaryHandBuilder: Component { PrimaryHandPreference { } } + property var radioButtonsBuilder: Component { RadioButtonsPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -140,6 +141,10 @@ Preference { checkBoxCount++; builder = primaryHandBuilder; break; + case Preference.RadioButtons: + checkBoxCount++; + builder = radioButtonsBuilder; + break; }; if (builder) { diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index 5036569031..15db58decc 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -82,6 +82,7 @@ Preference { property var comboBoxBuilder: Component { ComboBoxPreference { } } property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var primaryHandBuilder: Component { PrimaryHandPreference { } } + property var radioButtonsBuilder: Component { RadioButtonsPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -154,6 +155,10 @@ Preference { checkBoxCount++; builder = primaryHandBuilder; break; + case Preference.RadioButtons: + checkBoxCount++; + builder = radioButtonsBuilder; + break; }; if (builder) { diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 3d23a371b5..e338c28bed 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -274,9 +274,13 @@ void setupPreferences() { preferences->addPreference(new CheckPreference(MOVEMENT, "Flying & jumping", getter, setter)); } { - auto getter = [=]()->bool { return myAvatar->getSnapTurn(); }; - auto setter = [=](bool value) { myAvatar->setSnapTurn(value); }; - preferences->addPreference(new CheckPreference(MOVEMENT, "Snap turn / Smooth turn", getter, setter)); + auto getter = [=]()->int { return myAvatar->getSnapTurn() ? 0 : 1; }; + auto setter = [=](int value) { myAvatar->setSnapTurn(value == 0); }; + auto preference = new RadioButtonsPreference(MOVEMENT, "Snap turn / Smooth turn", getter, setter); + QStringList items; + items << "Snap turn" << "Smooth turn"; + preference->setItems(items); + preferences->addPreference(preference); } { auto getter = [=]()->float { return myAvatar->getUserHeight(); }; diff --git a/libraries/shared/src/Preferences.h b/libraries/shared/src/Preferences.h index 76d61fe3f6..931508e825 100644 --- a/libraries/shared/src/Preferences.h +++ b/libraries/shared/src/Preferences.h @@ -58,7 +58,8 @@ public: ComboBox, PrimaryHand, // Special casing for an unusual preference - Avatar + Avatar, + RadioButtons }; explicit Preference(QObject* parent = nullptr) : QObject(parent) {} @@ -353,6 +354,20 @@ public: Type getType() override { return PrimaryHand; } }; +class RadioButtonsPreference : public IntPreference { + Q_OBJECT + Q_PROPERTY(QStringList items READ getItems CONSTANT) +public: + RadioButtonsPreference(const QString& category, const QString& name, Getter getter, Setter setter) + : IntPreference(category, name, getter, setter) { } + Type getType() override { return RadioButtons; } + + const QStringList& getItems() { return _items; } + void setItems(const QStringList& items) { _items = items; } + +protected: + QStringList _items; +}; #endif