[Home] [Downloads] [Search] [Help/forum]


Register forum user name Search FAQ

Gammon Forum

[Folder]  Entire forum
-> [Folder]  MUSHclient
. -> [Folder]  Lua
. . -> [Subject]  Script routine - utils.choose and utils.listbox

Script routine - utils.choose and utils.listbox

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page


Posted by Nick Gammon   Australia  (22,975 posts)  [Biography] bio   Forum Administrator
Date Mon 28 Nov 2005 04:41 AM (UTC)

Amended on Mon 28 Nov 2005 04:56 AM (UTC) by Nick Gammon

Message

Version 3.70 of MUSHclient has new Lua script functions: utils.choose and utils.listbox

These behave very similarly so they will be described together.

These functions display a dialog box with a predetermined list of items for the user to choose from. If the user cancels the dialog box, or does not make a selection, nil is returned. Otherwise the key of the selected item is returned.

  • utils.choose - displays a dialog box with a combo-box in it (drop-down list)
  • utils.listbox - displays a dialog box with a list control in it

The utils.listbox would be more suitable for longer lists, but that is probably partly personal preference.

The calling sequence is:


result = utils.choose ( msg, title, t, default )

The only required arguments are the message text and the table of choices (t).

  1. msg = message to display (max 1000 characters)
  2. title = title of box - if nil, defaults to "MUSHclient" (max 100 characters)
  3. t - table of key/value pairs, as described below
  4. default = default key - defaults to no selection

Return value = the key of what they selected, or nil if cancelled, or nothing selected.

The third argument is a table of key/value pairs. The value is displayed, however the corresponding key is returned. The values are automatically sorted into ascending alphabetic order.

The fourth argument is the key (string or number) which corresponds to the wanted default selection. If it does not correspond to any key in the table then no item will be selected.

Example:


print (utils.choose ("Your favourite", "Foods ...", { "apples", "bananas", "peaches", "cream" } ))

utils.choose example - 3K

Possible returned values would be:

  • nil - if no choice made or dialog cancelled
  • 1 - apples chosen
  • 2 - bananas chosen
  • 3 - peaches chosen
  • 4 - cream chosen

(Note that peaches is actually shown 4th in the list as the list is sorted).

To convert from the key back to the value, simply index into your table. Eg.



t = { "apples", "bananas", "peaches", "cream" } 
result = utils.listbox ("Your favourite", "Foods ...", t)

if result then
  print ("You chose", t [result])
else
  print "Nothing chosen"
end -- if

Keys and values can be either strings or numbers. MUSHclient will distinguish between strings and numbers which are the same (eg. "10" and 10 are considered different keys).

Here is an example of using string keys, and supplying a default choice:



t = { 
    fruit = "apple", 
    vegetable = "potato", 
    spice = "pepper", 
    herb = "parsley",
    } 
result = utils.listbox ("Choose a food", "Foods ...", t, "fruit")

if result then
  print ("You chose key", result, "which is", t [result])
else
  print "Nothing chosen"
end -- if

utils.listbox example - 3K

Possible returned values would be:

  • nil - if no choice made or dialog cancelled
  • "fruit" - apple chosen
  • "vegetable" - potato chosen
  • "spice" - pepper chosen
  • "herb" - parsley chosen

The return value will be one of the following types:

  • nil - if no selection made or dialog cancelled
  • string - if an item with a string key is selected
  • number - if an item with a numeric key is selected

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Nick Gammon   Australia  (22,975 posts)  [Biography] bio   Forum Administrator
Date Reply #1 on Tue 29 Nov 2005 07:09 PM (UTC)
Message
Here is an example of using the utils.listbox routine to make a "world picker". When this alias is used, a list of all worlds is used to populate the listbox, and then the chosen world is switched to (using world.Activate). The current world is made the default world in the list.


<aliases>
  <alias
   match="world_pick"
   enabled="y"
   send_to="12"
   sequence="100"
  >
  <send>

-- table of worlds
t = {}

-- build table of active worlds
for k, v in pairs (GetWorldIdList ()) do 
    t [v] = WorldName (GetWorldById (v))
end -- for

-- choose one
result = utils.listbox ("Choose a world to go to", "Worlds ...",
                         t, GetWorldID ())

-- if one selected, go to it
if result then
  Activate (GetWorldById (result))
end -- if
</send>
  </alias>
</aliases>


- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


7,134 views.

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page

Go to topic:           Search the forum


[Go to top] top

Quick links: MUSHclient. MUSHclient help. Forum shortcuts. Posting templates. Lua modules. Lua documentation.

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.

[Home]


Written by Nick Gammon - 5K   profile for Nick Gammon on Stack Exchange, a network of free, community-driven Q&A sites   Marriage equality

Comments to: Gammon Software support
[RH click to get RSS URL] Forum RSS feed ( https://gammon.com.au/rss/forum.xml )

[Best viewed with any browser - 2K]    [Hosted at HostDash]