summaryrefslogtreecommitdiff
path: root/indra/newview/lltoolbarview.cpp
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2011-10-19 19:44:30 -0700
committerMerov Linden <merov@lindenlab.com>2011-10-19 19:44:30 -0700
commitaa3f5edc83a6a20f0473fff6f28fdad6f5406dc2 (patch)
tree192da0c80b9b9b76486c2b174297b9dfd8f8b7de /indra/newview/lltoolbarview.cpp
parentc8499a7b607171507df8cbb6f415dfaa66699b2a (diff)
parent832a509c38035447ece2d0ae77c8661311e72d7e (diff)
Pull from richard/viewer-experience-fui
Diffstat (limited to 'indra/newview/lltoolbarview.cpp')
-rw-r--r--indra/newview/lltoolbarview.cpp115
1 files changed, 38 insertions, 77 deletions
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index c7c8268eb9..75bec15082 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -63,7 +63,9 @@ LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
: LLUICtrl(p),
mToolbarLeft(NULL),
mToolbarRight(NULL),
- mToolbarBottom(NULL)
+ mToolbarBottom(NULL),
+ mDragStarted(false),
+ mDragToolbarButton(NULL)
{
}
@@ -278,13 +280,19 @@ void LLToolBarView::saveToolbars() const
// Enumerate the commands in command_list and add them as Params to the toolbar
void LLToolBarView::addToToolset(command_id_list_t& command_list, Toolbar& toolbar) const
{
+ LLCommandManager& mgr = LLCommandManager::instance();
+
for (command_id_list_t::const_iterator it = command_list.begin();
it != command_list.end();
++it)
{
- LLCommandId::Params command;
- command.name = it->name();
- toolbar.commands.add(command);
+ LLCommand* command = mgr.getCommand(*it);
+ if (command)
+ {
+ LLCommandId::Params commandParams;
+ commandParams.name = command->id().name();
+ toolbar.commands.add(commandParams);
+ }
}
}
@@ -328,13 +336,11 @@ void LLToolBarView::draw()
// ----------------------------------------
-void LLToolBarView::startDragTool( S32 x, S32 y, const LLUUID& uuid)
+void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* button)
{
+ resetDragTool(button);
+
// Flag the tool dragging but don't start it yet
- gToolBarView->mDragStarted = false;
- gToolBarView->mDragCommand = LLCommandId::null;
- gToolBarView->mDragRank = LLToolBar::RANK_NONE;
- gToolBarView->mDragToolbar = NULL;
LLToolDragAndDrop::getInstance()->setDragStart( x, y );
}
@@ -361,30 +367,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp
gToolBarView->mToolbarLeft->stopCommandInProgress(command_id);
gToolBarView->mToolbarRight->stopCommandInProgress(command_id);
gToolBarView->mToolbarBottom->stopCommandInProgress(command_id);
-
- // Second, check if the command is present in one of the 3 toolbars
- // If it is, store the command, the toolbar and the rank in the toolbar and
- // set a callback on end drag so that we reinsert the command if no drop happened
- /*
- gToolBarView->mDragCommand = LLCommandId(uuid);
- if ((gToolBarView->mDragRank = gToolBarView->mToolbarLeft->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE)
- {
- gToolBarView->mDragToolbar = gToolBarView->mToolbarLeft;
- }
- else if ((gToolBarView->mDragRank = gToolBarView->mToolbarRight->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE)
- {
- gToolBarView->mDragToolbar = gToolBarView->mToolbarRight;
- }
- else if ((gToolBarView->mDragRank = gToolBarView->mToolbarBottom->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE)
- {
- gToolBarView->mDragToolbar = gToolBarView->mToolbarBottom;
- }
- if (gToolBarView->mDragRank != LLToolBar::RANK_NONE)
- {
- llinfos << "Merov debug: rank of dragged tool = " << gToolBarView->mDragRank << llendl;
- LLToolDragAndDrop::getInstance()->setEndDragCallback(boost::bind(&LLToolBarView::onEndDrag, gToolBarView));
- }
- */
gToolBarView->mDragStarted = true;
return TRUE;
@@ -413,42 +395,32 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t
LLCommand* command = mgr.getCommand(command_id);
if (command)
{
- // Convert the (x,y) position in rank in toolbar
- int new_rank = LLToolBar::RANK_NONE;
- if (!toolbar->isReadOnly())
- {
- new_rank = toolbar->getRankFromPosition(x,y);
- }
// Suppress the command from the toolbars (including the one it's dropped in,
// this will handle move position).
- int old_rank = LLToolBar::RANK_NONE;
+ bool command_present = gToolBarView->hasCommand(command_id);
LLToolBar* old_toolbar = NULL;
- int rank;
- if ((rank = gToolBarView->mToolbarLeft->removeCommand(command_id)) != LLToolBar::RANK_NONE)
- {
- old_rank = rank;
- old_toolbar = gToolBarView->mToolbarLeft;
- }
- if ((rank = gToolBarView->mToolbarRight->removeCommand(command_id)) != LLToolBar::RANK_NONE)
- {
- old_rank = rank;
- old_toolbar = gToolBarView->mToolbarRight;
- }
- if ((rank = gToolBarView->mToolbarBottom->removeCommand(command_id)) != LLToolBar::RANK_NONE)
+
+ if (command_present)
{
- old_rank = rank;
- old_toolbar = gToolBarView->mToolbarBottom;
+ llassert(gToolBarView->mDragToolbarButton);
+ old_toolbar = gToolBarView->mDragToolbarButton->getParentByType<LLToolBar>();
+ if (old_toolbar->isReadOnly() && toolbar->isReadOnly())
+ {
+ // do nothing
+ }
+ else
+ {
+ gToolBarView->mToolbarBottom->removeCommand(command_id);
+ gToolBarView->mToolbarLeft->removeCommand(command_id);
+ gToolBarView->mToolbarRight->removeCommand(command_id);
+ }
}
- // Now insert it in the toolbar at the detected rank
+
+ // Convert the (x,y) position in rank in toolbar
if (!toolbar->isReadOnly())
{
- if ((old_toolbar == toolbar) && (old_rank != LLToolBar::RANK_NONE) && (old_rank < new_rank))
- {
- // If we just removed the command from the same toolbar, we need to consider that it might
- // change the target rank.
- new_rank -= 1;
- }
- toolbar->addCommand(command->id(),new_rank);
+ int new_rank = toolbar->getRankFromPosition(x,y);
+ toolbar->addCommand(command_id, new_rank);
}
}
else
@@ -456,27 +428,16 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t
llwarns << "Command couldn't be found in command manager" << llendl;
}
}
- stopDragTool();
+
+ resetDragTool(NULL);
return handled;
}
-void LLToolBarView::stopDragTool()
+void LLToolBarView::resetDragTool(LLToolBarButton* button)
{
// Clear the saved command, toolbar and rank
gToolBarView->mDragStarted = false;
- gToolBarView->mDragCommand = LLCommandId::null;
- gToolBarView->mDragRank = LLToolBar::RANK_NONE;
- gToolBarView->mDragToolbar = NULL;
-}
-
-void LLToolBarView::onEndDrag()
-{
- // If there's a saved command, reinsert it in the saved toolbar
- if (gToolBarView->mDragRank != LLToolBar::RANK_NONE)
- {
- gToolBarView->mDragToolbar->addCommand(gToolBarView->mDragCommand,gToolBarView->mDragRank);
- }
- stopDragTool();
+ gToolBarView->mDragToolbarButton = button;
}
void LLToolBarView::setToolBarsVisible(bool visible)