EXP-1205 PROGRESS -- As a User, I want a toybox which will contain all buttons that I can d&d into the toolbars
EXP-1233 PROGRESS -- Populate the toybox floater window with all FUI toolbar buttons EXP-1236 FIX -- The toybox floater should remember its position for the user * Basic addCommand function to the LLToolBar. Need proper implementation. * Added map for faster lookup of commands * Toybox now adds commands to its toolbar for basic button setup Reviewed by Richard.meow-7.2.2
parent
6c209d0fc8
commit
565483ee1f
|
|
@ -72,9 +72,15 @@ LLCommandManager::LLCommandManager()
|
|||
|
||||
LLCommandManager::~LLCommandManager()
|
||||
{
|
||||
for (CommandVector::iterator cmdIt = mCommands.begin(); cmdIt != mCommands.end(); ++cmdIt)
|
||||
{
|
||||
LLCommand * command = *cmdIt;
|
||||
|
||||
delete command;
|
||||
}
|
||||
}
|
||||
|
||||
U32 LLCommandManager::count() const
|
||||
U32 LLCommandManager::commandCount() const
|
||||
{
|
||||
return mCommands.size();
|
||||
}
|
||||
|
|
@ -88,20 +94,24 @@ LLCommand * LLCommandManager::getCommand(const std::string& commandName)
|
|||
{
|
||||
LLCommand * command_name_match = NULL;
|
||||
|
||||
for (CommandVector::iterator it = mCommands.begin(); it != mCommands.end(); ++it)
|
||||
CommandIndexMap::const_iterator found = mCommandIndices.find(commandName);
|
||||
|
||||
if (found != mCommandIndices.end())
|
||||
{
|
||||
LLCommand * command = *it;
|
||||
|
||||
if (command->name() == commandName)
|
||||
{
|
||||
command_name_match = command;
|
||||
break;
|
||||
}
|
||||
command_name_match = mCommands[found->second];
|
||||
}
|
||||
|
||||
return command_name_match;
|
||||
}
|
||||
|
||||
void LLCommandManager::addCommand(LLCommand * command)
|
||||
{
|
||||
mCommandIndices[command->name()] = mCommands.size();
|
||||
mCommands.push_back(command);
|
||||
|
||||
llinfos << "Successfully added command: " << command->name() << llendl;
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLCommandManager::load()
|
||||
{
|
||||
|
|
@ -129,9 +139,7 @@ bool LLCommandManager::load()
|
|||
{
|
||||
LLCommand * command = new LLCommand(commandParams);
|
||||
|
||||
mgr.mCommands.push_back(command);
|
||||
|
||||
llinfos << "Successfully loaded command: " << command->name() << llendl;
|
||||
mgr.addCommand(command);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_COMMANDMANAGER_H
|
||||
#define LL_COMMANDMANAGER_H
|
||||
#ifndef LL_LLCOMMANDMANAGER_H
|
||||
#define LL_LLCOMMANDMANAGER_H
|
||||
|
||||
#include "llinitparam.h"
|
||||
#include "llsingleton.h"
|
||||
|
|
@ -82,16 +82,22 @@ public:
|
|||
LLCommandManager();
|
||||
~LLCommandManager();
|
||||
|
||||
U32 count() const;
|
||||
U32 commandCount() const;
|
||||
LLCommand * getCommand(U32 commandIndex);
|
||||
LLCommand * getCommand(const std::string& commandName);
|
||||
|
||||
static bool load();
|
||||
|
||||
protected:
|
||||
void addCommand(LLCommand * command);
|
||||
|
||||
private:
|
||||
typedef std::map<std::string, U32> CommandIndexMap;
|
||||
typedef std::vector<LLCommand *> CommandVector;
|
||||
CommandVector mCommands;
|
||||
|
||||
CommandVector mCommands;
|
||||
CommandIndexMap mCommandIndices;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_COMMANDMANAGER_H
|
||||
#endif // LL_LLCOMMANDMANAGER_H
|
||||
|
|
|
|||
|
|
@ -27,9 +27,12 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "boost/foreach.hpp"
|
||||
#include <boost/foreach.hpp>
|
||||
#include "lltoolbar.h"
|
||||
|
||||
#include "llcommandmanager.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
// uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit
|
||||
// thanks, MSVC!
|
||||
//static LLDefaultChildRegistry::Register<LLToolBar> r1("toolbar");
|
||||
|
|
@ -74,6 +77,8 @@ LLToolBar::LLToolBar(const Params& p)
|
|||
mMaxButtonWidth(p.max_button_width),
|
||||
mBackgroundImage(p.background_image)
|
||||
{
|
||||
mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon;
|
||||
mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text;
|
||||
}
|
||||
|
||||
void LLToolBar::initFromParams(const LLToolBar::Params& p)
|
||||
|
|
@ -112,9 +117,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
|
|||
{
|
||||
// buttons always follow left and top, for all orientations
|
||||
button_p.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP;
|
||||
button_p.fillFrom((mButtonType == BTNTYPE_ICONS_ONLY)
|
||||
? p.button_icon // icon only
|
||||
: p.button_icon_and_text); // icon + text
|
||||
button_p.fillFrom(mButtonParams[mButtonType]);
|
||||
|
||||
LLRect button_rect(button_p.rect);
|
||||
{ // remove any offset from button
|
||||
|
|
@ -139,12 +142,58 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
|
|||
}
|
||||
}
|
||||
|
||||
bool LLToolBar::addCommand(LLCommand * command)
|
||||
{
|
||||
//
|
||||
// Init basic toolbar button params
|
||||
//
|
||||
|
||||
LLToolBarButton::Params button_p;
|
||||
button_p.fillFrom(mButtonParams[mButtonType]);
|
||||
|
||||
button_p.name = command->name();
|
||||
button_p.label = LLTrans::getString(command->labelRef());
|
||||
button_p.tool_tip = LLTrans::getString(command->tooltipRef());
|
||||
|
||||
//
|
||||
// Set up the button rectangle
|
||||
//
|
||||
|
||||
S32 btn_width = mMinButtonWidth;
|
||||
S32 btn_height = mButtonParams[mButtonType].rect.height;
|
||||
|
||||
if ((mSideType == LLToolBarEnums::SIDE_BOTTOM) || (mSideType == LLToolBarEnums::SIDE_TOP))
|
||||
{
|
||||
btn_height = getRect().getHeight();
|
||||
}
|
||||
|
||||
LLRect button_rect;
|
||||
button_rect.setOriginAndSize(0, 0, btn_width, btn_height);
|
||||
|
||||
button_p.rect = button_rect;
|
||||
|
||||
//
|
||||
// Add it to the list of buttons
|
||||
//
|
||||
|
||||
LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
|
||||
|
||||
toolbar_button->reshape(llclamp(toolbar_button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), toolbar_button->getRect().getHeight());
|
||||
|
||||
mButtons.push_back(toolbar_button);
|
||||
mCenterPanel->addChild(toolbar_button);
|
||||
|
||||
mNeedsLayout = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLToolBar::updateLayoutAsNeeded()
|
||||
{
|
||||
if (!mNeedsLayout) return;
|
||||
|
||||
LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType);
|
||||
|
||||
|
||||
// our terminology for orientation-agnostic layout is that
|
||||
// length refers to a distance in the direction we stack the buttons
|
||||
// and girth refers to a distance in the direction buttons wrap
|
||||
|
|
@ -160,8 +209,8 @@ void LLToolBar::updateLayoutAsNeeded()
|
|||
|
||||
std::vector<LLToolBarButton*> buttons_in_row;
|
||||
|
||||
BOOST_FOREACH(LLToolBarButton* button, mButtons)
|
||||
{
|
||||
BOOST_FOREACH(LLToolBarButton* button, mButtons)
|
||||
{
|
||||
S32 button_clamped_width = llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth);
|
||||
S32 button_length = (orientation == LLLayoutStack::HORIZONTAL)
|
||||
? button_clamped_width
|
||||
|
|
@ -185,23 +234,23 @@ void LLToolBar::updateLayoutAsNeeded()
|
|||
if (orientation == LLLayoutStack::HORIZONTAL)
|
||||
{
|
||||
button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth);
|
||||
}
|
||||
}
|
||||
else // VERTICAL
|
||||
{
|
||||
{
|
||||
button->reshape(max_row_girth, button->getRect().getHeight());
|
||||
}
|
||||
}
|
||||
}
|
||||
buttons_in_row.clear();
|
||||
|
||||
row_running_length = 0;
|
||||
cur_start = 0;
|
||||
cur_row += max_row_girth;
|
||||
max_row_girth = 0;
|
||||
}
|
||||
}
|
||||
|
||||
LLRect button_rect;
|
||||
if (orientation == LLLayoutStack::HORIZONTAL)
|
||||
{
|
||||
{
|
||||
button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight());
|
||||
}
|
||||
else // VERTICAL
|
||||
|
|
@ -209,7 +258,7 @@ void LLToolBar::updateLayoutAsNeeded()
|
|||
button_rect.setLeftTopAndSize(cur_row, panel_rect.mTop - cur_start, button_clamped_width, button->getRect().getHeight());
|
||||
}
|
||||
button->setShape(button_rect);
|
||||
|
||||
|
||||
buttons_in_row.push_back(button);
|
||||
|
||||
row_running_length += button_length;
|
||||
|
|
@ -237,7 +286,7 @@ void LLToolBar::updateLayoutAsNeeded()
|
|||
translate(getRect().getWidth() - total_girth, 0);
|
||||
}
|
||||
reshape(total_girth, getRect().getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
// recenter toolbar buttons
|
||||
mCenteringStack->updateLayout();
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@
|
|||
#include "llbutton.h"
|
||||
|
||||
|
||||
class LLCommand;
|
||||
|
||||
|
||||
class LLToolBarButton : public LLButton
|
||||
{
|
||||
public:
|
||||
|
|
@ -50,6 +53,8 @@ namespace LLToolBarEnums
|
|||
{
|
||||
BTNTYPE_ICONS_ONLY = 0,
|
||||
BTNTYPE_ICONS_WITH_TEXT,
|
||||
|
||||
BTNTYPE_COUNT
|
||||
};
|
||||
|
||||
enum SideType
|
||||
|
|
@ -107,6 +112,8 @@ public:
|
|||
void draw();
|
||||
void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
bool addCommand(LLCommand * command);
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLToolBar(const Params&);
|
||||
|
|
@ -129,6 +136,8 @@ private:
|
|||
mMaxButtonWidth;
|
||||
|
||||
LLUIImagePtr mBackgroundImage;
|
||||
|
||||
LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT];
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -29,12 +29,15 @@
|
|||
#include "llfloatertoybox.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "llcommandmanager.h"
|
||||
#include "llpanel.h"
|
||||
#include "lltoolbar.h"
|
||||
|
||||
|
||||
LLFloaterToybox::LLFloaterToybox(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
, mBtnRestoreDefaults(NULL)
|
||||
, mToolBar(NULL)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("Toybox.RestoreDefaults", boost::bind(&LLFloaterToybox::onBtnRestoreDefaults, this));
|
||||
}
|
||||
|
|
@ -48,23 +51,20 @@ BOOL LLFloaterToybox::postBuild()
|
|||
center();
|
||||
|
||||
mBtnRestoreDefaults = getChild<LLButton>("btn_restore_defaults");
|
||||
mToolBar = getChild<LLToolBar>("toybox_toolbar");
|
||||
|
||||
//
|
||||
// Create Buttons
|
||||
//
|
||||
/*
|
||||
LLToyboxButtons::load();
|
||||
|
||||
for (size_t i = 0; i < LLToyboxButtons::buttonCount(); i++)
|
||||
LLCommandManager& cmdMgr = LLCommandManager::instance();
|
||||
|
||||
for (U32 i = 0; i < cmdMgr.commandCount(); i++)
|
||||
{
|
||||
LLToyboxButton * button = LLToyboxButtons::get(i);
|
||||
LLCommand * command = cmdMgr.getCommand(i);
|
||||
|
||||
// Panel opacity depends on whether or not button position is established
|
||||
LLPanel * buttonPanel = createPanelForButton(button);
|
||||
|
||||
mToolBar->add(buttonPanel);
|
||||
mToolBar->addCommand(command);
|
||||
}
|
||||
*/
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,10 +31,10 @@
|
|||
|
||||
|
||||
class LLButton;
|
||||
class LLToolBar;
|
||||
|
||||
|
||||
class LLFloaterToybox
|
||||
: public LLFloater
|
||||
class LLFloaterToybox : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterToybox(const LLSD& key);
|
||||
|
|
@ -53,6 +53,7 @@ protected:
|
|||
|
||||
public:
|
||||
LLButton * mBtnRestoreDefaults;
|
||||
LLToolBar * mToolBar;
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERTOYBOX_H
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
legacy_header_height="18"
|
||||
name="Toybox"
|
||||
open_centered="true"
|
||||
save_rect="true"
|
||||
single_instance="true"
|
||||
title="Customize toolbars"
|
||||
width="658">
|
||||
|
|
@ -45,7 +46,11 @@
|
|||
<toolbar
|
||||
bottom="395"
|
||||
left="40"
|
||||
max_button_width="140"
|
||||
min_button_width="140"
|
||||
name="toybox_toolbar"
|
||||
right="-40"
|
||||
side="top"
|
||||
top="85">
|
||||
</toolbar>
|
||||
<button
|
||||
|
|
|
|||
Loading…
Reference in New Issue