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.meow-7.2.2
parent
16fead6429
commit
9da5a8d010
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue