mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 09:09:56 +02:00
add subpanel functionality
This commit is contained in:
parent
b46ad0c397
commit
4ae03184ec
1 changed files with 223 additions and 19 deletions
|
@ -92,7 +92,6 @@ Slider = function(x,y,width,thumbSize) {
|
||||||
this.isMoving = false;
|
this.isMoving = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Public members:
|
// Public members:
|
||||||
this.setNormalizedValue = function(value) {
|
this.setNormalizedValue = function(value) {
|
||||||
if (value < 0.0) {
|
if (value < 0.0) {
|
||||||
|
@ -113,10 +112,19 @@ Slider = function(x,y,width,thumbSize) {
|
||||||
this.setNormalizedValue(normValue);
|
this.setNormalizedValue(normValue);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.reset = function(resetValue) {
|
||||||
|
this.setValue(resetValue);
|
||||||
|
this.onValueChanged(resetValue);
|
||||||
|
};
|
||||||
|
|
||||||
this.getValue = function() {
|
this.getValue = function() {
|
||||||
return this.getNormalizedValue() * (this.maxValue - this.minValue) + this.minValue;
|
return this.getNormalizedValue() * (this.maxValue - this.minValue) + this.minValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getHeight = function() {
|
||||||
|
return 1.5 * this.thumbSize;
|
||||||
|
}
|
||||||
|
|
||||||
this.onValueChanged = function(value) {};
|
this.onValueChanged = function(value) {};
|
||||||
|
|
||||||
this.destroy = function() {
|
this.destroy = function() {
|
||||||
|
@ -130,6 +138,7 @@ Slider = function(x,y,width,thumbSize) {
|
||||||
this.setBackgroundColor = function(color) {
|
this.setBackgroundColor = function(color) {
|
||||||
Overlays.editOverlay(this.background, {backgroundColor: { red: color.x*255, green: color.y*255, blue: color.z*255 }});
|
Overlays.editOverlay(this.background, {backgroundColor: { red: color.x*255, green: color.y*255, blue: color.z*255 }});
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Checkbox class
|
// The Checkbox class
|
||||||
|
@ -158,10 +167,12 @@ Checkbox = function(x,y,width,thumbSize) {
|
||||||
visible: true
|
visible: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.thumbSize = thumbSize;
|
this.thumbSize = thumbSize;
|
||||||
var checkX = x + (0.25 * thumbSize);
|
var checkX = x + (0.25 * thumbSize);
|
||||||
var checkY = y + (0.25 * thumbSize);
|
var checkY = y + (0.25 * thumbSize);
|
||||||
|
var boxCheckStatus;
|
||||||
|
var clickedBox = false;
|
||||||
|
|
||||||
|
|
||||||
var checkMark = Overlays.addOverlay("text", {
|
var checkMark = Overlays.addOverlay("text", {
|
||||||
|
@ -181,22 +192,22 @@ Checkbox = function(x,y,width,thumbSize) {
|
||||||
width: thumbSize / 2.5,
|
width: thumbSize / 2.5,
|
||||||
height: thumbSize / 2.5,
|
height: thumbSize / 2.5,
|
||||||
alpha: 1.0,
|
alpha: 1.0,
|
||||||
visible: boxCheckStatus
|
visible: !boxCheckStatus
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var boxCheckStatus;
|
|
||||||
var clickedBox = false;
|
|
||||||
|
|
||||||
this.updateThumb = function() {
|
this.updateThumb = function() {
|
||||||
if (clickedBox) {
|
if(!clickedBox) {
|
||||||
boxCheckStatus = !boxCheckStatus;
|
return;
|
||||||
if (boxCheckStatus) {
|
}
|
||||||
Overlays.editOverlay(unCheckMark, { visible: false });
|
|
||||||
} else {
|
boxCheckStatus = !boxCheckStatus;
|
||||||
Overlays.editOverlay(unCheckMark, { visible: true });
|
if (boxCheckStatus) {
|
||||||
}
|
Overlays.editOverlay(unCheckMark, { visible: false });
|
||||||
|
} else {
|
||||||
|
Overlays.editOverlay(unCheckMark, { visible: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this.isClickableOverlayItem = function(item) {
|
this.isClickableOverlayItem = function(item) {
|
||||||
|
@ -215,10 +226,12 @@ Checkbox = function(x,y,width,thumbSize) {
|
||||||
this.onValueChanged(this.getValue());
|
this.onValueChanged(this.getValue());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.onMouseReleaseEvent = function(event) {
|
this.onMouseReleaseEvent = function(event) {
|
||||||
this.clickedBox = false;
|
this.clickedBox = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Public members:
|
// Public members:
|
||||||
this.setNormalizedValue = function(value) {
|
this.setNormalizedValue = function(value) {
|
||||||
boxCheckStatus = value;
|
boxCheckStatus = value;
|
||||||
|
@ -232,10 +245,26 @@ Checkbox = function(x,y,width,thumbSize) {
|
||||||
this.setNormalizedValue(value);
|
this.setNormalizedValue(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.reset = function(resetValue) {
|
||||||
|
this.setValue(resetValue);
|
||||||
|
|
||||||
|
this.onValueChanged(resetValue);
|
||||||
|
};
|
||||||
|
|
||||||
this.getValue = function() {
|
this.getValue = function() {
|
||||||
return boxCheckStatus;
|
return boxCheckStatus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getHeight = function() {
|
||||||
|
return 1.5 * this.thumbSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setterFromWidget = function(value) {
|
||||||
|
var status = boxCheckStatus;
|
||||||
|
this.onValueChanged(boxCheckStatus);
|
||||||
|
this.updateThumb();
|
||||||
|
};
|
||||||
|
|
||||||
this.onValueChanged = function(value) {};
|
this.onValueChanged = function(value) {};
|
||||||
|
|
||||||
this.destroy = function() {
|
this.destroy = function() {
|
||||||
|
@ -267,6 +296,8 @@ ColorBox = function(x,y,width,thumbSize) {
|
||||||
this.green.setBackgroundColor({x: 0, y: 1, z: 0});
|
this.green.setBackgroundColor({x: 0, y: 1, z: 0});
|
||||||
this.blue.setBackgroundColor({x: 0, y: 0, z: 1});
|
this.blue.setBackgroundColor({x: 0, y: 0, z: 1});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.isClickableOverlayItem = function(item) {
|
this.isClickableOverlayItem = function(item) {
|
||||||
return this.red.isClickableOverlayItem(item)
|
return this.red.isClickableOverlayItem(item)
|
||||||
|| this.green.isClickableOverlayItem(item)
|
|| this.green.isClickableOverlayItem(item)
|
||||||
|
@ -293,6 +324,7 @@ ColorBox = function(x,y,width,thumbSize) {
|
||||||
this.blue.onMousePressEvent(event, clickedOverlay);
|
this.blue.onMousePressEvent(event, clickedOverlay);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.onMouseReleaseEvent = function(event) {
|
this.onMouseReleaseEvent = function(event) {
|
||||||
this.red.onMouseReleaseEvent(event);
|
this.red.onMouseReleaseEvent(event);
|
||||||
this.green.onMouseReleaseEvent(event);
|
this.green.onMouseReleaseEvent(event);
|
||||||
|
@ -323,11 +355,20 @@ ColorBox = function(x,y,width,thumbSize) {
|
||||||
this.updateRGBSliders(value);
|
this.updateRGBSliders(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.reset = function(resetValue) {
|
||||||
|
this.setValue(resetValue);
|
||||||
|
this.onValueChanged(resetValue);
|
||||||
|
};
|
||||||
|
|
||||||
this.getValue = function() {
|
this.getValue = function() {
|
||||||
var value = {x:this.red.getValue(), y:this.green.getValue(),z:this.blue.getValue()};
|
var value = {x:this.red.getValue(), y:this.green.getValue(),z:this.blue.getValue()};
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getHeight = function() {
|
||||||
|
return 1.5 * this.thumbSize;
|
||||||
|
}
|
||||||
|
|
||||||
this.destroy = function() {
|
this.destroy = function() {
|
||||||
this.red.destroy();
|
this.red.destroy();
|
||||||
this.green.destroy();
|
this.green.destroy();
|
||||||
|
@ -345,6 +386,8 @@ DirectionBox = function(x,y,width,thumbSize) {
|
||||||
var sliderWidth = width;
|
var sliderWidth = width;
|
||||||
this.yaw = new Slider(x, y, width, slideHeight);
|
this.yaw = new Slider(x, y, width, slideHeight);
|
||||||
this.pitch = new Slider(x, y + slideHeight, width, slideHeight);
|
this.pitch = new Slider(x, y + slideHeight, width, slideHeight);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.yaw.setThumbColor({x: 1, y: 0, z: 0});
|
this.yaw.setThumbColor({x: 1, y: 0, z: 0});
|
||||||
this.yaw.minValue = -180;
|
this.yaw.minValue = -180;
|
||||||
|
@ -400,6 +443,11 @@ DirectionBox = function(x,y,width,thumbSize) {
|
||||||
this.pitch.setValue(direction.y);
|
this.pitch.setValue(direction.y);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.reset = function(resetValue) {
|
||||||
|
this.setValue(resetValue);
|
||||||
|
this.onValueChanged(resetValue);
|
||||||
|
};
|
||||||
|
|
||||||
this.getValue = function() {
|
this.getValue = function() {
|
||||||
var dirZ = this.pitch.getValue();
|
var dirZ = this.pitch.getValue();
|
||||||
var yaw = this.yaw.getValue() * Math.PI / 180;
|
var yaw = this.yaw.getValue() * Math.PI / 180;
|
||||||
|
@ -408,6 +456,10 @@ DirectionBox = function(x,y,width,thumbSize) {
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getHeight = function() {
|
||||||
|
return 1.5 * this.thumbSize;
|
||||||
|
}
|
||||||
|
|
||||||
this.destroy = function() {
|
this.destroy = function() {
|
||||||
this.yaw.destroy();
|
this.yaw.destroy();
|
||||||
this.pitch.destroy();
|
this.pitch.destroy();
|
||||||
|
@ -420,6 +472,48 @@ DirectionBox = function(x,y,width,thumbSize) {
|
||||||
|
|
||||||
var textFontSize = 12;
|
var textFontSize = 12;
|
||||||
|
|
||||||
|
// TODO: Make collapsable
|
||||||
|
function CollapsablePanelItem(name, x, y, textWidth, height) {
|
||||||
|
this.name = name;
|
||||||
|
this.height = height;
|
||||||
|
|
||||||
|
var topMargin = (height - textFontSize);
|
||||||
|
|
||||||
|
this.thumb = Overlays.addOverlay("text", {
|
||||||
|
backgroundColor: { red: 220, green: 220, blue: 220 },
|
||||||
|
textFontSize: 10,
|
||||||
|
x: x,
|
||||||
|
y: y,
|
||||||
|
width: rawHeight,
|
||||||
|
height: rawHeight,
|
||||||
|
alpha: 1.0,
|
||||||
|
backgroundAlpha: 1.0,
|
||||||
|
visible: true
|
||||||
|
});
|
||||||
|
|
||||||
|
this.title = Overlays.addOverlay("text", {
|
||||||
|
backgroundColor: { red: 255, green: 255, blue: 255 },
|
||||||
|
x: x + rawHeight,
|
||||||
|
y: y,
|
||||||
|
width: textWidth,
|
||||||
|
height: height,
|
||||||
|
alpha: 1.0,
|
||||||
|
backgroundAlpha: 0.5,
|
||||||
|
visible: true,
|
||||||
|
text: name,
|
||||||
|
font: {size: textFontSize},
|
||||||
|
topMargin: topMargin,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.destroy = function() {
|
||||||
|
Overlays.deleteOverlay(this.title);
|
||||||
|
Overlays.deleteOverlay(this.thumb);
|
||||||
|
if (this.widget != null) {
|
||||||
|
this.widget.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function PanelItem(name, setter, getter, displayer, x, y, textWidth, valueWidth, height) {
|
function PanelItem(name, setter, getter, displayer, x, y, textWidth, valueWidth, height) {
|
||||||
//print("creating panel item: " + name);
|
//print("creating panel item: " + name);
|
||||||
|
|
||||||
|
@ -548,15 +642,18 @@ Panel = function(x, y) {
|
||||||
|
|
||||||
// Reset panel item upon double-clicking
|
// Reset panel item upon double-clicking
|
||||||
this.mouseDoublePressEvent = function(event) {
|
this.mouseDoublePressEvent = function(event) {
|
||||||
|
|
||||||
var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y});
|
var clickedOverlay = Overlays.getOverlayAtPoint({x: event.x, y: event.y});
|
||||||
for (var i in this.items) {
|
for (var i in this.items) {
|
||||||
|
|
||||||
var item = this.items[i];
|
var item = this.items[i];
|
||||||
var widget = item.widget;
|
var widget = item.widget;
|
||||||
|
|
||||||
if (item.title == clickedOverlay || item.value == clickedOverlay) {
|
if (clickedOverlay == item.title) {
|
||||||
widget.updateThumb();
|
item.activeWidget = widget;
|
||||||
widget.onValueChanged(item.resetValue);
|
|
||||||
|
item.activeWidget.reset(item.resetValue);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -569,8 +666,56 @@ Panel = function(x, y) {
|
||||||
this.activeWidget = null;
|
this.activeWidget = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.newSlider = function(name, minValue, maxValue, setValue, getValue, displayValue) {
|
this.onMousePressEvent = function(event, clickedOverlay) {
|
||||||
|
for (var i in this.items) {
|
||||||
|
var item = this.items[i];
|
||||||
|
if(item.widget.isClickableOverlayItem(clickedOverlay)) {
|
||||||
|
item.activeWidget = item.widget;
|
||||||
|
item.activeWidget.onMousePressEvent(event,clickedOverlay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.reset = function() {
|
||||||
|
for (var i in this.items) {
|
||||||
|
var item = this.items[i];
|
||||||
|
if (item.activeWidget) {
|
||||||
|
item.activeWidget.reset(item.resetValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onMouseMoveEvent = function(event) {
|
||||||
|
for (var i in this.items) {
|
||||||
|
var item = this.items[i];
|
||||||
|
if (item.activeWidget) {
|
||||||
|
item.activeWidget.onMouseMoveEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onMouseReleaseEvent = function(event, clickedOverlay) {
|
||||||
|
for (var i in this.items) {
|
||||||
|
var item = this.items[i];
|
||||||
|
if (item.activeWidget) {
|
||||||
|
item.activeWidget.onMouseReleaseEvent(event);
|
||||||
|
}
|
||||||
|
item.activeWidget = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onMouseDoublePressEvent = function(event, clickedOverlay) {
|
||||||
|
|
||||||
|
for (var i in this.items) {
|
||||||
|
var item = this.items[i];
|
||||||
|
if (item.activeWidget) {
|
||||||
|
item.activeWidget.onMouseDoublePressEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.newSlider = function(name, minValue, maxValue, setValue, getValue, displayValue) {
|
||||||
|
this.nextY = this.y + this.getHeight();
|
||||||
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
||||||
|
|
||||||
var slider = new Slider(this.widgetX, this.nextY, widgetWidth, rawHeight);
|
var slider = new Slider(this.widgetX, this.nextY, widgetWidth, rawHeight);
|
||||||
|
@ -591,6 +736,8 @@ Panel = function(x, y) {
|
||||||
} else if (displayValue == false) {
|
} else if (displayValue == false) {
|
||||||
display = function() {return "Off";};
|
display = function() {return "Off";};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.nextY = this.y + this.getHeight();
|
||||||
|
|
||||||
var item = new PanelItem(name, setValue, getValue, display, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
var item = new PanelItem(name, setValue, getValue, display, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
||||||
|
|
||||||
|
@ -600,11 +747,12 @@ Panel = function(x, y) {
|
||||||
item.widget.onValueChanged = function(value) { item.setterFromWidget(value); };
|
item.widget.onValueChanged = function(value) { item.setterFromWidget(value); };
|
||||||
item.setter(getValue());
|
item.setter(getValue());
|
||||||
this.items[name] = item;
|
this.items[name] = item;
|
||||||
this.nextY += rawYDelta;
|
|
||||||
//print("created Item... checkbox=" + name);
|
//print("created Item... checkbox=" + name);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.newColorBox = function(name, setValue, getValue, displayValue) {
|
this.newColorBox = function(name, setValue, getValue, displayValue) {
|
||||||
|
this.nextY = this.y + this.getHeight();
|
||||||
|
|
||||||
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
||||||
|
|
||||||
|
@ -618,7 +766,12 @@ Panel = function(x, y) {
|
||||||
// print("created Item... colorBox=" + name);
|
// print("created Item... colorBox=" + name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
this.newDirectionBox = function(name, setValue, getValue, displayValue) {
|
this.newDirectionBox = function(name, setValue, getValue, displayValue) {
|
||||||
|
=======
|
||||||
|
this.newDirectionBox= function(name, setValue, getValue, displayValue) {
|
||||||
|
this.nextY = this.y + this.getHeight();
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
||||||
|
|
||||||
|
@ -632,6 +785,7 @@ Panel = function(x, y) {
|
||||||
// print("created Item... directionBox=" + name);
|
// print("created Item... directionBox=" + name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
this.newSubPanel = function(name) {
|
this.newSubPanel = function(name) {
|
||||||
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
var item = new PanelItem(name, setValue, getValue, displayValue, this.x, this.nextY, textWidth, valueWidth, rawHeight);
|
||||||
|
|
||||||
|
@ -645,6 +799,32 @@ Panel = function(x, y) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
=======
|
||||||
|
var indentation = 30;
|
||||||
|
|
||||||
|
this.newSubPanel = function(name) {
|
||||||
|
//TODO: make collapsable, fix double-press event
|
||||||
|
this.nextY = this.y + this.getHeight();
|
||||||
|
|
||||||
|
var item = new CollapsablePanelItem(name, this.x, this.nextY, textWidth, rawHeight, panel);
|
||||||
|
item.isSubPanel = true;
|
||||||
|
|
||||||
|
this.nextY += 1.5 * item.height;
|
||||||
|
|
||||||
|
var subPanel = new Panel(this.x + indentation, this.nextY);
|
||||||
|
|
||||||
|
item.widget = subPanel;
|
||||||
|
this.items[name] = item;
|
||||||
|
return subPanel;
|
||||||
|
// print("created Item... subPanel=" + name);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.onValueChanged = function(value) {
|
||||||
|
for (var i in this.items) {
|
||||||
|
this.items[i].widget.onValueChanged(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
this.destroy = function() {
|
this.destroy = function() {
|
||||||
for (var i in this.items) {
|
for (var i in this.items) {
|
||||||
|
@ -652,6 +832,7 @@ Panel = function(x, y) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this.set = function(name, value) {
|
this.set = function(name, value) {
|
||||||
var item = this.items[name];
|
var item = this.items[name];
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
|
@ -676,6 +857,29 @@ Panel = function(x, y) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.isClickableOverlayItem = function(item) {
|
||||||
|
for (var i in this.items) {
|
||||||
|
if (this.items[i].widget.isClickableOverlayItem(item)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getHeight = function() {
|
||||||
|
var height = 0;
|
||||||
|
|
||||||
|
for (var i in this.items) {
|
||||||
|
height += this.items[i].widget.getHeight();
|
||||||
|
if(this.items[i].isSubPanel) {
|
||||||
|
height += 1.5 * rawHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue