summaryrefslogtreecommitdiff
path: root/indra/llui/lltoolbar.cpp
diff options
context:
space:
mode:
authorRichard Nelson <richard@lindenlab.com>2011-09-30 16:58:09 -0700
committerRichard Nelson <richard@lindenlab.com>2011-09-30 16:58:09 -0700
commit0991a8a870b9cfee57a76f45f4f5ee1c5eb6d4cd (patch)
tree2c503e2bec1398185e41875b3c357e5afb126c2b /indra/llui/lltoolbar.cpp
parent6fe4815217a11a36aa2e2b1d8b040eff007bb631 (diff)
parent09e179b2381a4db03309839babae664feb9b0886 (diff)
Automated merge with ssh://hg.lindenlab.com/richard/viewer-experience-fui
Diffstat (limited to 'indra/llui/lltoolbar.cpp')
-rw-r--r--indra/llui/lltoolbar.cpp95
1 files changed, 66 insertions, 29 deletions
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 75c7d91f8a..2592fd1229 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -33,6 +33,7 @@
#include "llcommandmanager.h"
#include "llmenugl.h"
#include "lltrans.h"
+#include "lltoolbarview.h"
// uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit
// thanks, MSVC!
@@ -201,16 +202,16 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
bool LLToolBar::addCommand(const LLCommandId& commandId)
{
LLCommand * command = LLCommandManager::instance().getCommand(commandId);
+ if (!command) return false;
- bool add_command = (command != NULL);
-
- if (add_command)
- {
mButtonCommands.push_back(commandId);
- createButton(commandId);
- }
+ LLToolBarButton* button = createButton(commandId);
+ mButtons.push_back(button);
+ mButtonPanel->addChild(button);
+ mButtonMap.insert(std::make_pair(commandId, button));
+ mNeedsLayout = true;
- return add_command;
+ return true;
}
void LLToolBar::clearCommandsList()
@@ -223,21 +224,13 @@ void LLToolBar::clearCommandsList()
bool LLToolBar::hasCommand(const LLCommandId& commandId) const
{
- bool has_command = false;
-
if (commandId != LLCommandId::null)
{
- BOOST_FOREACH(LLCommandId cmd, mButtonCommands)
- {
- if (cmd == commandId)
- {
- has_command = true;
- break;
- }
- }
+ command_id_map::const_iterator it = mButtonMap.find(commandId);
+ return (it != mButtonMap.end());
}
- return has_command;
+ return false;
}
bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
@@ -246,11 +239,10 @@ bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
if (commandId != LLCommandId::null)
{
- command_button = mButtonPanel->findChild<LLButton>(commandId.name());
-
- if (command_button)
+ command_id_map::iterator it = mButtonMap.find(commandId);
+ if (it != mButtonMap.end())
{
- command_button->setEnabled(enabled);
+ it->second->setEnabled(enabled);
}
}
@@ -319,7 +311,7 @@ void LLToolBar::setButtonType(LLToolBarEnums::ButtonType button_type)
bool regenerate_buttons = (mButtonType != button_type);
mButtonType = button_type;
-
+
if (regenerate_buttons)
{
createButtons();
@@ -511,14 +503,19 @@ void LLToolBar::createButtons()
BOOST_FOREACH(LLCommandId& command_id, mButtonCommands)
{
- createButton(command_id);
+ LLToolBarButton* button = createButton(command_id);
+ mButtons.push_back(button);
+ mButtonPanel->addChild(button);
+ mButtonMap.insert(std::make_pair(command_id, button));
}
+ mNeedsLayout = true;
+
}
-void LLToolBar::createButton(const LLCommandId& id)
+LLToolBarButton* LLToolBar::createButton(const LLCommandId& id)
{
LLCommand* commandp = LLCommandManager::instance().getCommand(id);
- if (!commandp) return;
+ if (!commandp) return NULL;
LLToolBarButton::Params button_p;
button_p.name = id.name();
@@ -536,8 +533,48 @@ void LLToolBar::createButton(const LLCommandId& id)
button->setCommitCallback(cbParam);
}
- mButtons.push_back(button);
- mButtonPanel->addChild(button);
+ button->setCommandId(id);
+ return button;
- mNeedsLayout = true;
+}
+
+//
+// LLToolBarButton
+//
+
+LLToolBarButton::LLToolBarButton(const Params& p)
+: LLButton(p),
+ mMouseDownX(0),
+ mMouseDownY(0),
+ mId("")
+{}
+
+
+BOOL LLToolBarButton::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ mMouseDownX = x;
+ mMouseDownY = y;
+ return LLButton::handleMouseDown(x, y, mask);
+}
+
+BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask)
+{
+ if (hasMouseCapture())
+ {
+ S32 dist_squared = (x - mMouseDownX) * (x - mMouseDownX) + (y - mMouseDownY) * (y - mMouseDownY);
+ S32 threshold = LLUI::sSettingGroups["config"]->getS32("DragAndDropDistanceThreshold");
+ S32 threshold_squared = threshold * threshold;
+ if (dist_squared > threshold_squared)
+ {
+ // start drag and drop
+ LLToolBarView* view = getParentByType<LLToolBarView>();
+ LLToolBar* bar = getParentByType<LLToolBar>();
+ if (view)
+ {
+ //view->startDrag(bar->createButton(mId));
+ //setVisible(FALSE);
+ }
+ }
+ }
+ return LLButton::handleHover(x, y, mask);
}