Difference between revisions of "Adding UI Hints"

From Second Life Wiki
Jump to navigation Jump to search
Line 67: Line 67:
If you want to trigger the hint only the first time a certain condition is met, use LLFirstUse.
If you want to trigger the hint only the first time a certain condition is met, use LLFirstUse.


Step 1:
'''Step 1: Add a setting to ignorable_dialogs.xml so we can remember when a condition has already been triggered, like this:'''
 
Add a setting to ignorable_dialogs.xml so we can remember when a condition has already been triggered, like this:


   <key>FirstJump</key>
   <key>FirstJump</key>
Line 83: Line 81:
   </map>
   </map>


Step 2:
'''Step 2: Add a method to LLFirstUse to trigger the hint.'''
 
Add a method to LLFirstUse to trigger the hint:


  void jumping(bool enable=true);
  void jumping(bool enable=true);
Line 99: Line 95:
  }
  }


Step 3:
'''Step 3: Call the first use function when the behavior is triggered.'''
 
Call the first use function when the behavior is triggered:


  void LLAgent::jump()
  void LLAgent::jump()
Line 109: Line 103:
  }
  }


Step 4:
'''Step 4: Call the first use function with false to immediately disable the hint.'''
 
Call the first use function with false to immediately disable the hint


  // after 10 minutes, we assume you know how to jump
  // after 10 minutes, we assume you know how to jump

Revision as of 12:52, 4 February 2011

Simple Hint

Step 1: add a notification to notifications.xml using the following template.

 <notification
 name="HintName"
 label="Hint text that appears on top"
 type="hint"
 unique="true">
   Hint contents here.
 </notification>

unique="true" limits the number of instances of this hint to 1...if you want to spawn the same hint in multiple locations simultaneously, remove this line.

Step 2: Trigger the hint using the notifications system.

LLNotifications::instance().add("HintName");

That handles the simple case.

Customizing the Hint

If you want to customize the appearance/contents of the hint...

You can modify the hint parameters via the notification "payload". The hint parameters can be found in llhint.h.

LLSD hint_payload;
hint_payload["fade_in_time"] = 2.f;
hint_payload["fade_out_time"] = 1.f;

You can add string substitutions in the substitutions parameter.

LLSD substitutions;
substitutions["USER_NAME"] = "Richard Linden";

Then trigger the hint with the expanded add function:

LLNotifications::instance().add(LLNotification::Params().
	name("HintName").
	substitutions(string_substitutions).
	payload(hint_payload)));

Attaching Hints

If you want to attach the hint to an existing UI element:

Step 1: Register the UI element with a unique name in the setup code associated with that particular UI.

BOOL LLMyFloater::postBuild()
{
	LLHints::registerHintTarget("my_hint_target", getChild<LLButton>("my_button")->getHandle());
	return TRUE;
}

Step 2: Trigger the notification with the target parameter set.

LLSD hint_payload;
hint_payload["target"] = "my_hint_target";
hint_payload["direction"] = "left"; // hint will appear to the left of the target
LLNotifications::instance().add(
	...
	payload(hint_payload)));

First Use Only

If you want to trigger the hint only the first time a certain condition is met, use LLFirstUse.

Step 1: Add a setting to ignorable_dialogs.xml so we can remember when a condition has already been triggered, like this:

 <key>FirstJump</key>
 <map>
   <key>Comment</key>
   <string>Shows hint when resident jumps for the first time</string>
   <key>Persist</key>
   <integer>1</integer>
   <key>Type</key>
   <string>Boolean</string>
   <key>Value</key>
   <integer>1</integer>
 </map>

Step 2: Add a method to LLFirstUse to trigger the hint.

void jumping(bool enable=true);

// static
void LLFirstUse::jumping(bool enable)
{
	LLSD substitutions;
	...
	LLSD hint_payload;
	...	
	firstUseNotification("FirstJump", enable, "HintJump", substitutions, hint_payload);
}

Step 3: Call the first use function when the behavior is triggered.

void LLAgent::jump()
{
	...
	LLFirstUse::jumping(true);
}

Step 4: Call the first use function with false to immediately disable the hint.

// after 10 minutes, we assume you know how to jump
LLFirstUse::jumping(false);

That's it!