diff options
Diffstat (limited to 'linden/indra/newview')
-rw-r--r-- | linden/indra/newview/llfloatertools.cpp | 97 | ||||
-rw-r--r-- | linden/indra/newview/llfloatertools.h | 7 | ||||
-rw-r--r-- | linden/indra/newview/llviewermenu.cpp | 12 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/floater_tools.xml | 58 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml | 10 |
5 files changed, 154 insertions, 30 deletions
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp index 73b6061..84a1edc 100644 --- a/linden/indra/newview/llfloatertools.cpp +++ b/linden/indra/newview/llfloatertools.cpp | |||
@@ -46,6 +46,7 @@ | |||
46 | #include "llfloateropenobject.h" | 46 | #include "llfloateropenobject.h" |
47 | #include "llfocusmgr.h" | 47 | #include "llfocusmgr.h" |
48 | #include "llmenugl.h" | 48 | #include "llmenugl.h" |
49 | #include "llnotify.h" | ||
49 | #include "llpanelcontents.h" | 50 | #include "llpanelcontents.h" |
50 | #include "llpanelface.h" | 51 | #include "llpanelface.h" |
51 | #include "llpanelland.h" | 52 | #include "llpanelland.h" |
@@ -235,6 +236,11 @@ BOOL LLFloaterTools::postBuild() | |||
235 | mTextGridMode = getChild<LLTextBox>("text ruler mode"); | 236 | mTextGridMode = getChild<LLTextBox>("text ruler mode"); |
236 | mComboGridMode = getChild<LLComboBox>("combobox grid mode"); | 237 | mComboGridMode = getChild<LLComboBox>("combobox grid mode"); |
237 | childSetCommitCallback("combobox grid mode",commit_grid_mode, this); | 238 | childSetCommitCallback("combobox grid mode",commit_grid_mode, this); |
239 | mBtnLink = getChild<LLButton>("link_btn"); | ||
240 | childSetAction("link_btn",onClickLink, this); | ||
241 | mBtnUnlink = getChild<LLButton>("unlink_btn"); | ||
242 | childSetAction("unlink_btn",onClickUnlink, this); | ||
243 | |||
238 | // | 244 | // |
239 | // Create Buttons | 245 | // Create Buttons |
240 | // | 246 | // |
@@ -387,6 +393,9 @@ LLFloaterTools::LLFloaterTools() | |||
387 | mBtnDuplicate(NULL), | 393 | mBtnDuplicate(NULL), |
388 | mBtnDuplicateInPlace(NULL), | 394 | mBtnDuplicateInPlace(NULL), |
389 | 395 | ||
396 | mBtnLink(NULL), | ||
397 | mBtnUnlink(NULL), | ||
398 | |||
390 | mComboTreesGrass(NULL), | 399 | mComboTreesGrass(NULL), |
391 | mCheckSticky(NULL), | 400 | mCheckSticky(NULL), |
392 | mCheckCopySelection(NULL), | 401 | mCheckCopySelection(NULL), |
@@ -661,6 +670,44 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) | |||
661 | if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); | 670 | if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); |
662 | if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); | 671 | if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); |
663 | 672 | ||
673 | if (mBtnLink) mBtnLink->setVisible( edit_visible ); | ||
674 | if (mBtnUnlink) mBtnUnlink->setVisible( edit_visible ); | ||
675 | |||
676 | // Check to see if we can link things | ||
677 | bool can_link = false; | ||
678 | if (!gSavedSettings.getBOOL("EditLinkedParts")) | ||
679 | { | ||
680 | if(LLSelectMgr::getInstance()->selectGetAllRootsValid() && LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() >= 2) | ||
681 | { | ||
682 | struct f : public LLSelectedObjectFunctor | ||
683 | { | ||
684 | virtual bool apply(LLViewerObject* object) | ||
685 | { | ||
686 | return object->permModify(); | ||
687 | } | ||
688 | } | ||
689 | func; | ||
690 | const bool firstonly = true; | ||
691 | can_link = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly); | ||
692 | } | ||
693 | } | ||
694 | mBtnLink->setEnabled(can_link); | ||
695 | |||
696 | // Check to see if we can unlink things | ||
697 | bool can_unlink = false; | ||
698 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && | ||
699 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && | ||
700 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) | ||
701 | { | ||
702 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | ||
703 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | ||
704 | { | ||
705 | can_unlink = true; | ||
706 | } | ||
707 | } | ||
708 | mBtnUnlink->setEnabled(can_unlink); | ||
709 | |||
710 | |||
664 | // Create buttons | 711 | // Create buttons |
665 | BOOL create_visible = (tool == LLToolCompCreate::getInstance()); | 712 | BOOL create_visible = (tool == LLToolCompCreate::getInstance()); |
666 | 713 | ||
@@ -1109,3 +1156,53 @@ void LLFloaterTools::onSelectTreesGrass(LLUICtrl*, void*) | |||
1109 | gSavedSettings.setString("LastGrass", selected); | 1156 | gSavedSettings.setString("LastGrass", selected); |
1110 | } | 1157 | } |
1111 | } | 1158 | } |
1159 | |||
1160 | // static | ||
1161 | void LLFloaterTools::onClickLink(void* data) | ||
1162 | { | ||
1163 | if(!LLSelectMgr::getInstance()->selectGetAllRootsValid()) | ||
1164 | { | ||
1165 | LLNotifyBox::showXml("UnableToLinkWhileDownloading"); | ||
1166 | return; | ||
1167 | } | ||
1168 | |||
1169 | S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); | ||
1170 | if (object_count > MAX_CHILDREN_PER_TASK + 1) | ||
1171 | { | ||
1172 | LLStringUtil::format_map_t args; | ||
1173 | args["[COUNT]"] = llformat("%d", object_count); | ||
1174 | int max = MAX_CHILDREN_PER_TASK+1; | ||
1175 | args["[MAX]"] = llformat("%d", max); | ||
1176 | gViewerWindow->alertXml("UnableToLinkObjects", args); | ||
1177 | return; | ||
1178 | } | ||
1179 | |||
1180 | if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2) | ||
1181 | { | ||
1182 | gViewerWindow->alertXml("CannotLinkIncompleteSet"); | ||
1183 | return; | ||
1184 | } | ||
1185 | if(!LLSelectMgr::getInstance()->selectGetRootsModify()) | ||
1186 | { | ||
1187 | gViewerWindow->alertXml("CannotLinkModify"); | ||
1188 | return; | ||
1189 | } | ||
1190 | LLUUID owner_id; | ||
1191 | std::string owner_name; | ||
1192 | if(!LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name)) | ||
1193 | { | ||
1194 | // we don't actually care if you're the owner, but novices are | ||
1195 | // the most likely to be stumped by this one, so offer the | ||
1196 | // easiest and most likely solution. | ||
1197 | gViewerWindow->alertXml("CannotLinkDifferentOwners"); | ||
1198 | return; | ||
1199 | } | ||
1200 | LLSelectMgr::getInstance()->sendLink(); | ||
1201 | return; | ||
1202 | } | ||
1203 | |||
1204 | // static | ||
1205 | void LLFloaterTools::onClickUnlink(void* data) | ||
1206 | { | ||
1207 | LLSelectMgr::getInstance()->sendDelink(); | ||
1208 | } | ||
diff --git a/linden/indra/newview/llfloatertools.h b/linden/indra/newview/llfloatertools.h index 360b1df..8f88977 100644 --- a/linden/indra/newview/llfloatertools.h +++ b/linden/indra/newview/llfloatertools.h | |||
@@ -102,6 +102,7 @@ public: | |||
102 | virtual void onFocusReceived(); | 102 | virtual void onFocusReceived(); |
103 | static void setEditTool(void* data); | 103 | static void setEditTool(void* data); |
104 | void saveLastTool(); | 104 | void saveLastTool(); |
105 | |||
105 | private: | 106 | private: |
106 | static void setObjectType( void* data ); | 107 | static void setObjectType( void* data ); |
107 | 108 | ||
@@ -109,6 +110,9 @@ private: | |||
109 | 110 | ||
110 | static void onClickGridOptions(void* data); | 111 | static void onClickGridOptions(void* data); |
111 | 112 | ||
113 | static void onClickLink(void* data); | ||
114 | static void onClickUnlink(void* data); | ||
115 | |||
112 | public: | 116 | public: |
113 | 117 | ||
114 | LLButton *mBtnFocus; | 118 | LLButton *mBtnFocus; |
@@ -152,6 +156,9 @@ public: | |||
152 | LLButton *mBtnDuplicate; | 156 | LLButton *mBtnDuplicate; |
153 | LLButton *mBtnDuplicateInPlace; | 157 | LLButton *mBtnDuplicateInPlace; |
154 | 158 | ||
159 | LLButton *mBtnLink; | ||
160 | LLButton *mBtnUnlink; | ||
161 | |||
155 | // Create buttons | 162 | // Create buttons |
156 | LLComboBox *mComboTreesGrass; | 163 | LLComboBox *mComboTreesGrass; |
157 | LLCheckBoxCtrl *mCheckSticky; | 164 | LLCheckBoxCtrl *mCheckSticky; |
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 4dedf49..838f230 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp | |||
@@ -4188,9 +4188,17 @@ class LLToolsEnableUnlink : public view_listener_t | |||
4188 | { | 4188 | { |
4189 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4189 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
4190 | { | 4190 | { |
4191 | bool new_value = LLSelectMgr::getInstance()->selectGetAllRootsValid() && | 4191 | bool new_value = false; |
4192 | if (LLSelectMgr::getInstance()->selectGetAllRootsValid() && | ||
4192 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && | 4193 | LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject() && |
4193 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment(); | 4194 | !LLSelectMgr::getInstance()->getSelection()->getFirstEditableObject()->isAttachment()) |
4195 | { | ||
4196 | if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != | ||
4197 | LLSelectMgr::getInstance()->getSelection()->getObjectCount()) | ||
4198 | { | ||
4199 | new_value = true; | ||
4200 | } | ||
4201 | } | ||
4194 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | 4202 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
4195 | return true; | 4203 | return true; |
4196 | } | 4204 | } |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml index b649614..18d56b4 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml | |||
@@ -79,43 +79,49 @@ | |||
79 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" | 79 | <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" |
80 | initial_value="false" label="Select Faces to Texture" left="4" mouse_opaque="true" | 80 | initial_value="false" label="Select Faces to Texture" left="4" mouse_opaque="true" |
81 | name="radio select face" radio_style="true" width="114" /> | 81 | name="radio select face" radio_style="true" width="114" /> |
82 | <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" | 82 | <check_box bottom_delta="-22" control_name="SnapEnabled" follows="left|top" |
83 | font="SansSerifSmall" height="16" initial_value="false" | 83 | font="SansSerifSmall" height="16" initial_value="true" label="Use Grid" |
84 | label="Edit linked parts" left="4" mouse_opaque="true" | 84 | left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" /> |
85 | name="checkbox edit linked parts" width="114" /> | 85 | <button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center" |
86 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 86 | height="16" label="Options..." label_selected="Options..." left_delta="75" |
87 | mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> | ||
88 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | ||
87 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" | 89 | bottom_delta="-20" drop_shadow_visible="true" follows="left|top" |
88 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6" | 90 | font="SansSerifSmall" h_pad="0" halign="left" height="14" left="6" |
89 | mouse_opaque="true" name="text ruler mode" v_pad="0" width="68"> | 91 | mouse_opaque="true" name="text ruler mode" v_pad="0" width="68"> |
90 | Ruler mode: | 92 | Ruler mode: |
91 | </text> | 93 | </text> |
92 | <combo_box allow_text_entry="false" bottom_delta="-4" follows="left|top" height="20" | 94 | <combo_box allow_text_entry="false" bottom_delta="-4" follows="left|top" height="20" |
93 | left_delta="74" max_chars="20" mouse_opaque="true" | 95 | left_delta="74" max_chars="20" mouse_opaque="true" |
94 | name="combobox grid mode" width="86"> | 96 | name="combobox grid mode" width="86"> |
95 | <combo_item name="World" value="World"> | 97 | <combo_item name="World" value="World"> |
96 | World | 98 | World |
97 | </combo_item> | 99 | </combo_item> |
98 | <combo_item name="Local" value="Local"> | 100 | <combo_item name="Local" value="Local"> |
99 | Local | 101 | Local |
100 | </combo_item> | 102 | </combo_item> |
101 | <combo_item name="Reference" value="Reference"> | 103 | <combo_item name="Reference" value="Reference"> |
102 | Reference | 104 | Reference |
103 | </combo_item> | 105 | </combo_item> |
104 | </combo_box> | 106 | </combo_box> |
105 | <check_box bottom="-70" control_name="ScaleUniform" follows="left|top" | 107 | <check_box bottom="-70" control_name="ScaleUniform" follows="left|top" |
106 | font="SansSerifSmall" height="16" initial_value="false" | 108 | font="SansSerifSmall" height="16" initial_value="false" |
107 | label="Stretch Both Sides" left="143" mouse_opaque="true" | 109 | label="Stretch Both Sides" left="143" mouse_opaque="true" |
108 | name="checkbox uniform" width="134" /> | 110 | name="checkbox uniform" width="134" /> |
109 | <check_box bottom_delta="-15" control_name="ScaleStretchTextures" follows="left|top" | 111 | <check_box bottom_delta="-15" control_name="ScaleStretchTextures" follows="left|top" |
110 | font="SansSerifSmall" height="16" initial_value="true" | 112 | font="SansSerifSmall" height="16" initial_value="true" |
111 | label="Stretch Textures" left_delta="0" mouse_opaque="true" | 113 | label="Stretch Textures" left_delta="0" mouse_opaque="true" |
112 | name="checkbox stretch textures" width="134" /> | 114 | name="checkbox stretch textures" width="134" /> |
113 | <check_box bottom_delta="-19" control_name="SnapEnabled" follows="left|top" | 115 | <check_box bottom_delta="-15" control_name="EditLinkedParts" follows="left|top" |
114 | font="SansSerifSmall" height="16" initial_value="true" label="Use Grid" | 116 | font="SansSerifSmall" height="16" initial_value="false" |
115 | left_delta="0" mouse_opaque="true" name="checkbox snap to grid" width="134" /> | 117 | label="Edit linked parts" left="143" mouse_opaque="true" |
116 | <button bottom_delta="-14" follows="left|top" font="SansSerifSmall" halign="center" | 118 | name="checkbox edit linked parts" width="114" /> |
117 | height="16" label="Options..." label_selected="Options..." left_delta="20" | 119 | <button bottom_delta="-18" follows="left|top" font="SansSerifSmall" |
118 | mouse_opaque="true" name="Options..." scale_image="TRUE" width="80" /> | 120 | halign="center" height="18" label="Link" label_selected="Link" |
121 | right="-5" mouse_opaque="true" name="link_btn" width="78" /> | ||
122 | <button bottom_delta="-20" follows="left|top" font="SansSerifSmall" | ||
123 | halign="center" height="18" label="Unlink" label_selected="Unlink" | ||
124 | right="-5" mouse_opaque="true" name="unlink_btn" width="78" /> | ||
119 | 125 | ||
120 | <!-- Help text --> | 126 | <!-- Help text --> |
121 | 127 | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml index 7ef84c4..8d059c1 100644 --- a/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml +++ b/linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml | |||
@@ -59,9 +59,15 @@ | |||
59 | <on_click function="Object.Inspect" /> | 59 | <on_click function="Object.Inspect" /> |
60 | <on_enable function="Object.EnableInspect" /> | 60 | <on_enable function="Object.EnableInspect" /> |
61 | </menu_item_call> | 61 | </menu_item_call> |
62 | <menu_item_call name="Link" enabled="false" label="Link"> | ||
63 | <on_click function="Tools.Link" userdata="" /> | ||
64 | <on_enable function="Tools.EnableLink" /> | ||
65 | </menu_item_call> | ||
62 | <menu_item_separator /> | 66 | <menu_item_separator /> |
63 | <menu_item_separator /> | 67 | <menu_item_call name="Unlink" enabled="false" label="Unlink"> |
64 | <menu_item_separator /> | 68 | <on_click function="Tools.Unlink" userdata="" /> |
69 | <on_enable function="Tools.EnableUnlink" /> | ||
70 | </menu_item_call> | ||
65 | </pie_menu> | 71 | </pie_menu> |
66 | <menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy..."> | 72 | <menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy..."> |
67 | <on_click function="Object.Buy" /> | 73 | <on_click function="Object.Buy" /> |