diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6ea4cf8625..efe418f0e8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2809,7 +2809,18 @@ Value 0 - EnableVoiceChat + EnableUIHints + + Comment + Toggles UI hint popups + Persist + 1 + Type + Boolean + Value + 1 + + EnableVoiceChat Comment Enable talking to other residents with a microphone diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index fba15693c8..8c3d30237f 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -470,6 +470,8 @@ BOOL LLBottomTray::postBuild() gMenuHolder->addChild(mBottomTrayContextMenu); mNearbyChatBar = findChild("chat_bar"); + LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle()); + mChatBarContainer = getChild("chat_bar_layout_panel"); mToolbarStack = getChild("toolbar_stack"); diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index ead06d59f9..b864ba6a36 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -74,7 +74,7 @@ void LLFirstUse::resetFirstUse() // static void LLFirstUse::otherAvatarChatFirst(bool enable) { - firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "incoming_chat").with("direction", "right")); + firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "chat_bar").with("direction", "top_right").with("distance", 24)); } // static diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp index 0c91dd473d..bd7fec63e8 100644 --- a/indra/newview/llhints.cpp +++ b/indra/newview/llhints.cpp @@ -32,6 +32,7 @@ #include "llbutton.h" #include "lltextbox.h" #include "llviewerwindow.h" +#include "llviewercontrol.h" #include "llsdparam.h" class LLHintPopup : public LLPanel @@ -43,7 +44,8 @@ public: LEFT, TOP, RIGHT, - BOTTOM + BOTTOM, + TOP_RIGHT } EPopupDirection; struct PopupDirections : public LLInitParam::TypeValuesHelper @@ -54,6 +56,7 @@ public: declare("right", LLHintPopup::RIGHT); declare("top", LLHintPopup::TOP); declare("bottom", LLHintPopup::BOTTOM); + declare("top_right", LLHintPopup::TOP_RIGHT); } }; @@ -76,7 +79,9 @@ public: Optional left_arrow, up_arrow, right_arrow, - down_arrow; + down_arrow, + lower_left_arrow; + Optional left_arrow_offset, up_arrow_offset, right_arrow_offset, @@ -90,6 +95,7 @@ public: up_arrow("up_arrow"), right_arrow("right_arrow"), down_arrow("down_arrow"), + lower_left_arrow("lower_left_arrow"), left_arrow_offset("left_arrow_offset"), up_arrow_offset("up_arrow_offset"), right_arrow_offset("right_arrow_offset"), @@ -115,7 +121,8 @@ private: LLUIImagePtr mArrowLeft, mArrowUp, mArrowRight, - mArrowDown; + mArrowDown, + mArrowDownAndLeft; S32 mArrowLeftOffset, mArrowUpOffset, mArrowRightOffset, @@ -137,6 +144,7 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p) mArrowUp(p.up_arrow), mArrowRight(p.right_arrow), mArrowDown(p.down_arrow), + mArrowDownAndLeft(p.lower_left_arrow), mArrowLeftOffset(p.left_arrow_offset), mArrowUpOffset(p.up_arrow_offset), mArrowRightOffset(p.right_arrow_offset), @@ -272,6 +280,19 @@ void LLHintPopup::draw() arrow_imagep = mArrowUp; } break; + case TOP_RIGHT: + my_rect.setCenterAndSize( target_rect.mRight + (my_local_rect.getWidth() / 2), + target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowDownAndLeft) + { + arrow_rect.setCenterAndSize(my_local_rect.mLeft + mArrowDownAndLeft->getWidth() / 2 + mArrowLeftOffset, + my_local_rect.mBottom - mArrowDownAndLeft->getHeight() / 2 + mArrowDownOffset, + mArrowDownAndLeft->getWidth(), + mArrowDownAndLeft->getHeight()); + arrow_imagep = mArrowDownAndLeft; + } } setShape(my_rect); LLPanel::draw(); @@ -289,27 +310,31 @@ std::map LLHints::sHints; //static void LLHints::show(LLNotificationPtr hint) { - LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams()); - - LLParamSDParser parser; - parser.readSD(hint->getPayload(), p, true); - p.notification = hint; - - if (p.validateBlock()) + if (gSavedSettings.getBOOL("EnableUIHints")) { - LLHintPopup* popup = new LLHintPopup(p); + LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams()); - sHints[hint] = popup; + LLParamSDParser parser; + parser.readSD(hint->getPayload(), p, true); + p.notification = hint; - LLView* hint_holder = gViewerWindow->getHintHolder(); - if (hint_holder) + if (p.validateBlock()) { - hint_holder->addChild(popup); - popup->centerWithin(hint_holder->getLocalRect()); + LLHintPopup* popup = new LLHintPopup(p); + + sHints[hint] = popup; + + LLView* hint_holder = gViewerWindow->getHintHolder(); + if (hint_holder) + { + hint_holder->addChild(popup); + popup->centerWithin(hint_holder->getLocalRect()); + } } } } +//static void LLHints::hide(LLNotificationPtr hint) { hint_map_t::iterator found_it = sHints.find(hint); @@ -320,6 +345,26 @@ void LLHints::hide(LLNotificationPtr hint) } } +//static +void LLHints::hideAll() +{ + std::vector notifications; + for (hint_map_t::iterator it = sHints.begin(), end_it = sHints.end(); + it != end_it; + ++it) + { + notifications.push_back(it->first); + } + + for(std::vector::iterator it = notifications.begin(), end_it = notifications.end(); + it != end_it; + ++it) + { + LLNotifications::instance().cancel(*it); + } + +} + //static void LLHints::registerHintTarget(const std::string& name, LLHandle target) { diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h index 90e09ed004..3bca7f00a1 100644 --- a/indra/newview/llhints.h +++ b/indra/newview/llhints.h @@ -36,6 +36,7 @@ class LLHints public: static void show(LLNotificationPtr hint); static void hide(LLNotificationPtr hint); + static void hideAll(); static void registerHintTarget(const std::string& name, LLHandle target); static LLHandle getHintTarget(const std::string& name); private: diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index e1ce0b384a..eb74cfc00b 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -62,6 +62,7 @@ #include "lllandmarkactions.h" #include "llgroupmgr.h" #include "lltooltip.h" +#include "llhints.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" #include "llimview.h" @@ -7740,6 +7741,26 @@ public: } }; +class LLToggleUIHints : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool ui_hints_enabled = gSavedSettings.getBOOL("EnableUIHints"); + if (ui_hints_enabled) + { + // hide existing hints + LLHints::hideAll(); + + gSavedSettings.setBOOL("EnableUIHints", FALSE); + } + else + { + gSavedSettings.setBOOL("EnableUIHints", TRUE); + } + return true; + } +}; + void LLUploadCostCalculator::calculateCost() { S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); @@ -8220,4 +8241,5 @@ void initialize_menus() view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono"); + view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints"); } diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 8d6a564687..7c8574609c 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -651,6 +651,7 @@ with the same filename but different name + diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png index 11ab3c2d0c..ddadef0978 100644 Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_down.png and b/indra/newview/skins/default/textures/windows/hint_arrow_down.png differ diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png index e5c597a550..2794b967e8 100644 Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_left.png and b/indra/newview/skins/default/textures/windows/hint_arrow_left.png differ diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png new file mode 100644 index 0000000000..0dfc99898d Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png differ diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png index 3f89187e13..7ac57f805b 100644 Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_right.png and b/indra/newview/skins/default/textures/windows/hint_arrow_right.png differ diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png index 1050097efb..bb3e1c07fa 100644 Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_up.png and b/indra/newview/skins/default/textures/windows/hint_arrow_up.png differ diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png index 0839a95205..cfac5deacb 100644 Binary files a/indra/newview/skins/default/textures/windows/hint_background.png and b/indra/newview/skins/default/textures/windows/hint_background.png differ diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index a46604c834..1432099590 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -86,7 +86,7 @@ visible="true" width="20" /> - + + height="26" + width="200"> + + + + + +