User:Thraxis Epsilon/control ui

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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>