overte-JulianGro/scripts/developer/utilities/render/highlight.qml

199 lines
6.3 KiB
QML

//
// highlight.qml
// developer/utilities/render
//
// Olivier Prat, created on 08/08/2017.
// Copyright 2017 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
//
import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
import stylesUit 1.0
import controlsUit 1.0 as HifiControls
import "configSlider"
import "../lib/plotperf"
import "highlight"
Item {
id: root
HifiConstants { id: hifi;}
anchors.margins: 0
property var listName: "contextOverlayHighlightList"
property var styleList: Selection.getHighlightedListNames()
signal sendToScript(var message);
Component.onCompleted: {
// Connect the signal from Selection when any selection content change and use it to refresh the current selection view
Selection.selectedItemsListChanged.connect(resetSelectionView)
}
function resetSelectionView() {
if (selectionView !== undefined) {
selectionView.resetSelectionView();
}
}
Column {
id: col
spacing: 5
anchors.fill: root
anchors.margins: hifi.dimensions.contentMargin.x
Row {
id: controlbar
spacing: 10
anchors.left: parent.left
anchors.right: parent.right
height: 24
HifiControls.Button {
id: debug
text: "Refresh"
height: 24
width: 82
onClicked: {
print("list of highlight styles")
root.styleList = Selection.getHighlightedListNames()
print(root.styleList)
styleSelectorLoader.sourceComponent = undefined;
styleSelectorLoader.sourceComponent = selectorWidget;
}
}
Loader {
id: styleSelectorLoader
sourceComponent: selectorWidget
width: 300
//anchors.right: parent.right
}
Component {
id: selectorWidget
HifiControls.ComboBox {
id: box
z: 999
editable: true
colorScheme: hifi.colorSchemes.dark
model: root.styleList
label: ""
Timer {
id: postpone
interval: 100; running: false; repeat: false
onTriggered: {
styleWidgetLoader.sourceComponent = styleWidget
resetSelectionView();
}
}
onCurrentIndexChanged: {
root.listName = model[currentIndex];
// This is a hack to be sure the widgets below properly reflect the change of category: delete the Component
// by setting the loader source to Null and then recreate it 100ms later
styleWidgetLoader.sourceComponent = undefined;
postpone.interval = 100
postpone.start()
}
}
}
}
Separator {}
Loader {
id: styleWidgetLoader
sourceComponent: styleWidget
anchors.left: parent.left
anchors.right: parent.right
height: 240
}
Separator {}
HifiControls.CheckBox {
text: "Highlight Hovered"
checked: false
onCheckedChanged: {
if (checked) {
root.sendToScript("pick true")
} else {
root.sendToScript("pick false")
}
}
}
Separator {}
Rectangle {
id: selectionView
anchors.left: parent.left
anchors.right: parent.right
height: 250
color: hifi.colors.lightGray
function resetSelectionView() {
myModel.clear()
var entities = Selection.getSelectedItemsList(root.listName)["entities"]
if (entities !== undefined) {
myModel.append({ "objectID": "Entities" })
for (var i = 0; i < entities.length; i++) {
myModel.append({ "objectID": JSON.stringify(entities[i]) })
}
}
var overlays = Selection.getSelectedItemsList(root.listName)["overlays"]
if (overlays !== undefined) {
myModel.append({ "objectID": "Overlays" })
for (var i = 0; i < overlays.length; i++) {
myModel.append({ "objectID": JSON.stringify(overlays[i]) })
}
}
var avatars = Selection.getSelectedItemsList(root.listName)["avatars"]
if (avatars !== undefined) {
myModel.append({ "objectID": "Avatars" })
for (var i = 0; i < avatars.length; i++) {
myModel.append({ "objectID": JSON.stringify(avatars[i]) })
}
}
}
ListModel {
id: myModel
}
Component {
id: myDelegate
Row {
id: fruit
Text { text: objectID }
}
}
ListView {
id: selectionListView
anchors.fill: parent
anchors.topMargin: 30
model: myModel
delegate: myDelegate
}
}
}
Component {
id: styleWidget
HighlightStyle {
id: highlightStyle
anchors.left: parent.left
anchors.right: parent.right
highlightStyle: Selection.getListHighlightStyle(root.listName)
onNewStyle: {
var style = getStyle()
// print("new style " + JSON.stringify(style) )
Selection.enableListHighlight(root.listName, style)
}
}
}
}