//// 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.7import QtQuick.Controls 1.4import QtQuick.Layouts 1.3 import stylesUit 1.0import controlsUit 1.0 as HifiControlsimport "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) } } }}
//
// 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)
}
}
}
}