summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llbutton.cpp22
-rw-r--r--indra/llui/llcommandmanager.cpp24
-rw-r--r--indra/llui/llcommandmanager.h62
-rw-r--r--indra/llui/lldockcontrol.cpp3
-rw-r--r--indra/llui/llmenugl.cpp2
-rw-r--r--indra/llui/lltoolbar.cpp390
-rw-r--r--indra/llui/lltoolbar.h59
-rw-r--r--indra/llui/lltoolbarview.cpp59
-rw-r--r--indra/llui/lltoolbarview.h14
-rw-r--r--indra/llui/llui.cpp1
-rw-r--r--indra/llui/llview.cpp7
-rw-r--r--indra/llui/llview.h1
-rw-r--r--indra/newview/app_settings/commands.xml28
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/llfavoritesbar.cpp4
-rw-r--r--indra/newview/llfloatersnapshot.cpp2
-rw-r--r--indra/newview/llfloatertoybox.cpp9
-rw-r--r--indra/newview/llfolderview.cpp4
-rw-r--r--indra/newview/llgrouplist.cpp2
-rw-r--r--indra/newview/llpanelpeople.cpp10
-rw-r--r--indra/newview/llpanelteleporthistory.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp15
-rw-r--r--indra/newview/skins/default/textures/textures.xml24
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_toolbar.xml48
-rw-r--r--indra/newview/skins/default/xui/en/floater_toybox.xml25
-rw-r--r--indra/newview/skins/default/xui/en/menu_toolbars.xml29
-rw-r--r--indra/newview/skins/default/xui/en/panel_toolbar_view.xml138
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/toolbar.xml35
29 files changed, 739 insertions, 284 deletions
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 6c08ec7431..06781f1bdf 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -989,11 +989,27 @@ void LLButton::resize(LLUIString label)
// get current btn length
S32 btn_width =getRect().getWidth();
// check if it need resize
- if (mAutoResize == TRUE)
+ if (mAutoResize)
{
- if (btn_width - (mRightHPad + mLeftHPad) < label_width)
+ S32 min_width = label_width + mLeftHPad + mRightHPad;
+ if (mImageOverlay)
{
- setRect(LLRect( getRect().mLeft, getRect().mTop, getRect().mLeft + label_width + mLeftHPad + mRightHPad , getRect().mBottom));
+ switch(mImageOverlayAlignment)
+ {
+ case LLFontGL::LEFT:
+ case LLFontGL::RIGHT:
+ min_width += mImageOverlay->getWidth() + mImgOverlayLabelSpace;
+ break;
+ case LLFontGL::HCENTER:
+ break;
+ default:
+ // draw nothing
+ break;
+ }
+ }
+ if (btn_width < min_width)
+ {
+ reshape(min_width, getRect().getHeight());
}
}
}
diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp
index 6be616b980..783990780b 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;
+ lldebugs << "Successfully added command: " << command->id().name() << llendl;
}
//static
diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h
index 24378ecd62..8435d915f3 100644
--- a/indra/llui/llcommandmanager.h
+++ b/indra/llui/llcommandmanager.h
@@ -31,11 +31,62 @@
#include "llsingleton.h"
+class LLCommand;
+class LLCommandManager;
+
+
+class LLCommandId
+{
+public:
+ friend class LLCommand;
+ friend class LLCommandManager;
+
+ struct Params : public LLInitParam::Block<Params>
+ {
+ Mandatory<std::string> name;
+
+ Params()
+ : name("name")
+ {}
+ };
+
+ LLCommandId(const std::string& name)
+ : mName(name)
+ {}
+
+ LLCommandId(const Params& p)
+ : mName(p.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 +99,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 +138,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 +146,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/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index b1c27126d9..6e39fcd714 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -97,6 +97,7 @@ void LLDockControl::getAllowedRect(LLRect& rect)
void LLDockControl::repositionDockable()
{
+ if (!mDockWidget) return;
LLRect dockRect = mDockWidget->calcScreenRect();
LLRect rootRect;
mGetAllowedRectCallback(rootRect);
@@ -160,7 +161,7 @@ bool LLDockControl::isDockVisible()
case TOP:
{
// check is dock inside parent rect
- // assume that parent for all dockable flaoters
+ // assume that parent for all dockable floaters
// is the root view
LLRect dockParentRect =
mDockWidget->getRootView()->calcScreenRect();
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 6cac841cde..badba7a416 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -947,7 +947,7 @@ LLMenuItemBranchGL::LLMenuItemBranchGL(const LLMenuItemBranchGL::Params& p)
LLMenuItemBranchGL::~LLMenuItemBranchGL()
{
- LLView::deleteViewByHandle(mBranchHandle);
+ delete mBranchHandle.get();
}
// virtual
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index e052c1c876..2fb9f249d4 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -30,10 +30,12 @@
#include <boost/foreach.hpp>
#include "lltoolbar.h"
-#include "llcommandmanager.h"
+#include "llmenugl.h"
#include "lltrans.h"
-static LLDefaultChildRegistry::Register<LLToolBar> r1("toolbar");
+// 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");
namespace LLToolBarEnums
{
@@ -49,34 +51,97 @@ namespace LLToolBarEnums
return orientation;
}
}
+
using namespace LLToolBarEnums;
+
+namespace LLInitParam
+{
+ void TypeValues<ButtonType>::declareValues()
+ {
+ declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT);
+ declare("icons_only", BTNTYPE_ICONS_ONLY);
+ }
+
+ void TypeValues<SideType>::declareValues()
+ {
+ declare("bottom", SIDE_BOTTOM);
+ declare("left", SIDE_LEFT);
+ declare("right", SIDE_RIGHT);
+ declare("top", SIDE_TOP);
+ }
+}
+
LLToolBar::Params::Params()
: button_display_mode("button_display_mode"),
- buttons("button"),
- side("side"),
+ commands("command"),
+ side("side", SIDE_TOP),
button_icon("button_icon"),
button_icon_and_text("button_icon_and_text"),
+ read_only("read_only", false),
wrap("wrap", true),
min_button_width("min_button_width", 0),
max_button_width("max_button_width", S32_MAX),
- background_image("background_image")
+ button_height("button_height"),
+ pad_left("pad_left"),
+ pad_top("pad_top"),
+ pad_right("pad_right"),
+ pad_bottom("pad_bottom"),
+ pad_between("pad_between"),
+ button_panel("button_panel")
{}
LLToolBar::LLToolBar(const LLToolBar::Params& p)
: LLUICtrl(p),
+ mReadOnly(p.read_only),
mButtonType(p.button_display_mode),
mSideType(p.side),
mWrap(p.wrap),
mNeedsLayout(false),
- mCenterPanel(NULL),
+ mButtonPanel(NULL),
mCenteringStack(NULL),
- mMinButtonWidth(p.min_button_width),
- mMaxButtonWidth(p.max_button_width),
- mBackgroundImage(p.background_image)
+ mMinButtonWidth(llmin(p.min_button_width(), p.max_button_width())),
+ mMaxButtonWidth(llmax(p.max_button_width(), p.min_button_width())),
+ mButtonHeight(p.button_height),
+ mPadLeft(p.pad_left),
+ mPadRight(p.pad_right),
+ mPadTop(p.pad_top),
+ mPadBottom(p.pad_bottom),
+ mPadBetween(p.pad_between),
+ mPopupMenuHandle()
{
- mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon;
mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text;
+ mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon;
+}
+
+LLToolBar::~LLToolBar()
+{
+ delete mPopupMenuHandle.get();
+}
+
+void LLToolBar::createContextMenu()
+{
+ if (!mPopupMenuHandle.get())
+ {
+ LLUICtrl::CommitCallbackRegistry::Registrar& commit_reg = LLUICtrl::CommitCallbackRegistry::defaultRegistrar();
+ commit_reg.add("Toolbars.EnableSetting", boost::bind(&LLToolBar::onSettingEnable, this, _2));
+
+ LLUICtrl::EnableCallbackRegistry::Registrar& enable_reg = LLUICtrl::EnableCallbackRegistry::defaultRegistrar();
+ enable_reg.add("Toolbars.CheckSetting", boost::bind(&LLToolBar::isSettingChecked, this, _2));
+
+ LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>("menu_toolbars.xml", LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
+
+ if (menu)
+ {
+ menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor"));
+
+ mPopupMenuHandle = menu->getHandle();
+ }
+ else
+ {
+ llwarns << "Unable to load toolbars context menu." << llendl;
+ }
+ }
}
void LLToolBar::initFromParams(const LLToolBar::Params& p)
@@ -91,6 +156,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
centering_stack_p.rect = getLocalRect();
centering_stack_p.follows.flags = FOLLOWS_ALL;
centering_stack_p.orientation = orientation;
+ centering_stack_p.mouse_opaque = false;
mCenteringStack = LLUICtrlFactory::create<LLLayoutStack>(centering_stack_p);
addChild(mCenteringStack);
@@ -100,6 +166,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
border_panel_p.rect = getLocalRect();
border_panel_p.auto_resize = true;
border_panel_p.user_resize = false;
+ border_panel_p.mouse_opaque = false;
mCenteringStack->addChild(LLUICtrlFactory::create<LLLayoutPanel>(border_panel_p));
@@ -109,84 +176,148 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)
center_panel_p.auto_resize = false;
center_panel_p.user_resize = false;
center_panel_p.fit_content = true;
- mCenterPanel = LLUICtrlFactory::create<LLLayoutPanel>(center_panel_p);
- mCenteringStack->addChild(mCenterPanel);
+ LLLayoutPanel* center_panel = LLUICtrlFactory::create<LLLayoutPanel>(center_panel_p);
+ mCenteringStack->addChild(center_panel);
+
+ LLPanel::Params button_panel_p(p.button_panel);
+ button_panel_p.rect = center_panel->getLocalRect();
+ button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT;
+ mButtonPanel = LLUICtrlFactory::create<LLPanel>(button_panel_p);
+ center_panel->addChild(mButtonPanel);
mCenteringStack->addChild(LLUICtrlFactory::create<LLLayoutPanel>(border_panel_p));
- BOOST_FOREACH (LLToolBarButton::Params button_p, p.buttons)
+ BOOST_FOREACH (const LLCommandId::Params& command_id, p.commands)
{
- // buttons always follow left and top, for all orientations
- button_p.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP;
- button_p.fillFrom(mButtonParams[mButtonType]);
+ mButtonCommands.push_back(command_id);
+ }
+ createButtons();
- LLRect button_rect(button_p.rect);
- { // remove any offset from button
- if (orientation == LLLayoutStack::HORIZONTAL)
- {
- button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight());
- }
- else // VERTICAL
+ mNeedsLayout = true;
+}
+
+bool LLToolBar::addCommand(const LLCommandId& commandId)
+{
+ LLCommand * command = LLCommandManager::instance().getCommand(commandId);
+
+ bool add_command = (command != NULL);
+
+ mButtonCommands.push_back(commandId);
+ createButtons();
+
+ return add_command;
+}
+
+bool LLToolBar::hasCommand(const LLCommandId& commandId) const
+{
+ bool has_command = false;
+
+ if (commandId != LLCommandId::null)
+ {
+ for (std::list<LLCommandId>::const_iterator cmd = mButtonCommands.begin(); cmd != mButtonCommands.end(); ++cmd)
+ {
+ if ((*cmd) == commandId)
{
- button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight());
+ has_command = true;
+ break;
}
}
+ }
- // use our calculated rect
- button_p.rect = button_rect;
- LLToolBarButton* buttonp = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+ return has_command;
+}
- mButtons.push_back(buttonp);
- mCenterPanel->addChild(buttonp);
+bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
+{
+ LLButton * command_button = NULL;
+
+ if (commandId != LLCommandId::null)
+ {
+ command_button = mButtonPanel->findChild<LLButton>(commandId.name());
- mNeedsLayout = true;
+ if (command_button)
+ {
+ command_button->setEnabled(enabled);
+ }
}
+
+ return (command_button != NULL);
}
-bool LLToolBar::addCommand(LLCommand * command)
+BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- //
- // Init basic toolbar button params
- //
+ BOOL handle_it_here = !mReadOnly;
- LLToolBarButton::Params button_p;
- button_p.fillFrom(mButtonParams[mButtonType]);
+ if (handle_it_here)
+ {
+ createContextMenu();
+ LLContextMenu * menu = (LLContextMenu *) mPopupMenuHandle.get();
- button_p.name = command->name();
- button_p.label = LLTrans::getString(command->labelRef());
- button_p.tool_tip = LLTrans::getString(command->tooltipRef());
+ if (menu)
+ {
+ menu->show(x, y);
+ LLMenuGL::showPopup(this, menu, x, y);
+ }
+ }
- //
- // Set up the button rectangle
- //
+ return handle_it_here;
+}
- S32 btn_width = mMinButtonWidth;
- S32 btn_height = mButtonParams[mButtonType].rect.height;
+BOOL LLToolBar::isSettingChecked(const LLSD& userdata)
+{
+ BOOL retval = FALSE;
- if ((mSideType == LLToolBarEnums::SIDE_BOTTOM) || (mSideType == LLToolBarEnums::SIDE_TOP))
+ const std::string setting_name = userdata.asString();
+
+ if (setting_name == "icons_and_labels")
{
- btn_height = getRect().getHeight();
+ retval = (mButtonType == BTNTYPE_ICONS_WITH_TEXT);
+ }
+ else if (setting_name == "icons_only")
+ {
+ retval = (mButtonType == BTNTYPE_ICONS_ONLY);
}
- LLRect button_rect;
- button_rect.setOriginAndSize(0, 0, btn_width, btn_height);
-
- button_p.rect = button_rect;
+ return retval;
+}
- //
- // Add it to the list of buttons
- //
+void LLToolBar::onSettingEnable(const LLSD& userdata)
+{
+ llassert(!mReadOnly);
- LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+ const std::string setting_name = userdata.asString();
- toolbar_button->reshape(llclamp(toolbar_button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), toolbar_button->getRect().getHeight());
+ const ButtonType current_button_type = mButtonType;
- mButtons.push_back(toolbar_button);
- mCenterPanel->addChild(toolbar_button);
+ if (setting_name == "icons_and_labels")
+ {
+ mButtonType = BTNTYPE_ICONS_WITH_TEXT;
+ }
+ else if (setting_name == "icons_only")
+ {
+ mButtonType = BTNTYPE_ICONS_ONLY;
+ }
- mNeedsLayout = true;
+ if(current_button_type != mButtonType)
+ {
+ createButtons();
+ }
+}
- return true;
+void LLToolBar::resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth)
+{
+ // make buttons in current row all same girth
+ BOOST_FOREACH(LLToolBarButton* button, buttons_in_row)
+ {
+ if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL)
+ {
+ button->reshape(llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth), max_row_girth);
+ }
+ else // VERTICAL
+ {
+ button->reshape(max_row_girth, button->getRect().getHeight());
+ }
+ }
}
void LLToolBar::updateLayoutAsNeeded()
@@ -195,23 +326,53 @@ void LLToolBar::updateLayoutAsNeeded()
LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType);
- // our terminology for orientation-agnostic layout is that
+ // our terminology for orientation-agnostic layout is such that
// length refers to a distance in the direction we stack the buttons
// and girth refers to a distance in the direction buttons wrap
- S32 row_running_length = 0;
- S32 max_length = (orientation == LLLayoutStack::HORIZONTAL)
- ? getRect().getWidth()
- : getRect().getHeight();
S32 max_row_girth = 0;
- S32 cur_start = 0;
- S32 cur_row = 0;
+ S32 max_row_length = 0;
+
+ S32 max_length;
+ S32 max_total_girth;
+ S32 cur_start;
+ S32 cur_row ;
+ S32 row_pad_start;
+ S32 row_pad_end;
+ S32 girth_pad_end;
+ S32 row_running_length;
+
+ if (orientation == LLLayoutStack::HORIZONTAL)
+ {
+ max_length = getRect().getWidth() - mPadLeft - mPadRight;
+ max_total_girth = getRect().getHeight() - mPadTop - mPadBottom;
+ row_pad_start = mPadLeft;
+ row_pad_end = mPadRight;
+ cur_row = mPadTop;
+ girth_pad_end = mPadBottom;
+ }
+ else // VERTICAL
+ {
+ max_length = getRect().getHeight() - mPadTop - mPadBottom;
+ max_total_girth = getRect().getWidth() - mPadLeft - mPadRight;
+ row_pad_start = mPadTop;
+ row_pad_end = mPadBottom;
+ cur_row = mPadLeft;
+ girth_pad_end = mPadRight;
+ }
+
+ row_running_length = row_pad_start;
+ cur_start = row_pad_start;
+
- LLRect panel_rect = mCenterPanel->getLocalRect();
+ LLRect panel_rect = mButtonPanel->getLocalRect();
std::vector<LLToolBarButton*> buttons_in_row;
- BOOST_FOREACH(LLToolBarButton* button, mButtons)
- {
+ BOOST_FOREACH(LLToolBarButton* button, mButtons)
+ {
+ button->reshape(mMinButtonWidth, mButtonHeight);
+ button->autoResize();
+
S32 button_clamped_width = llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth);
S32 button_length = (orientation == LLLayoutStack::HORIZONTAL)
? button_clamped_width
@@ -220,37 +381,29 @@ void LLToolBar::updateLayoutAsNeeded()
? button->getRect().getHeight()
: button_clamped_width;
- // handle wrapping
- if (row_running_length + button_length > max_length
- && cur_start != 0) // not first button in row
- { // go ahead and wrap
+ // wrap if needed
+ if (mWrap
+ && row_running_length + button_length > max_length // out of room...
+ && cur_start != row_pad_start) // ...and not first button in row
+ {
if (orientation == LLLayoutStack::VERTICAL)
- {
- // row girth is clamped to allowable button widths
+ { // row girth (width in this case) is clamped to allowable button widths
max_row_girth = llclamp(max_row_girth, mMinButtonWidth, mMaxButtonWidth);
}
+
// make buttons in current row all same girth
- BOOST_FOREACH(LLToolBarButton* button, buttons_in_row)
- {
- 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());
- }
- }
+ resizeButtonsInRow(buttons_in_row, max_row_girth);
buttons_in_row.clear();
- row_running_length = 0;
- cur_start = 0;
- cur_row += max_row_girth;
+ max_row_length = llmax(max_row_length, row_running_length);
+ row_running_length = row_pad_start;
+ cur_start = row_pad_start;
+ cur_row += max_row_girth + mPadBetween;
max_row_girth = 0;
}
- LLRect button_rect;
- if (orientation == LLLayoutStack::HORIZONTAL)
+ LLRect button_rect;
+ if (orientation == LLLayoutStack::HORIZONTAL)
{
button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight());
}
@@ -262,15 +415,20 @@ void LLToolBar::updateLayoutAsNeeded()
buttons_in_row.push_back(button);
- row_running_length += button_length;
+ row_running_length += button_length + mPadBetween;
cur_start = row_running_length;
max_row_girth = llmax(button_girth, max_row_girth);
}
// final resizing in "girth" direction
- S32 total_girth = cur_row + max_row_girth; // increment by size of final row
+ S32 total_girth = cur_row // current row position...
+ + max_row_girth // ...incremented by size of final row...
+ + girth_pad_end; // ...plus padding reserved on end
+ max_row_length = llmax(max_row_length, row_running_length - mPadBetween + row_pad_end);
- // grow and optionally shift toolbar to accomodate buttons
+ resizeButtonsInRow(buttons_in_row, max_row_girth);
+
+ // grow and optionally shift toolbar to accommodate buttons
if (orientation == LLLayoutStack::HORIZONTAL)
{
if (mSideType == SIDE_TOP)
@@ -279,6 +437,7 @@ void LLToolBar::updateLayoutAsNeeded()
}
reshape(getRect().getWidth(), total_girth);
+ mButtonPanel->reshape(max_row_length, total_girth);
}
else // VERTICAL
{
@@ -286,10 +445,12 @@ void LLToolBar::updateLayoutAsNeeded()
{ // shift left to maintain right edge
translate(getRect().getWidth() - total_girth, 0);
}
+
reshape(total_girth, getRect().getHeight());
- }
+ mButtonPanel->reshape(total_girth, max_row_length);
+ }
- // recenter toolbar buttons
+ // re-center toolbar buttons
mCenteringStack->updateLayout();
// don't clear flag until after we've resized ourselves, to avoid laying out every frame
@@ -300,12 +461,6 @@ void LLToolBar::updateLayoutAsNeeded()
void LLToolBar::draw()
{
updateLayoutAsNeeded();
-
- { // draw background
- LLRect bg_rect;
- localRectToOtherView(mCenterPanel->getRect(),&bg_rect, this);
- mBackgroundImage->draw(bg_rect);
- }
LLUICtrl::draw();
}
@@ -315,20 +470,29 @@ void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent)
mNeedsLayout = true;
}
-namespace LLInitParam
+void LLToolBar::createButtons()
{
- void TypeValues<ButtonType>::declareValues()
+ BOOST_FOREACH(LLToolBarButton* button, mButtons)
{
- declare("icons_only", BTNTYPE_ICONS_ONLY);
- declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT);
+ delete button;
}
-
- void TypeValues<SideType>::declareValues()
+ mButtons.clear();
+
+ BOOST_FOREACH(LLCommandId& command_id, mButtonCommands)
{
- declare("none", SIDE_NONE);
- declare("bottom", SIDE_BOTTOM);
- declare("left", SIDE_LEFT);
- declare("right", SIDE_RIGHT);
- declare("top", SIDE_TOP);
+ LLCommand* commandp = LLCommandManager::instance().getCommand(command_id);
+ if (!commandp) continue;
+
+ LLToolBarButton::Params button_p;
+ button_p.label = LLTrans::getString(commandp->labelRef());
+ button_p.image_overlay = LLUI::getUIImage(commandp->icon());
+ button_p.overwriteFrom(mButtonParams[mButtonType]);
+ LLToolBarButton* button = LLUICtrlFactory::create<LLToolBarButton>(button_p);
+
+ mButtons.push_back(button);
+ mButtonPanel->addChild(button);
}
+
+ mNeedsLayout = true;
}
+
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 85cd6d5170..75ae499a3d 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -28,12 +28,11 @@
#ifndef LL_LLTOOLBAR_H
#define LL_LLTOOLBAR_H
-#include "lluictrl.h"
-#include "lllayoutstack.h"
#include "llbutton.h"
-
-
-class LLCommand;
+#include "llcommandmanager.h"
+#include "lllayoutstack.h"
+#include "lluictrl.h"
+#include "llcommandmanager.h"
class LLToolBarButton : public LLButton
@@ -51,15 +50,14 @@ namespace LLToolBarEnums
{
enum ButtonType
{
- BTNTYPE_ICONS_ONLY = 0,
- BTNTYPE_ICONS_WITH_TEXT,
+ BTNTYPE_ICONS_WITH_TEXT = 0,
+ BTNTYPE_ICONS_ONLY,
BTNTYPE_COUNT
};
enum SideType
{
- SIDE_NONE = 0,
SIDE_BOTTOM,
SIDE_LEFT,
SIDE_RIGHT,
@@ -97,13 +95,22 @@ public:
Optional<LLToolBarButton::Params> button_icon,
button_icon_and_text;
- Optional<bool> wrap;
+ Optional<bool> read_only,
+ wrap;
+
Optional<S32> min_button_width,
- max_button_width;
+ max_button_width,
+ button_height;
+
+ Optional<S32> pad_left,
+ pad_top,
+ pad_right,
+ pad_bottom,
+ pad_between;
// get rid of this
- Multiple<LLToolBarButton::Params> buttons;
+ Multiple<LLCommandId::Params> commands;
- Optional<LLUIImage*> background_image;
+ Optional<LLPanel::Params> button_panel;
Params();
};
@@ -111,33 +118,51 @@ public:
// virtuals
void draw();
void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
+ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
- bool addCommand(LLCommand * command);
+ bool addCommand(const LLCommandId& commandId);
+ bool hasCommand(const LLCommandId& commandId) const;
+ bool enableCommand(const LLCommandId& commandId, bool enabled);
protected:
friend class LLUICtrlFactory;
LLToolBar(const Params&);
+ ~LLToolBar();
void initFromParams(const Params&);
private:
+ void createContextMenu();
void updateLayoutAsNeeded();
+ void createButtons();
+ void resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth);
+ BOOL isSettingChecked(const LLSD& userdata);
+ void onSettingEnable(const LLSD& userdata);
+
+ const bool mReadOnly;
std::list<LLToolBarButton*> mButtons;
+ std::list<LLCommandId> mButtonCommands;
LLToolBarEnums::ButtonType mButtonType;
LLLayoutStack* mCenteringStack;
LLLayoutStack* mWrapStack;
- LLLayoutPanel* mCenterPanel;
+ LLPanel* mButtonPanel;
LLToolBarEnums::SideType mSideType;
bool mWrap;
bool mNeedsLayout;
S32 mMinButtonWidth,
- mMaxButtonWidth;
-
- LLUIImagePtr mBackgroundImage;
+ mMaxButtonWidth,
+ mButtonHeight,
+ mPadLeft,
+ mPadRight,
+ mPadTop,
+ mPadBottom,
+ mPadBetween;
LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT];
+
+ LLHandle<class LLContextMenu> mPopupMenuHandle;
};
diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp
index 590cd4ffca..9df6f4946f 100644
--- a/indra/llui/lltoolbarview.cpp
+++ b/indra/llui/lltoolbarview.cpp
@@ -37,7 +37,10 @@ LLToolBarView* gToolBarView = NULL;
static LLDefaultChildRegistry::Register<LLToolBarView> r("toolbar_view");
LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)
-: LLUICtrl(p)
+: LLUICtrl(p),
+ mToolbarLeft(NULL),
+ mToolbarRight(NULL),
+ mToolbarBottom(NULL)
{
}
@@ -51,21 +54,46 @@ LLToolBarView::~LLToolBarView()
{
}
+BOOL LLToolBarView::postBuild()
+{
+ mToolbarLeft = getChild<LLToolBar>("toolbar_left");
+ mToolbarRight = getChild<LLToolBar>("toolbar_right");
+ mToolbarBottom = getChild<LLToolBar>("toolbar_bottom");
+ return TRUE;
+}
+
+bool LLToolBarView::hasCommand(const LLCommandId& commandId) const
+{
+ bool has_command = false;
+ if (mToolbarLeft && !has_command)
+ {
+ has_command = mToolbarLeft->hasCommand(commandId);
+ }
+ if (mToolbarRight && !has_command)
+ {
+ has_command = mToolbarRight->hasCommand(commandId);
+ }
+ if (mToolbarBottom && !has_command)
+ {
+ has_command = mToolbarBottom->hasCommand(commandId);
+ }
+ return has_command;
+}
+
void LLToolBarView::draw()
{
static bool debug_print = true;
static S32 old_width = 0;
static S32 old_height = 0;
- LLToolBar* toolbar_bottom = getChild<LLToolBar>("toolbar_bottom");
- LLToolBar* toolbar_left = getChild<LLToolBar>("toolbar_left");
- LLToolBar* toolbar_right = getChild<LLToolBar>("toolbar_right");
- LLPanel* sizer_left = getChild<LLPanel>("sizer_left");
+ //LLPanel* sizer_left = getChild<LLPanel>("sizer_left");
+
+ LLRect bottom_rect, left_rect, right_rect;
+
+ if (mToolbarBottom) mToolbarBottom->localRectToOtherView(mToolbarBottom->getLocalRect(), &bottom_rect, this);
+ if (mToolbarLeft) mToolbarLeft->localRectToOtherView(mToolbarLeft->getLocalRect(), &left_rect, this);
+ if (mToolbarRight) mToolbarRight->localRectToOtherView(mToolbarRight->getLocalRect(), &right_rect, this);
- LLRect bottom_rect = toolbar_bottom->getRect();
- LLRect left_rect = toolbar_left->getRect();
- LLRect right_rect = toolbar_right->getRect();
- LLRect sizer_left_rect = sizer_left->getRect();
if ((old_width != getRect().getWidth()) || (old_height != getRect().getHeight()))
debug_print = true;
@@ -76,18 +104,21 @@ void LLToolBarView::draw()
llinfos << "Merov debug : draw bottom rect = " << bottom_rect.mLeft << ", " << bottom_rect.mTop << ", " << bottom_rect.mRight << ", " << bottom_rect.mBottom << llendl;
llinfos << "Merov debug : draw left rect = " << left_rect.mLeft << ", " << left_rect.mTop << ", " << left_rect.mRight << ", " << left_rect.mBottom << llendl;
llinfos << "Merov debug : draw right rect = " << right_rect.mLeft << ", " << right_rect.mTop << ", " << right_rect.mRight << ", " << right_rect.mBottom << llendl;
- llinfos << "Merov debug : draw s left rect = " << sizer_left_rect.mLeft << ", " << sizer_left_rect.mTop << ", " << sizer_left_rect.mRight << ", " << sizer_left_rect.mBottom << llendl;
old_width = ctrl_rect.getWidth();
old_height = ctrl_rect.getHeight();
debug_print = false;
}
// Debug draw
LLColor4 back_color = LLColor4::blue;
+ LLColor4 back_color_vert = LLColor4::red;
+ LLColor4 back_color_hori = LLColor4::yellow;
back_color[VALPHA] = 0.5f;
-// gl_rect_2d(getLocalRect(), back_color, TRUE);
-// gl_rect_2d(bottom_rect, LLColor4::red, TRUE);
-// gl_rect_2d(left_rect, LLColor4::green, TRUE);
-// gl_rect_2d(right_rect, LLColor4::yellow, TRUE);
+ back_color_hori[VALPHA] = 0.5f;
+ back_color_vert[VALPHA] = 0.5f;
+ //gl_rect_2d(getLocalRect(), back_color, TRUE);
+ gl_rect_2d(bottom_rect, back_color_hori, TRUE);
+ gl_rect_2d(left_rect, back_color_vert, TRUE);
+ gl_rect_2d(right_rect, back_color_vert, TRUE);
LLUICtrl::draw();
}
diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h
index 73278e226b..2e7885f391 100644
--- a/indra/llui/lltoolbarview.h
+++ b/indra/llui/lltoolbarview.h
@@ -29,6 +29,8 @@
#define LL_LLTOOLBARVIEW_H
#include "lluictrl.h"
+#include "lltoolbar.h"
+#include "llcommandmanager.h"
class LLUICtrlFactory;
@@ -38,9 +40,17 @@ class LLToolBarView : public LLUICtrl
{
public:
struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> {};
+
virtual ~LLToolBarView();
+ /*virtual*/ BOOL postBuild();
+
virtual void draw();
+ bool hasCommand(const LLCommandId& commandId) const;
+
+ // valid children for LLToolBarView are stored in this registry
+ typedef LLDefaultChildRegistry child_registry_t;
+
protected:
friend class LLUICtrlFactory;
LLToolBarView(const Params&);
@@ -48,7 +58,9 @@ protected:
void initFromParams(const Params&);
private:
- LLHandle<LLView> mSnapView;
+ LLToolBar* mToolbarLeft;
+ LLToolBar* mToolbarRight;
+ LLToolBar* mToolbarBottom;
};
extern LLToolBarView* gToolBarView;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index a4303780fd..4f129ccfba 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -96,6 +96,7 @@ static LLDefaultChildRegistry::Register<LLSearchEditor> register_search_editor("
// register other widgets which otherwise may not be linked in
static LLDefaultChildRegistry::Register<LLLoadingIndicator> register_loading_indicator("loading_indicator");
+static LLDefaultChildRegistry::Register<LLToolBar> register_toolbar("toolbar");
//
// Functions
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 60452b9ae4..e10c2f0d1e 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1826,13 +1826,6 @@ LLView* LLView::findNextSibling(LLView* child)
return (next_it != mChildList.end()) ? *next_it : NULL;
}
-void LLView::deleteViewByHandle(LLHandle<LLView> handle)
-{
- LLView* viewp = handle.get();
-
- delete viewp;
-}
-
LLCoordGL getNeededTranslation(const LLRect& input, const LLRect& constraint, BOOL allow_partial_outside)
{
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 594a5eec6b..7a1b2e4ba0 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -482,7 +482,6 @@ public:
// return query for iterating over focus roots in tab order
static const LLCtrlQuery & getFocusRootsQuery();
- static void deleteViewByHandle(LLHandle<LLView> handle);
static LLWindow* getWindow(void) { return LLUI::sWindow; }
// Set up params after XML load before calling new(),
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 5cb8ddffcd..4a33b24075 100644
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<commands>
<command name="avatar"
+ available_in_toybox="true"
icon="Command_Avatar_Icon"
label_ref="Command_Avatar_Label"
tooltip_ref="Command_Avatar_Tooltip"
@@ -8,6 +9,7 @@
param="avatar"
/>
<command name="build"
+ available_in_toybox="true"
icon="Command_Build_Icon"
label_ref="Command_Build_Label"
tooltip_ref="Command_Build_Tooltip"
@@ -15,6 +17,7 @@
param="build"
/>
<command name="chat"
+ available_in_toybox="true"
icon="Command_Chat_Icon"
label_ref="Command_Chat_Label"
tooltip_ref="Command_Chat_Tooltip"
@@ -22,6 +25,7 @@
param="chat"
/>
<command name="compass"
+ available_in_toybox="false"
icon="Command_Compass_Icon"
label_ref="Command_Compass_Label"
tooltip_ref="Command_Compass_Tooltip"
@@ -29,6 +33,7 @@
param="compass"
/>
<command name="gestures"
+ available_in_toybox="true"
icon="Command_Gestures_Icon"
label_ref="Command_Gestures_Label"
tooltip_ref="Command_Gestures_Tooltip"
@@ -36,6 +41,7 @@
param="gestures"
/>
<command name="howto"
+ available_in_toybox="true"
icon="Command_HowTo_Icon"
label_ref="Command_HowTo_Label"
tooltip_ref="Command_HowTo_Tooltip"
@@ -43,6 +49,7 @@
param="howto"
/>
<command name="landmarks"
+ available_in_toybox="true"
icon="Command_Landmarks_Icon"
label_ref="Command_Landmarks_Label"
tooltip_ref="Command_Landmarks_Tooltip"
@@ -50,13 +57,23 @@
param="landmarks"
/>
<command name="map"
+ available_in_toybox="true"
icon="Command_Map_Icon"
label_ref="Command_Map_Label"
tooltip_ref="Command_Map_Tooltip"
function="Floater.ToolbarToggle"
param="map"
/>
+ <command name="minimap"
+ available_in_toybox="true"
+ icon="Command_MiniMap_Icon"
+ label_ref="Command_MiniMap_Label"
+ tooltip_ref="Command_MiniMap_Tooltip"
+ function="Floater.ToolbarToggle"
+ param="minimap"
+ />
<command name="move"
+ available_in_toybox="true"
icon="Command_Move_Icon"
label_ref="Command_Move_Label"
tooltip_ref="Command_Move_Tooltip"
@@ -64,6 +81,7 @@
param="move"
/>
<command name="myland"
+ available_in_toybox="true"
icon="Command_MyLand_Icon"
label_ref="Command_MyLand_Label"
tooltip_ref="Command_MyLand_Tooltip"
@@ -71,6 +89,7 @@
param="myland"
/>
<command name="mystuff"
+ available_in_toybox="true"
icon="Command_MyStuff_Icon"
label_ref="Command_MyStuff_Label"
tooltip_ref="Command_MyStuff_Tooltip"
@@ -78,6 +97,7 @@
param="mystuff"
/>
<command name="people"
+ available_in_toybox="true"
icon="Command_People_Icon"
label_ref="Command_People_Label"
tooltip_ref="Command_People_Tooltip"
@@ -85,6 +105,7 @@
param="people"
/>
<command name="places"
+ available_in_toybox="true"
icon="Command_Places_Icon"
label_ref="Command_Places_Label"
tooltip_ref="Command_Places_Tooltip"
@@ -92,6 +113,7 @@
param="places"
/>
<command name="search"
+ available_in_toybox="true"
icon="Command_Search_Icon"
label_ref="Command_Search_Label"
tooltip_ref="Command_Search_Tooltip"
@@ -99,6 +121,7 @@
param="search"
/>
<command name="settings"
+ available_in_toybox="true"
icon="Command_Settings_Icon"
label_ref="Command_Settings_Label"
tooltip_ref="Command_Settings_Tooltip"
@@ -106,6 +129,7 @@
param="settings"
/>
<command name="shop"
+ available_in_toybox="true"
icon="Command_Shop_Icon"
label_ref="Command_Shop_Label"
tooltip_ref="Command_Shop_Tooltip"
@@ -113,6 +137,7 @@
param="shop"
/>
<command name="snapshot"
+ available_in_toybox="true"
icon="Command_Snapshot_Icon"
label_ref="Command_Snapshot_Label"
tooltip_ref="Command_Snapshot_Tooltip"
@@ -120,6 +145,7 @@
param="snapshot"
/>
<command name="speak"
+ available_in_toybox="true"
icon="Command_Speak_Icon"
label_ref="Command_Speak_Label"
tooltip_ref="Command_Speak_Tooltip"
@@ -127,6 +153,7 @@
param="speak"
/>
<command name="upload"
+ available_in_toybox="true"
icon="Command_Upload_Icon"
label_ref="Command_Upload_Label"
tooltip_ref="Command_Upload_Tooltip"
@@ -134,6 +161,7 @@
param="upload"
/>
<command name="view"
+ available_in_toybox="true"
icon="Command_View_Icon"
label_ref="Command_View_Label"
tooltip_ref="Command_View_Tooltip"
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f1db72e5cc..9a06423422 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1858,7 +1858,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>Cursor3D</key>
<map>
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 0b17d64eb0..836c580ea8 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -403,8 +403,8 @@ LLFavoritesBarCtrl::~LLFavoritesBarCtrl()
{
gInventory.removeObserver(this);
- LLView::deleteViewByHandle(mOverflowMenuHandle);
- LLView::deleteViewByHandle(mContextMenuHandle);
+ delete mOverflowMenuHandle.get();
+ delete mContextMenuHandle.get();
}
BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 00dc7b1627..9d020517d8 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2112,7 +2112,7 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
// Destroys the object
LLFloaterSnapshot::~LLFloaterSnapshot()
{
- LLView::deleteViewByHandle(impl.mPreviewHandle);
+ delete impl.mPreviewHandle.get();
//unfreeze everything else
gSavedSettings.setBOOL("FreezeTime", FALSE);
diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp
index eaaaeb3357..beb928ea36 100644
--- a/indra/newview/llfloatertoybox.cpp
+++ b/indra/newview/llfloatertoybox.cpp
@@ -32,6 +32,7 @@
#include "llcommandmanager.h"
#include "llpanel.h"
#include "lltoolbar.h"
+#include "lltoolbarview.h"
LLFloaterToybox::LLFloaterToybox(const LLSD& key)
@@ -63,7 +64,13 @@ BOOL LLFloaterToybox::postBuild()
{
LLCommand * command = cmdMgr.getCommand(i);
- mToolBar->addCommand(command);
+ if (command->availableInToybox())
+ {
+ mToolBar->addCommand(command->id());
+
+ llassert(gToolBarView != NULL);
+ mToolBar->enableCommand(command->id(), !gToolBarView->hasCommand(command->id()));
+ }
}
return TRUE;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 9ba5f827e2..6ec2598e44 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -299,7 +299,7 @@ LLFolderView::~LLFolderView( void )
mAutoOpenItems.removeAllNodes();
gIdleCallbacks.deleteFunction(idle, this);
- LLView::deleteViewByHandle(mPopupMenuHandle);
+ delete mPopupMenuHandle.get();
mAutoOpenItems.removeAllNodes();
clearSelection();
@@ -1969,7 +1969,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
void LLFolderView::deleteAllChildren()
{
closeRenamer();
- LLView::deleteViewByHandle(mPopupMenuHandle);
+ delete mPopupMenuHandle.get();
mPopupMenuHandle = LLHandle<LLView>();
mScrollContainer = NULL;
mRenameItem = NULL;
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index c3e6e1c2dc..f7ed1116cb 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -95,7 +95,7 @@ LLGroupList::LLGroupList(const Params& p)
LLGroupList::~LLGroupList()
{
gAgent.removeListener(this);
- LLView::deleteViewByHandle(mContextMenuHandle);
+ delete mContextMenuHandle.get();
}
// virtual
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index e3a7b749ea..177aa4f5c8 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -526,11 +526,11 @@ LLPanelPeople::~LLPanelPeople()
LLVoiceClient::getInstance()->removeObserver(this);
}
- LLView::deleteViewByHandle(mGroupPlusMenuHandle);
- LLView::deleteViewByHandle(mNearbyViewSortMenuHandle);
- LLView::deleteViewByHandle(mFriendsViewSortMenuHandle);
- LLView::deleteViewByHandle(mGroupsViewSortMenuHandle);
- LLView::deleteViewByHandle(mRecentViewSortMenuHandle);
+ delete mGroupPlusMenuHandle.get();
+ delete mNearbyViewSortMenuHandle.get();
+ delete mFriendsViewSortMenuHandle.get();
+ delete mGroupsViewSortMenuHandle.get();
+ delete mRecentViewSortMenuHandle.get();
}
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 9b35e78134..dfa8c75493 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -388,7 +388,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
LLTeleportHistoryPanel::~LLTeleportHistoryPanel()
{
LLTeleportHistoryFlatItemStorage::instance().purge();
- LLView::deleteViewByHandle(mGearMenuHandle);
+ delete mGearMenuHandle.get();
}
BOOL LLTeleportHistoryPanel::postBuild()
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5355e77bfc..6d69932e93 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1779,16 +1779,17 @@ void LLViewerWindow::initBase()
mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
mLoginPanelHolder = main_view->getChild<LLView>("login_panel_holder")->getHandle();
- // Update the toolbar global holder
+ // Create the toolbar view
// *TODO: Eventually, suppress the existence of this debug setting and turn toolbar FUI on permanently
if (gSavedSettings.getBOOL("DebugToolbarFUI"))
{
// Get a pointer to the toolbar view holder
LLPanel* panel_holder = main_view->getChild<LLPanel>("toolbar_view_holder");
// Load the toolbar view from file
- gToolBarView = LLUICtrlFactory::getInstance()->createFromFile<LLToolBarView>("panel_toolbar_view.xml", panel_holder, LLPanel::child_registry_t::instance());
- // Attach it to the toolbar view holder
- //panel_holder->addChild(gToolBarView);
+ gToolBarView = LLUICtrlFactory::getInstance()->createFromFile<LLToolBarView>("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance());
+ gToolBarView->setShape(panel_holder->getLocalRect());
+ // Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI())
+ gToolBarView->setVisible(FALSE);
}
// Constrain floaters to inside the menu and status bar regions.
@@ -1953,6 +1954,12 @@ void LLViewerWindow::initWorldUI()
buttons_panel->setShape(buttons_panel_container->getLocalRect());
buttons_panel->setFollowsAll();
buttons_panel_container->addChild(buttons_panel);
+
+ // Make the toolbars visible
+ if (gToolBarView)
+ {
+ gToolBarView->setVisible(TRUE);
+ }
}
// Destroy the UI
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index d68594097c..be68c2873e 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -133,6 +133,7 @@ with the same filename but different name
<texture name="Command_HowTo_Icon" file_name="icons/SL_Logo.png" preload="true" />
<texture name="Command_Landmarks_Icon" file_name="icons/SL_Logo.png" preload="true" />
<texture name="Command_Map_Icon" file_name="icons/SL_Logo.png" preload="true" />
+ <texture name="Command_MiniMap_Icon" file_name="icons/SL_Logo.png" preload="true" />
<texture name="Command_Move_Icon" file_name="icons/SL_Logo.png" preload="true" />
<texture name="Command_MyLand_Icon" file_name="icons/SL_Logo.png" preload="true" />
<texture name="Command_MyStuff_Icon" file_name="icons/SL_Logo.png" preload="true" />
@@ -758,4 +759,27 @@ with the same filename but different name
<texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
<texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
<texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
+
+ <texture name="Command_Avatar_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Build_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Chat_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Compass_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Gestures_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_HowTo_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Landmarks_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Map_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_MiniMap_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Move_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_MyLand_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_MyStuff_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_People_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Places_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Search_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Settings_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Shop_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Snapshot_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Speak_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_Upload_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+ <texture name="Command_View_Icon" file_name="taskpanel/TabIcon_Home_Off.png"/>
+
</textures>
diff --git a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
index 85f0f104fc..fbfbe51a69 100644
--- a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
@@ -13,44 +13,35 @@
width="500"
left="0"
top="20"
- min_width="100"
+ min_button_width="0"
+ max_button_width="100"
side="top">
- <button auto_resize="true"
- label="Button"/>
- <button auto_resize="true"
- label="Button with long label"/>
- <button auto_resize="true"
- label="Button with longest label of all"/>
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
</toolbar>
<toolbar name="test_toolbar_left"
follows="left|bottom|top"
height="380"
- width="100"
+ width="200"
left="0"
top="70"
- min_width="100"
+ min_button_width="100"
side="left">
- <button height="30"
- label="Button"/>
- <button height="50"
- label="Button with long label"/>
- <button height="60"
- label="Button with longest label of all"/>
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
</toolbar>
<toolbar name="test_toolbar_right"
follows="right|bottom|top"
height="380"
- width="100"
+ width="200"
right="500"
top="70"
- min_width="100"
side="right">
- <button auto_resize="true"
- label="Button 1"/>
- <button auto_resize="true"
- label="Button with long label"/>
- <button auto_resize="true"
- label="Button with longest label of all"/>
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
</toolbar>
<toolbar name="test_toolbar_bottom"
follows="left|right|bottom"
@@ -58,13 +49,10 @@
width="500"
left="0"
bottom="500"
- min_width="100"
+ min_button_width="100"
side="bottom">
- <button auto_resize="true"
- label="Button"/>
- <button auto_resize="true"
- label="Button with long label"/>
- <button auto_resize="true"
- label="Button with longest label of all"/>
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
</toolbar>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
index 5f3a59d964..60a39b0bff 100644
--- a/indra/newview/skins/default/xui/en/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/en/floater_toybox.xml
@@ -14,17 +14,17 @@
save_rect="true"
single_instance="true"
title="Customize toolbars"
- width="658">
+ width="650">
<text
follows="left|top"
font="SansSerifMedium"
halign="left"
height="20"
layout="topleft"
- left="40"
+ left="20"
length="1"
name="toybox label 1"
- right="-40"
+ right="-20"
top="35"
type="string">
Add or remove buttons by dragging them to or from the toolbars.
@@ -35,21 +35,28 @@
halign="left"
height="20"
layout="topleft"
- left="40"
+ left="20"
length="1"
name="toybox label 2"
- right="-40"
+ right="-20"
top="55"
type="string">
Buttons will appear as shown or as icon-only depending on each toolbar's settings.
</text>
<toolbar
bottom="395"
- left="40"
+ button_display_mode="icons_with_text"
+ left="20"
max_button_width="140"
- min_button_width="140"
+ min_button_width="70"
name="toybox_toolbar"
- right="-40"
+ pad_left="5"
+ pad_right="5"
+ pad_top="5"
+ pad_bottom="5"
+ pad_between="15"
+ read_only="true"
+ right="-20"
side="top"
top="85">
</toolbar>
@@ -59,7 +66,7 @@
label="Restore defaults"
label_selected="Restore defaults"
layout="topleft"
- left="40"
+ left="20"
name="btn_restore_defaults"
top="415"
width="130">
diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml
new file mode 100644
index 0000000000..de13fec670
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Toolbars Popup"
+ visible="false">
+ <menu_item_call label="Choose buttons..."
+ layout="topleft"
+ name="Chose Buttons">
+ <menu_item_call.on_click function="Floater.Show"
+ parameter="toybox" />
+ </menu_item_call>
+ <menu_item_separator layout="topleft" />
+ <menu_item_check label="Icons and labels"
+ layout="topleft"
+ name="icons_and_labels">
+ <on_click function="Toolbars.EnableSetting"
+ parameter="icons_and_labels" />
+ <on_check function="Toolbars.CheckSetting"
+ parameter="icons_and_labels" />
+ </menu_item_check>
+ <menu_item_check label="Icons only"
+ layout="topleft"
+ name="icons_only">
+ <on_click function="Toolbars.EnableSetting"
+ parameter="icons_only" />
+ <on_check function="Toolbars.CheckSetting"
+ parameter="icons_only" />
+ </menu_item_check>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
index 33a19bcdb0..23ea516b86 100644
--- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
@@ -5,51 +5,101 @@
name="toolbar view"
height="500"
width="1024"
+ left="0"
+ top="0"
mouse_opaque="false"
tab_stop="false"
visible="true">
- <toolbar
- follows="top|bottom|left"
- layout="topleft"
- name="toolbar_left"
- height="500"
- width="30"
- left="0"
- top="0"
- side="left"
- visible="true" />
- <toolbar
- follows="right|bottom|left"
- layout="topleft"
- name="toolbar_bottom"
- height="30"
- width="964"
- left="30"
- top="470"
- side="bottom"
- visible="true" />
- <toolbar
- follows="top|bottom|right"
- layout="topleft"
- name="toolbar_right"
- height="500"
- width="30"
- left="994"
- top="0"
- side="right"
- visible="true" />
- <panel
- follows="right|bottom|left"
- layout="topleft"
- name="sizer_left"
- height="500"
- width="30"
- left="0"
- top="0"
- background_opaque="false"
- border_visible="false"
- background_visible="true"
- bg_opaque_image="Toast_Over"
- bg_alpha_image="Toast_Background"
- visible="true" />
+ <layout_stack name="bottom_toolbar_stack"
+ orientation="vertical"
+ left="0"
+ top="0"
+ width="1024"
+ height="500"
+ follows="all"
+ mouse_opaque="false">
+ <layout_panel name="vertical_toolbar_panel"
+ auto_resize="true"
+ user_resize="false"
+ width="1024"
+ height="500"
+ mouse_opaque="false">
+ <layout_stack name="vertical_toolbar_stack"
+ orientation="horizontal"
+ left="0"
+ top="0"
+ width="1024"
+ height="500"
+ follows="all"
+ mouse_opaque="false">
+ <layout_panel name="left_toolbar_panel"
+ fit_content="true"
+ auto_resize="false"
+ user_resize="false"
+ height="500"
+ width="30"
+ mouse_opaque="false">
+ <toolbar follows="left|top|bottom"
+ name="toolbar_left"
+ height="500"
+ width="30"
+ left="0"
+ top="0"
+ side="left"
+ button_display_mode="icons_only">
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
+ </toolbar>
+ </layout_panel>
+ <layout_panel name="non_toolbar_panel"
+ auto_resize="true"
+ user_resize="false"
+ mouse_opaque="false"/>
+ <layout_panel name="right_toolbar_panel"
+ fit_content="true"
+ auto_resize="false"
+ user_resize="false"
+ height="500"
+ width="30"
+ mouse_opaque="false">
+ <toolbar
+ follows="right|top|bottom"
+ name="toolbar_right"
+ height="500"
+ width="30"
+ left="0"
+ top="0"
+ side="right"
+ button_display_mode="icons_only">
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
+ </toolbar>
+ </layout_panel>
+ </layout_stack>
+ </layout_panel>
+ <layout_panel name="bottom_toolbar_panel"
+ fit_content="true"
+ auto_resize="false"
+ user_resize="false"
+ height="30"
+ width="1024"
+ mouse_opaque="false">
+ <toolbar layout="topleft"
+ name="toolbar_bottom"
+ height="30"
+ width="1024"
+ left="0"
+ top="0"
+ side="bottom"
+ follows="left|right|bottom"
+ button_display_mode="icons_with_text"
+ visible="true">
+ <command name="avatar"/>
+ <command name="build"/>
+ <command name="chat"/>
+ </toolbar>
+ </layout_panel>
+ </layout_stack>
</toolbar_view>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index d4c2bc50ca..feea555fdc 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3668,6 +3668,8 @@ Try enclosing path to the editor with double quotes.
<string name="Command_Landmarks_Tooltip"></string>
<string name="Command_Map_Label">Map</string>
<string name="Command_Map_Tooltip"></string>
+ <string name="Command_MiniMap_Label">Mini Map</string>
+ <string name="Command_MiniMap_Tooltip"></string>
<string name="Command_Move_Label">Move</string>
<string name="Command_Move_Tooltip"></string>
<string name="Command_MyLand_Label">My Land</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
index a7f73c0c7c..32bc88cc9a 100644
--- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
@@ -1,15 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<toolbar background_image = "Rounded_Rect">
- <button_icon_and_text
- follows="none"
- height="30"
- chrome="true"
- auto_resize="true"
- />
- <button_icon
- follows="none"
- height="30"
- chrome="true"
- auto_resize="true"
- />
+<toolbar button_height="30"
+ pad_left="5"
+ pad_right="5"
+ pad_top="5"
+ pad_bottom="5"
+ pad_between="5"
+ mouse_opaque="false"
+ read_only="false">
+ <button_panel name="button_panel"
+ bg_opaque_image="Rounded_Rect"
+ background_visible="true"
+ background_opaque="true"/>
+ <button_icon_and_text follows="left|top"
+ chrome="true"
+ image_overlay_alignment="left"
+ use_ellipses="true"
+ auto_resize="true"/>
+ <button_icon follows="left|top"
+ label=""
+ chrome="true"
+ use_ellipses="true"
+ auto_resize="true"/>
</toolbar>