From fa37af573cd0a98f10ada49bc2d456f3e428b658 Mon Sep 17 00:00:00 2001 From: mfranz <mfranz> Date: Fri, 24 Feb 2006 11:11:09 +0000 Subject: [PATCH] - let menuEnable() consider all <name>s - always disable tutorial-stop; enable tutorial-start if tutorial available - don't call the tutorial selector "Wizard 1/2". There is only one tutorial selector, the next dialog is already part of the tutorial. Also, the dialogs don't guide you through multi-dialog setup, which is what "wizards" normally stand for. - use tutorial name as dialog title - set button shortcuts (default == return, esc) - make esc go back to select dialog - beautify sliders & some other tweaks --- Nasal/gui.nas | 122 +++++++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/Nasal/gui.nas b/Nasal/gui.nas index 72b9e666f..a0e2a8e8b 100644 --- a/Nasal/gui.nas +++ b/Nasal/gui.nas @@ -30,14 +30,18 @@ showDialog = func { ## # Enable/disable named menu entry # -menuEnable = func(name, state) { +menuEnable = func(searchname, state) { foreach (menu; props.globals.getNode("/sim/menubar/default").getChildren("menu")) { - if ((n = menu.getNode("name")) != nil and n.getValue() == name) { - menu.getNode("enabled").setBoolValue(state); + foreach (name; menu.getChildren("name")) { + if (name.getValue() == searchname) { + menu.getNode("enabled").setBoolValue(state); + } } foreach (item; menu.getChildren("item")) { - if ((n = item.getNode("name")) != nil and n.getValue() == name) { - item.getNode("enabled").setBoolValue(state); + foreach (name; item.getChildren("name")) { + if (name.getValue() == searchname) { + item.getNode("enabled").setBoolValue(state); + } } } } @@ -67,7 +71,8 @@ INIT = func { # enable/disable menu entries menuEnable("fuel-and-payload", getprop("/sim/flight-model") == "yasim"); menuEnable("autopilot", props.globals.getNode("/autopilot/KAP140/locks") == nil); - menuEnable("tutorial", size(props.globals.getNode("/sim").getChildren("tutorial"))); + menuEnable("tutorial-start", size(props.globals.getNode("/sim").getChildren("tutorial"))); + menuEnable("tutorial-stop", 0); var fps = props.globals.getNode("/sim/rendering/fps-display", 1); setlistener(fps, fpsDisplay, 1); @@ -158,7 +163,7 @@ dialog = {}; # showSelTutDialog = func { name = "selectTutorial"; - title = "Tutorial Wizard - Step 1/2"; + title = "Select Tutorial"; # # Immediately stop any tutorials that are running. @@ -187,10 +192,6 @@ showSelTutDialog = func { return; } - ltextarea = dialog[name].addChild("text"); - ltextarea.set("label", "Please choose a tutorial from the list below"); - ltextarea.set("halign", "center"); - contentArea = dialog[name].addChild("group"); contentArea.set("layout", "hbox"); @@ -204,15 +205,16 @@ showSelTutDialog = func { # Get a list of all tutorials ltutorials = props.globals.getNode("/sim/tutorial").getChildren("tutorial"); - for(i=0; i<size(ltutorials); i+=1) - { - c = ltutorials[i]; - if (c.getChild("name") != nil) - { - lname = c.getChild("name").getValue(); - lentry = combo.addChild("value"); - lentry.prop().setValue(lname); - } + for(i=0; i<size(ltutorials); i+=1) { + c = ltutorials[i]; + if (c.getChild("name") != nil) { + lname = c.getChild("name").getValue(); + lentry = combo.addChild("value"); + lentry.prop().setValue(lname); + if (i == 0) { + setprop("/sim/tutorial/current-tutorial", lname); + } + } } buttonBar = dialog[name].addChild("group"); @@ -221,11 +223,14 @@ showSelTutDialog = func { lcancel = buttonBar.addChild("button"); lcancel.set("legend", "Cancel"); + lcancel.set("keynum", 27); + lcancel.set("equal", 1); lcancel.prop().getNode("binding[0]/command", 1).setValue("dialog-close"); lnext = buttonBar.addChild("button"); lnext.set("legend", "Next"); - lnext.set("keynum", 27); + lnext.set("default", 1); + lnext.set("equal", 1); lnext.prop().getNode("binding[0]/command", 1).setValue("dialog-apply"); lnext.prop().getNode("binding[1]/command", 1).setValue("nasal"); lnext.prop().getNode("binding[1]/script", 1).setValue("gui.showTutorialDialog()"); @@ -239,7 +244,25 @@ showSelTutDialog = func { showTutorialDialog = func { name = "displayTutorial"; - title = "Tutorial Wizard - Step 2/2"; + + # Get tutorial title and description + ltutorial = getprop("/sim/tutorial/current-tutorial"); + + if (ltutorial == nil) { ltutorial = "<undefined>"; } + + lfound = 0; + ldescription = "No description available for this tutorial."; + + foreach(c; props.globals.getNode("/sim/tutorial").getChildren("tutorial")) { + if (c.getChild("name").getValue() == ltutorial) { + lfound = 1; + if (c.getChild("description") != nil) { + ldescription = c.getChild("description") .getValue(); + setprop("/sim/tutorial/description", ldescription); + } + } + } + title = "Tutorial \"" ~ ltutorial ~ "\""; # # General Dialog Structure @@ -253,27 +276,6 @@ showTutorialDialog = func { dialog[name].addChild("hrule").set("pref-height", 1); - # Get the tutorial description - ltutorial = getprop("/sim/tutorial/current-tutorial"); - - if (ltutorial == nil) { ltutorial = "<undefined>"; } - - lfound = 0; - ldescription = "No description available for this tutorial."; - - foreach(c; props.globals.getNode("/sim/tutorial").getChildren("tutorial")) - { - if (c.getChild("name").getValue() == ltutorial) - { - lfound = 1; - if (c.getChild("description") != nil) - { - ldescription = c.getChild("description") .getValue(); - setprop("/sim/tutorial/description", ldescription); - } - } - } - if (lfound == 0) { msg = dialog[name].addChild("text"); msg.set("label", "Unable to find tutorial " ~ ltutorial); @@ -288,36 +290,36 @@ showTutorialDialog = func { contentArea = dialog[name].addChild("group"); contentArea.set("layout", "hbox"); - label = contentArea.addChild("text"); - label.set("label", "Tutorial: " ~ ltutorial); - label.set("halign", "left"); - textarea = dialog[name].addChild("textbox"); textarea.set("pref-width", "600"); textarea.set("pref-height", "400"); - textarea.set("slider", "12"); - textarea.set("live", "true"); + textarea.set("slider", "20"); textarea.set("wrap", "true"); textarea.set("editable", "false"); textarea.set("valign", "top"); - textarea.set("halign", "left"); + textarea.set("halign", "fill"); textarea.set("property", "/sim/tutorial/description"); buttonBar = dialog[name].addChild("group"); buttonBar.set("layout", "hbox"); buttonBar.set("default-padding", 10); - lcancel = buttonBar.addChild("button"); - lcancel.set("legend", "Cancel"); - lcancel.prop().getNode("binding[0]/command", 1).setValue("dialog-close"); + lback = buttonBar.addChild("button"); + lback.set("legend", "Back"); + lback.set("equal", 1); + lback.set("keynum", 27); + lback.prop().getNode("binding[0]/command", 1).setValue("nasal"); + lback.prop().getNode("binding[0]/script", 1).setValue("gui.showSelTutDialog()"); + lback.prop().getNode("binding[1]/command", 1).setValue("dialog-close"); lnext = buttonBar.addChild("button"); - lnext.set("legend", "Start Tutorial"); - lnext.set("keynum", 27); - lnext.prop().getNode("binding[0]/command", 1).setValue("dialog-apply"); - lnext.prop().getNode("binding[1]/command", 1).setValue("nasal"); - lnext.prop().getNode("binding[1]/script", 1).setValue("tutorial.startTutorial()"); - lnext.prop().getNode("binding[2]/command", 1).setValue("dialog-close"); + lnext.set("legend", "Start"); + lnext.set("default", 1); + lnext.set("pref-width", 100); + lnext.set("equal", 1); + lnext.prop().getNode("binding[0]/command", 1).setValue("nasal"); + lnext.prop().getNode("binding[0]/script", 1).setValue("tutorial.startTutorial()"); + lnext.prop().getNode("binding[1]/command", 1).setValue("dialog-close"); # All done: pop it up fgcommand("dialog-new", dialog[name].prop()); @@ -626,7 +628,7 @@ showHelpDialog = func { } w = dialog[name].addChild("textbox"); - w.set("halign", "center"); + w.set("halign", "fill"); w.set("slider", 20); w.set("pref-width", width); w.set("pref-height", height);