mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 11:19:54 +02:00
More menu work
This commit is contained in:
parent
fbdb9b143e
commit
ee30588fd4
14 changed files with 1376 additions and 199 deletions
|
@ -1,20 +0,0 @@
|
||||||
import QtQuick 2.4
|
|
||||||
import QtQuick.Controls 1.3
|
|
||||||
|
|
||||||
Action {
|
|
||||||
property string name
|
|
||||||
objectName: name + "HifiAction"
|
|
||||||
text: qsTr(name)
|
|
||||||
|
|
||||||
signal triggeredByName(string name);
|
|
||||||
signal toggledByName(string name);
|
|
||||||
|
|
||||||
onTriggered: {
|
|
||||||
triggeredByName(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
onToggled: {
|
|
||||||
toggledByName(name, checked);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Hifi.HifiMenu {
|
||||||
|
|
||||||
onEnabledChanged: {
|
onEnabledChanged: {
|
||||||
if (enabled && columns.length == 0) {
|
if (enabled && columns.length == 0) {
|
||||||
pushColumn(rootMenu.items);
|
pushColumn(rootMenu.menus);
|
||||||
}
|
}
|
||||||
opacity = enabled ? 1.0 : 0.0
|
opacity = enabled ? 1.0 : 0.0
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
@ -42,9 +42,95 @@ Hifi.HifiMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
property var menu: Menu {}
|
|
||||||
property var models: []
|
property var models: []
|
||||||
property var columns: []
|
property var columns: []
|
||||||
|
|
||||||
|
property var menuBuilder: Component {
|
||||||
|
Border {
|
||||||
|
SystemPalette { id: sysPalette; colorGroup: SystemPalette.Active }
|
||||||
|
x: root.models.length == 1 ?
|
||||||
|
(root.width / 2 - width / 2) :
|
||||||
|
root.columns[root.models.length - 2].x + 60;
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
border.color: hifiPalette.hifiBlue
|
||||||
|
color: sysPalette.window
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
spacing: 6
|
||||||
|
property int outerMargin: 8
|
||||||
|
property real minWidth: 0
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: outerMargin
|
||||||
|
id: listView
|
||||||
|
height: root.height
|
||||||
|
currentIndex: -1
|
||||||
|
|
||||||
|
onCountChanged: {
|
||||||
|
recalculateSize()
|
||||||
|
}
|
||||||
|
|
||||||
|
function recalculateSize() {
|
||||||
|
var newHeight = 0
|
||||||
|
var newWidth = minWidth;
|
||||||
|
for (var i = 0; i < children.length; ++i) {
|
||||||
|
var item = children[i];
|
||||||
|
newHeight += item.height
|
||||||
|
}
|
||||||
|
parent.height = newHeight + outerMargin * 2;
|
||||||
|
parent.width = newWidth + outerMargin * 2
|
||||||
|
}
|
||||||
|
|
||||||
|
highlight: Rectangle {
|
||||||
|
width: listView.minWidth - 32;
|
||||||
|
height: 32
|
||||||
|
color: sysPalette.highlight
|
||||||
|
y: (listView.currentItem) ? listView.currentItem.y : 0;
|
||||||
|
x: 32
|
||||||
|
Behavior on y {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: 100
|
||||||
|
easing.type: Easing.InOutQuint
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
property int columnIndex: root.models.length - 1
|
||||||
|
model: root.models[columnIndex]
|
||||||
|
delegate: Loader {
|
||||||
|
id: loader
|
||||||
|
sourceComponent: root.itemBuilder
|
||||||
|
Binding {
|
||||||
|
target: loader.item
|
||||||
|
property: "root"
|
||||||
|
value: root
|
||||||
|
when: loader.status == Loader.Ready
|
||||||
|
}
|
||||||
|
Binding {
|
||||||
|
target: loader.item
|
||||||
|
property: "source"
|
||||||
|
value: modelData
|
||||||
|
when: loader.status == Loader.Ready
|
||||||
|
}
|
||||||
|
Binding {
|
||||||
|
target: loader.item
|
||||||
|
property: "listViewIndex"
|
||||||
|
value: index
|
||||||
|
when: loader.status == Loader.Ready
|
||||||
|
}
|
||||||
|
Binding {
|
||||||
|
target: loader.item
|
||||||
|
property: "listView"
|
||||||
|
value: listView
|
||||||
|
when: loader.status == Loader.Ready
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
property var itemBuilder: Component {
|
property var itemBuilder: Component {
|
||||||
Text {
|
Text {
|
||||||
SystemPalette { id: sp; colorGroup: SystemPalette.Active }
|
SystemPalette { id: sp; colorGroup: SystemPalette.Active }
|
||||||
|
@ -93,6 +179,8 @@ Hifi.HifiMenu {
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
acceptedButtons: Qt.LeftButton
|
acceptedButtons: Qt.LeftButton
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: -32
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.bottomMargin: 0
|
anchors.bottomMargin: 0
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
@ -107,91 +195,6 @@ Hifi.HifiMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
property var menuBuilder: Component {
|
|
||||||
Border {
|
|
||||||
SystemPalette { id: sysPalette; colorGroup: SystemPalette.Active }
|
|
||||||
x: root.models.length == 1 ?
|
|
||||||
(root.width / 2 - width / 2) :
|
|
||||||
root.columns[root.models.length - 2].x + 60;
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
border.color: hifiPalette.hifiBlue
|
|
||||||
color: sysPalette.window
|
|
||||||
|
|
||||||
ListView {
|
|
||||||
spacing: 6
|
|
||||||
property int outerMargin: 8
|
|
||||||
property real minWidth: 0
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: outerMargin
|
|
||||||
id: listView
|
|
||||||
height: root.height
|
|
||||||
currentIndex: -1
|
|
||||||
|
|
||||||
onCountChanged: {
|
|
||||||
recalculateSize()
|
|
||||||
}
|
|
||||||
|
|
||||||
function recalculateSize() {
|
|
||||||
var newHeight = 0
|
|
||||||
var newWidth = minWidth;
|
|
||||||
for (var i = 0; i < children.length; ++i) {
|
|
||||||
var item = children[i];
|
|
||||||
newHeight += item.height
|
|
||||||
}
|
|
||||||
parent.height = newHeight + outerMargin * 2;
|
|
||||||
parent.width = newWidth + outerMargin * 2
|
|
||||||
}
|
|
||||||
|
|
||||||
highlight: Rectangle {
|
|
||||||
width: listView.minWidth; height: 32
|
|
||||||
color: sysPalette.highlight
|
|
||||||
y: (listView.currentItem) ? listView.currentItem.y : 0;
|
|
||||||
x: 32
|
|
||||||
Behavior on y {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 100
|
|
||||||
easing.type: Easing.InOutQuint
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
property int columnIndex: root.models.length - 1
|
|
||||||
model: root.models[columnIndex]
|
|
||||||
delegate: Loader {
|
|
||||||
id: loader
|
|
||||||
sourceComponent: root.itemBuilder
|
|
||||||
Binding {
|
|
||||||
target: loader.item
|
|
||||||
property: "root"
|
|
||||||
value: root
|
|
||||||
when: loader.status == Loader.Ready
|
|
||||||
}
|
|
||||||
Binding {
|
|
||||||
target: loader.item
|
|
||||||
property: "source"
|
|
||||||
value: modelData
|
|
||||||
when: loader.status == Loader.Ready
|
|
||||||
}
|
|
||||||
Binding {
|
|
||||||
target: loader.item
|
|
||||||
property: "listViewIndex"
|
|
||||||
value: index
|
|
||||||
when: loader.status == Loader.Ready
|
|
||||||
}
|
|
||||||
Binding {
|
|
||||||
target: loader.item
|
|
||||||
property: "listView"
|
|
||||||
value: listView
|
|
||||||
when: loader.status == Loader.Ready
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function lastColumn() {
|
function lastColumn() {
|
||||||
return columns[root.columns.length - 1];
|
return columns[root.columns.length - 1];
|
||||||
|
|
1072
interface/resources/qml/Menu.qml
Normal file
1072
interface/resources/qml/Menu.qml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -761,17 +761,6 @@ void Application::initializeGL() {
|
||||||
InfoView::showFirstTime(INFO_HELP_PATH);
|
InfoView::showFirstTime(INFO_HELP_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
class OAuthFactory : public QQmlNetworkAccessManagerFactory {
|
|
||||||
QThreadStorage<OAuthNetworkAccessManager*> oauthNetworkAccessManagers;
|
|
||||||
public:
|
|
||||||
virtual QNetworkAccessManager * create(QObject * parent) {
|
|
||||||
if (!oauthNetworkAccessManagers.hasLocalData()) {
|
|
||||||
oauthNetworkAccessManagers.setLocalData(OAuthNetworkAccessManager::getInstance());
|
|
||||||
}
|
|
||||||
return oauthNetworkAccessManagers.localData();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void Application::initializeUi() {
|
void Application::initializeUi() {
|
||||||
AddressBarDialog::registerType();
|
AddressBarDialog::registerType();
|
||||||
LoginDialog::registerType();
|
LoginDialog::registerType();
|
||||||
|
|
|
@ -35,8 +35,8 @@ void LoginDialog::toggleAction() {
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// change the menu item to login
|
// change the menu item to login
|
||||||
loginAction->setText("Login");
|
menu->setOptionText(MenuOption::Login, "Login");
|
||||||
connect(loginAction, &QAction::triggered, [] {
|
menu->setOptionTriggerAction(MenuOption::Login, [] {
|
||||||
LoginDialog::show();
|
LoginDialog::show();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "MarketplaceDialog.h"
|
#include "MarketplaceDialog.h"
|
||||||
#include "DependencyManager.h"
|
#include "DependencyManager.h"
|
||||||
|
|
||||||
QML_DIALOG_DEF(MarketplaceDialog)
|
HIFI_QML_DEF(MarketplaceDialog)
|
||||||
|
|
||||||
|
|
||||||
MarketplaceDialog::MarketplaceDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) {
|
MarketplaceDialog::MarketplaceDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) {
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
class MarketplaceDialog : public OffscreenQmlDialog
|
class MarketplaceDialog : public OffscreenQmlDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
QML_DIALOG_DECL
|
HIFI_QML_DECL
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MarketplaceDialog(QQuickItem *parent = 0);
|
MarketplaceDialog(QQuickItem *parent = 0);
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
//
|
|
||||||
// MenuQml.cpp
|
|
||||||
//
|
|
||||||
// Created by Bradley Austin Davis on 2015/04/14
|
|
||||||
// Copyright 2015 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
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "Application.h"
|
|
||||||
#include "MenuQml.h"
|
|
||||||
|
|
||||||
QML_DIALOG_DEF(MenuQml)
|
|
||||||
|
|
||||||
MenuQml::MenuQml(QQuickItem *parent) : QQuickItem(parent) {
|
|
||||||
auto menu = Menu::getInstance();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
//
|
|
||||||
// MenuQml.h
|
|
||||||
//
|
|
||||||
// Created by Bradley Austin Davis on 2015/04/14
|
|
||||||
// Copyright 2015 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
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#ifndef hifi_MenuQml_h
|
|
||||||
#define hifi_MenuQml_h
|
|
||||||
|
|
||||||
#include <OffscreenQmlDialog.h>
|
|
||||||
|
|
||||||
class MenuQml : public QQuickItem
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
QML_DIALOG_DECL
|
|
||||||
|
|
||||||
public:
|
|
||||||
MenuQml(QQuickItem *parent = 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -277,3 +277,26 @@ void HifiMenu::connectItem(const QString& menuOption, QObject* receiver, const c
|
||||||
QObject* result = findMenuObject(menuOption);
|
QObject* result = findMenuObject(menuOption);
|
||||||
connect(result, SIGNAL(triggered()), receiver, slot);
|
connect(result, SIGNAL(triggered()), receiver, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HifiMenu::setExclusiveGroup(const QString& menuOption, const QString& groupName) {
|
||||||
|
static const QString GROUP_SUFFIX{ "__Group" };
|
||||||
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
|
QObject* group = offscreenUi->getRootItem()->findChild<QObject*>(groupName + GROUP_SUFFIX);
|
||||||
|
if (!group) {
|
||||||
|
group = offscreenUi->load("ExclusiveGroup.qml");
|
||||||
|
Q_ASSERT(group);
|
||||||
|
}
|
||||||
|
QObject* menuItem = findMenuObject(menuOption);
|
||||||
|
bool result = menuItem->setProperty("text", QVariant::fromValue(group));
|
||||||
|
Q_ASSERT(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HifiMenu::connectAction(int action, QObject * receiver, const char * slot) {
|
||||||
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
|
QObject* rootMenu = offscreenUi->getRootItem()->findChild<QObject*>("AllActions");
|
||||||
|
QString name = "HifiAction_" + QVariant(action).toString();
|
||||||
|
QObject* quitAction = rootMenu->findChild<QObject*>(name);
|
||||||
|
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,9 @@ class HifiMenu : public QQuickItem {
|
||||||
HIFI_QML_DECL_LAMBDA
|
HIFI_QML_DECL_LAMBDA
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static bool connectAction(int action, QObject * receiver, const char * slot);
|
||||||
|
|
||||||
HifiMenu(QQuickItem* parent = nullptr);
|
HifiMenu(QQuickItem* parent = nullptr);
|
||||||
|
|
||||||
void setToggleAction(const QString& name, std::function<void(bool)> f);
|
void setToggleAction(const QString& name, std::function<void(bool)> f);
|
||||||
|
|
|
@ -152,13 +152,12 @@ void OffscreenUi::setBaseUrl(const QUrl& baseUrl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject* OffscreenUi::load(const QUrl& qmlSource, std::function<void(QQmlContext*, QObject*)> f) {
|
QObject* OffscreenUi::load(const QUrl& qmlSource, std::function<void(QQmlContext*, QObject*)> f) {
|
||||||
qDebug() << "Loading QML from URL " << qmlSource;
|
|
||||||
_qmlComponent->loadUrl(qmlSource);
|
_qmlComponent->loadUrl(qmlSource);
|
||||||
if (_qmlComponent->isLoading()) {
|
if (_qmlComponent->isLoading()) {
|
||||||
connect(_qmlComponent, &QQmlComponent::statusChanged, this,
|
connect(_qmlComponent, &QQmlComponent::statusChanged, this,
|
||||||
[this, f](QQmlComponent::Status){
|
[this, f](QQmlComponent::Status){
|
||||||
finishQmlLoad(f);
|
finishQmlLoad(f);
|
||||||
});
|
});
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,9 @@ private: \
|
||||||
static const QUrl QML; \
|
static const QUrl QML; \
|
||||||
public: \
|
public: \
|
||||||
static void registerType(); \
|
static void registerType(); \
|
||||||
static void show(std::function<void(QQmlContext*, QQuickItem *)> f = [](QQmlContext*, QQuickItem*) {}); \
|
static void show(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
|
||||||
static void toggle(std::function<void(QQmlContext*, QQuickItem *)> f = [](QQmlContext*, QQuickItem*) {}); \
|
static void toggle(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
|
||||||
static void load(std::function<void(QQmlContext*, QQuickItem *)> f = [](QQmlContext*, QQuickItem*) {}); \
|
static void load(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
|
||||||
private:
|
private:
|
||||||
|
|
||||||
#define HIFI_QML_DECL_LAMBDA \
|
#define HIFI_QML_DECL_LAMBDA \
|
||||||
|
@ -62,16 +62,16 @@ private:
|
||||||
qmlRegisterType<x>("Hifi", 1, 0, NAME.toLocal8Bit().constData()); \
|
qmlRegisterType<x>("Hifi", 1, 0, NAME.toLocal8Bit().constData()); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
void x::show(std::function<void(QQmlContext*, QQuickItem *)> f) { \
|
void x::show(std::function<void(QQmlContext*, QObject*)> f) { \
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
||||||
offscreenUi->show(QML, NAME, f); \
|
offscreenUi->show(QML, NAME, f); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
void x::toggle(std::function<void(QQmlContext*, QQuickItem *)> f) { \
|
void x::toggle(std::function<void(QQmlContext*, QObject*)> f) { \
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
||||||
offscreenUi->toggle(QML, NAME, f); \
|
offscreenUi->toggle(QML, NAME, f); \
|
||||||
} \
|
} \
|
||||||
void x::load(std::function<void(QQmlContext*, QQuickItem *)> f) { \
|
void x::load(std::function<void(QQmlContext*, QObject*)> f) { \
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
|
||||||
offscreenUi->load(QML, f); \
|
offscreenUi->load(QML, f); \
|
||||||
}
|
}
|
||||||
|
@ -122,9 +122,9 @@ public:
|
||||||
virtual ~OffscreenUi();
|
virtual ~OffscreenUi();
|
||||||
void create(QOpenGLContext* context);
|
void create(QOpenGLContext* context);
|
||||||
void resize(const QSize& size);
|
void resize(const QSize& size);
|
||||||
void load(const QUrl& qmlSource, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
QObject* load(const QUrl& qmlSource, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
||||||
void load(const QString& qmlSourceFile, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}) {
|
QObject* load(const QString& qmlSourceFile, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}) {
|
||||||
load(QUrl(qmlSourceFile), f);
|
return load(QUrl(qmlSourceFile), f);
|
||||||
}
|
}
|
||||||
void show(const QUrl& url, const QString& name, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
void show(const QUrl& url, const QString& name, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
||||||
void toggle(const QUrl& url, const QString& name, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
void toggle(const QUrl& url, const QString& name, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
||||||
|
@ -169,11 +169,11 @@ public:
|
||||||
ButtonCallback callback = NO_OP_CALLBACK,
|
ButtonCallback callback = NO_OP_CALLBACK,
|
||||||
QMessageBox::StandardButtons buttons = QMessageBox::Ok);
|
QMessageBox::StandardButtons buttons = QMessageBox::Ok);
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
|
QObject* finishQmlLoad(std::function<void(QQmlContext*, QObject*)> f);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateQuick();
|
void updateQuick();
|
||||||
void finishQmlLoad(std::function<void(QQmlContext*, QObject*)> f);
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void requestUpdate();
|
void requestUpdate();
|
||||||
|
|
|
@ -74,6 +74,171 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MenuConstants : public QObject{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_ENUMS(Item)
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Item {
|
||||||
|
AboutApp,
|
||||||
|
AddRemoveFriends,
|
||||||
|
AddressBar,
|
||||||
|
AlignForearmsWithWrists,
|
||||||
|
AlternateIK,
|
||||||
|
AmbientOcclusion,
|
||||||
|
Animations,
|
||||||
|
Atmosphere,
|
||||||
|
Attachments,
|
||||||
|
AudioNoiseReduction,
|
||||||
|
AudioScope,
|
||||||
|
AudioScopeFiftyFrames,
|
||||||
|
AudioScopeFiveFrames,
|
||||||
|
AudioScopeFrames,
|
||||||
|
AudioScopePause,
|
||||||
|
AudioScopeTwentyFrames,
|
||||||
|
AudioStats,
|
||||||
|
AudioStatsShowInjectedStreams,
|
||||||
|
BandwidthDetails,
|
||||||
|
BlueSpeechSphere,
|
||||||
|
BookmarkLocation,
|
||||||
|
Bookmarks,
|
||||||
|
CascadedShadows,
|
||||||
|
CachesSize,
|
||||||
|
Chat,
|
||||||
|
Collisions,
|
||||||
|
Console,
|
||||||
|
ControlWithSpeech,
|
||||||
|
CopyAddress,
|
||||||
|
CopyPath,
|
||||||
|
DecreaseAvatarSize,
|
||||||
|
DeleteBookmark,
|
||||||
|
DisableActivityLogger,
|
||||||
|
DisableLightEntities,
|
||||||
|
DisableNackPackets,
|
||||||
|
DiskCacheEditor,
|
||||||
|
DisplayHands,
|
||||||
|
DisplayHandTargets,
|
||||||
|
DisplayModelBounds,
|
||||||
|
DisplayModelTriangles,
|
||||||
|
DisplayModelElementChildProxies,
|
||||||
|
DisplayModelElementProxy,
|
||||||
|
DisplayDebugTimingDetails,
|
||||||
|
DontDoPrecisionPicking,
|
||||||
|
DontFadeOnOctreeServerChanges,
|
||||||
|
DontRenderEntitiesAsScene,
|
||||||
|
EchoLocalAudio,
|
||||||
|
EchoServerAudio,
|
||||||
|
EditEntitiesHelp,
|
||||||
|
Enable3DTVMode,
|
||||||
|
EnableCharacterController,
|
||||||
|
EnableGlowEffect,
|
||||||
|
EnableVRMode,
|
||||||
|
ExpandMyAvatarSimulateTiming,
|
||||||
|
ExpandMyAvatarTiming,
|
||||||
|
ExpandOtherAvatarTiming,
|
||||||
|
ExpandPaintGLTiming,
|
||||||
|
ExpandUpdateTiming,
|
||||||
|
Faceshift,
|
||||||
|
FilterSixense,
|
||||||
|
FirstPerson,
|
||||||
|
FrameTimer,
|
||||||
|
Fullscreen,
|
||||||
|
FullscreenMirror,
|
||||||
|
GlowWhenSpeaking,
|
||||||
|
NamesAboveHeads,
|
||||||
|
GoToUser,
|
||||||
|
HMDTools,
|
||||||
|
IncreaseAvatarSize,
|
||||||
|
KeyboardMotorControl,
|
||||||
|
LeapMotionOnHMD,
|
||||||
|
LoadScript,
|
||||||
|
LoadScriptURL,
|
||||||
|
LoadRSSDKFile,
|
||||||
|
LodTools,
|
||||||
|
Login,
|
||||||
|
Log,
|
||||||
|
LowVelocityFilter,
|
||||||
|
Mirror,
|
||||||
|
MuteAudio,
|
||||||
|
MuteEnvironment,
|
||||||
|
NoFaceTracking,
|
||||||
|
NoShadows,
|
||||||
|
OctreeStats,
|
||||||
|
OffAxisProjection,
|
||||||
|
OnlyDisplayTopTen,
|
||||||
|
PackageModel,
|
||||||
|
Pair,
|
||||||
|
PipelineWarnings,
|
||||||
|
Preferences,
|
||||||
|
Quit,
|
||||||
|
ReloadAllScripts,
|
||||||
|
RenderBoundingCollisionShapes,
|
||||||
|
RenderFocusIndicator,
|
||||||
|
RenderHeadCollisionShapes,
|
||||||
|
RenderLookAtVectors,
|
||||||
|
RenderSkeletonCollisionShapes,
|
||||||
|
RenderTargetFramerate,
|
||||||
|
RenderTargetFramerateUnlimited,
|
||||||
|
RenderTargetFramerate60,
|
||||||
|
RenderTargetFramerate50,
|
||||||
|
RenderTargetFramerate40,
|
||||||
|
RenderTargetFramerate30,
|
||||||
|
RenderTargetFramerateVSyncOn,
|
||||||
|
RenderResolution,
|
||||||
|
RenderResolutionOne,
|
||||||
|
RenderResolutionTwoThird,
|
||||||
|
RenderResolutionHalf,
|
||||||
|
RenderResolutionThird,
|
||||||
|
RenderResolutionQuarter,
|
||||||
|
RenderAmbientLight,
|
||||||
|
RenderAmbientLightGlobal,
|
||||||
|
RenderAmbientLight0,
|
||||||
|
RenderAmbientLight1,
|
||||||
|
RenderAmbientLight2,
|
||||||
|
RenderAmbientLight3,
|
||||||
|
RenderAmbientLight4,
|
||||||
|
RenderAmbientLight5,
|
||||||
|
RenderAmbientLight6,
|
||||||
|
RenderAmbientLight7,
|
||||||
|
RenderAmbientLight8,
|
||||||
|
RenderAmbientLight9,
|
||||||
|
ResetAvatarSize,
|
||||||
|
ResetSensors,
|
||||||
|
RunningScripts,
|
||||||
|
RunTimingTests,
|
||||||
|
ScriptEditor,
|
||||||
|
ScriptedMotorControl,
|
||||||
|
ShowBordersEntityNodes,
|
||||||
|
ShowIKConstraints,
|
||||||
|
SimpleShadows,
|
||||||
|
SixenseEnabled,
|
||||||
|
SixenseMouseInput,
|
||||||
|
SixenseLasers,
|
||||||
|
ShiftHipsForIdleAnimations,
|
||||||
|
Stars,
|
||||||
|
Stats,
|
||||||
|
StereoAudio,
|
||||||
|
StopAllScripts,
|
||||||
|
SuppressShortTimings,
|
||||||
|
TestPing,
|
||||||
|
ToolWindow,
|
||||||
|
TransmitterDrive,
|
||||||
|
TurnWithHead,
|
||||||
|
UseAudioForMouth,
|
||||||
|
UseCamera,
|
||||||
|
VelocityFilter,
|
||||||
|
VisibleToEveryone,
|
||||||
|
VisibleToFriends,
|
||||||
|
VisibleToNoOne,
|
||||||
|
Wireframe,
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
MenuConstants(QObject * parent = nullptr) : QObject(parent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const QString & getQmlDir() {
|
const QString & getQmlDir() {
|
||||||
static QString dir;
|
static QString dir;
|
||||||
if (dir.isEmpty()) {
|
if (dir.isEmpty()) {
|
||||||
|
@ -156,6 +321,8 @@ public:
|
||||||
|
|
||||||
MessageDialog::registerType();
|
MessageDialog::registerType();
|
||||||
HifiMenu::registerType();
|
HifiMenu::registerType();
|
||||||
|
qmlRegisterType<MenuConstants>("Hifi", 1, 0, "MenuConstants");
|
||||||
|
|
||||||
|
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
offscreenUi->create(_context);
|
offscreenUi->create(_context);
|
||||||
|
@ -181,24 +348,10 @@ public:
|
||||||
#else
|
#else
|
||||||
offscreenUi->setBaseUrl(QUrl::fromLocalFile(getQmlDir()));
|
offscreenUi->setBaseUrl(QUrl::fromLocalFile(getQmlDir()));
|
||||||
offscreenUi->load(QUrl("TestRoot.qml"));
|
offscreenUi->load(QUrl("TestRoot.qml"));
|
||||||
offscreenUi->load(QUrl("RootMenu.qml"));
|
offscreenUi->load(QUrl("Menu.qml"));
|
||||||
|
// Requires a root menu to have been loaded before it can load
|
||||||
HifiMenu::load();
|
HifiMenu::load();
|
||||||
QObject* menuObject = offscreenUi->getRootItem()->findChild<QObject*>("HifiMenu");
|
HifiMenu::connectAction(MenuConstants::Quit, qApp, SLOT(quit()));
|
||||||
HifiMenu* menu = offscreenUi->getRootItem()->findChild<HifiMenu*>();
|
|
||||||
menu->addMenu("", "File");
|
|
||||||
menu->addItem("File", "Quit", []{
|
|
||||||
QApplication::quit();
|
|
||||||
});
|
|
||||||
menu->addCheckableItem("File", "Toggle", false, [](bool toggled) {
|
|
||||||
qDebug() << "Toggle is " << toggled;
|
|
||||||
});
|
|
||||||
menu->addMenu("", "Edit");
|
|
||||||
menu->addItem("Edit", "Undo");
|
|
||||||
menu->addItem("Edit", "Redo");
|
|
||||||
menu->addItem("Edit", "Copy");
|
|
||||||
menu->addItem("Edit", "Cut");
|
|
||||||
menu->addItem("Edit", "Paste");
|
|
||||||
menu->addMenu("", "Long Menu Name...");
|
|
||||||
#endif
|
#endif
|
||||||
installEventFilter(offscreenUi.data());
|
installEventFilter(offscreenUi.data());
|
||||||
offscreenUi->resume();
|
offscreenUi->resume();
|
||||||
|
|
Loading…
Reference in a new issue