summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-06-02 21:53:28 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-06-02 21:54:47 +0300
commitf363646eb71d58007fc4936a67ad9c7bde9b93ac (patch)
tree7fe2cb881bb4411797122b84e91b61a9277c735f /indra
parent090bb3e6de6d5cb70ed372748a76e391f61cb32e (diff)
SL-13359 #2 UI changes for panel object
todo: new icons, separator and some repositioning
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llpanelobject.cpp82
-rw-r--r--indra/newview/llpanelobject.h7
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml64
-rw-r--r--indra/newview/skins/default/xui/en/menu_copy_paste_pos.xml21
-rw-r--r--indra/newview/skins/default/xui/en/menu_copy_paste_rot.xml21
-rw-r--r--indra/newview/skins/default/xui/en/menu_copy_paste_size.xml21
6 files changed, 197 insertions, 19 deletions
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 5fd9655201..e6bbac8247 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -118,8 +118,9 @@ BOOL LLPanelObject::postBuild()
// Phantom checkbox
mCheckPhantom = getChild<LLCheckBoxCtrl>("Phantom Checkbox Ctrl");
childSetCommitCallback("Phantom Checkbox Ctrl",onCommitPhantom,this);
-
+
// Position
+ mMenuPastePos = getChild<LLMenuButton>("paste_pos_btn");
mLabelPosition = getChild<LLTextBox>("label position");
mCtrlPosX = getChild<LLSpinCtrl>("Pos X");
childSetCommitCallback("Pos X",onCommitPosition,this);
@@ -129,6 +130,7 @@ BOOL LLPanelObject::postBuild()
childSetCommitCallback("Pos Z",onCommitPosition,this);
// Scale
+ mMenuPasteSize = getChild<LLMenuButton>("paste_size_btn");
mLabelSize = getChild<LLTextBox>("label size");
mCtrlScaleX = getChild<LLSpinCtrl>("Scale X");
childSetCommitCallback("Scale X",onCommitScale,this);
@@ -142,6 +144,7 @@ BOOL LLPanelObject::postBuild()
childSetCommitCallback("Scale Z",onCommitScale,this);
// Rotation
+ mMenuPasteRot = getChild<LLMenuButton>("paste_rot_btn");
mLabelRotation = getChild<LLTextBox>("label rotation");
mCtrlRotX = getChild<LLSpinCtrl>("Rot X");
childSetCommitCallback("Rot X",onCommitRotation,this);
@@ -291,6 +294,8 @@ LLPanelObject::LLPanelObject()
mHasRotClipboard(FALSE),
mSizeChanged(FALSE)
{
+ mCommitCallbackRegistrar.add("PanelObject.menuDoToSelected", boost::bind(&LLPanelObject::menuDoToSelected, this, _2));
+ mEnableCallbackRegistrar.add("PanelObject.menuEnable", boost::bind(&LLPanelObject::menuEnableItem, this, _2));
}
@@ -377,7 +382,7 @@ void LLPanelObject::getState( )
calcp->clearVar(LLCalc::Z_POS);
}
-
+ mMenuPastePos->setEnabled(enable_move);
mLabelPosition->setEnabled( enable_move );
mCtrlPosX->setEnabled(enable_move);
mCtrlPosY->setEnabled(enable_move);
@@ -403,6 +408,7 @@ void LLPanelObject::getState( )
calcp->setVar(LLCalc::Z_SCALE, 0.f);
}
+ mMenuPasteSize->setEnabled(enable_scale);
mLabelSize->setEnabled( enable_scale );
mCtrlScaleX->setEnabled( enable_scale );
mCtrlScaleY->setEnabled( enable_scale );
@@ -434,6 +440,7 @@ void LLPanelObject::getState( )
calcp->clearVar(LLCalc::Z_ROT);
}
+ mMenuPasteRot->setEnabled(enable_rotate);
mLabelRotation->setEnabled( enable_rotate );
mCtrlRotX->setEnabled( enable_rotate );
mCtrlRotY->setEnabled( enable_rotate );
@@ -1648,6 +1655,8 @@ void LLPanelObject::sendPosition(BOOL btn_down)
LLVector3 newpos(mCtrlPosX->get(), mCtrlPosY->get(), mCtrlPosZ->get());
LLViewerRegion* regionp = mObject->getRegion();
+ if (!regionp) return;
+
// Clamp the Z height
const F32 height = newpos.mV[VZ];
const F32 min_height = LLWorld::getInstance()->getMinAllowedZ(mObject, mObject->getPositionGlobal());
@@ -2005,6 +2014,57 @@ void LLPanelObject::onCommitSculptType(LLUICtrl *ctrl, void* userdata)
self->sendSculpt();
}
+void LLPanelObject::menuDoToSelected(const LLSD& userdata)
+{
+ std::string command = userdata.asString();
+
+ // paste
+ if (command == "pos_paste")
+ {
+ onPastePos();
+ }
+ else if (command == "size_paste")
+ {
+ onPasteSize();
+ }
+ else if (command == "rot_paste")
+ {
+ onPasteRot();
+ }
+ // copy
+ else if (command == "pos_copy")
+ {
+ onCopyPos();
+ }
+ else if (command == "size_copy")
+ {
+ onCopySize();
+ }
+ else if (command == "rot_copy")
+ {
+ onCopyRot();
+ }
+}
+
+bool LLPanelObject::menuEnableItem(const LLSD& userdata)
+{
+ std::string command = userdata.asString();
+
+ if (command == "pos_paste")
+ {
+ return mHasPosClipboard;
+ }
+ else if (command == "size_paste")
+ {
+ return mHasSizeClipboard;
+ }
+ else if (command == "rot_paste")
+ {
+ return mHasRotClipboard;
+ }
+ return false;
+}
+
void LLPanelObject::onCopyPos()
{
mClipboardPos = LLVector3(mCtrlPosX->get(), mCtrlPosY->get(), mCtrlPosZ->get());
@@ -2037,14 +2097,20 @@ void LLPanelObject::onCopyRot()
void LLPanelObject::onPastePos()
{
- if(!mHasPosClipboard) return;
+ if (!mHasPosClipboard) return;
+ if (mObject.isNull()) return;
+
+ LLViewerRegion* regionp = mObject->getRegion();
+ if (!regionp) return;
+
// Clamp pos on non-attachments, just keep the prims within the region
if (!mObject->isAttachment())
{
- mClipboardPos.mV[VX] = llclamp( mClipboardPos.mV[VX], 0.f, 256.f);
- mClipboardPos.mV[VY] = llclamp( mClipboardPos.mV[VY], 0.f, 256.f);
- //height will get properly clammed by sendPosition
+ F32 max_width = regionp->getWidth(); // meters
+ mClipboardPos.mV[VX] = llclamp(mClipboardPos.mV[VX], 0.f, max_width);
+ mClipboardPos.mV[VY] = llclamp(mClipboardPos.mV[VY], 0.f, max_width);
+ //height will get properly clamped by sendPosition
}
mCtrlPosX->set( mClipboardPos.mV[VX] );
@@ -2056,7 +2122,7 @@ void LLPanelObject::onPastePos()
void LLPanelObject::onPasteSize()
{
- if(!mHasSizeClipboard) return;
+ if (!mHasSizeClipboard) return;
mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE);
mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE);
@@ -2071,7 +2137,7 @@ void LLPanelObject::onPasteSize()
void LLPanelObject::onPasteRot()
{
- if(!mHasRotClipboard) return;
+ if (!mHasRotClipboard) return;
mCtrlRotX->set( mClipboardRot.mV[VX] );
mCtrlRotY->set( mClipboardRot.mV[VY] );
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index e9b9254a78..e8f8d0eb9a 100644
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -37,6 +37,7 @@ class LLCheckBoxCtrl;
class LLTextBox;
class LLUICtrl;
class LLButton;
+class LLMenuButton;
class LLViewerObject;
class LLComboBox;
class LLColorSwatchCtrl;
@@ -81,6 +82,9 @@ public:
BOOL onDropSculpt(LLInventoryItem* item);
static void onCommitSculptType( LLUICtrl *ctrl, void* userdata);
+ void menuDoToSelected(const LLSD& userdata);
+ bool menuEnableItem(const LLSD& userdata);
+
protected:
void getState();
@@ -137,17 +141,20 @@ protected:
LLTextBox* mLabelRevolutions;
LLSpinCtrl* mSpinRevolutions;
+ LLMenuButton* mMenuPastePos;
LLTextBox* mLabelPosition;
LLSpinCtrl* mCtrlPosX;
LLSpinCtrl* mCtrlPosY;
LLSpinCtrl* mCtrlPosZ;
+ LLMenuButton* mMenuPasteSize;
LLTextBox* mLabelSize;
LLSpinCtrl* mCtrlScaleX;
LLSpinCtrl* mCtrlScaleY;
LLSpinCtrl* mCtrlScaleZ;
BOOL mSizeChanged;
+ LLMenuButton* mMenuPasteRot;
LLTextBox* mLabelRotation;
LLSpinCtrl* mCtrlRotX;
LLSpinCtrl* mCtrlRotY;
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 0abee2ff80..2397be6b61 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1430,6 +1430,18 @@ even though the user gets a free copy.
tool_tip="Causes object to not collide with other objects or avatars"
top_pad="0"
width="123" />
+ <menu_button
+ menu_filename="menu_copy_paste_pos.xml"
+ follows="top|left"
+ height="11"
+ image_disabled="OptionsMenu_Disabled"
+ image_selected="OptionsMenu_Press"
+ image_unselected="OptionsMenu_Off"
+ layout="topleft"
+ top_pad="10"
+ name="paste_pos_btn"
+ tool_tip="Paste options"
+ width="19"/>
<text
type="string"
length="1"
@@ -1437,9 +1449,11 @@ even though the user gets a free copy.
height="10"
layout="topleft"
name="label position"
- top_pad="10"
+ tool_tip="Position (meters)"
+ left_pad="3"
+ top_delta="0"
width="121">
- Position (meters)
+ Position
</text>
<spinner
follows="left|top"
@@ -1449,7 +1463,7 @@ even though the user gets a free copy.
label="X"
label_width="10"
layout="topleft"
- left_delta="0"
+ left_delta="-22"
max_val="512"
min_val="-256"
name="Pos X"
@@ -1485,17 +1499,31 @@ even though the user gets a free copy.
text_enabled_color="0 0.8 1 .65"
top_pad="3"
width="87" />
+ <menu_button
+ menu_filename="menu_copy_paste_size.xml"
+ follows="top|left"
+ height="11"
+ image_disabled="OptionsMenu_Disabled"
+ image_selected="OptionsMenu_Press"
+ image_unselected="OptionsMenu_Off"
+ layout="topleft"
+ left_delta="0"
+ top_pad="10"
+ name="paste_size_btn"
+ tool_tip="Paste options"
+ width="19"/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
- left_delta="0"
+ left_pad="3"
+ top_delta="0"
name="label size"
- top_pad="6"
+ tool_tip="Size (meters)"
width="121">
- Size (meters)
+ Size
</text>
<spinner
follows="left|top"
@@ -1505,7 +1533,7 @@ even though the user gets a free copy.
label="X"
label_width="10"
layout="topleft"
- left_delta="0"
+ left_delta="-22"
max_val="64"
min_val="0.01"
name="Scale X"
@@ -1542,17 +1570,31 @@ even though the user gets a free copy.
text_enabled_color="1 1 1 1"
top_pad="3"
width="87" />
+ <menu_button
+ menu_filename="menu_copy_paste_rot.xml"
+ follows="top|left"
+ height="11"
+ image_disabled="OptionsMenu_Disabled"
+ image_selected="OptionsMenu_Press"
+ image_unselected="OptionsMenu_Off"
+ layout="topleft"
+ left_delta="0"
+ top_pad="10"
+ name="paste_rot_btn"
+ tool_tip="Paste options"
+ width="19"/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
- left_delta="0"
+ left_pad="3"
+ top_delta="0"
name="label rotation"
- top_pad="10"
+ tool_tip="Rotation (degrees)"
width="121">
- Rotation (degrees)
+ Rotation
</text>
<spinner
decimal_digits="2"
@@ -1563,7 +1605,7 @@ even though the user gets a free copy.
label="X"
label_width="10"
layout="topleft"
- left_delta="0"
+ left_delta="-22"
max_val="9999"
min_val="-9999"
name="Rot X"
diff --git a/indra/newview/skins/default/xui/en/menu_copy_paste_pos.xml b/indra/newview/skins/default/xui/en/menu_copy_paste_pos.xml
new file mode 100644
index 0000000000..c2763af603
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_copy_paste_pos.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ layout="topleft"
+ name="Copy Paste Position Menu">
+ <menu_item_call
+ label="Copy Position"
+ layout="topleft"
+ name="pos_copy"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="pos_copy" />
+ </menu_item_call>
+ <menu_item_call
+ label="Paste Position"
+ layout="topleft"
+ name="pos_paste"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="pos_paste" />
+ <on_enable function="PanelObject.menuEnable" parameter="pos_paste" />
+ </menu_item_call>
+</toggleable_menu>
+
diff --git a/indra/newview/skins/default/xui/en/menu_copy_paste_rot.xml b/indra/newview/skins/default/xui/en/menu_copy_paste_rot.xml
new file mode 100644
index 0000000000..dcfb3faeca
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_copy_paste_rot.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ layout="topleft"
+ name="Copy Paste Rotation Menu">
+ <menu_item_call
+ label="Copy Rotation"
+ layout="topleft"
+ name="rot_copy"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="rot_copy" />
+ </menu_item_call>
+ <menu_item_call
+ label="Paste Rotation"
+ layout="topleft"
+ name="rot_paste"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="rot_paste" />
+ <on_enable function="PanelObject.menuEnable" parameter="rot_paste" />
+ </menu_item_call>
+</toggleable_menu>
+
diff --git a/indra/newview/skins/default/xui/en/menu_copy_paste_size.xml b/indra/newview/skins/default/xui/en/menu_copy_paste_size.xml
new file mode 100644
index 0000000000..58d71b12d5
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_copy_paste_size.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ layout="topleft"
+ name="Copy Paste Size Menu">
+ <menu_item_call
+ label="Copy Size"
+ layout="topleft"
+ name="size_copy"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="size_copy" />
+ </menu_item_call>
+ <menu_item_call
+ label="Paste Size"
+ layout="topleft"
+ name="size_paste"
+ visible="true">
+ <on_click function="PanelObject.menuDoToSelected" parameter="size_paste" />
+ <on_enable function="PanelObject.menuEnable" parameter="size_paste" />
+ </menu_item_call>
+</toggleable_menu>
+