From Rolig Loon:
// Simple Multipage Menu -- Rolig Loon -- August 2013
// The Menu routine in this script will parse your input list (gNames) into menu pages
// of 12 buttons each, including a forward button and a back button, as appropriate.
// It generates a page's buttons on demand, so that the list of button labels is
// never more than 12 items long.
// It does NOT trim potential menu items to fit the 25-character limit (or the
// 12-character display limit), nor does it sort buttons or do other fancy things
// that you are free to add for yourself.
list gNames = ["A","B","C","D","E","F","G",
"H","I","J","K","L","M","N","O","P","Q",
"R","S","T","U","V","W","X","Y"]; // Your list of potential menu choices
integer gMenuPosition; // Index number of the first button on the current page
integer gLsn; // Dialog Listen Handle
Menu()
{
integer Last;
list Buttons;
integer All = llGetListLength(gNames);
if(gMenuPosition >= 9) //This is NOT the first menu page
{
Buttons += " <----";
if((All - gMenuPosition) > 11) // This is not the last page
{
Buttons += " ---->";
}
else // This IS the last page
{
Last = TRUE;
}
}
else if (All > gMenuPosition+9) // This IS the first page
{
if((All - gMenuPosition) > 11) // There are more pages to follow
{
Buttons += " ---->";
}
else // This IS the last page
{
Last = TRUE;
}
}
else // This is the only menu page
{
Last = TRUE;
}
if (All > 0)
{
integer b;
integer len = llGetListLength(Buttons);
// This bizarre test does the important work ......
for(b = gMenuPosition + len + Last - 1 ; (len < 12)&&(b < All); ++b)
{
Buttons = Buttons + [llList2String(gNames,b)];
len = llGetListLength(Buttons);
}
}
gLsn = llListen(-12345,"","","");
llSetTimerEvent(10.0);
llDialog(llGetOwner()," \n",Buttons,-12345);
}
default
{
touch_start(integer num)
{
llListenRemove(gLsn);
gMenuPosition = 0;
Menu();
}
listen(integer channel, string name, key id, string msg)
{
llListenRemove(gLsn);
llSetTimerEvent(0.0);
if (~llSubStringIndex(msg,"---->"))
{
gMenuPosition += 10;
Menu();
}
else if (~llSubStringIndex(msg,"<----"))
{
gMenuPosition -= 10;
Menu();
}
else
{
//Do whatever the selected button directs..... your choice
}
}
timer()
{
llSetTimerEvent(0.0);
llListenRemove(gLsn);
}
}