File talk:CanvasView-Prototyping-UI.png

From FlightGear wiki
Jump to navigation Jump to search
##
# 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();