User:Thraxis Epsilon/control ui: Difference between revisions
m New page: == Purpose == This script replaces all the button scripts for controlling the LSL Test Harness it requires a modified controller.controller s... |
|||
| Line 2: | Line 2: | ||
This script replaces all the button scripts for controlling the LSL Test Harness it requires a modified [[User:Thraxis Epsilon/controller.controller|controller.controller]] script. | This script replaces all the button scripts for controlling the LSL Test Harness it requires a modified [[User:Thraxis Epsilon/controller.controller|controller.controller]] script. | ||
Even though this is a test harness I felt it should follow a "best practice" of reducing unnecessary script usage when possible. | |||
== Usage == | |||
Create a root prim and place the controller_ui and controller.controller scripts inside it. | |||
Add 17 "button" prims and name them as follows: | |||
TestSelectedButton::unit | |||
TestSelectedButton::group | |||
SetTestSelected::ALL | |||
SetReportType::STATS | |||
SetReportType::VERBOSE | |||
SetReportType::QUIET | |||
SetReportType::NORMAL | |||
ReportMethodButton::HTTP | |||
ReportMethodButton::EMAIL | |||
ReportMethodButton::CHAT | |||
system::ActivateTest | |||
system::ActivateReport | |||
system::ActivateRegistration | |||
system::BigRed | |||
config::reset | |||
config::controlChannelButton | |||
config::broadcastChannelButton | |||
SetReportType, ReportMethod and the SetTestSelected,TestSelectedButton tagged buttons work as radio groups. Only one item can be active at a time in the set. All others act as single buttons. | |||
== What next? == | |||
Add texture support for the buttons for readable labels. | |||
Ensure 100% functionality as a replacement for buttons. | |||
Allow for expandability with custom buttons. | |||
<pre> | <pre> | ||
Revision as of 22:41, 27 September 2007
Purpose
This script replaces all the button scripts for controlling the LSL Test Harness it requires a modified controller.controller script.
Even though this is a test harness I felt it should follow a "best practice" of reducing unnecessary script usage when possible.
Usage
Create a root prim and place the controller_ui and controller.controller scripts inside it.
Add 17 "button" prims and name them as follows:
TestSelectedButton::unit TestSelectedButton::group SetTestSelected::ALL SetReportType::STATS SetReportType::VERBOSE SetReportType::QUIET SetReportType::NORMAL ReportMethodButton::HTTP ReportMethodButton::EMAIL ReportMethodButton::CHAT system::ActivateTest system::ActivateReport system::ActivateRegistration system::BigRed config::reset config::controlChannelButton config::broadcastChannelButton
SetReportType, ReportMethod and the SetTestSelected,TestSelectedButton tagged buttons work as radio groups. Only one item can be active at a time in the set. All others act as single buttons.
What next?
Add texture support for the buttons for readable labels. Ensure 100% functionality as a replacement for buttons. Allow for expandability with custom buttons.
//********************************************************************
// Script Name: controller_ui.lsl
// Purpose:
// This is the User Interface control script for the LSL
// TestHarness
//********************************************************************
// GLOBAL VARIABLES
//********************************************************************
integer toAllChannel = -255; // general channel - linked message
integer fromAllChannel = -254;
// Lists
list btnReportMethod;
list btnReportType;
list btnTestSelected;
list btnAll;
string btnRegister;
string btnReport;
string btnTest;
string btnBigRed;
//******************************************************************
// Build List of Buttons and Button Groups
//******************************************************************
button_init()
{
integer x=1;
integer max = llGetNumberOfPrims();
for (;x<max+1;++x)
{
btnAll = (btnAll = []) + btnAll + llGetLinkName(x);
if(llSubStringIndex(llGetLinkName(x), "ReportMethodButton::") != -1)
{
btnReportMethod = (btnReportMethod= []) + btnReportMethod + [x];
}
else if(llSubStringIndex(llGetLinkName(x), "SetReportType::") != -1)
{
btnReportType = (btnReportType= []) + btnReportType + [x];
}
else if ((llSubStringIndex(llGetLinkName(x), "SetTestSelected::") != -1) || (llSubStringIndex(llGetLinkName(x), "TestSelectedButton::") != -1))
{
btnTestSelected = (btnTestSelected= []) + btnTestSelected + [x];
}
else if(llSubStringIndex(llGetLinkName(x), "system::") != -1)
{
string button = llDeleteSubString( llGetLinkName(x) , 0, llSubStringIndex(llGetLinkName(x) , "::") + 1);
if (button == "ActivateRegistration")
{
btnRegister = "1::"+(string)x;
llSetLinkAlpha(x, 1.0, ALL_SIDES);
}
else if (button == "ActivateReport")
{
btnReport = "0::"+(string)x;
llSetLinkAlpha(x, 0.0, ALL_SIDES);
}
else if (button == "ActivateTest")
{
btnTest = "0::"+(string)x;
llSetLinkAlpha(x, 0.0, ALL_SIDES);
}
else if (button == "BigRed")
{
btnBigRed = "0::"+(string)x;
llSetLinkAlpha(x, 1.0, ALL_SIDES);
llSetLinkColor(x, <255,0,0>, ALL_SIDES);
}
}
}
}
//********************************************************************
// DEFAULT STATE
//********************************************************************
default
{
state_entry()
{
button_init();
}
link_message(integer sender_number, integer number, string message, key id)
{
//if link message is on the correct channel
if(number == fromAllChannel)
{
if(llSubStringIndex( message, "ActivateRegistration") != -1)
{
//Big Red Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),1), 0.0, ALL_SIDES);
}
if(llSubStringIndex( message, "RegistrationComplete") != -1)
{
//Big Red Button
if((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),0)== 1)
{
llMessageLinked(LINK_THIS, toAllChannel, "ActivateTest", NULL_KEY);
}
//Register Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), 0.0, ALL_SIDES);
btnRegister= "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
}
if(llSubStringIndex( message, "TestComplete") != -1)
{
//Big Red Button
if((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),0)== 1)
{
llMessageLinked(LINK_THIS, toAllChannel, "ActivateReport", NULL_KEY);
}
//Register Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), 0.0, ALL_SIDES);
btnRegister= "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
}
if(llSubStringIndex( message, "ReportComplete") != -1)
{
//Big Red Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),1), 1.0, ALL_SIDES);
llSetLinkColor((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),1), <255,0,0>, ALL_SIDES);
//Register Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), 1.0, ALL_SIDES);
btnRegister= "1::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
}
if(llSubStringIndex( message, "ActivateReport") != -1)
{
//Register Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), 0.0, ALL_SIDES);
btnRegister= "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
}
if(llSubStringIndex( message, "ActivateTest") != -1)
{
//Register Button
llSetLinkAlpha((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), 0.0, ALL_SIDES);
btnRegister= "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
}
if( message == "reset" )
{
llResetScript();
}
}
} //end of link message
touch_start(integer total_number)
{
integer link = llDetectedLinkNumber(0);
string button = llGetLinkName(link);
string cmdGroup = llDeleteSubString( button , llSubStringIndex(button , "::"), llStringLength(button) - 1);
if (cmdGroup == "ReportMethodButton")
{
integer x = 0;
for(;x<llGetListLength(btnReportMethod);++x)
{
llSetLinkColor((integer)llList2String(btnReportMethod,x),<0,0,0>,ALL_SIDES);
}
llSetLinkColor(link,<255,255,255>,ALL_SIDES);
llMessageLinked(LINK_THIS, toAllChannel, button, NULL_KEY);
}
else if (cmdGroup == "SetReportType")
{
integer x = 0;
for(;x<llGetListLength(btnReportType);++x)
{
llSetLinkColor((integer)llList2String(btnReportType ,x),<0,0,0>,ALL_SIDES);
}
llSetLinkColor(link,<255,255,255>,ALL_SIDES);
llMessageLinked(LINK_THIS, toAllChannel, button, NULL_KEY);
}
else if ((cmdGroup == "SetTestSelected") || (cmdGroup == "TestSelectedButton"))
{
integer x = 0;
for(;x<llGetListLength(btnTestSelected);++x)
{
llSetLinkColor((integer)llList2String(btnTestSelected,x),<0,0,0>,ALL_SIDES);
}
llSetLinkColor(link,<255,255,255>,ALL_SIDES);
llMessageLinked(LINK_THIS, toAllChannel, button, NULL_KEY);
}
else if (cmdGroup == "config")
{
llMessageLinked(LINK_THIS, toAllChannel, llDeleteSubString( button, 0, llSubStringIndex(button, "::") + 1), NULL_KEY);
}
else if (cmdGroup == "system")
{
string btnSystem = llDeleteSubString( button , 0, llSubStringIndex(button , "::") + 1);
if (btnSystem == "ActivateRegistration")
{
if((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),0)== 1)
{
llMessageLinked(LINK_THIS, toAllChannel, btnSystem, NULL_KEY);
btnRegister= "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnRegister, "::") + 1);
llSetLinkColor((integer)llList2String(llParseString2List(btnRegister,["::"],[]),1), <255,255,255>, ALL_SIDES);
}
}
else if (btnSystem == "ActivateReport")
{
if((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),0)== 1)
{
llMessageLinked(LINK_THIS, toAllChannel, btnSystem, NULL_KEY);
btnReport = "0::" + llDeleteSubString( btnReport , 0, llSubStringIndex(btnReport , "::") + 1);
llSetLinkColor((integer)llList2String(llParseString2List(btnReport ,["::"],[]),1), <255,255,255>, ALL_SIDES);
}
}
else if (btnSystem == "ActivateTest")
{
if((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),0)== 1)
{
llMessageLinked(LINK_THIS, toAllChannel, btnSystem, NULL_KEY);
btnTest = "0::" + llDeleteSubString( btnRegister, 0, llSubStringIndex(btnTest , "::") + 1);
llSetLinkColor((integer)llList2String(llParseString2List(btnTest ,["::"],[]),1), <255,255,255>, ALL_SIDES);
}
}
else if (btnSystem == "BigRed")
{
llMessageLinked(LINK_THIS, toAllChannel, "ActivateRegistration", NULL_KEY);
btnBigRed = "1::" + llDeleteSubString( btnBigRed , 0, llSubStringIndex(btnBigRed, "::") + 1);
llSetLinkColor((integer)llList2String(llParseString2List(btnBigRed,["::"],[]),1), <255,255,255>, ALL_SIDES);
}
}
}
}