mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 20:36:24 +02:00
saving work
This commit is contained in:
parent
c619568dc7
commit
3ba605bf23
9 changed files with 355 additions and 11 deletions
|
@ -21,7 +21,7 @@ macro(LINK_HIFI_LIBRARIES)
|
||||||
include_directories("${HIFI_LIBRARY_DIR}/${HIFI_LIBRARY}/src")
|
include_directories("${HIFI_LIBRARY_DIR}/${HIFI_LIBRARY}/src")
|
||||||
include_directories("${CMAKE_BINARY_DIR}/libraries/${HIFI_LIBRARY}/shaders")
|
include_directories("${CMAKE_BINARY_DIR}/libraries/${HIFI_LIBRARY}/shaders")
|
||||||
|
|
||||||
add_dependencies(${TARGET_NAME} ${HIFI_LIBRARY})
|
#add_dependencies(${TARGET_NAME} ${HIFI_LIBRARY})
|
||||||
|
|
||||||
# link the actual library - it is static so don't bubble it up
|
# link the actual library - it is static so don't bubble it up
|
||||||
target_link_libraries(${TARGET_NAME} ${HIFI_LIBRARY})
|
target_link_libraries(${TARGET_NAME} ${HIFI_LIBRARY})
|
||||||
|
|
205
interface/resources/qml/dialogs/TabletQueryDialog.qml
Normal file
205
interface/resources/qml/dialogs/TabletQueryDialog.qml
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
//
|
||||||
|
// QueryDialog.qml
|
||||||
|
//
|
||||||
|
// Created by Bradley Austin Davis on 22 Jan 2016
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
|
||||||
|
import QtQuick 2.5
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQuick.Dialogs 1.2 as OriginalDialogs
|
||||||
|
|
||||||
|
import "../controls-uit"
|
||||||
|
import "../styles-uit"
|
||||||
|
import "../windows"
|
||||||
|
|
||||||
|
TabletModalWindow {
|
||||||
|
id: root
|
||||||
|
HifiConstants { id: hifi }
|
||||||
|
signal selected(var result);
|
||||||
|
signal canceled();
|
||||||
|
layer.enabled: true
|
||||||
|
property int icon: hifi.icons.none
|
||||||
|
property string iconText: ""
|
||||||
|
property int iconSize: 35
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
}
|
||||||
|
|
||||||
|
property bool keyboardOverride: true
|
||||||
|
onIconChanged: updateIcon();
|
||||||
|
|
||||||
|
property var items;
|
||||||
|
property string label: ""
|
||||||
|
property var result;
|
||||||
|
property alias current: textResult.text
|
||||||
|
|
||||||
|
// For text boxes
|
||||||
|
property alias placeholderText: textResult.placeholderText
|
||||||
|
|
||||||
|
// For combo boxes
|
||||||
|
property bool editable: true;
|
||||||
|
|
||||||
|
property int titleWidth: 0
|
||||||
|
onTitleWidthChanged: d.resize();
|
||||||
|
|
||||||
|
property bool keyboardEnabled: false
|
||||||
|
property bool keyboardRaised: false
|
||||||
|
property bool punctuationMode: false
|
||||||
|
|
||||||
|
onKeyboardRaisedChanged: d.resize();
|
||||||
|
|
||||||
|
function updateIcon() {
|
||||||
|
if (!root) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
iconText = hifi.glyphForIcon(root.icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: modalWindowItem
|
||||||
|
width: parent.width
|
||||||
|
height: 480
|
||||||
|
anchors.margins: 0
|
||||||
|
anchors {
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: d
|
||||||
|
readonly property int minWidth: 480
|
||||||
|
readonly property int maxWdith: 480
|
||||||
|
readonly property int minHeight: 120
|
||||||
|
readonly property int maxHeight: 720
|
||||||
|
|
||||||
|
function resize() {
|
||||||
|
var targetWidth = Math.max(titleWidth, 480)
|
||||||
|
var targetHeight = (items ? comboBox.controlHeight : textResult.controlHeight) + 5 * hifi.dimensions.contentSpacing.y + buttons.height
|
||||||
|
modalWindowItem.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth);
|
||||||
|
modalWindowItem.height = ((targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)) + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + 2 * hifi.dimensions.contentSpacing.y) : 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
anchors {
|
||||||
|
top: frameTitle.bottom
|
||||||
|
bottom: keyboard.top;
|
||||||
|
left: parent.left;
|
||||||
|
right: parent.right;
|
||||||
|
margins: 0
|
||||||
|
bottomMargin: 2 * hifi.dimensions.contentSpacing.y
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME make a text field type that can be bound to a history for autocompletion
|
||||||
|
TextField {
|
||||||
|
id: textResult
|
||||||
|
label: root.label
|
||||||
|
focus: items ? false : true
|
||||||
|
visible: items ? false : true
|
||||||
|
anchors {
|
||||||
|
left: parent.left;
|
||||||
|
right: parent.right;
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TabletComboBox {
|
||||||
|
id: comboBox
|
||||||
|
label: root.label
|
||||||
|
focus: true
|
||||||
|
visible: items ? true : false
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
model: items ? items : []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
property alias keyboardOverride: root.keyboardOverride
|
||||||
|
property alias keyboardRaised: root.keyboardRaised
|
||||||
|
property alias punctuationMode: root.punctuationMode
|
||||||
|
|
||||||
|
Keyboard {
|
||||||
|
id: keyboard
|
||||||
|
raised: keyboardEnabled && keyboardRaised
|
||||||
|
numeric: punctuationMode
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: buttons.top
|
||||||
|
bottomMargin: raised ? 2 * hifi.dimensions.contentSpacing.y : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Flow {
|
||||||
|
id: buttons
|
||||||
|
focus: true
|
||||||
|
spacing: hifi.dimensions.contentSpacing.x
|
||||||
|
onHeightChanged: d.resize(); onWidthChanged: d.resize();
|
||||||
|
layoutDirection: Qt.RightToLeft
|
||||||
|
anchors {
|
||||||
|
bottom: parent.bottom
|
||||||
|
right: parent.right
|
||||||
|
margins: 0
|
||||||
|
bottomMargin: hifi.dimensions.contentSpacing.y
|
||||||
|
}
|
||||||
|
Button { action: cancelAction }
|
||||||
|
Button { action: acceptAction }
|
||||||
|
}
|
||||||
|
|
||||||
|
Action {
|
||||||
|
id: cancelAction
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
shortcut: Qt.Key_Escape
|
||||||
|
onTriggered: {
|
||||||
|
root.canceled();
|
||||||
|
root.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Action {
|
||||||
|
id: acceptAction
|
||||||
|
text: qsTr("OK")
|
||||||
|
shortcut: Qt.Key_Return
|
||||||
|
onTriggered: {
|
||||||
|
root.result = items ? comboBox.currentText : textResult.text
|
||||||
|
root.selected(root.result);
|
||||||
|
root.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Keys.onPressed: {
|
||||||
|
if (!visible) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.key) {
|
||||||
|
case Qt.Key_Escape:
|
||||||
|
case Qt.Key_Back:
|
||||||
|
cancelAction.trigger()
|
||||||
|
event.accepted = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Qt.Key_Return:
|
||||||
|
case Qt.Key_Enter:
|
||||||
|
acceptAction.trigger()
|
||||||
|
event.accepted = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
keyboardEnabled = HMD.active;
|
||||||
|
updateIcon();
|
||||||
|
d.resize();
|
||||||
|
textResult.forceActiveFocus();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import Hifi 1.0
|
import Hifi 1.0
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import "../../dialogs"
|
||||||
Item {
|
Item {
|
||||||
id: tabletRoot
|
id: tabletRoot
|
||||||
objectName: "tabletRoot"
|
objectName: "tabletRoot"
|
||||||
|
@ -9,13 +10,26 @@ Item {
|
||||||
|
|
||||||
property var rootMenu;
|
property var rootMenu;
|
||||||
property string subMenu: ""
|
property string subMenu: ""
|
||||||
|
|
||||||
signal showDesktop();
|
signal showDesktop();
|
||||||
|
|
||||||
function setOption(value) {
|
function setOption(value) {
|
||||||
option = value;
|
option = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component { id: inputDialogBuilder; TabletQueryDialog { } }
|
||||||
|
function inputDialog(properties) {
|
||||||
|
return inputDialogBuilder.createObject(tabletRoot, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
function messageBox(properties) {
|
||||||
|
}
|
||||||
|
|
||||||
|
function customInputDialog(properties) {
|
||||||
|
}
|
||||||
|
|
||||||
|
function fileDialog(properties) {
|
||||||
|
}
|
||||||
|
|
||||||
function setMenuProperties(rootMenu, subMenu) {
|
function setMenuProperties(rootMenu, subMenu) {
|
||||||
tabletRoot.rootMenu = rootMenu;
|
tabletRoot.rootMenu = rootMenu;
|
||||||
tabletRoot.subMenu = subMenu;
|
tabletRoot.subMenu = subMenu;
|
||||||
|
@ -68,6 +82,7 @@ Item {
|
||||||
objectName: "loader"
|
objectName: "loader"
|
||||||
asynchronous: false
|
asynchronous: false
|
||||||
|
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
|
||||||
|
@ -89,7 +104,6 @@ Item {
|
||||||
loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu);
|
loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu);
|
||||||
}
|
}
|
||||||
loader.item.forceActiveFocus();
|
loader.item.forceActiveFocus();
|
||||||
tabletRoot.findStackableChild();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
85
interface/resources/qml/windows/TabletModalFrame.qml
Normal file
85
interface/resources/qml/windows/TabletModalFrame.qml
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
//
|
||||||
|
// ModalFrame.qml
|
||||||
|
//
|
||||||
|
// Created by Bradley Austin Davis on 15 Jan 2016
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
|
||||||
|
import QtQuick 2.5
|
||||||
|
|
||||||
|
import "."
|
||||||
|
import "../controls-uit"
|
||||||
|
import "../styles-uit"
|
||||||
|
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
HifiConstants { id: hifi }
|
||||||
|
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: frameContent
|
||||||
|
|
||||||
|
//readonly property bool hasTitle: window.title != ""
|
||||||
|
|
||||||
|
readonly property int frameMarginLeft: hifi.dimensions.modalDialogMargin.x
|
||||||
|
readonly property int frameMarginRight: hifi.dimensions.modalDialogMargin.x
|
||||||
|
readonly property int frameMarginTop: hifi.dimensions.modalDialogMargin.y + (frameContent.hasTitle ? hifi.dimensions.modalDialogTitleHeight + 10 : 0)
|
||||||
|
readonly property int frameMarginBottom: hifi.dimensions.modalDialogMargin.y
|
||||||
|
|
||||||
|
border {
|
||||||
|
width: hifi.dimensions.borderWidth
|
||||||
|
color: hifi.colors.lightGrayText80
|
||||||
|
}
|
||||||
|
radius: hifi.dimensions.borderRadius
|
||||||
|
color: hifi.colors.faintGray
|
||||||
|
Item {
|
||||||
|
id: frameTitle
|
||||||
|
visible: true//frameContent.hasTitle
|
||||||
|
//anchors.fill: parent
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
fill: parent
|
||||||
|
topMargin: -frameMarginTop
|
||||||
|
leftMargin: -frameMarginLeft
|
||||||
|
rightMargin: -frameMarginRight
|
||||||
|
bottomMargin: -frameMarginBottom
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
width: title.width + (icon.text !== "" ? icon.width + hifi.dimensions.contentSpacing.x : 20)
|
||||||
|
|
||||||
|
onWidthChanged: root.titleWidth = width
|
||||||
|
|
||||||
|
HiFiGlyphs {
|
||||||
|
id: icon
|
||||||
|
text: root.iconText ? root.iconText : "hello"
|
||||||
|
size: root.iconSize ? root.iconSize : 30
|
||||||
|
color: hifi.colors.lightGray
|
||||||
|
visible: true
|
||||||
|
anchors.verticalCenter: title.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
}
|
||||||
|
RalewayRegular {
|
||||||
|
id: title
|
||||||
|
text: root.title
|
||||||
|
elide: Text.ElideRight
|
||||||
|
color: hifi.colors.baseGrayHighlight
|
||||||
|
size: hifi.fontSizes.overlayTitle
|
||||||
|
y: -hifi.dimensions.modalDialogTitleHeight
|
||||||
|
anchors.right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
height: 1
|
||||||
|
color: hifi.colors.lightGray
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
interface/resources/qml/windows/TabletModalWindow.qml
Normal file
22
interface/resources/qml/windows/TabletModalWindow.qml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// ModalWindow.qml
|
||||||
|
//
|
||||||
|
// Created by Bradley Austin Davis on 22 Jan 2016
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
import QtQuick 2.5
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQuick.Dialogs 1.2 as OriginalDialogs
|
||||||
|
import "."
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: modalWindow
|
||||||
|
layer.enabled: true
|
||||||
|
property var title: "Modal"
|
||||||
|
width: tabletRoot.width
|
||||||
|
height: tabletRoot.height
|
||||||
|
color: "#80000000"
|
||||||
|
}
|
|
@ -5769,10 +5769,14 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::toggleRunningScriptsWidget() const {
|
void Application::toggleRunningScriptsWidget() const {
|
||||||
static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml");
|
|
||||||
auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
|
auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
|
||||||
auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"));
|
auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"));
|
||||||
if (tablet) {
|
if (tablet->getToolbarMode()) {
|
||||||
|
static const QUrl url("hifi/dialogs/RunningScripts.qml");
|
||||||
|
DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts");
|
||||||
|
} else {
|
||||||
|
static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml");
|
||||||
tablet->pushOntoStack(url);
|
tablet->pushOntoStack(url);
|
||||||
}
|
}
|
||||||
//DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts");
|
//DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts");
|
||||||
|
|
|
@ -154,6 +154,8 @@ public:
|
||||||
|
|
||||||
Q_INVOKABLE bool onHomeScreen();
|
Q_INVOKABLE bool onHomeScreen();
|
||||||
|
|
||||||
|
QQuickItem* getTabletRoot() const { return _qmlTabletRoot; }
|
||||||
|
|
||||||
QObject* getTabletSurface();
|
QObject* getTabletSurface();
|
||||||
|
|
||||||
QQuickItem* getQmlTablet() const;
|
QQuickItem* getQmlTablet() const;
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
set(TARGET_NAME ui)
|
set(TARGET_NAME ui)
|
||||||
setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebSockets XmlPatterns)
|
setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebSockets XmlPatterns)
|
||||||
link_hifi_libraries(shared networking gl)
|
link_hifi_libraries(shared networking gl script-engine)
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
|
|
||||||
#include <AbstractUriHandler.h>
|
#include <AbstractUriHandler.h>
|
||||||
#include <AccountManager.h>
|
#include <AccountManager.h>
|
||||||
|
#include <DependencyManager.h>
|
||||||
|
#include <TabletScriptingInterface.h>
|
||||||
#include "FileDialogHelper.h"
|
#include "FileDialogHelper.h"
|
||||||
#include "VrMenu.h"
|
#include "VrMenu.h"
|
||||||
|
|
||||||
|
@ -405,10 +406,21 @@ QQuickItem* OffscreenUi::createInputDialog(const Icon icon, const QString& title
|
||||||
map.insert("label", label);
|
map.insert("label", label);
|
||||||
map.insert("current", current);
|
map.insert("current", current);
|
||||||
QVariant result;
|
QVariant result;
|
||||||
bool invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog",
|
|
||||||
Q_RETURN_ARG(QVariant, result),
|
|
||||||
Q_ARG(QVariant, QVariant::fromValue(map)));
|
|
||||||
|
|
||||||
|
auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
|
||||||
|
TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"));
|
||||||
|
|
||||||
|
bool invokeResult;
|
||||||
|
if (tablet->getToolbarMode()) {
|
||||||
|
invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog",
|
||||||
|
Q_RETURN_ARG(QVariant, result),
|
||||||
|
Q_ARG(QVariant, QVariant::fromValue(map)));
|
||||||
|
} else {
|
||||||
|
QQuickItem* tabletRoot = tablet->getTabletRoot();
|
||||||
|
invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog",
|
||||||
|
Q_RETURN_ARG(QVariant, result),
|
||||||
|
Q_ARG(QVariant, QVariant::fromValue(map)));
|
||||||
|
}
|
||||||
if (!invokeResult) {
|
if (!invokeResult) {
|
||||||
qWarning() << "Failed to create message box";
|
qWarning() << "Failed to create message box";
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
Loading…
Reference in a new issue