Difference between revisions of "Adding UI Hints"
Kireji Haiku (talk | contribs) m (fixed syntax highlighting) |
Kireji Haiku (talk | contribs) m (tags) |
||
Line 2: | Line 2: | ||
'''Step 1: Make sure you have the necessary include file.''' | '''Step 1: Make sure you have the necessary include file.''' | ||
< | <cpp> | ||
#include "llnotifications.h" | #include "llnotifications.h" | ||
</ | </cpp> | ||
'''Step 2: add a notification to notifications.xml using the following template.''' | '''Step 2: add a notification to notifications.xml using the following template.''' | ||
Line 21: | Line 21: | ||
'''Step 3: Trigger the hint using the notifications system.''' | '''Step 3: Trigger the hint using the notifications system.''' | ||
< | <cpp> | ||
LLNotifications::instance().add(LLNotification::Params("HintName")); | LLNotifications::instance().add(LLNotification::Params("HintName")); | ||
</ | </cpp> | ||
That handles the simple case. | That handles the simple case. | ||
Line 33: | Line 33: | ||
'''Step 1: You can modify the hint parameters via the notification "payload". The hint parameters can be found in llhint.h.''' | '''Step 1: You can modify the hint parameters via the notification "payload". The hint parameters can be found in llhint.h.''' | ||
< | <cpp> | ||
LLSD hint_payload; | LLSD hint_payload; | ||
hint_payload["fade_in_time"] = 2.f; | hint_payload["fade_in_time"] = 2.f; | ||
hint_payload["fade_out_time"] = 1.f; | hint_payload["fade_out_time"] = 1.f; | ||
</ | </cpp> | ||
'''Step 2: You can add string substitutions in the substitutions parameter.''' | '''Step 2: You can add string substitutions in the substitutions parameter.''' | ||
< | <cpp> | ||
LLSD substitutions; | LLSD substitutions; | ||
substitutions["USER_NAME"] = "Richard Linden"; | substitutions["USER_NAME"] = "Richard Linden"; | ||
</ | </cpp> | ||
'''Step 3: Then trigger the hint with the expanded add function.''' | '''Step 3: Then trigger the hint with the expanded add function.''' | ||
< | <cpp> | ||
LLNotifications::instance().add(LLNotification::Params(). | LLNotifications::instance().add(LLNotification::Params(). | ||
name("HintName"). | name("HintName"). | ||
substitutions(string_substitutions). | substitutions(string_substitutions). | ||
payload(hint_payload))); | payload(hint_payload))); | ||
</ | </cpp> | ||
== Attaching Hints == | == Attaching Hints == | ||
Line 61: | Line 61: | ||
'''Step 1: Register the UI element with a unique name in the setup code associated with that particular UI.''' | '''Step 1: Register the UI element with a unique name in the setup code associated with that particular UI.''' | ||
< | <cpp> | ||
BOOL LLMyFloater::postBuild() | BOOL LLMyFloater::postBuild() | ||
{ | { | ||
Line 67: | Line 67: | ||
return TRUE; | return TRUE; | ||
} | } | ||
</ | </cpp> | ||
'''Step 2: Trigger the notification with the target parameter set.''' | '''Step 2: Trigger the notification with the target parameter set.''' | ||
< | <cpp> | ||
LLSD hint_payload; | LLSD hint_payload; | ||
hint_payload["target"] = "my_hint_target"; | hint_payload["target"] = "my_hint_target"; | ||
Line 79: | Line 79: | ||
... | ... | ||
payload(hint_payload))); | payload(hint_payload))); | ||
</ | </cpp> | ||
== First Use Only == | == First Use Only == | ||
Line 103: | Line 103: | ||
'''Step 2: Add a method to LLFirstUse to trigger the hint.''' | '''Step 2: Add a method to LLFirstUse to trigger the hint.''' | ||
< | <cpp> | ||
void jumping(bool enable=true); | void jumping(bool enable=true); | ||
Line 115: | Line 115: | ||
firstUseNotification("FirstJump", enable, "HintJump", substitutions, hint_payload); | firstUseNotification("FirstJump", enable, "HintJump", substitutions, hint_payload); | ||
} | } | ||
</ | </cpp> | ||
'''Step 3: Call the first use function when the behavior is triggered.''' | '''Step 3: Call the first use function when the behavior is triggered.''' | ||
< | <cpp> | ||
void LLAgent::jump() | void LLAgent::jump() | ||
{ | { | ||
Line 125: | Line 125: | ||
LLFirstUse::jumping(true); | LLFirstUse::jumping(true); | ||
} | } | ||
</ | </cpp> | ||
'''Step 4: Call the first use function with false to immediately disable the hint.''' | '''Step 4: Call the first use function with false to immediately disable the hint.''' | ||
< | <cpp> | ||
// after 10 minutes, we assume you know how to jump | // after 10 minutes, we assume you know how to jump | ||
LLFirstUse::jumping(false); | LLFirstUse::jumping(false); | ||
</ | </cpp> | ||
That's it! | That's it! |
Revision as of 06:33, 16 October 2013
Simple Hint
Step 1: Make sure you have the necessary include file. <cpp>
- include "llnotifications.h"
</cpp>
Step 2: add a notification to notifications.xml using the following template. <xml> <notification name="HintName" label="Hint text that appears on top" type="hint" unique="true">
Hint contents here.
</notification> </xml>
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 3: Trigger the hint using the notifications system.
<cpp> LLNotifications::instance().add(LLNotification::Params("HintName")); </cpp>
That handles the simple case.
Customizing the Hint
If you want to customize the appearance/contents of the hint...
Step 1: You can modify the hint parameters via the notification "payload". The hint parameters can be found in llhint.h. <cpp> LLSD hint_payload; hint_payload["fade_in_time"] = 2.f; hint_payload["fade_out_time"] = 1.f; </cpp>
Step 2: You can add string substitutions in the substitutions parameter.
<cpp> LLSD substitutions; substitutions["USER_NAME"] = "Richard Linden"; </cpp>
Step 3: Then trigger the hint with the expanded add function.
<cpp> LLNotifications::instance().add(LLNotification::Params().
name("HintName"). substitutions(string_substitutions). payload(hint_payload)));
</cpp>
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.
<cpp> BOOL LLMyFloater::postBuild() {
LLHints::registerHintTarget("my_hint_target", getChild<LLButton>("my_button")->getHandle()); return TRUE;
} </cpp>
Step 2: Trigger the notification with the target parameter set.
<cpp> 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)));
</cpp>
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:
<xml> <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> </xml>
Step 2: Add a method to LLFirstUse to trigger the hint.
<cpp> void jumping(bool enable=true);
// static void LLFirstUse::jumping(bool enable) {
LLSD substitutions; ... LLSD hint_payload; ... firstUseNotification("FirstJump", enable, "HintJump", substitutions, hint_payload);
} </cpp>
Step 3: Call the first use function when the behavior is triggered.
<cpp> void LLAgent::jump() {
... LLFirstUse::jumping(true);
} </cpp>
Step 4: Call the first use function with false to immediately disable the hint.
<cpp> // after 10 minutes, we assume you know how to jump LLFirstUse::jumping(false); </cpp>
That's it!