mirror of
https://github.com/lubosz/overte.git
synced 2025-04-13 06:42:10 +02:00
Button prefs and conditionally enabled prefs
This commit is contained in:
parent
858bbbf987
commit
71ae36f5c0
13 changed files with 96 additions and 17 deletions
|
@ -1,7 +1,6 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "."
|
||||
import "../../../dialogs"
|
||||
|
||||
Preference {
|
||||
|
@ -45,6 +44,7 @@ Preference {
|
|||
|
||||
Text {
|
||||
id: labelText
|
||||
color: enabled ? "black" : "gray"
|
||||
text: root.label
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "."
|
||||
import "../../../dialogs"
|
||||
|
||||
Preference {
|
||||
|
@ -23,6 +22,7 @@ Preference {
|
|||
|
||||
Text {
|
||||
id: labelText
|
||||
color: enabled ? "black" : "gray"
|
||||
text: root.label
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4 as Original
|
||||
|
||||
import "."
|
||||
import "../../../dialogs"
|
||||
|
||||
Preference {
|
||||
id: root
|
||||
height: button.height
|
||||
|
||||
Component.onCompleted: button.text = preference.name;
|
||||
|
||||
function save() { }
|
||||
|
||||
Original.Button {
|
||||
id: button
|
||||
onClicked: preference.trigger()
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ Preference {
|
|||
|
||||
Component.onCompleted: {
|
||||
checkBox.checked = preference.value;
|
||||
preference.value = Qt.binding(function(){ return checkBox.checked; });
|
||||
}
|
||||
|
||||
function save() {
|
|
@ -17,6 +17,7 @@ Preference {
|
|||
|
||||
Text {
|
||||
id: labelText
|
||||
color: enabled ? "black" : "gray"
|
||||
text: root.label
|
||||
}
|
||||
|
|
@ -6,7 +6,12 @@ Item {
|
|||
anchors { left: parent.left; right: parent.right }
|
||||
property var preference;
|
||||
property string label: preference ? preference.name : "";
|
||||
Component.onCompleted: if (preference) { preference.load(); }
|
||||
Component.onCompleted: {
|
||||
if (preference) {
|
||||
preference.load();
|
||||
enabled = Qt.binding(function() { return preference.enabled; } );
|
||||
}
|
||||
}
|
||||
|
||||
function restore() { }
|
||||
}
|
||||
|
|
|
@ -70,12 +70,13 @@ Preference {
|
|||
|
||||
QtObject {
|
||||
id: d
|
||||
property var editableBuilder: Component { Editable { } }
|
||||
property var browsableBuilder: Component { Browsable { } }
|
||||
property var spinnerBuilder: Component { SpinBox { } }
|
||||
property var checkboxBuilder: Component { CheckBox { } }
|
||||
property var sliderBuilder: Component { Slider { } }
|
||||
property var avatarBuilder: Component { Avatar { } }
|
||||
property var editableBuilder: Component { EditablePreference { } }
|
||||
property var browsableBuilder: Component { BrowsablePreference { } }
|
||||
property var spinnerBuilder: Component { SpinBoxPreference { } }
|
||||
property var checkboxBuilder: Component { CheckBoxPreference { } }
|
||||
property var sliderBuilder: Component { SliderPreference { } }
|
||||
property var avatarBuilder: Component { AvatarPreference { } }
|
||||
property var buttonBuilder: Component { ButtonPreference { } }
|
||||
property var preferences: []
|
||||
|
||||
function buildPreferences() {
|
||||
|
@ -115,6 +116,10 @@ Preference {
|
|||
case Preference.Avatar:
|
||||
builder = avatarBuilder;
|
||||
break;
|
||||
|
||||
case Preference.Button:
|
||||
builder = buttonBuilder;
|
||||
break
|
||||
};
|
||||
|
||||
if (builder) {
|
||||
|
|
|
@ -20,6 +20,7 @@ Preference {
|
|||
|
||||
Text {
|
||||
text: root.label
|
||||
color: enabled ? "black" : "gray"
|
||||
anchors.verticalCenter: slider.verticalCenter
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ Preference {
|
|||
|
||||
Text {
|
||||
text: root.label
|
||||
color: root.enabled ? "black" : "gray"
|
||||
anchors.verticalCenter: spinner.verticalCenter
|
||||
}
|
||||
|
|
@ -77,8 +77,9 @@ void setupPreferences() {
|
|||
preferences->addPreference(new BrowsePreference("Scripts", "Load scripts from this directory:", getter, setter));
|
||||
}
|
||||
|
||||
preferences->addPreference(new ButtonPreference("Scripts", "Load Default Scripts"));
|
||||
|
||||
preferences->addPreference(new ButtonPreference("Scripts", "Load Default Scripts", [] {
|
||||
DependencyManager::get<ScriptEngines>()->loadDefaultScripts();
|
||||
}));
|
||||
|
||||
{
|
||||
auto getter = []()->bool {return !Menu::getInstance()->isOptionChecked(MenuOption::DisableActivityLogger); };
|
||||
|
@ -87,10 +88,11 @@ void setupPreferences() {
|
|||
}
|
||||
|
||||
static const QString LOD_TUNING("Level of Detail Tuning");
|
||||
CheckPreference* acuityToggle;
|
||||
{
|
||||
auto getter = []()->bool { return DependencyManager::get<LODManager>()->getUseAcuity(); };
|
||||
auto setter = [](bool value) { DependencyManager::get<LODManager>()->setUseAcuity(value); };
|
||||
preferences->addPreference(new CheckPreference(LOD_TUNING, "Render based on visual acuity", getter, setter));
|
||||
preferences->addPreference(acuityToggle = new CheckPreference(LOD_TUNING, "Render based on visual acuity", getter, setter));
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -100,6 +102,7 @@ void setupPreferences() {
|
|||
preference->setMin(0);
|
||||
preference->setMax(120);
|
||||
preference->setStep(1);
|
||||
preference->setEnabler(acuityToggle);
|
||||
preferences->addPreference(preference);
|
||||
}
|
||||
|
||||
|
@ -110,6 +113,7 @@ void setupPreferences() {
|
|||
preference->setMin(0);
|
||||
preference->setMax(120);
|
||||
preference->setStep(1);
|
||||
preference->setEnabler(acuityToggle);
|
||||
preferences->addPreference(preference);
|
||||
}
|
||||
|
||||
|
@ -120,6 +124,7 @@ void setupPreferences() {
|
|||
preference->setMin(5);
|
||||
preference->setMax(32768);
|
||||
preference->setStep(1);
|
||||
preference->setEnabler(acuityToggle, true);
|
||||
preferences->addPreference(preference);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,3 +28,24 @@ void Preferences::addPreference(Preference* preference) {
|
|||
_preferencesByCategory[category] = categoryPreferences;
|
||||
}
|
||||
|
||||
void Preference::setEnabler(BoolPreference* enabler, bool inverse) {
|
||||
if (_enabler) {
|
||||
disconnect(_enabler);
|
||||
_enabler = nullptr;
|
||||
}
|
||||
|
||||
_enabler = enabler;
|
||||
_enablerInverted = inverse;
|
||||
if (_enabler) {
|
||||
connect(_enabler, &BoolPreference::valueChanged, this, &Preference::onEnablerValueChanged);
|
||||
onEnablerValueChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void Preference::onEnablerValueChanged() {
|
||||
bool value = _enabler->getValue();
|
||||
if (_enablerInverted) {
|
||||
value = !value;
|
||||
}
|
||||
setEnabled(value);
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ private:
|
|||
QList<QString> _categories;
|
||||
};
|
||||
|
||||
class BoolPreference;
|
||||
|
||||
class Preference : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString category READ getCategory CONSTANT)
|
||||
|
@ -73,6 +75,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void setEnabler(BoolPreference* enabler, bool inverse = false);
|
||||
|
||||
virtual Type getType() { return Invalid; };
|
||||
|
||||
Q_INVOKABLE virtual void load() {};
|
||||
|
@ -81,21 +85,30 @@ public:
|
|||
signals:
|
||||
void enabledChanged();
|
||||
|
||||
private slots:
|
||||
void onEnablerValueChanged();
|
||||
|
||||
protected:
|
||||
virtual void emitValueChanged() {};
|
||||
|
||||
BoolPreference* _enabler { nullptr };
|
||||
const QString _category;
|
||||
const QString _name;
|
||||
bool _enabled { true };
|
||||
bool _enablerInverted { false };
|
||||
};
|
||||
|
||||
class ButtonPreference : public Preference {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ButtonPreference(const QString& category, const QString& name)
|
||||
: Preference(category, name) { }
|
||||
using Lambda = std::function<void()>;
|
||||
ButtonPreference(const QString& category, const QString& name, Lambda triggerHandler)
|
||||
: Preference(category, name), _triggerHandler(triggerHandler) { }
|
||||
Type getType() { return Button; }
|
||||
Q_INVOKABLE void trigger() { _triggerHandler(); }
|
||||
|
||||
protected:
|
||||
const Lambda _triggerHandler;
|
||||
};
|
||||
|
||||
|
||||
|
@ -108,7 +121,7 @@ public:
|
|||
TypedPreference(const QString& category, const QString& name, Getter getter, Setter setter)
|
||||
: Preference(category, name), _getter(getter), _setter(setter) { }
|
||||
|
||||
T getValue() const { return _getter(); }
|
||||
T getValue() const { return _value; }
|
||||
void setValue(const T& value) { if (_value != value) { _value = value; emitValueChanged(); } }
|
||||
void load() override { _value = _getter(); }
|
||||
void save() const override {
|
||||
|
|
|
@ -96,12 +96,19 @@ DISTFILES += \
|
|||
../../interface/resources/qml/hifi/dialogs/preferences/Editable.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/Slider.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/Preference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/SpinBox.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/CheckBox.qml \
|
||||
../../interface/resources/qml/dialogs/fileDialog/FileTableView.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/Avatar.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/AvatarBrowser.qml \
|
||||
../../interface/resources/qml/dialogs/QueryDialog.qml
|
||||
../../interface/resources/qml/dialogs/QueryDialog.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/Button.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/AvatarPreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/BrowsablePreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/ButtonPreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/CheckBoxPreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/EditablePreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/SliderPreference.qml \
|
||||
../../interface/resources/qml/hifi/dialogs/preferences/SpinBoxPreference.qml
|
||||
|
||||
HEADERS += \
|
||||
../../libraries/ui/src/FileDialogHelper.h
|
||||
|
|
Loading…
Reference in a new issue