mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 09:30:09 +02:00
Refactor TabletComboBox.qml into ComboBox.qml
This commit is contained in:
parent
71713b10f3
commit
189eee01a6
7 changed files with 22 additions and 222 deletions
|
@ -14,7 +14,6 @@ import QtQuick.Controls.Styles 1.4
|
||||||
|
|
||||||
import "../styles-uit"
|
import "../styles-uit"
|
||||||
import "../controls-uit" as HifiControls
|
import "../controls-uit" as HifiControls
|
||||||
import "." as VrControls
|
|
||||||
|
|
||||||
FocusScope {
|
FocusScope {
|
||||||
id: root
|
id: root
|
||||||
|
@ -32,6 +31,8 @@ FocusScope {
|
||||||
|
|
||||||
readonly property ComboBox control: comboBox
|
readonly property ComboBox control: comboBox
|
||||||
|
|
||||||
|
property bool isDesktop: true
|
||||||
|
|
||||||
signal accepted();
|
signal accepted();
|
||||||
|
|
||||||
implicitHeight: comboBox.height;
|
implicitHeight: comboBox.height;
|
||||||
|
@ -119,11 +120,17 @@ FocusScope {
|
||||||
}
|
}
|
||||||
|
|
||||||
function showList() {
|
function showList() {
|
||||||
var r = desktop.mapFromItem(root, 0, 0, root.width, root.height);
|
var r;
|
||||||
|
if (isDesktop) {
|
||||||
|
r = desktop.mapFromItem(root, 0, 0, root.width, root.height);
|
||||||
|
} else {
|
||||||
|
r = mapFromItem(root, 0, 0, root.width, root.height);
|
||||||
|
}
|
||||||
var y = r.y + r.height;
|
var y = r.y + r.height;
|
||||||
var bottom = y + scrollView.height;
|
var bottom = y + scrollView.height;
|
||||||
if (bottom > desktop.height) {
|
var height = isDesktop ? desktop.height : tabletRoot.height;
|
||||||
y -= bottom - desktop.height + 8;
|
if (bottom > height) {
|
||||||
|
y -= bottom - height + 8;
|
||||||
}
|
}
|
||||||
scrollView.x = r.x;
|
scrollView.x = r.x;
|
||||||
scrollView.y = y;
|
scrollView.y = y;
|
||||||
|
@ -141,9 +148,9 @@ FocusScope {
|
||||||
|
|
||||||
FocusScope {
|
FocusScope {
|
||||||
id: popup
|
id: popup
|
||||||
parent: desktop
|
parent: isDesktop ? desktop : parent
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
z: desktop.zLevels.menu
|
z: isDesktop ? desktop.zLevels.menu : 12
|
||||||
visible: false
|
visible: false
|
||||||
focus: true
|
focus: true
|
||||||
|
|
||||||
|
@ -233,4 +240,8 @@ FocusScope {
|
||||||
anchors.bottomMargin: 4
|
anchors.bottomMargin: 4
|
||||||
visible: label != ""
|
visible: label != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
isDesktop = (typeof desktop !== "undefined");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,211 +0,0 @@
|
||||||
//
|
|
||||||
// ComboBox.qml
|
|
||||||
//
|
|
||||||
// Created by Dante Ruiz on 13 Feb 2017
|
|
||||||
// Copyright 2016 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.Controls.Styles 1.4
|
|
||||||
|
|
||||||
import "../styles-uit"
|
|
||||||
import "../controls-uit" as HifiControls
|
|
||||||
|
|
||||||
FocusScope {
|
|
||||||
id: root
|
|
||||||
HifiConstants { id: hifi }
|
|
||||||
|
|
||||||
property alias model: comboBox.model;
|
|
||||||
property alias comboBox: comboBox
|
|
||||||
readonly property alias currentText: comboBox.currentText;
|
|
||||||
property alias currentIndex: comboBox.currentIndex;
|
|
||||||
|
|
||||||
property int colorScheme: hifi.colorSchemes.light
|
|
||||||
readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light
|
|
||||||
property string label: ""
|
|
||||||
property real controlHeight: height + (comboBoxLabel.visible ? comboBoxLabel.height + comboBoxLabel.anchors.bottomMargin : 0)
|
|
||||||
|
|
||||||
readonly property ComboBox control: comboBox
|
|
||||||
|
|
||||||
signal accepted();
|
|
||||||
|
|
||||||
implicitHeight: comboBox.height;
|
|
||||||
focus: true
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: background
|
|
||||||
gradient: Gradient {
|
|
||||||
GradientStop {
|
|
||||||
position: 0.2
|
|
||||||
color: popup.visible
|
|
||||||
? (isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark)
|
|
||||||
: (isLightColorScheme ? hifi.colors.dropDownLightStart : hifi.colors.dropDownDarkStart)
|
|
||||||
}
|
|
||||||
GradientStop {
|
|
||||||
position: 1.0
|
|
||||||
color: popup.visible
|
|
||||||
? (isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark)
|
|
||||||
: (isLightColorScheme ? hifi.colors.dropDownLightFinish : hifi.colors.dropDownDarkFinish)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
SystemPalette { id: palette }
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
id: comboBox
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: false
|
|
||||||
height: hifi.fontSizes.textFieldInput + 13 // Match height of TextField control.
|
|
||||||
}
|
|
||||||
|
|
||||||
FiraSansSemiBold {
|
|
||||||
id: textField
|
|
||||||
anchors {
|
|
||||||
left: parent.left
|
|
||||||
leftMargin: hifi.dimensions.textPadding
|
|
||||||
right: dropIcon.left
|
|
||||||
verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
size: hifi.fontSizes.textFieldInput
|
|
||||||
text: comboBox.currentText
|
|
||||||
elide: Text.ElideRight
|
|
||||||
color: controlHover.containsMouse || popup.visible ? hifi.colors.baseGray : (isLightColorScheme ? hifi.colors.lightGray : hifi.colors.lightGrayText )
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: dropIcon
|
|
||||||
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
|
|
||||||
height: background.height
|
|
||||||
width: height
|
|
||||||
Rectangle {
|
|
||||||
width: 1
|
|
||||||
height: parent.height
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
color: isLightColorScheme ? hifi.colors.faintGray : hifi.colors.baseGray
|
|
||||||
}
|
|
||||||
HiFiGlyphs {
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
topMargin: -11
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
size: hifi.dimensions.spinnerSize
|
|
||||||
text: hifi.glyphs.caratDn
|
|
||||||
color: controlHover.containsMouse || popup.visible ? hifi.colors.baseGray : (isLightColorScheme ? hifi.colors.lightGray : hifi.colors.lightGrayText)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: controlHover
|
|
||||||
hoverEnabled: true
|
|
||||||
anchors.fill: parent
|
|
||||||
onClicked: toggleList();
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleList() {
|
|
||||||
if (popup.visible) {
|
|
||||||
hideList();
|
|
||||||
} else {
|
|
||||||
showList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showList() {
|
|
||||||
var r = mapFromItem(root, 0, 0, root.width, root.height);
|
|
||||||
var y = r.y + r.height;
|
|
||||||
var bottom = y + scrollView.height;
|
|
||||||
if (bottom > 720) {
|
|
||||||
y -= bottom - tabletRoot.height + 8;
|
|
||||||
}
|
|
||||||
scrollView.x = r.x;
|
|
||||||
scrollView.y = y;
|
|
||||||
popup.visible = true;
|
|
||||||
popup.forceActiveFocus();
|
|
||||||
listView.currentIndex = root.currentIndex;
|
|
||||||
scrollView.hoverEnabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideList() {
|
|
||||||
popup.visible = false;
|
|
||||||
scrollView.hoverEnabled = false;
|
|
||||||
root.accepted();
|
|
||||||
}
|
|
||||||
|
|
||||||
FocusScope {
|
|
||||||
id: popup
|
|
||||||
z: 12
|
|
||||||
parent: parent
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: false
|
|
||||||
focus: true
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
onClicked: hideList();
|
|
||||||
}
|
|
||||||
|
|
||||||
function previousItem() { listView.currentIndex = (listView.currentIndex + listView.count - 1) % listView.count; }
|
|
||||||
function nextItem() { listView.currentIndex = (listView.currentIndex + listView.count + 1) % listView.count; }
|
|
||||||
function selectCurrentItem() { root.currentIndex = listView.currentIndex; hideList(); }
|
|
||||||
function selectSpecificItem(index) { root.currentIndex = index; hideList(); }
|
|
||||||
|
|
||||||
Keys.onUpPressed: previousItem();
|
|
||||||
Keys.onDownPressed: nextItem();
|
|
||||||
Keys.onSpacePressed: selectCurrentItem();
|
|
||||||
Keys.onRightPressed: selectCurrentItem();
|
|
||||||
Keys.onReturnPressed: selectCurrentItem();
|
|
||||||
Keys.onEscapePressed: hideList();
|
|
||||||
|
|
||||||
ScrollView {
|
|
||||||
id: scrollView
|
|
||||||
height: 480
|
|
||||||
width: root.width + 4
|
|
||||||
property bool hoverEnabled: false;
|
|
||||||
|
|
||||||
ListView {
|
|
||||||
id: listView
|
|
||||||
height: textField.height * count * 1.4
|
|
||||||
model: root.model
|
|
||||||
delegate: Rectangle {
|
|
||||||
width: root.width + 4
|
|
||||||
height: popupText.implicitHeight * 1.4
|
|
||||||
color: (listView.currentIndex === index) ? hifi.colors.primaryHighlight :
|
|
||||||
(isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark)
|
|
||||||
FiraSansSemiBold {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: hifi.dimensions.textPadding
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
id: popupText
|
|
||||||
text: listView.model[index] ? listView.model[index] : ""
|
|
||||||
size: hifi.fontSizes.textFieldInput
|
|
||||||
color: hifi.colors.baseGray
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
id: popupHover
|
|
||||||
anchors.fill: parent;
|
|
||||||
hoverEnabled: scrollView.hoverEnabled;
|
|
||||||
onEntered: listView.currentIndex = index;
|
|
||||||
onClicked: popup.selectSpecificItem(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HifiControls.Label {
|
|
||||||
id: comboBoxLabel
|
|
||||||
text: root.label
|
|
||||||
colorScheme: root.colorScheme
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.bottom: parent.top
|
|
||||||
anchors.bottomMargin: 4
|
|
||||||
visible: label != ""
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -205,7 +205,7 @@ TabletModalWindow {
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlsUIT.TabletComboBox {
|
ControlsUIT.ComboBox {
|
||||||
id: comboBoxField;
|
id: comboBoxField;
|
||||||
label: root.comboBox.label;
|
label: root.comboBox.label;
|
||||||
focus: Boolean(root.comboBox);
|
focus: Boolean(root.comboBox);
|
||||||
|
|
|
@ -149,7 +149,7 @@ TabletModalWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TabletComboBox {
|
ComboBox {
|
||||||
id: pathSelector
|
id: pathSelector
|
||||||
z: 10
|
z: 10
|
||||||
anchors {
|
anchors {
|
||||||
|
|
|
@ -109,7 +109,7 @@ TabletModalWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TabletComboBox {
|
ComboBox {
|
||||||
id: comboBox
|
id: comboBox
|
||||||
label: root.label
|
label: root.label
|
||||||
focus: true
|
focus: true
|
||||||
|
|
|
@ -107,7 +107,7 @@ Rectangle {
|
||||||
font.pixelSize: 12
|
font.pixelSize: 12
|
||||||
}
|
}
|
||||||
|
|
||||||
TabletComboBox {
|
ComboBox {
|
||||||
id: collisionType
|
id: collisionType
|
||||||
width: 200
|
width: 200
|
||||||
z: 100
|
z: 100
|
||||||
|
|
|
@ -145,7 +145,7 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TabletComboBox {
|
ComboBox {
|
||||||
id: pathSelector
|
id: pathSelector
|
||||||
anchors {
|
anchors {
|
||||||
top: parent.top
|
top: parent.top
|
||||||
|
|
Loading…
Reference in a new issue