diff options
author | Leslie Linden <leslie@lindenlab.com> | 2011-09-26 14:34:42 -0700 |
---|---|---|
committer | Leslie Linden <leslie@lindenlab.com> | 2011-09-26 14:34:42 -0700 |
commit | 9da5a8d01085f13c0586bba4c818ed540335ae2e (patch) | |
tree | 310d1948cfa313cf01e386b1c817112b42c6628f /indra | |
parent | 16fead6429eba35bdfb8ef01610780a508e062df (diff) |
EXP-1205 PROGRESS -- As a User, I want a toybox which will contain all buttons that I can d&d into the toolbars
EXP-1233 PROGRESS -- Populate the toybox floater window with all FUI toolbar buttons
EXP-1235 FIX -- Make the toybox available through the context menus associated with the other toolbars
EXP-1248 FIX -- Implement context menu on toolbars
* New commands are listed
* Toolbars can now be made read-only (as in the toybox) or editable (as in the others)
* Toolbars that are not read-only have a context menu that allows button type editing.
Reviewed by Richard.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llui/lltoolbar.cpp | 113 | ||||
-rw-r--r-- | indra/llui/lltoolbar.h | 18 | ||||
-rw-r--r-- | indra/newview/app_settings/commands.xml | 9 | ||||
-rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 1 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_toybox.xml | 4 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/menu_toolbars.xml | 29 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/widgets/toolbar.xml | 3 |
8 files changed, 166 insertions, 13 deletions
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 31a18dc707..a9513b759a 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -31,6 +31,7 @@ #include "lltoolbar.h" #include "llcommandmanager.h" +#include "llmenugl.h" #include "lltrans.h" // uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit @@ -51,6 +52,7 @@ namespace LLToolBarEnums return orientation; } } + using namespace LLToolBarEnums; @@ -58,8 +60,8 @@ namespace LLInitParam { void TypeValues<ButtonType>::declareValues() { - declare("icons_only", BTNTYPE_ICONS_ONLY); declare("icons_with_text", BTNTYPE_ICONS_WITH_TEXT); + declare("icons_only", BTNTYPE_ICONS_ONLY); } void TypeValues<SideType>::declareValues() @@ -77,6 +79,7 @@ LLToolBar::Params::Params() 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), @@ -91,6 +94,7 @@ LLToolBar::Params::Params() LLToolBar::LLToolBar(const LLToolBar::Params& p) : LLUICtrl(p), + mReadOnly(p.read_only), mButtonType(p.button_display_mode), mSideType(p.side), mWrap(p.wrap), @@ -104,10 +108,47 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) mPadRight(p.pad_right), mPadTop(p.pad_top), mPadBottom(p.pad_bottom), - mPadBetween(p.pad_between) + 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() +{ + LLView::deleteViewByHandle(mPopupMenuHandle); +} + +BOOL LLToolBar::postBuild() +{ + if (!mReadOnly) + { + 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)); + + // + // Setup the context menu + // + + LLMenuGL* menu = LLUICtrlFactory::instance().createFromFile<LLMenuGL>("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; + } + } + + return TRUE; } void LLToolBar::initFromParams(const LLToolBar::Params& p) @@ -199,6 +240,61 @@ bool LLToolBar::addCommand(LLCommand * command) return true; } +BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + BOOL handle_it_here = !mReadOnly; + + if (handle_it_here) + { + LLMenuGL * menu = (LLMenuGL *) mPopupMenuHandle.get(); + + if (menu) + { + LLMenuGL::showPopup(this, menu, x, y); + } + } + + return handle_it_here; +} + +BOOL LLToolBar::isSettingChecked(const LLSD& userdata) +{ + BOOL retval = FALSE; + + const std::string setting_name = userdata.asString(); + + if (setting_name == "icons_and_labels") + { + retval = (mButtonType == BTNTYPE_ICONS_WITH_TEXT); + } + else if (setting_name == "icons_only") + { + retval = (mButtonType == BTNTYPE_ICONS_ONLY); + } + + return retval; +} + +void LLToolBar::onSettingEnable(const LLSD& userdata) +{ + llassert(!mReadOnly); + + const std::string setting_name = userdata.asString(); + + const ButtonType current_button_type = mButtonType; + + if (setting_name == "icons_and_labels") + { + mButtonType = BTNTYPE_ICONS_WITH_TEXT; + } + else if (setting_name == "icons_only") + { + mButtonType = BTNTYPE_ICONS_ONLY; + } + + mNeedsLayout |= (current_button_type != mButtonType); +} + void LLToolBar::resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth) { // make buttons in current row all same girth @@ -264,8 +360,8 @@ void LLToolBar::updateLayoutAsNeeded() std::vector<LLToolBarButton*> buttons_in_row; - BOOST_FOREACH(LLToolBarButton* button, mButtons) - { + BOOST_FOREACH(LLToolBarButton* button, mButtons) + { button->reshape(mMinButtonWidth, mButtonHeight); button->autoResize(); @@ -296,11 +392,11 @@ void LLToolBar::updateLayoutAsNeeded() cur_start = row_pad_start; cur_row += max_row_girth + mPadBetween; max_row_girth = 0; - } + } LLRect button_rect; if (orientation == LLLayoutStack::HORIZONTAL) - { + { button_rect.setLeftTopAndSize(cur_start, panel_rect.mTop - cur_row, button_clamped_width, button->getRect().getHeight()); } else // VERTICAL @@ -340,8 +436,9 @@ void LLToolBar::updateLayoutAsNeeded() { // shift left to maintain right edge mButtonPanel->translate(mButtonPanel->getRect().getWidth() - total_girth, 0); } + mButtonPanel->reshape(total_girth, max_row_length); - } + } // re-center toolbar buttons mCenteringStack->updateLayout(); diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 92c289cd3f..5028c39fb8 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -51,8 +51,8 @@ namespace LLToolBarEnums { enum ButtonType { - BTNTYPE_ICONS_ONLY = 0, - BTNTYPE_ICONS_WITH_TEXT, + BTNTYPE_ICONS_WITH_TEXT = 0, + BTNTYPE_ICONS_ONLY, BTNTYPE_COUNT }; @@ -96,7 +96,9 @@ 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, button_height; @@ -116,6 +118,7 @@ public: // virtuals void draw(); + BOOL postBuild(); void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); bool addCommand(LLCommand * command); @@ -123,13 +126,20 @@ public: protected: friend class LLUICtrlFactory; LLToolBar(const Params&); + ~LLToolBar(); void initFromParams(const Params&); + BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + BOOL isSettingChecked(const LLSD& userdata); + void onSettingEnable(const LLSD& userdata); + private: void updateLayoutAsNeeded(); void resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth); + const bool mReadOnly; + std::list<LLToolBarButton*> mButtons; LLToolBarEnums::ButtonType mButtonType; LLLayoutStack* mCenteringStack; @@ -149,6 +159,8 @@ private: mPadBetween; LLToolBarButton::Params mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; + + LLHandle<LLView> mPopupMenuHandle; }; diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index 5cb8ddffcd..dbb0e8b7ca 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -21,6 +21,7 @@ function="Floater.ToolbarToggle" param="chat" /> + <!-- Compass it not supported by the viewer yet <command name="compass" icon="Command_Compass_Icon" label_ref="Command_Compass_Label" @@ -28,6 +29,7 @@ function="Floater.ToolbarToggle" param="compass" /> + --> <command name="gestures" icon="Command_Gestures_Icon" label_ref="Command_Gestures_Label" @@ -56,6 +58,13 @@ function="Floater.ToolbarToggle" param="map" /> + <command name="minimap" + icon="Command_MiniMap_Icon" + label_ref="Command_MiniMap_Label" + tooltip_ref="Command_MiniMap_Tooltip" + function="Floater.ToolbarToggle" + param="minimap" + /> <command name="move" icon="Command_Move_Icon" label_ref="Command_Move_Label" diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index d68594097c..8f2194e652 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" /> diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index 5f3a59d964..1c9f20c496 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -45,10 +45,12 @@ </text> <toolbar bottom="395" + button_display_mode="icons_with_text" left="40" max_button_width="140" - min_button_width="140" + min_button_width="70" name="toybox_toolbar" + read_only="true" right="-40" side="top" top="85"> 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..b3ecd3dcb6 --- /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" ?> +<menu bottom="825" + 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> +</menu> 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 45210277b2..7346e5ce2d 100644 --- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml +++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml @@ -4,7 +4,8 @@ pad_right="5" pad_top="5" pad_bottom="5" - pad_between="5"> + pad_between="5" + read_only="false"> <button_panel name="button_panel" bg_opaque_image="Rounded_Rect" |