diff options
author | Merov Linden <merov@lindenlab.com> | 2011-09-23 15:20:25 -0700 |
---|---|---|
committer | Merov Linden <merov@lindenlab.com> | 2011-09-23 15:20:25 -0700 |
commit | e42a9ec70c0e5fc98282c98358039445d0d68b84 (patch) | |
tree | 555cc9b4023e5eef6e2e019eb392a1267b378de3 | |
parent | 1bcf6882c5faa94385f045e1c591da96408bb032 (diff) | |
parent | 53a8e1299305a4acad83f52401679c86485fcf51 (diff) |
EXP-1207 : pull from viewer-experience-fui
-rw-r--r-- | indra/llui/llcommandmanager.cpp | 32 | ||||
-rw-r--r-- | indra/llui/llcommandmanager.h | 16 | ||||
-rw-r--r-- | indra/llui/lltoolbar.cpp | 233 | ||||
-rw-r--r-- | indra/llui/lltoolbar.h | 22 | ||||
-rw-r--r-- | indra/newview/app_settings/commands.xml | 126 | ||||
-rw-r--r-- | indra/newview/lldndbutton.cpp | 9 | ||||
-rw-r--r-- | indra/newview/lldndbutton.h | 5 | ||||
-rw-r--r-- | indra/newview/llfloatertoybox.cpp | 18 | ||||
-rw-r--r-- | indra/newview/llfloatertoybox.h | 5 | ||||
-rw-r--r-- | indra/newview/lltoolbar.cpp | 365 | ||||
-rw-r--r-- | indra/newview/lltoolbar.h | 82 | ||||
-rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 22 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_test_toolbar.xml | 47 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_toybox.xml | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 38 |
15 files changed, 433 insertions, 592 deletions
diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 306b357d6a..6be616b980 100644 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -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; diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h index 4f3c9b2ada..24378ecd62 100644 --- a/indra/llui/llcommandmanager.h +++ b/indra/llui/llcommandmanager.h @@ -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 diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 167dbfcc47..e052c1c876 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -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" + static LLDefaultChildRegistry::Register<LLToolBar> r1("toolbar"); namespace LLToolBarEnums @@ -55,8 +58,8 @@ LLToolBar::Params::Params() button_icon("button_icon"), button_icon_and_text("button_icon_and_text"), wrap("wrap", true), - min_width("min_width", 0), - max_width("max_width", S32_MAX), + min_button_width("min_button_width", 0), + max_button_width("max_button_width", S32_MAX), background_image("background_image") {} @@ -68,10 +71,12 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) mNeedsLayout(false), mCenterPanel(NULL), mCenteringStack(NULL), - mMinWidth(p.min_width), - mMaxWidth(p.max_width), + mMinButtonWidth(p.min_button_width), + 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) @@ -109,120 +114,192 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) mCenteringStack->addChild(LLUICtrlFactory::create<LLLayoutPanel>(border_panel_p)); - addRow(); - BOOST_FOREACH (LLToolBarButton::Params button_p, p.buttons) { + // buttons always follow left and top, for all orientations + button_p.follows.flags = FOLLOWS_LEFT|FOLLOWS_TOP; + button_p.fillFrom(mButtonParams[mButtonType]); + LLRect button_rect(button_p.rect); { // remove any offset from button if (orientation == LLLayoutStack::HORIZONTAL) { - button_rect.setOriginAndSize(0, 0, mMinWidth, getRect().getHeight()); + button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight()); } else // VERTICAL { - button_rect.setOriginAndSize(0, 0, mMinWidth, button_rect.getHeight()); + button_rect.setOriginAndSize(0, 0, mMinButtonWidth, button_rect.getHeight()); } } - button_p.fillFrom((mButtonType == BTNTYPE_ICONS_ONLY) - ? p.button_icon // icon only - : p.button_icon_and_text); // icon + text + // use our calculated rect + button_p.rect = button_rect; + LLToolBarButton* buttonp = LLUICtrlFactory::create<LLToolBarButton>(button_p); + + mButtons.push_back(buttonp); + mCenterPanel->addChild(buttonp); - mButtons.push_back(LLUICtrlFactory::create<LLToolBarButton>(button_p)); mNeedsLayout = true; } - - updateLayout(); } -void LLToolBar::addButton(LLToolBarButton* buttonp) +bool LLToolBar::addCommand(LLCommand * command) { - LLLayoutPanel::Params panel_p; - panel_p.name = buttonp->getName() + "_panel"; - panel_p.user_resize = false; - panel_p.auto_resize= false; - panel_p.fit_content = true; + // + // Init basic toolbar button params + // - LLLayoutPanel* panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); - - panel->addChild(buttonp); - mStacks.back()->addChild(panel); + 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::updateLayout() +void LLToolBar::updateLayoutAsNeeded() { - mCenteringStack->updateLayout(); - if (!mNeedsLayout) return; - mNeedsLayout = false; - { // clean up existing rows + 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 + 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; + + LLRect panel_rect = mCenterPanel->getLocalRect(); + + std::vector<LLToolBarButton*> buttons_in_row; + BOOST_FOREACH(LLToolBarButton* button, mButtons) { - if (button->getParent()) + S32 button_clamped_width = llclamp(button->getRect().getWidth(), mMinButtonWidth, mMaxButtonWidth); + S32 button_length = (orientation == LLLayoutStack::HORIZONTAL) + ? button_clamped_width + : button->getRect().getHeight(); + S32 button_girth = (orientation == LLLayoutStack::HORIZONTAL) + ? 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 + if (orientation == LLLayoutStack::VERTICAL) { - button->getParent()->removeChild(button); + // row girth 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); } - - BOOST_FOREACH(LLLayoutStack* stack, mStacks) + else // VERTICAL { - delete stack; + button->reshape(max_row_girth, button->getRect().getHeight()); + } } - mStacks.clear(); + buttons_in_row.clear(); + + row_running_length = 0; + cur_start = 0; + cur_row += max_row_girth; + max_row_girth = 0; } - // start with one row of buttons - addRow(); - S32 total_width = 0, total_height = 0; - S32 max_total_width = 0, max_total_height = 0; - S32 max_width = getRect().getWidth(), max_height = getRect().getHeight(); - BOOST_FOREACH(LLToolBarButton* button, mButtons) + LLRect button_rect; + if (orientation == LLLayoutStack::HORIZONTAL) { - S32 button_width = button->getRect().getWidth(); - S32 button_height = button->getRect().getHeight(); - - if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL - && total_width + button_height > getRect().getWidth()) + button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight()); + } + else // VERTICAL { - addRow(); - total_width = 0; + button_rect.setLeftTopAndSize(cur_row, panel_rect.mTop - cur_start, button_clamped_width, button->getRect().getHeight()); } - addButton(button); - - total_width += button_width; - total_height += button_height; - max_total_width = llmax(max_total_width, total_width); - max_total_height = llmax(max_total_height, total_height); - max_width = llmax(button->getRect().getWidth(), max_width); - max_height = llmax(button->getRect().getHeight(), max_height); + button->setShape(button_rect); + + buttons_in_row.push_back(button); + + row_running_length += button_length; + cur_start = row_running_length; + max_row_girth = llmax(button_girth, max_row_girth); } - if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL) + // final resizing in "girth" direction + S32 total_girth = cur_row + max_row_girth; // increment by size of final row + + // grow and optionally shift toolbar to accomodate buttons + if (orientation == LLLayoutStack::HORIZONTAL) { - BOOST_FOREACH(LLLayoutStack* stack, mStacks) - { - stack->reshape(max_total_width, stack->getParent()->getRect().getHeight()); - stack->updateLayout(); + if (mSideType == SIDE_TOP) + { // shift down to maintain top edge + translate(0, getRect().getHeight() - total_girth); } + + reshape(getRect().getWidth(), total_girth); } - else + else // VERTICAL { - BOOST_FOREACH(LLLayoutStack* stack, mStacks) - { - stack->reshape(stack->getParent()->getRect().getWidth(), max_total_height); - stack->updateLayout(); + if (mSideType == SIDE_RIGHT) + { // shift left to maintain right edge + translate(getRect().getWidth() - total_girth, 0); + } + reshape(total_girth, getRect().getHeight()); } - reshape(max_total_width, getRect().getHeight()); - } + // recenter toolbar buttons + mCenteringStack->updateLayout(); + + // don't clear flag until after we've resized ourselves, to avoid laying out every frame + mNeedsLayout = false; } void LLToolBar::draw() { - updateLayout(); + updateLayoutAsNeeded(); { // draw background LLRect bg_rect; @@ -232,22 +309,6 @@ void LLToolBar::draw() LLUICtrl::draw(); } -void LLToolBar::addRow() -{ - LLLayoutStack::ELayoutOrientation orientation = getOrientation(mSideType); - - LLLayoutStack::Params stack_p; - stack_p.rect = getLocalRect(); - stack_p.name = llformat("button_stack_%d", mStacks.size()); - stack_p.orientation = orientation; - stack_p.follows.flags = (orientation == LLLayoutStack::HORIZONTAL) - ? (FOLLOWS_TOP|FOLLOWS_BOTTOM) // horizontal - : (FOLLOWS_LEFT|FOLLOWS_RIGHT); // vertical - - mStacks.push_back(LLUICtrlFactory::create<LLLayoutStack>(stack_p)); - mCenterPanel->addChild(mStacks.back()); -} - void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent) { LLUICtrl::reshape(width, height, called_from_parent); diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 3a593e42d9..85cd6d5170 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -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 @@ -93,8 +98,8 @@ public: button_icon_and_text; Optional<bool> wrap; - Optional<S32> min_width, - max_width; + Optional<S32> min_button_width, + max_button_width; // get rid of this Multiple<LLToolBarButton::Params> buttons; @@ -107,16 +112,16 @@ 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&); void initFromParams(const Params&); - void addButton(LLToolBarButton* buttonp); - void updateLayout(); private: - void addRow(); + void updateLayoutAsNeeded(); std::list<LLToolBarButton*> mButtons; LLToolBarEnums::ButtonType mButtonType; @@ -125,13 +130,14 @@ private: LLLayoutPanel* mCenterPanel; LLToolBarEnums::SideType mSideType; - std::vector<LLLayoutStack*> mStacks; bool mWrap; bool mNeedsLayout; - S32 mMinWidth, - mMaxWidth; + S32 mMinButtonWidth, + mMaxButtonWidth; LLUIImagePtr mBackgroundImage; + + LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; }; diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index 8e45e866ca..5cb8ddffcd 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -7,6 +7,83 @@ function="Floater.ToolbarToggle" param="avatar" /> + <command name="build" + icon="Command_Build_Icon" + label_ref="Command_Build_Label" + tooltip_ref="Command_Build_Tooltip" + function="Floater.ToolbarToggle" + param="build" + /> + <command name="chat" + icon="Command_Chat_Icon" + label_ref="Command_Chat_Label" + tooltip_ref="Command_Chat_Tooltip" + function="Floater.ToolbarToggle" + param="chat" + /> + <command name="compass" + icon="Command_Compass_Icon" + label_ref="Command_Compass_Label" + tooltip_ref="Command_Compass_Tooltip" + function="Floater.ToolbarToggle" + param="compass" + /> + <command name="gestures" + icon="Command_Gestures_Icon" + label_ref="Command_Gestures_Label" + tooltip_ref="Command_Gestures_Tooltip" + function="Floater.ToolbarToggle" + param="gestures" + /> + <command name="howto" + icon="Command_HowTo_Icon" + label_ref="Command_HowTo_Label" + tooltip_ref="Command_HowTo_Tooltip" + function="Floater.ToolbarToggle" + param="howto" + /> + <command name="landmarks" + icon="Command_Landmarks_Icon" + label_ref="Command_Landmarks_Label" + tooltip_ref="Command_Landmarks_Tooltip" + function="Floater.ToolbarToggle" + param="landmarks" + /> + <command name="map" + icon="Command_Map_Icon" + label_ref="Command_Map_Label" + tooltip_ref="Command_Map_Tooltip" + function="Floater.ToolbarToggle" + param="map" + /> + <command name="move" + icon="Command_Move_Icon" + label_ref="Command_Move_Label" + tooltip_ref="Command_Move_Tooltip" + function="Floater.ToolbarToggle" + param="move" + /> + <command name="myland" + icon="Command_MyLand_Icon" + label_ref="Command_MyLand_Label" + tooltip_ref="Command_MyLand_Tooltip" + function="Floater.ToolbarToggle" + param="myland" + /> + <command name="mystuff" + icon="Command_MyStuff_Icon" + label_ref="Command_MyStuff_Label" + tooltip_ref="Command_MyStuff_Tooltip" + function="Floater.ToolbarToggle" + param="mystuff" + /> + <command name="people" + icon="Command_People_Icon" + label_ref="Command_People_Label" + tooltip_ref="Command_People_Tooltip" + function="Floater.ToolbarToggle" + param="people" + /> <command name="places" icon="Command_Places_Icon" label_ref="Command_Places_Label" @@ -14,4 +91,53 @@ function="Floater.ToolbarToggle" param="places" /> + <command name="search" + icon="Command_Search_Icon" + label_ref="Command_Search_Label" + tooltip_ref="Command_Search_Tooltip" + function="Floater.ToolbarToggle" + param="search" + /> + <command name="settings" + icon="Command_Settings_Icon" + label_ref="Command_Settings_Label" + tooltip_ref="Command_Settings_Tooltip" + function="Floater.ToolbarToggle" + param="settings" + /> + <command name="shop" + icon="Command_Shop_Icon" + label_ref="Command_Shop_Label" + tooltip_ref="Command_Shop_Tooltip" + function="Floater.ToolbarToggle" + param="shop" + /> + <command name="snapshot" + icon="Command_Snapshot_Icon" + label_ref="Command_Snapshot_Label" + tooltip_ref="Command_Snapshot_Tooltip" + function="Floater.ToolbarToggle" + param="snapshot" + /> + <command name="speak" + icon="Command_Speak_Icon" + label_ref="Command_Speak_Label" + tooltip_ref="Command_Speak_Tooltip" + function="Floater.ToolbarToggle" + param="speak" + /> + <command name="upload" + icon="Command_Upload_Icon" + label_ref="Command_Upload_Label" + tooltip_ref="Command_Upload_Tooltip" + function="Floater.ToolbarToggle" + param="upload" + /> + <command name="view" + icon="Command_View_Icon" + label_ref="Command_View_Label" + tooltip_ref="Command_View_Tooltip" + function="Floater.ToolbarToggle" + param="view" + /> </commands> diff --git a/indra/newview/lldndbutton.cpp b/indra/newview/lldndbutton.cpp index 8a38c8a643..7c9dda6b1d 100644 --- a/indra/newview/lldndbutton.cpp +++ b/indra/newview/lldndbutton.cpp @@ -31,16 +31,9 @@ static LLDefaultChildRegistry::Register<LLDragAndDropButton> r("dnd_button"); -LLDragAndDropButton::Params::Params() -{ - -} - LLDragAndDropButton::LLDragAndDropButton(const Params& params) : LLButton(params) -{ - -} +{} BOOL LLDragAndDropButton::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg) { diff --git a/indra/newview/lldndbutton.h b/indra/newview/lldndbutton.h index 0642cbb7b9..53ea2f5ea7 100644 --- a/indra/newview/lldndbutton.h +++ b/indra/newview/lldndbutton.h @@ -43,10 +43,7 @@ class LLDragAndDropButton : public LLButton { public: - struct Params : public LLInitParam::Block<Params, LLButton::Params> - { - Params(); - }; + struct Params : public LLInitParam::Block<Params, LLButton::Params> {}; LLDragAndDropButton(const Params& params); diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp index b4fb2e45ab..eaaaeb3357 100644 --- a/indra/newview/llfloatertoybox.cpp +++ b/indra/newview/llfloatertoybox.cpp @@ -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++) - { - LLToyboxButton * button = LLToyboxButtons::get(i); + LLCommandManager& cmdMgr = LLCommandManager::instance(); - // Panel opacity depends on whether or not button position is established - LLPanel * buttonPanel = createPanelForButton(button); + for (U32 i = 0; i < cmdMgr.commandCount(); i++) + { + LLCommand * command = cmdMgr.getCommand(i); - mToolBar->add(buttonPanel); + mToolBar->addCommand(command); } -*/ return TRUE; } diff --git a/indra/newview/llfloatertoybox.h b/indra/newview/llfloatertoybox.h index bb9392a0e3..3574e060bf 100644 --- a/indra/newview/llfloatertoybox.h +++ b/indra/newview/llfloatertoybox.h @@ -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 diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp deleted file mode 100644 index c4f599561d..0000000000 --- a/indra/newview/lltoolbar.cpp +++ /dev/null @@ -1,365 +0,0 @@ -/** - * @file lltoolbar.cpp - * @author James Cook, Richard Nelson - * @brief Large friendly buttons at bottom of screen. - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "lltoolbar.h" - -#include "imageids.h" -#include "llfloaterreg.h" -#include "llfontgl.h" -#include "llflyoutbutton.h" -#include "llrect.h" -#include "llparcel.h" - -#include "llagent.h" -#include "llagentwearables.h" -#include "llbutton.h" -#include "llfocusmgr.h" -#include "llviewercontrol.h" -#include "llmenucommands.h" -#include "llimview.h" -#include "lluiconstants.h" -#include "llvoavatarself.h" -#include "lltooldraganddrop.h" -#include "llfloaterinventory.h" -#include "llfloaterchatterbox.h" -#include "llfloatersnapshot.h" -#include "llinventorypanel.h" -#include "lltoolmgr.h" -#include "llui.h" -#include "llviewermenu.h" -//#include "llfirstuse.h" -#include "llpanelblockedlist.h" -#include "llscrolllistctrl.h" -#include "llscrolllistitem.h" -#include "llscrolllistcell.h" -#include "llviewerparcelmgr.h" -#include "lluictrlfactory.h" -#include "llviewerwindow.h" -#include "lltoolgrab.h" -#include "llcombobox.h" -#include "lllayoutstack.h" - -#if LL_DARWIN - - #include "llresizehandle.h" - -#endif // LL_DARWIN - -// -// Globals -// - -LLToolBar *gToolBar = NULL; - -// -// Statics -// -F32 LLToolBar::sInventoryAutoOpenTime = 1.f; - -// -// Functions -// - -LLToolBar::LLToolBar() - : LLPanel(), - - mInventoryAutoOpen(FALSE), - mNumUnreadIMs(0) -#if LL_DARWIN - , mResizeHandle(NULL) -#endif // LL_DARWIN -{ - setIsChrome(TRUE); - setFocusRoot(TRUE); - - mCommitCallbackRegistrar.add("HandleCommunicate", &LLToolBar::onClickCommunicate); -} - - -BOOL LLToolBar::postBuild() -{ - for (child_list_const_iter_t child_iter = getChildList()->begin(); - child_iter != getChildList()->end(); ++child_iter) - { - LLView *view = *child_iter; - LLButton* buttonp = dynamic_cast<LLButton*>(view); - if(buttonp) - { - buttonp->setSoundFlags(LLView::SILENT); - } - } - -#if LL_DARWIN - if(mResizeHandle == NULL) - { - LLRect rect(0, 0, RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT); - LLResizeHandle::Params p; - p.name(""); - p.rect(rect); - p.min_width(RESIZE_HANDLE_WIDTH); - p.min_height(RESIZE_HANDLE_HEIGHT); - p.enabled(false); - mResizeHandle = LLUICtrlFactory::create<LLResizeHandle>(p); - addChildInBack(mResizeHandle); - LLLayoutStack* toolbar_stack = getChild<LLLayoutStack>("toolbar_stack"); - toolbar_stack->reshape(toolbar_stack->getRect().getWidth() - RESIZE_HANDLE_WIDTH, toolbar_stack->getRect().getHeight()); - } -#endif // LL_DARWIN - - layoutButtons(); - - return TRUE; -} - -LLToolBar::~LLToolBar() -{ - // LLView destructor cleans up children -} - - -BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg) -{ - LLButton* inventory_btn = getChild<LLButton>("inventory_btn"); - if (!inventory_btn) return FALSE; - - LLRect button_screen_rect; - inventory_btn->localRectToScreen(inventory_btn->getRect(),&button_screen_rect); - - const LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); - if(active_panel) - { - mInventoryAutoOpen = FALSE; - } - else if (button_screen_rect.pointInRect(x, y)) - { - if (mInventoryAutoOpen) - { - if (!active_panel && - mInventoryAutoOpenTimer.getElapsedTimeF32() > sInventoryAutoOpenTime) - { - LLFloaterInventory::showAgentInventory(); - } - } - else - { - mInventoryAutoOpen = TRUE; - mInventoryAutoOpenTimer.reset(); - } - } - - return LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); -} - -// static -void LLToolBar::toggle(void*) -{ - BOOL show = gSavedSettings.getBOOL("ShowToolBar"); - gSavedSettings.setBOOL("ShowToolBar", !show); - gToolBar->setVisible(!show); -} - - -// static -BOOL LLToolBar::visible(void*) -{ - return gToolBar->getVisible(); -} - - -void LLToolBar::layoutButtons() -{ -#if LL_DARWIN - const S32 FUDGE_WIDTH_OF_SCREEN = 4; - S32 width = gViewerWindow->getWindowWidthScaled() + FUDGE_WIDTH_OF_SCREEN; - S32 pad = 2; - - // this function may be called before postBuild(), in which case mResizeHandle won't have been set up yet. - if(mResizeHandle != NULL) - { - // Only when running in windowed mode on the Mac, leave room for a resize widget on the right edge of the bar. - width -= RESIZE_HANDLE_WIDTH; - - LLRect r; - r.mLeft = width - pad; - r.mBottom = 0; - r.mRight = r.mLeft + RESIZE_HANDLE_WIDTH; - r.mTop = r.mBottom + RESIZE_HANDLE_HEIGHT; - mResizeHandle->setRect(r); - mResizeHandle->setVisible(TRUE); - } -#endif // LL_DARWIN -} - - -// virtual -void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent) -{ - LLPanel::reshape(width, height, called_from_parent); - - layoutButtons(); -} - - -// Per-frame updates of visibility -void LLToolBar::refresh() -{ - BOOL show = gSavedSettings.getBOOL("ShowToolBar"); - BOOL mouselook = gAgent.cameraMouselook(); - setVisible(show && !mouselook); - - if (isInVisibleChain()) - { - updateCommunicateList(); - } -} - -void LLToolBar::updateCommunicateList() -{ - LLFlyoutButton* communicate_button = getChild<LLFlyoutButton>("communicate_btn"); - LLSD selected = communicate_button->getValue(); - - communicate_button->removeall(); - - //LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater(); - LLScrollListItem* itemp = NULL; - - LLSD contact_sd; - contact_sd["value"] = "contacts"; - /*contact_sd["columns"][0]["value"] = LLFloaterMyFriends::getInstance()->getShortTitle(); - if (LLFloaterMyFriends::getInstance() == frontmost_floater) - { - contact_sd["columns"][0]["font"]["name"] = "SANSSERIF_SMALL"; - contact_sd["columns"][0]["font"]["style"] = "BOLD"; - // make sure current tab is selected in list - if (selected.isUndefined()) - { - selected = "contacts"; - } - }*/ - itemp = communicate_button->addElement(contact_sd, ADD_TOP); - - communicate_button->addSeparator(ADD_TOP); - communicate_button->add(getString("Redock Windows"), LLSD("redock"), ADD_TOP); - communicate_button->addSeparator(ADD_TOP); - communicate_button->add(getString("Blocked List"), LLSD("mute list"), ADD_TOP); - - std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it; - - /*if (gIMMgr->getIMFloaterHandles().size() > 0) - { - communicate_button->addSeparator(ADD_TOP); - } - - for(floater_handle_it = gIMMgr->getIMFloaterHandles().begin(); floater_handle_it != gIMMgr->getIMFloaterHandles().end(); ++floater_handle_it) - { - LLFloaterIMPanel* im_floaterp = (LLFloaterIMPanel*)floater_handle_it->get(); - if (im_floaterp) - { - std::string floater_title = im_floaterp->getNumUnreadMessages() > 0 ? "*" : ""; - floater_title.append(im_floaterp->getShortTitle()); - LLSD im_sd; - im_sd["value"] = im_floaterp->getSessionID(); - im_sd["columns"][0]["value"] = floater_title; - if (im_floaterp == frontmost_floater) - { - im_sd["columns"][0]["font"]["name"] = "SANSSERIF_SMALL"; - im_sd["columns"][0]["font"]["style"] = "BOLD"; - if (selected.isUndefined()) - { - selected = im_floaterp->getSessionID(); - } - } - itemp = communicate_button->addElement(im_sd, ADD_TOP); - } - }*/ - - communicate_button->setValue(selected); -} - - -// static -void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data) -{ - LLFlyoutButton* communicate_button = dynamic_cast<LLFlyoutButton*>(ctrl); - llassert_always(communicate_button); - - LLSD selected_option = communicate_button->getValue(); - - if (selected_option.asString() == "contacts") - { - LLFloaterReg::showInstance("contacts", "friends"); - } - else if (selected_option.asString() == "local chat") - { - LLFloaterReg::showInstance("communicate", "local"); - } - else if (selected_option.asString() == "redock") - { - /*LLFloaterChatterBox* chatterbox_instance = LLFloaterChatterBox::getInstance(); - if(chatterbox_instance) - { - chatterbox_instance->addFloater(LLFloaterMyFriends::getInstance(), FALSE); - - LLUUID session_to_show; - - std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it; - for(floater_handle_it = gIMMgr->getIMFloaterHandles().begin(); floater_handle_it != gIMMgr->getIMFloaterHandles().end(); ++floater_handle_it) - { - LLFloater* im_floaterp = floater_handle_it->get(); - if (im_floaterp) - { - if (im_floaterp->isFrontmost()) - { - session_to_show = ((LLFloaterIMPanel*)im_floaterp)->getSessionID(); - } - chatterbox_instance->addFloater(im_floaterp, FALSE); - } - } - LLFloaterReg::showInstance("communicate", session_to_show); - }*/ - } - else if (selected_option.asString() == "mute list") - { - LLPanelBlockedList::showPanelAndSelect(LLUUID::null); - } - else if (selected_option.isUndefined()) // user just clicked the communicate button, treat as toggle - { - /*LLFloaterReg::toggleInstance("communicate");*/ - } - else // otherwise selection_option is undifined or a specific IM session id - { - /*LLFloaterReg::showInstance("communicate", selected_option);*/ - } -} - - diff --git a/indra/newview/lltoolbar.h b/indra/newview/lltoolbar.h deleted file mode 100644 index 217b3c0ac8..0000000000 --- a/indra/newview/lltoolbar.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @file lltoolbar.h - * @brief Large friendly buttons at bottom of screen. - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLTOOLBAR_H -#define LL_LLTOOLBAR_H - -#include "llpanel.h" - -#include "llframetimer.h" - -class LLResizeHandle; - -class LLToolBar -: public LLPanel -{ -public: - LLToolBar(); - ~LLToolBar(); - - /*virtual*/ BOOL postBuild(); - - /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg); - - /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); - - static void toggle(void*); - static BOOL visible(void*); - - // Move buttons to appropriate locations based on rect. - void layoutButtons(); - - // Per-frame refresh call - void refresh(); - - // callbacks - static void onClickCommunicate(LLUICtrl*, const LLSD&); - - static F32 sInventoryAutoOpenTime; - -private: - void updateCommunicateList(); - - -private: - BOOL mInventoryAutoOpen; - LLFrameTimer mInventoryAutoOpenTimer; - S32 mNumUnreadIMs; -#if LL_DARWIN - LLResizeHandle *mResizeHandle; -#endif // LL_DARWIN -}; - -extern LLToolBar *gToolBar; - -#endif diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 598e39730c..d68594097c 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -125,8 +125,26 @@ with the same filename but different name <texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" /> <texture name="Check_Mark" file_name="icons/check_mark" preload="true" /> - <texture name="Command_Avatar_Icon" file_name="icons/SL_Logo.png" preload="true" /> - <texture name="Command_Places_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Avatar_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Build_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Chat_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Compass_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Gestures_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <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_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" /> + <texture name="Command_People_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Places_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Search_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Settings_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Shop_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Snapshot_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Speak_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_Upload_Icon" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="Command_View_Icon" file_name="icons/SL_Logo.png" preload="true" /> <texture name="ComboButton_Disabled" file_name="widgets/ComboButton_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> 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 138322eca7..85f0f104fc 100644 --- a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml +++ b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml @@ -7,33 +7,64 @@ name="floater_test_toolbar" translate="false" width="500"> - <toolbar name="test_toolbar_horizontal" + <toolbar name="test_toolbar_top" follows="left|right|top" height="50" width="500" left="0" top="20" + min_width="100" side="top"> <button auto_resize="true" - label="Button 1"/> + label="Button"/> <button auto_resize="true" label="Button with long label"/> <button auto_resize="true" label="Button with longest label of all"/> </toolbar> - <toolbar name="test_toolbar_vertical" + <toolbar name="test_toolbar_left" follows="left|bottom|top" - height="430" + height="380" width="100" left="0" top="70" + min_width="100" side="left"> <button height="30" - label="Button 1"/> + label="Button"/> <button height="50" - label="Button 2"/> + label="Button with long label"/> <button height="60" - label="Button 3"/> + label="Button with longest label of all"/> + </toolbar> + <toolbar name="test_toolbar_right" + follows="right|bottom|top" + height="380" + width="100" + 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"/> + </toolbar> + <toolbar name="test_toolbar_bottom" + follows="left|right|bottom" + height="50" + width="500" + left="0" + bottom="500" + min_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"/> </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 1951497309..5f3a59d964 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -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 diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3b986664db..d4c2bc50ca 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3653,8 +3653,44 @@ Try enclosing path to the editor with double quotes. <!-- commands --> <string name="Command_Avatar_Label">Avatar</string> - <string name="Command_Avatar_Tooltip">Customize your avatar</string> + <string name="Command_Avatar_Tooltip">Change the appearance of your avatar</string> + <string name="Command_Build_Label">Build</string> + <string name="Command_Build_Tooltip">Building, reshaping terrain</string> + <string name="Command_Chat_Label">Chat</string> + <string name="Command_Chat_Tooltip">Chat with people nearby</string> + <string name="Command_Compass_Label">Compass</string> + <string name="Command_Compass_Tooltip"></string> + <string name="Command_Gestures_Label">Gestures</string> + <string name="Command_Gestures_Tooltip"></string> + <string name="Command_HowTo_Label">How To</string> + <string name="Command_HowTo_Tooltip"></string> + <string name="Command_Landmarks_Label">Landmarks</string> + <string name="Command_Landmarks_Tooltip"></string> + <string name="Command_Map_Label">Map</string> + <string name="Command_Map_Tooltip"></string> + <string name="Command_Move_Label">Move</string> + <string name="Command_Move_Tooltip"></string> + <string name="Command_MyLand_Label">My Land</string> + <string name="Command_MyLand_Tooltip">Information about the land you're visiting</string> + <string name="Command_MyStuff_Label">My Stuff</string> + <string name="Command_MyStuff_Tooltip">View and use your belongings</string> + <string name="Command_People_Label">People</string> + <string name="Command_People_Tooltip"></string> <string name="Command_Places_Label">Places</string> <string name="Command_Places_Tooltip">Destination guide</string> + <string name="Command_Search_Label">Search</string> + <string name="Command_Search_Tooltip">Find...</string> + <string name="Command_Settings_Label">Settings</string> + <string name="Command_Settings_Tooltip">Preferences</string> + <string name="Command_Shop_Label">Shop</string> + <string name="Command_Shop_Tooltip"></string> + <string name="Command_Snapshot_Label">Snapshot</string> + <string name="Command_Snapshot_Tooltip">Take a picture</string> + <string name="Command_Speak_Label">Speak</string> + <string name="Command_Speak_Tooltip">Speak with people nearby using your microphone</string> + <string name="Command_Upload_Label">Upload</string> + <string name="Command_Upload_Tooltip"></string> + <string name="Command_View_Label">View</string> + <string name="Command_View_Tooltip">Changing your view of the world</string> </strings> |