summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/llcommandmanager.cpp24
-rw-r--r--indra/llui/llcommandmanager.h50
-rw-r--r--indra/llui/lltoolbar.cpp71
-rw-r--r--indra/llui/lltoolbar.h11
-rw-r--r--indra/llui/lltoolbarview.cpp8
-rw-r--r--indra/llui/lltoolbarview.h3
6 files changed, 125 insertions, 42 deletions
diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp
index 6be616b980..62e1d186f5 100644
--- a/indra/llui/llcommandmanager.cpp
+++ b/indra/llui/llcommandmanager.cpp
@@ -38,11 +38,18 @@
//
+// LLCommandId class
+//
+
+const LLCommandId LLCommandId::null("null command");
+
+//
// LLCommand class
//
LLCommand::Params::Params()
: function("function")
+ , available_in_toybox("available_in_toybox", false)
, icon("icon")
, label_ref("label_ref")
, name("name")
@@ -53,9 +60,10 @@ LLCommand::Params::Params()
LLCommand::LLCommand(const LLCommand::Params& p)
: mFunction(p.function)
+ , mAvailableInToybox(p.available_in_toybox)
, mIcon(p.icon)
+ , mIdentifier(p.name)
, mLabelRef(p.label_ref)
- , mName(p.name)
, mParam(p.param)
, mTooltipRef(p.tooltip_ref)
{
@@ -90,26 +98,26 @@ LLCommand * LLCommandManager::getCommand(U32 commandIndex)
return mCommands[commandIndex];
}
-LLCommand * LLCommandManager::getCommand(const std::string& commandName)
+LLCommand * LLCommandManager::getCommand(const LLCommandId& commandId)
{
- LLCommand * command_name_match = NULL;
+ LLCommand * command_match = NULL;
- CommandIndexMap::const_iterator found = mCommandIndices.find(commandName);
+ CommandIndexMap::const_iterator found = mCommandIndices.find(commandId);
if (found != mCommandIndices.end())
{
- command_name_match = mCommands[found->second];
+ command_match = mCommands[found->second];
}
- return command_name_match;
+ return command_match;
}
void LLCommandManager::addCommand(LLCommand * command)
{
- mCommandIndices[command->name()] = mCommands.size();
+ mCommandIndices[command->id()] = mCommands.size();
mCommands.push_back(command);
- llinfos << "Successfully added command: " << command->name() << llendl;
+ llinfos << "Successfully added command: " << command->id().name() << llendl;
}
//static
diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h
index 24378ecd62..5b53b65500 100644
--- a/indra/llui/llcommandmanager.h
+++ b/indra/llui/llcommandmanager.h
@@ -31,11 +31,50 @@
#include "llsingleton.h"
+class LLCommand;
+class LLCommandManager;
+
+
+class LLCommandId
+{
+public:
+ friend LLCommand;
+ friend LLCommandManager;
+
+ LLCommandId(const std::string& name)
+ : mName(name)
+ {
+ }
+
+ const std::string& name() const { return mName; }
+
+ bool operator!=(const LLCommandId& command) const
+ {
+ return (mName != command.mName);
+ }
+
+ bool operator==(const LLCommandId& command) const
+ {
+ return (mName == command.mName);
+ }
+
+ bool operator<(const LLCommandId& command) const
+ {
+ return (mName < command.mName);
+ }
+
+ static const LLCommandId null;
+
+private:
+ std::string mName;
+};
+
class LLCommand
{
public:
struct Params : public LLInitParam::Block<Params>
{
+ Mandatory<bool> available_in_toybox;
Mandatory<std::string> function;
Mandatory<std::string> icon;
Mandatory<std::string> label_ref;
@@ -48,18 +87,21 @@ public:
LLCommand(const LLCommand::Params& p);
+ const bool availableInToybox() const { return mAvailableInToybox; }
const std::string& functionName() const { return mFunction; }
const std::string& icon() const { return mIcon; }
+ const LLCommandId& id() const { return mIdentifier; }
const std::string& labelRef() const { return mLabelRef; }
- const std::string& name() const { return mName; }
const std::string& param() const { return mParam; }
const std::string& tooltipRef() const { return mTooltipRef; }
private:
+ LLCommandId mIdentifier;
+
+ bool mAvailableInToybox;
std::string mFunction;
std::string mIcon;
std::string mLabelRef;
- std::string mName;
std::string mParam;
std::string mTooltipRef;
};
@@ -84,7 +126,7 @@ public:
U32 commandCount() const;
LLCommand * getCommand(U32 commandIndex);
- LLCommand * getCommand(const std::string& commandName);
+ LLCommand * getCommand(const LLCommandId& commandId);
static bool load();
@@ -92,7 +134,7 @@ protected:
void addCommand(LLCommand * command);
private:
- typedef std::map<std::string, U32> CommandIndexMap;
+ typedef std::map<LLCommandId, U32> CommandIndexMap;
typedef std::vector<LLCommand *> CommandVector;
CommandVector mCommands;
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 5802d2adda..1e1cb16fbb 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -30,7 +30,6 @@
#include <boost/foreach.hpp>
#include "lltoolbar.h"
-#include "llcommandmanager.h"
#include "llmenugl.h"
#include "lltrans.h"
@@ -212,48 +211,79 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
LLToolBarButton* buttonp = LLUICtrlFactory::create<LLToolBarButton>(button_p);
mButtons.push_back(buttonp);
+ mButtonCommands.push_back(LLCommandId::null);
mButtonPanel->addChild(buttonp);
mNeedsLayout = true;
}
}
-bool LLToolBar::addCommand(LLCommand * command)
+bool LLToolBar::addCommand(const LLCommandId& commandId)
{
+ LLCommand * command = LLCommandManager::instance().getCommand(commandId);
+
+ bool add_command = (command != NULL);
+
//
// Init basic toolbar button params
//
- LLToolBarButton::Params button_p(mButtonParams[mButtonType]);
- button_p.name = command->name();
- button_p.label = LLTrans::getString(command->labelRef());
- button_p.tool_tip = LLTrans::getString(command->tooltipRef());
+ if (add_command)
+ {
+ LLToolBarButton::Params button_p(mButtonParams[mButtonType]);
+ button_p.name = commandId.name();
+ button_p.label = LLTrans::getString(command->labelRef());
+ button_p.tool_tip = LLTrans::getString(command->tooltipRef());
- //
- // Add it to the list of buttons
- //
- LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
- mButtons.push_back(toolbar_button);
- mButtonPanel->addChild(toolbar_button);
+ //
+ // Add it to the list of buttons
+ //
+ LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+ mButtons.push_back(toolbar_button);
+ mButtonCommands.push_back(commandId);
+ mButtonPanel->addChild(toolbar_button);
- mNeedsLayout = true;
+ mNeedsLayout = true;
+ }
- return true;
+ return add_command;
}
-bool LLToolBar::hasCommand(const std::string& command_name)
+bool LLToolBar::hasCommand(const LLCommandId& commandId) const
{
bool has_command = false;
- for (std::list<LLToolBarButton*>::iterator cmd = mButtons.begin(); cmd != mButtons.end(); cmd++)
+
+ if (commandId != LLCommandId::null)
{
- if ((*cmd)->getName() == command_name)
+ for (std::list<LLCommandId>::const_iterator cmd = mButtonCommands.begin(); cmd != mButtonCommands.end(); ++cmd)
{
- has_command = true;
- break;
+ if ((*cmd) == commandId)
+ {
+ has_command = true;
+ break;
+ }
}
}
+
return has_command;
}
+bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
+{
+ LLButton * command_button = NULL;
+
+ if (commandId != LLCommandId::null)
+ {
+ command_button = mButtonPanel->findChild<LLButton>(commandId.name());
+
+ if (command_button)
+ {
+ command_button->setEnabled(enabled);
+ }
+ }
+
+ return (command_button != NULL);
+}
+
BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handle_it_here = !mReadOnly;
@@ -351,7 +381,6 @@ void LLToolBar::updateLayoutAsNeeded()
max_length = getRect().getWidth() - mPadLeft - mPadRight;
max_total_girth = getRect().getHeight() - mPadTop - mPadBottom;
row_pad_start = mPadLeft;
- row_running_length = row_pad_start;
row_pad_end = mPadRight;
cur_row = mPadTop;
girth_pad_end = mPadBottom;
@@ -361,12 +390,12 @@ void LLToolBar::updateLayoutAsNeeded()
max_length = getRect().getHeight() - mPadTop - mPadBottom;
max_total_girth = getRect().getWidth() - mPadLeft - mPadRight;
row_pad_start = mPadTop;
- row_running_length = row_pad_start;
row_pad_end = mPadBottom;
cur_row = mPadLeft;
girth_pad_end = mPadRight;
}
+ row_running_length = row_pad_start;
cur_start = row_pad_start;
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 00e6ed131a..f7562b29d2 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -28,9 +28,10 @@
#ifndef LL_LLTOOLBAR_H
#define LL_LLTOOLBAR_H
-#include "lluictrl.h"
-#include "lllayoutstack.h"
#include "llbutton.h"
+#include "llcommandmanager.h"
+#include "lllayoutstack.h"
+#include "lluictrl.h"
class LLCommand;
@@ -121,8 +122,9 @@ public:
BOOL postBuild();
void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- bool addCommand(LLCommand * command);
- bool hasCommand(const std::string& command_name);
+ bool addCommand(const LLCommandId& commandId);
+ bool hasCommand(const LLCommandId& commandId) const;
+ bool enableCommand(const LLCommandId& commandId, bool enabled);
protected:
friend class LLUICtrlFactory;
@@ -142,6 +144,7 @@ private:
const bool mReadOnly;
std::list<LLToolBarButton*> mButtons;
+ std::list<LLCommandId> mButtonCommands;
LLToolBarEnums::ButtonType mButtonType;
LLLayoutStack* mCenteringStack;
LLLayoutStack* mWrapStack;
diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp
index 3b4960fdd5..6c29e566b8 100644
--- a/indra/llui/lltoolbarview.cpp
+++ b/indra/llui/lltoolbarview.cpp
@@ -62,20 +62,20 @@ BOOL LLToolBarView::postBuild()
return TRUE;
}
-bool LLToolBarView::hasCommand(const std::string& command_name)
+bool LLToolBarView::hasCommand(const LLCommandId& commandId) const
{
bool has_command = false;
if (mToolbarLeft && !has_command)
{
- has_command = mToolbarLeft->hasCommand(command_name);
+ has_command = mToolbarLeft->hasCommand(commandId);
}
if (mToolbarRight && !has_command)
{
- has_command = mToolbarRight->hasCommand(command_name);
+ has_command = mToolbarRight->hasCommand(commandId);
}
if (mToolbarBottom && !has_command)
{
- has_command = mToolbarBottom->hasCommand(command_name);
+ has_command = mToolbarBottom->hasCommand(commandId);
}
return has_command;
}
diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h
index 65d339315b..2e7885f391 100644
--- a/indra/llui/lltoolbarview.h
+++ b/indra/llui/lltoolbarview.h
@@ -30,6 +30,7 @@
#include "lluictrl.h"
#include "lltoolbar.h"
+#include "llcommandmanager.h"
class LLUICtrlFactory;
@@ -45,7 +46,7 @@ public:
virtual void draw();
- bool hasCommand(const std::string& command_name);
+ bool hasCommand(const LLCommandId& commandId) const;
// valid children for LLToolBarView are stored in this registry
typedef LLDefaultChildRegistry child_registry_t;