User:Thraxis Epsilon/control ui

From Second Life Wiki
Jump to: navigation, search

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.

<lsl> //******************************************************************** // 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);
           }        
       }        
   }

} </lsl>