File talk:CanvasView-Prototyping-UI.png
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();