summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelwearing.cpp
diff options
context:
space:
mode:
authorPaul Guslisty <pguslisty@productengine.com>2010-10-07 13:46:50 +0300
committerPaul Guslisty <pguslisty@productengine.com>2010-10-07 13:46:50 +0300
commit6589c200199e1fe0d0bf5f610d990ae197108981 (patch)
tree2b041ce2366bbe8345598a61ec90852a8a1ac768 /indra/newview/llpanelwearing.cpp
parent7d9ec365cc815fad03c31bfaf9acf5d871c2e11b (diff)
STORM-263 FIXED Cog button in lower-left of sidebar panel does not close popup menu on second click
- In all places of sidebar panel where gear menu button is used changed type of gear menu buttons from LLButton to LLMenuButton - Added setMenuPosition and setMenu to the LLMenuButton interface as public methods - In all sidebar panels where LLButton was replaced with LLMenuButton the algorithm of replacing is simple and the same for all sidebar panels. In general the algorithm is: 1. set gearMenu to the menuButton using LLMenuButton::setMenu 2. set mouse down callback for the menuButton 3. in callback for mouse down set the menu position where it should be shown using LLMenuButton::setMenuPosition
Diffstat (limited to 'indra/newview/llpanelwearing.cpp')
-rw-r--r--indra/newview/llpanelwearing.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 860470cd73..1b46294c52 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -32,6 +32,7 @@
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventoryobserver.h"
+#include "llmenubutton.h"
#include "llsidetray.h"
#include "llviewermenu.h"
#include "llwearableitemslist.h"
@@ -67,13 +68,13 @@ public:
{
if (!mMenu) return;
+ mMenu->arrangeAndClear();
mMenu->buildDrawLabels();
mMenu->updateParent(LLMenuGL::sMenuContainer);
- S32 menu_x = 0;
- S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
- LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
}
+ LLMenuGL* getMenu() { return mMenu; }
+
private:
void onTakeOff()
@@ -189,6 +190,16 @@ BOOL LLPanelWearing::postBuild()
mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
+ LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
+
+ // LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+ // That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+ // of getChild<LLUICtrl>(...) for performance.
+ static_cast<LLUICtrl*>(menu_gear_btn)->setMouseDownCallback(boost::bind(&LLPanelWearing::showGearMenu, this, _1));
+
+ menu_gear_btn->setMenu(mGearMenu->getMenu());
+
+
return TRUE;
}
@@ -257,7 +268,14 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
void LLPanelWearing::showGearMenu(LLView* spawning_view)
{
if (!mGearMenu) return;
+
mGearMenu->show(spawning_view);
+
+ LLMenuButton* btn = dynamic_cast<LLMenuButton*>(spawning_view);
+ if (btn)
+ {
+ btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+ }
}
boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)