File talk:CanvasView-Prototyping-UI.png
Appearance
##
# called for each button/entry in a list
var ListCallback = func(scrollContent, list, valueProvider, valueGetter) {
var values = (typeof(valueProvider)=="vector")?valueProvider:valueProvider();
foreach(var val; values) {
var ValueButton = canvas.gui.widgets.Button.new(scrollContent, canvas.style, {})
.setText( valueGetter(val) )
.setCheckable(1) # this indicates that is should be a toggle button
.setChecked(0) # depressed by default
.setFixedSize(200, 25);
list.addItem(ValueButton);
} #foreach
} # Listcallback
var StaticListCallback = func(scrollContent, list, values) return ListCallback(scrollContent, list,func() {values;}, func(val) {val;});
var DirectoryCallback = func(scrollContent, list, dir) return ListCallback(scrollContent, list,func() {io.subdirectories(getprop("/sim/fg-root")~"/Compositor")}, func(val) {val;});
var ViewCallback = func(scrollContent, list) return ListCallback(scrollContent, list,func() {props.globals.getNode("/sim").getChildren("view");}, func(val) {val.getNode("name").getValue();});
# browsable directory, file
# for each option, one dropdown is shown
var Options = [
{legend: "Pipeline:", tooltip: "Select the Compositor/effect scheme to be used", ValueProvider: DirectoryCallback, values:nil},
{legend: "Scenegraph:", tooltip: "Select the scene to be shown", ValueProvider: DirectoryCallback, values:nil},
{legend: "View:", tooltip:"Select the active view", ValueProvider: ViewCallback, values:nil},
{legend: "Resolution:", tooltip: "Select the resolution for the view (smaller=faster)", ValueProvider: StaticListCallback,values: ["128x128", "256x256","512x512","1024x1024"] },
{legend: "Framerate throtting:",tooltip:"Select frame rate cap", ValueProvider: StaticListCallback, values:["0.5hz","1hz", "5hz","10hz","20hz"] },
{legend: "OSG Stats:",tooltip:"enable/disable view specific OSG stats", ValueProvider: StaticListCallback, values: ["Disabled", "Enabled"]},
{legend: "Event Handler:",tooltip:"Select event handler", ValueProvider: StaticListCallback, values: ["Disabled", "Mouse", "Keyboard", "Mouse + Keyboard"]},
];
var makeButtonList = func(root, layout, legend, content_callback, values) {
var myLayout = canvas.HBoxLayout.new();
var label = canvas.gui.widgets.Label.new(root, canvas.style, {wordWrap: 0}); # wordwrap: 0 will disable wordwrapping, to enable it use 1 instead
label.setText(legend);
myLayout.addItem(label);
var scroll = canvas.gui.widgets.ScrollArea.new(root, canvas.style, {size: [96, 128]}).move(20, 100);
myLayout.addItem(scroll,1);
layout.addItem(myLayout);
var scrollContent =
scroll.getContent()
.set("font", "LiberationFonts/LiberationSans-Bold.ttf")
.set("character-size", 16)
.set("alignment", "left-center");
var list = canvas.VBoxLayout.new();
scroll.setLayout(list);
# var valueProvider = func props.globals.getNode("/sim").getChildren("view");
# var valueGetter = func(val) val.getNode("name").getValue();
content_callback(scrollContent, list, values)
} # makeButtonList
var CanvasViewDialog = {
new: func(width=640,height=480)
{
var m = {
parents: [CanvasViewDialog],
_dlg: canvas.Window.new([width, height], "dialog")
.set("title", "CanvasView")
.set("resize", 1),
};
m._dlg.getCanvas(1).set("background", canvas.style.getColor("bg_color"));
m._root = m._dlg.getCanvas().createGroup();
var vbox = canvas.VBoxLayout.new();
m._dlg.setLayout(vbox);
# this sets up one list of buttons per option
foreach(var opt; Options) {
makeButtonList(m._root, vbox, opt.legend, opt.ValueProvider, opt.values);
}
# http://wiki.flightgear.org/Draw_masks
var drawMasks = props.globals.getNode("/sim/rendering/draw-mask").getChildren();
var drawMaskRow = canvas.HBoxLayout.new();
foreach(var mask; drawMasks) {
(func() {
var mask = mask;
# print("Found mask:", mask.getName(), "=", mask.getValue() );
var checkbox = canvas.gui.widgets.CheckBox.new(m._root, canvas.style, {wordWrap: 0})
.setText( "render " ~ mask.getName() )
.listen("toggled", func(e) {
setprop(mask.getPath(), e.detail.checked);
})
.setChecked( mask.getValue() );
drawMaskRow.addItem(checkbox);
}) ();
} #foreach
vbox.addItem(drawMaskRow);
# Button generate
var CreateButton = canvas.gui.widgets.Button.new(m._root, canvas.style, {})
.setText("Create View" );
vbox.addItem(CreateButton);
var hint = vbox.sizeHint();
hint[0] = math.max(width, hint[0]);
m._dlg.setSize(hint);
return m;
},
};
var dlg = CanvasViewDialog.new();