aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/newview')
-rw-r--r--linden/indra/newview/llfolderview.cpp45
-rw-r--r--linden/indra/newview/llfolderview.h4
-rw-r--r--linden/indra/newview/llinventorybridge.cpp1
-rw-r--r--linden/indra/newview/llinventorybridge.h11
-rw-r--r--linden/indra/newview/llinventoryview.cpp520
-rw-r--r--linden/indra/newview/llinventoryview.h7
-rw-r--r--linden/indra/newview/llpanelinventory.cpp1
-rw-r--r--linden/indra/newview/llselectmgr.cpp4
-rw-r--r--linden/indra/newview/llwearable.h20
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml56
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml227
11 files changed, 642 insertions, 254 deletions
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 8cefd5b..58d0c42 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -4522,7 +4522,7 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item)
4522 } 4522 }
4523 LLFolderViewEventListener* listener = item->getListener(); 4523 LLFolderViewEventListener* listener = item->getListener();
4524 mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; 4524 mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos;
4525 BOOL passed = (0x1 << listener->getInventoryType() & mFilterOps.mFilterTypes || listener->getInventoryType() == LLInventoryType::IT_NONE) 4525 BOOL passed = (listener->getNInventoryType() & mFilterOps.mFilterTypes || listener->getNInventoryType() == LLInventoryType::NIT_NONE)
4526 && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) 4526 && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos)
4527 && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) 4527 && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions)
4528 && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); 4528 && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate);
@@ -4800,9 +4800,9 @@ void LLInventoryFilter::setModified(EFilterBehavior behavior)
4800 } 4800 }
4801} 4801}
4802 4802
4803BOOL LLInventoryFilter::isFilterWith(LLInventoryType::EType t) 4803BOOL LLInventoryFilter::isFilterWith(LLInventoryType::NType t)
4804{ 4804{
4805 return mFilterOps.mFilterTypes & (0x01 << t); 4805 return mFilterOps.mFilterTypes & t;
4806} 4806}
4807 4807
4808std::string LLInventoryFilter::getFilterText() 4808std::string LLInventoryFilter::getFilterText()
@@ -4812,6 +4812,11 @@ std::string LLInventoryFilter::getFilterText()
4812 return mFilterText; 4812 return mFilterText;
4813 } 4813 }
4814 4814
4815 return rebuildFilterText();
4816}
4817
4818std::string LLInventoryFilter::rebuildFilterText()
4819{
4815 mNeedTextRebuild = FALSE; 4820 mNeedTextRebuild = FALSE;
4816 std::string filtered_types; 4821 std::string filtered_types;
4817 std::string not_filtered_types; 4822 std::string not_filtered_types;
@@ -4820,7 +4825,7 @@ std::string LLInventoryFilter::getFilterText()
4820 S32 num_filter_types = 0; 4825 S32 num_filter_types = 0;
4821 mFilterText.clear(); 4826 mFilterText.clear();
4822 4827
4823 if (isFilterWith(LLInventoryType::IT_ANIMATION)) 4828 if (isFilterWith(LLInventoryType::NIT_ANIMATION))
4824 { 4829 {
4825 filtered_types += " Animations,"; 4830 filtered_types += " Animations,";
4826 filtered_by_type = TRUE; 4831 filtered_by_type = TRUE;
@@ -4832,7 +4837,19 @@ std::string LLInventoryFilter::getFilterText()
4832 filtered_by_all_types = FALSE; 4837 filtered_by_all_types = FALSE;
4833 } 4838 }
4834 4839
4835 if (isFilterWith(LLInventoryType::IT_CALLINGCARD)) 4840 if (isFilterWith(LLInventoryType::NIT_BODYPART))
4841 {
4842 filtered_types += " Body Parts,";
4843 filtered_by_type = TRUE;
4844 num_filter_types++;
4845 }
4846 else
4847 {
4848 not_filtered_types += " Body Parts,";
4849 filtered_by_all_types = FALSE;
4850 }
4851
4852 if (isFilterWith(LLInventoryType::NIT_CALLCARD))
4836 { 4853 {
4837 filtered_types += " Calling Cards,"; 4854 filtered_types += " Calling Cards,";
4838 filtered_by_type = TRUE; 4855 filtered_by_type = TRUE;
@@ -4844,7 +4861,7 @@ std::string LLInventoryFilter::getFilterText()
4844 filtered_by_all_types = FALSE; 4861 filtered_by_all_types = FALSE;
4845 } 4862 }
4846 4863
4847 if (isFilterWith(LLInventoryType::IT_WEARABLE)) 4864 if (isFilterWith(LLInventoryType::NIT_CLOTHING))
4848 { 4865 {
4849 filtered_types += " Clothing,"; 4866 filtered_types += " Clothing,";
4850 filtered_by_type = TRUE; 4867 filtered_by_type = TRUE;
@@ -4856,7 +4873,7 @@ std::string LLInventoryFilter::getFilterText()
4856 filtered_by_all_types = FALSE; 4873 filtered_by_all_types = FALSE;
4857 } 4874 }
4858 4875
4859 if (isFilterWith(LLInventoryType::IT_GESTURE)) 4876 if (isFilterWith(LLInventoryType::NIT_GESTURE))
4860 { 4877 {
4861 filtered_types += " Gestures,"; 4878 filtered_types += " Gestures,";
4862 filtered_by_type = TRUE; 4879 filtered_by_type = TRUE;
@@ -4868,7 +4885,7 @@ std::string LLInventoryFilter::getFilterText()
4868 filtered_by_all_types = FALSE; 4885 filtered_by_all_types = FALSE;
4869 } 4886 }
4870 4887
4871 if (isFilterWith(LLInventoryType::IT_LANDMARK)) 4888 if (isFilterWith(LLInventoryType::NIT_LANDMARK))
4872 { 4889 {
4873 filtered_types += " Landmarks,"; 4890 filtered_types += " Landmarks,";
4874 filtered_by_type = TRUE; 4891 filtered_by_type = TRUE;
@@ -4880,7 +4897,7 @@ std::string LLInventoryFilter::getFilterText()
4880 filtered_by_all_types = FALSE; 4897 filtered_by_all_types = FALSE;
4881 } 4898 }
4882 4899
4883 if (isFilterWith(LLInventoryType::IT_NOTECARD)) 4900 if (isFilterWith(LLInventoryType::NIT_NOTECARD))
4884 { 4901 {
4885 filtered_types += " Notecards,"; 4902 filtered_types += " Notecards,";
4886 filtered_by_type = TRUE; 4903 filtered_by_type = TRUE;
@@ -4892,7 +4909,7 @@ std::string LLInventoryFilter::getFilterText()
4892 filtered_by_all_types = FALSE; 4909 filtered_by_all_types = FALSE;
4893 } 4910 }
4894 4911
4895 if (isFilterWith(LLInventoryType::IT_OBJECT) && isFilterWith(LLInventoryType::IT_ATTACHMENT)) 4912 if (isFilterWith(LLInventoryType::NIT_OBJECT))
4896 { 4913 {
4897 filtered_types += " Objects,"; 4914 filtered_types += " Objects,";
4898 filtered_by_type = TRUE; 4915 filtered_by_type = TRUE;
@@ -4904,7 +4921,7 @@ std::string LLInventoryFilter::getFilterText()
4904 filtered_by_all_types = FALSE; 4921 filtered_by_all_types = FALSE;
4905 } 4922 }
4906 4923
4907 if (isFilterWith(LLInventoryType::IT_LSL)) 4924 if (isFilterWith(LLInventoryType::NIT_SCRIPT_LSL2))
4908 { 4925 {
4909 filtered_types += " Scripts,"; 4926 filtered_types += " Scripts,";
4910 filtered_by_type = TRUE; 4927 filtered_by_type = TRUE;
@@ -4916,7 +4933,7 @@ std::string LLInventoryFilter::getFilterText()
4916 filtered_by_all_types = FALSE; 4933 filtered_by_all_types = FALSE;
4917 } 4934 }
4918 4935
4919 if (isFilterWith(LLInventoryType::IT_SOUND)) 4936 if (isFilterWith(LLInventoryType::NIT_SOUND))
4920 { 4937 {
4921 filtered_types += " Sounds,"; 4938 filtered_types += " Sounds,";
4922 filtered_by_type = TRUE; 4939 filtered_by_type = TRUE;
@@ -4928,7 +4945,7 @@ std::string LLInventoryFilter::getFilterText()
4928 filtered_by_all_types = FALSE; 4945 filtered_by_all_types = FALSE;
4929 } 4946 }
4930 4947
4931 if (isFilterWith(LLInventoryType::IT_TEXTURE)) 4948 if (isFilterWith(LLInventoryType::NIT_TEXTURE))
4932 { 4949 {
4933 filtered_types += " Textures,"; 4950 filtered_types += " Textures,";
4934 filtered_by_type = TRUE; 4951 filtered_by_type = TRUE;
@@ -4940,7 +4957,7 @@ std::string LLInventoryFilter::getFilterText()
4940 filtered_by_all_types = FALSE; 4957 filtered_by_all_types = FALSE;
4941 } 4958 }
4942 4959
4943 if (isFilterWith(LLInventoryType::IT_SNAPSHOT)) 4960 if (isFilterWith(LLInventoryType::NIT_SNAPSHOT))
4944 { 4961 {
4945 filtered_types += " Snapshots,"; 4962 filtered_types += " Snapshots,";
4946 filtered_by_type = TRUE; 4963 filtered_by_type = TRUE;
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index 7978386..af3248d 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -103,6 +103,7 @@ public:
103 virtual BOOL isUpToDate() const = 0; 103 virtual BOOL isUpToDate() const = 0;
104 virtual BOOL hasChildren() const = 0; 104 virtual BOOL hasChildren() const = 0;
105 virtual LLInventoryType::EType getInventoryType() const = 0; 105 virtual LLInventoryType::EType getInventoryType() const = 0;
106 virtual LLInventoryType::NType getNInventoryType() const = 0;
106 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) {} 107 virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) {}
107 108
108 // This method should be called when a drag begins. returns TRUE 109 // This method should be called when a drag begins. returns TRUE
@@ -221,6 +222,7 @@ public:
221 void clearModified() { mModified = FALSE; mFilterBehavior = FILTER_NONE; } 222 void clearModified() { mModified = FALSE; mFilterBehavior = FILTER_NONE; }
222 const std::string getName() const { return mName; } 223 const std::string getName() const { return mName; }
223 std::string getFilterText(); 224 std::string getFilterText();
225 std::string rebuildFilterText();
224 226
225 void setFilterCount(S32 count) { mFilterCount = count; } 227 void setFilterCount(S32 count) { mFilterCount = count; }
226 S32 getFilterCount() { return mFilterCount; } 228 S32 getFilterCount() { return mFilterCount; }
@@ -229,7 +231,7 @@ public:
229 void markDefault(); 231 void markDefault();
230 void resetDefault(); 232 void resetDefault();
231 233
232 BOOL isFilterWith(LLInventoryType::EType t); 234 BOOL isFilterWith(LLInventoryType::NType t);
233 235
234 S32 getCurrentGeneration() const { return mFilterGeneration; } 236 S32 getCurrentGeneration() const { return mFilterGeneration; }
235 S32 getMinRequiredGeneration() const { return mMinRequiredGeneration; } 237 S32 getMinRequiredGeneration() const { return mMinRequiredGeneration; }
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index 12670e2..bde36cc 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -722,6 +722,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
722 if (new_listener) 722 if (new_listener)
723 { 723 {
724 new_listener->mInvType = inv_type; 724 new_listener->mInvType = inv_type;
725 new_listener->mNInvType = calc_ntype(inv_type, asset_type, flags);
725 } 726 }
726 727
727 return new_listener; 728 return new_listener;
diff --git a/linden/indra/newview/llinventorybridge.h b/linden/indra/newview/llinventorybridge.h
index fc04b28..329e57f 100644
--- a/linden/indra/newview/llinventorybridge.h
+++ b/linden/indra/newview/llinventorybridge.h
@@ -192,7 +192,15 @@ public:
192 virtual BOOL dragOrDrop(MASK mask, BOOL drop, 192 virtual BOOL dragOrDrop(MASK mask, BOOL drop,
193 EDragAndDropType cargo_type, 193 EDragAndDropType cargo_type,
194 void* cargo_data) { return FALSE; } 194 void* cargo_data) { return FALSE; }
195 virtual LLInventoryType::EType getInventoryType() const { return mInvType; } 195
196 virtual LLInventoryType::EType getInventoryType() const
197 {
198 return mInvType;
199 }
200 virtual LLInventoryType::NType getNInventoryType() const
201 {
202 return mNInvType;
203 }
196 204
197 // LLInvFVBridge functionality 205 // LLInvFVBridge functionality
198 virtual void clearDisplayName() {} 206 virtual void clearDisplayName() {}
@@ -221,6 +229,7 @@ protected:
221 LLInventoryPanel* mInventoryPanel; 229 LLInventoryPanel* mInventoryPanel;
222 LLUUID mUUID; // item id 230 LLUUID mUUID; // item id
223 LLInventoryType::EType mInvType; 231 LLInventoryType::EType mInvType;
232 LLInventoryType::NType mNInvType;
224}; 233};
225 234
226 235
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index f9dd70d..52c3b7e 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -44,6 +44,7 @@
44#include "llradiogroup.h" 44#include "llradiogroup.h"
45#include "llspinctrl.h" 45#include "llspinctrl.h"
46#include "lltextbox.h" 46#include "lltextbox.h"
47#include "llcombobox.h"
47#include "llui.h" 48#include "llui.h"
48 49
49#include "llfirstuse.h" 50#include "llfirstuse.h"
@@ -181,18 +182,19 @@ void LLInventoryViewFinder::updateElementsFromFilter()
181 182
182 // update the ui elements 183 // update the ui elements
183 LLFloater::setTitle(mFilter->getName()); 184 LLFloater::setTitle(mFilter->getName());
184 childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION)); 185
185 186 childSetValue("check_animation", (S32) (filter_types & LLInventoryType::NIT_ANIMATION));
186 childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD)); 187 childSetValue("check_bodypart", (S32) (filter_types & LLInventoryType::NIT_BODYPART));
187 childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE)); 188 childSetValue("check_calling_card", (S32) (filter_types & LLInventoryType::NIT_CALLCARD));
188 childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE)); 189 childSetValue("check_clothing", (S32) (filter_types & LLInventoryType::NIT_CLOTHING));
189 childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK)); 190 childSetValue("check_gesture", (S32) (filter_types & LLInventoryType::NIT_GESTURE));
190 childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD)); 191 childSetValue("check_landmark", (S32) (filter_types & LLInventoryType::NIT_LANDMARK));
191 childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT)); 192 childSetValue("check_notecard", (S32) (filter_types & LLInventoryType::NIT_NOTECARD));
192 childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL)); 193 childSetValue("check_object", (S32) (filter_types & LLInventoryType::NIT_OBJECT));
193 childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND)); 194 childSetValue("check_script", (S32) (filter_types & LLInventoryType::NIT_SCRIPT_LSL2));
194 childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE)); 195 childSetValue("check_sound", (S32) (filter_types & LLInventoryType::NIT_SOUND));
195 childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT)); 196 childSetValue("check_texture", (S32) (filter_types & LLInventoryType::NIT_TEXTURE));
197 childSetValue("check_snapshot", (S32) (filter_types & LLInventoryType::NIT_SNAPSHOT));
196 childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); 198 childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS);
197 childSetValue("check_since_logoff", mFilter->isSinceLogoff()); 199 childSetValue("check_since_logoff", mFilter->isSinceLogoff());
198 mSpinSinceHours->set((F32)(hours % 24)); 200 mSpinSinceHours->set((F32)(hours % 24));
@@ -206,26 +208,31 @@ void LLInventoryViewFinder::draw()
206 208
207 if (!childGetValue("check_animation")) 209 if (!childGetValue("check_animation"))
208 { 210 {
209 filter &= ~(0x1 << LLInventoryType::IT_ANIMATION); 211 filter &= ~(LLInventoryType::NIT_ANIMATION);
210 filtered_by_all_types = FALSE; 212 filtered_by_all_types = FALSE;
211 } 213 }
212 214
215 if (!childGetValue("check_bodypart"))
216 {
217 filter &= ~(LLInventoryType::NIT_BODYPART);
218 filtered_by_all_types = FALSE;
219 }
213 220
214 if (!childGetValue("check_calling_card")) 221 if (!childGetValue("check_calling_card"))
215 { 222 {
216 filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD); 223 filter &= ~(LLInventoryType::NIT_CALLCARD);
217 filtered_by_all_types = FALSE; 224 filtered_by_all_types = FALSE;
218 } 225 }
219 226
220 if (!childGetValue("check_clothing")) 227 if (!childGetValue("check_clothing"))
221 { 228 {
222 filter &= ~(0x1 << LLInventoryType::IT_WEARABLE); 229 filter &= ~(LLInventoryType::NIT_CLOTHING);
223 filtered_by_all_types = FALSE; 230 filtered_by_all_types = FALSE;
224 } 231 }
225 232
226 if (!childGetValue("check_gesture")) 233 if (!childGetValue("check_gesture"))
227 { 234 {
228 filter &= ~(0x1 << LLInventoryType::IT_GESTURE); 235 filter &= ~(LLInventoryType::NIT_GESTURE);
229 filtered_by_all_types = FALSE; 236 filtered_by_all_types = FALSE;
230 } 237 }
231 238
@@ -233,52 +240,53 @@ void LLInventoryViewFinder::draw()
233 240
234 241
235 { 242 {
236 filter &= ~(0x1 << LLInventoryType::IT_LANDMARK); 243 filter &= ~(LLInventoryType::NIT_LANDMARK);
237 filtered_by_all_types = FALSE; 244 filtered_by_all_types = FALSE;
238 } 245 }
239 246
240 if (!childGetValue("check_notecard")) 247 if (!childGetValue("check_notecard"))
241 { 248 {
242 filter &= ~(0x1 << LLInventoryType::IT_NOTECARD); 249 filter &= ~(LLInventoryType::NIT_NOTECARD);
243 filtered_by_all_types = FALSE; 250 filtered_by_all_types = FALSE;
244 } 251 }
245 252
246 if (!childGetValue("check_object")) 253 if (!childGetValue("check_object"))
247 { 254 {
248 filter &= ~(0x1 << LLInventoryType::IT_OBJECT); 255 filter &= ~(LLInventoryType::NIT_OBJECT);
249 filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT);
250 filtered_by_all_types = FALSE; 256 filtered_by_all_types = FALSE;
251 } 257 }
252 258
253 if (!childGetValue("check_script")) 259 if (!childGetValue("check_script"))
254 { 260 {
255 filter &= ~(0x1 << LLInventoryType::IT_LSL); 261 filter &= ~(LLInventoryType::NIT_SCRIPT_LSL2);
256 filtered_by_all_types = FALSE; 262 filtered_by_all_types = FALSE;
257 } 263 }
258 264
259 if (!childGetValue("check_sound")) 265 if (!childGetValue("check_sound"))
260 { 266 {
261 filter &= ~(0x1 << LLInventoryType::IT_SOUND); 267 filter &= ~(LLInventoryType::NIT_SOUND);
262 filtered_by_all_types = FALSE; 268 filtered_by_all_types = FALSE;
263 } 269 }
264 270
265 if (!childGetValue("check_texture")) 271 if (!childGetValue("check_texture"))
266 { 272 {
267 filter &= ~(0x1 << LLInventoryType::IT_TEXTURE); 273 filter &= ~(LLInventoryType::NIT_TEXTURE);
268 filtered_by_all_types = FALSE; 274 filtered_by_all_types = FALSE;
269 } 275 }
270 276
271 if (!childGetValue("check_snapshot")) 277 if (!childGetValue("check_snapshot"))
272 { 278 {
273 filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT); 279 filter &= ~(LLInventoryType::NIT_SNAPSHOT);
274 filtered_by_all_types = FALSE; 280 filtered_by_all_types = FALSE;
275 } 281 }
276 282
283 /*
277 if (!filtered_by_all_types) 284 if (!filtered_by_all_types)
278 { 285 {
279 // don't include folders in filter, unless I've selected everything 286 // don't include folders in filter, unless I've selected everything
280 filter &= ~(0x1 << LLInventoryType::IT_CATEGORY); 287 filter &= ~(LLInventoryType::NIT_CATEGORY);
281 } 288 }
289 */
282 290
283 // update the panel, panel will update the filter 291 // update the panel, panel will update the filter
284 mInventoryView->mActivePanel->setShowFolderState(getCheckShowEmpty() ? 292 mInventoryView->mActivePanel->setShowFolderState(getCheckShowEmpty() ?
@@ -344,6 +352,7 @@ void LLInventoryViewFinder::selectAllTypes(void* user_data)
344 if(!self) return; 352 if(!self) return;
345 353
346 self->childSetValue("check_animation", TRUE); 354 self->childSetValue("check_animation", TRUE);
355 self->childSetValue("check_bodypart", TRUE);
347 self->childSetValue("check_calling_card", TRUE); 356 self->childSetValue("check_calling_card", TRUE);
348 self->childSetValue("check_clothing", TRUE); 357 self->childSetValue("check_clothing", TRUE);
349 self->childSetValue("check_gesture", TRUE); 358 self->childSetValue("check_gesture", TRUE);
@@ -389,6 +398,7 @@ void LLInventoryViewFinder::selectNoTypes(void* user_data)
389 398
390 399
391 self->childSetValue("check_animation", FALSE); 400 self->childSetValue("check_animation", FALSE);
401 self->childSetValue("check_bodypart", FALSE);
392 self->childSetValue("check_calling_card", FALSE); 402 self->childSetValue("check_calling_card", FALSE);
393 self->childSetValue("check_clothing", FALSE); 403 self->childSetValue("check_clothing", FALSE);
394 self->childSetValue("check_gesture", FALSE); 404 self->childSetValue("check_gesture", FALSE);
@@ -549,6 +559,12 @@ void LLInventoryView::init(LLInventoryModel* inventory)
549 mSearchEditor->setSearchCallback(onSearchEdit, this); 559 mSearchEditor->setSearchCallback(onSearchEdit, this);
550 } 560 }
551 561
562 mQuickFilterCombo = getChild<LLComboBox>("Quick Filter");
563 if (mQuickFilterCombo)
564 {
565 mQuickFilterCombo->setCommitCallback(onQuickFilterCommit);
566 }
567
552 sActiveViews.put(this); 568 sActiveViews.put(this);
553 569
554 gInventory.addObserver(this); 570 gInventory.addObserver(this);
@@ -617,6 +633,11 @@ void LLInventoryView::draw()
617 { 633 {
618 mSearchEditor->setText(mActivePanel->getFilterSubString()); 634 mSearchEditor->setText(mActivePanel->getFilterSubString());
619 } 635 }
636 if (mActivePanel && mQuickFilterCombo)
637 {
638 refreshQuickFilter( mQuickFilterCombo );
639 }
640
620 LLFloater::draw(); 641 LLFloater::draw();
621} 642}
622 643
@@ -922,16 +943,9 @@ void LLInventoryView::onClearSearch(void* user_data)
922 LLInventoryView* self = (LLInventoryView*)user_data; 943 LLInventoryView* self = (LLInventoryView*)user_data;
923 if(!self) return; 944 if(!self) return;
924 945
925 LLFloater *finder = self->getFinder();
926 if (self->mActivePanel) 946 if (self->mActivePanel)
927 { 947 {
928 self->mActivePanel->setFilterSubString(LLStringUtil::null); 948 self->mActivePanel->setFilterSubString(LLStringUtil::null);
929 self->mActivePanel->setFilterTypes(0xffffffff);
930 }
931
932 if (finder)
933 {
934 LLInventoryViewFinder::selectAllTypes(finder);
935 } 949 }
936 950
937 // re-open folders that were initially open 951 // re-open folders that were initially open
@@ -981,6 +995,241 @@ void LLInventoryView::onSearchEdit(const std::string& search_string, void* user_
981} 995}
982 996
983 997
998//static
999void LLInventoryView::onQuickFilterCommit(LLUICtrl* ctrl, void* user_data)
1000{
1001
1002 LLComboBox* quickfilter = (LLComboBox*)ctrl;
1003
1004
1005 LLInventoryView* view = (LLInventoryView*)(quickfilter->getParent());
1006 if (!view->mActivePanel)
1007 {
1008 return;
1009 }
1010
1011
1012 std::string item_type = quickfilter->getSimple();
1013 U32 filter_type;
1014
1015 if (view->getString("filter_type_animation") == item_type)
1016 {
1017 filter_type = LLInventoryType::NIT_ANIMATION;
1018 }
1019
1020 else if (view->getString("filter_type_bodypart") == item_type)
1021 {
1022 filter_type = LLInventoryType::NIT_BODYPART;
1023 }
1024
1025 else if (view->getString("filter_type_callingcard") == item_type)
1026 {
1027 filter_type = LLInventoryType::NIT_CALLCARD;
1028 }
1029
1030 else if (view->getString("filter_type_clothing") == item_type)
1031 {
1032 filter_type = LLInventoryType::NIT_CLOTHING;
1033 }
1034
1035 else if (view->getString("filter_type_gesture") == item_type)
1036 {
1037 filter_type = LLInventoryType::NIT_GESTURE;
1038 }
1039
1040 else if (view->getString("filter_type_landmark") == item_type)
1041 {
1042 filter_type = LLInventoryType::NIT_LANDMARK;
1043 }
1044
1045 else if (view->getString("filter_type_notecard") == item_type)
1046 {
1047 filter_type = LLInventoryType::NIT_NOTECARD;
1048 }
1049
1050 else if (view->getString("filter_type_object") == item_type)
1051 {
1052 filter_type = LLInventoryType::NIT_OBJECT;
1053 }
1054
1055 else if (view->getString("filter_type_script") == item_type)
1056 {
1057 filter_type = LLInventoryType::NIT_SCRIPT_LSL2;
1058 }
1059
1060 else if (view->getString("filter_type_sound") == item_type)
1061 {
1062 filter_type = LLInventoryType::NIT_SOUND;
1063 }
1064
1065 else if (view->getString("filter_type_texture") == item_type)
1066 {
1067 filter_type = LLInventoryType::NIT_TEXTURE;
1068 }
1069
1070 else if (view->getString("filter_type_snapshot") == item_type)
1071 {
1072 filter_type = LLInventoryType::NIT_SNAPSHOT;
1073 }
1074
1075 else if (view->getString("filter_type_custom") == item_type)
1076 {
1077 // When they select custom, show the floater then return
1078 if( !(view->filtersVisible(view)) )
1079 {
1080 view->toggleFindOptions();
1081 }
1082 return;
1083 }
1084
1085 else if (view->getString("filter_type_all") == item_type)
1086 {
1087 // Show all types
1088 filter_type = 0xffffffff;
1089 }
1090
1091 else
1092 {
1093 llwarns << "Ignoring unknown filter: " << item_type << llendl;
1094 return;
1095 }
1096
1097 view->mActivePanel->setFilterTypes( filter_type );
1098
1099 // Start fetching inventory in the background, so we have
1100 // some items to show the user.
1101 gInventory.startBackgroundFetch();
1102
1103 // Update the Inventory window text
1104 view->setFilterTextFromFilter();
1105
1106 // Force the filters window to update itself, if it's open.
1107 LLInventoryViewFinder* finder = view->getFinder();
1108 if( finder )
1109 {
1110 finder->updateElementsFromFilter();
1111 }
1112
1113 // llinfos << "Quick Filter: " << item_type << llendl;
1114
1115}
1116
1117
1118
1119//static
1120void LLInventoryView::refreshQuickFilter(LLUICtrl* ctrl)
1121{
1122
1123 LLInventoryView* view = (LLInventoryView*)(ctrl->getParent());
1124 if (!view->mActivePanel)
1125 {
1126 return;
1127 }
1128
1129 LLComboBox* quickfilter = view->getChild<LLComboBox>("Quick Filter");
1130 if (!quickfilter)
1131 {
1132 return;
1133 }
1134
1135
1136 U32 filter_type = view->mActivePanel->getFilterTypes();
1137 filter_type &= LLInventoryType::NIT_ALL;
1138
1139
1140 //llinfos << "filter_type: " << filter_type << llendl;
1141
1142 std::string selection;
1143
1144
1145 if (filter_type == LLInventoryType::NIT_ALL)
1146 {
1147 selection = view->getString("filter_type_all");
1148 }
1149
1150 else if (filter_type == LLInventoryType::NIT_NONE)
1151 {
1152 selection = view->getString("filter_type_custom");
1153 }
1154
1155 else if (filter_type == (filter_type & LLInventoryType::NIT_ANIMATION))
1156 {
1157 selection = view->getString("filter_type_animation");
1158 }
1159
1160 else if (filter_type == (filter_type & LLInventoryType::NIT_BODYPART))
1161 {
1162 selection = view->getString("filter_type_bodypart");
1163 }
1164
1165 else if (filter_type == (filter_type & LLInventoryType::NIT_CALLCARD))
1166 {
1167 selection = view->getString("filter_type_callingcard");
1168 }
1169
1170 else if (filter_type == (filter_type & LLInventoryType::NIT_CLOTHING))
1171 {
1172 selection = view->getString("filter_type_clothing");
1173 }
1174
1175 else if (filter_type == (filter_type & LLInventoryType::NIT_GESTURE))
1176 {
1177 selection = view->getString("filter_type_gesture");
1178 }
1179
1180 else if (filter_type == (filter_type & LLInventoryType::NIT_LANDMARK))
1181 {
1182 selection = view->getString("filter_type_landmark");
1183 }
1184
1185 else if (filter_type == (filter_type & LLInventoryType::NIT_NOTECARD))
1186 {
1187 selection = view->getString("filter_type_notecard");
1188 }
1189
1190 else if (filter_type == (filter_type & LLInventoryType::NIT_OBJECT))
1191 {
1192 selection = view->getString("filter_type_object");
1193 }
1194
1195 else if (filter_type == (filter_type & LLInventoryType::NIT_SCRIPT_LSL2))
1196 {
1197 selection = view->getString("filter_type_script");
1198 }
1199
1200 else if (filter_type == (filter_type & LLInventoryType::NIT_SOUND))
1201 {
1202 selection = view->getString("filter_type_sound");
1203 }
1204
1205 else if (filter_type == (filter_type & LLInventoryType::NIT_TEXTURE))
1206 {
1207 selection = view->getString("filter_type_texture");
1208 }
1209
1210 else if (filter_type == (filter_type & LLInventoryType::NIT_SNAPSHOT))
1211 {
1212 selection = view->getString("filter_type_snapshot");
1213 }
1214
1215 else
1216 {
1217 selection = view->getString("filter_type_custom");
1218 }
1219
1220
1221 // Select the chosen item by label text
1222 BOOL result = quickfilter->setSimple( (selection) );
1223
1224 if( !result )
1225 {
1226 llinfos << "The item didn't exist: " << selection << llendl;
1227 }
1228
1229}
1230
1231
1232
984// static 1233// static
985// BOOL LLInventoryView::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward) 1234// BOOL LLInventoryView::incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward)
986// { 1235// {
@@ -1079,124 +1328,163 @@ BOOL LLInventoryView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
1079 1328
1080 return handled; 1329 return handled;
1081} 1330}
1331
1082std::string get_item_icon_name(LLAssetType::EType asset_type, 1332std::string get_item_icon_name(LLAssetType::EType asset_type,
1083 LLInventoryType::EType inventory_type, 1333 LLInventoryType::EType inv_type,
1084 U32 attachment_point, 1334 U32 flags,
1085 BOOL item_is_multi ) 1335 BOOL item_is_multi )
1336{
1337 return get_item_icon_name( calc_ntype(inv_type, asset_type, flags),
1338 item_is_multi );
1339}
1340
1341std::string get_item_icon_name(LLInventoryType::NType inv_ntype,
1342 BOOL item_is_multi )
1086{ 1343{
1087 EInventoryIcon idx = OBJECT_ICON_NAME; 1344 EInventoryIcon idx = OBJECT_ICON_NAME;
1088 if ( item_is_multi ) 1345
1089 { 1346 switch( inv_ntype )
1090 idx = OBJECT_MULTI_ICON_NAME;
1091 }
1092
1093 switch(asset_type)
1094 { 1347 {
1095 case LLAssetType::AT_TEXTURE: 1348 // BODY PARTS
1096 if(LLInventoryType::IT_SNAPSHOT == inventory_type)
1097 {
1098 idx = SNAPSHOT_ICON_NAME;
1099 }
1100 else
1101 {
1102 idx = TEXTURE_ICON_NAME;
1103 }
1104 break;
1105 1349
1106 case LLAssetType::AT_SOUND: 1350 case LLInventoryType::NIT_SHAPE:
1107 idx = SOUND_ICON_NAME;
1108 break;
1109 case LLAssetType::AT_CALLINGCARD:
1110 if(attachment_point!= 0)
1111 {
1112 idx = CALLINGCARD_ONLINE_ICON_NAME;
1113 }
1114 else
1115 {
1116 idx = CALLINGCARD_OFFLINE_ICON_NAME;
1117 }
1118 break;
1119 case LLAssetType::AT_LANDMARK:
1120 if(attachment_point!= 0)
1121 {
1122 idx = LANDMARK_VISITED_ICON_NAME;
1123 }
1124 else
1125 {
1126 idx = LANDMARK_ICON_NAME;
1127 }
1128 break;
1129 case LLAssetType::AT_SCRIPT:
1130 case LLAssetType::AT_LSL_TEXT:
1131 case LLAssetType::AT_LSL_BYTECODE:
1132 idx = SCRIPT_ICON_NAME;
1133 break;
1134 case LLAssetType::AT_CLOTHING:
1135 idx = CLOTHING_ICON_NAME;
1136 case LLAssetType::AT_BODYPART :
1137 if(LLAssetType::AT_BODYPART == asset_type)
1138 {
1139 idx = BODYPART_ICON_NAME;
1140 }
1141 switch(attachment_point)
1142 {
1143 case WT_SHAPE:
1144 idx = BODYPART_SHAPE_ICON_NAME; 1351 idx = BODYPART_SHAPE_ICON_NAME;
1145 break; 1352 break;
1146 case WT_SKIN: 1353 case LLInventoryType::NIT_SKIN:
1147 idx = BODYPART_SKIN_ICON_NAME; 1354 idx = BODYPART_SKIN_ICON_NAME;
1148 break; 1355 break;
1149 case WT_HAIR: 1356 case LLInventoryType::NIT_HAIR:
1150 idx = BODYPART_HAIR_ICON_NAME; 1357 idx = BODYPART_HAIR_ICON_NAME;
1151 break; 1358 break;
1152 case WT_EYES: 1359 case LLInventoryType::NIT_EYES:
1153 idx = BODYPART_EYES_ICON_NAME; 1360 idx = BODYPART_EYES_ICON_NAME;
1154 break; 1361 break;
1155 case WT_SHIRT: 1362
1363 case LLInventoryType::NIT_BODYPART:
1364 idx = BODYPART_ICON_NAME;
1365 break;
1366
1367
1368 // CLOTHING
1369
1370 case LLInventoryType::NIT_SHIRT:
1156 idx = CLOTHING_SHIRT_ICON_NAME; 1371 idx = CLOTHING_SHIRT_ICON_NAME;
1157 break; 1372 break;
1158 case WT_PANTS: 1373 case LLInventoryType::NIT_PANTS:
1159 idx = CLOTHING_PANTS_ICON_NAME; 1374 idx = CLOTHING_PANTS_ICON_NAME;
1160 break; 1375 break;
1161 case WT_SHOES: 1376 case LLInventoryType::NIT_SHOES:
1162 idx = CLOTHING_SHOES_ICON_NAME; 1377 idx = CLOTHING_SHOES_ICON_NAME;
1163 break; 1378 break;
1164 case WT_SOCKS: 1379 case LLInventoryType::NIT_SOCKS:
1165 idx = CLOTHING_SOCKS_ICON_NAME; 1380 idx = CLOTHING_SOCKS_ICON_NAME;
1166 break; 1381 break;
1167 case WT_JACKET: 1382 case LLInventoryType::NIT_JACKET:
1168 idx = CLOTHING_JACKET_ICON_NAME; 1383 idx = CLOTHING_JACKET_ICON_NAME;
1169 break; 1384 break;
1170 case WT_GLOVES: 1385 case LLInventoryType::NIT_GLOVES:
1171 idx = CLOTHING_GLOVES_ICON_NAME; 1386 idx = CLOTHING_GLOVES_ICON_NAME;
1172 break; 1387 break;
1173 case WT_UNDERSHIRT: 1388 case LLInventoryType::NIT_UNDERSHIRT:
1174 idx = CLOTHING_UNDERSHIRT_ICON_NAME; 1389 idx = CLOTHING_UNDERSHIRT_ICON_NAME;
1175 break; 1390 break;
1176 case WT_UNDERPANTS: 1391 case LLInventoryType::NIT_UNDERPANTS:
1177 idx = CLOTHING_UNDERPANTS_ICON_NAME; 1392 idx = CLOTHING_UNDERPANTS_ICON_NAME;
1178 break; 1393 break;
1179 case WT_SKIRT: 1394 case LLInventoryType::NIT_SKIRT:
1180 idx = CLOTHING_SKIRT_ICON_NAME; 1395 idx = CLOTHING_SKIRT_ICON_NAME;
1181 break; 1396 break;
1397
1398 case LLInventoryType::NIT_CLOTHING:
1399 idx = CLOTHING_ICON_NAME;
1400 break;
1401
1402
1403 // TEXTURES / SNAPSHOTS
1404
1405 case LLInventoryType::NIT_SNAPSHOT:
1406 idx = SNAPSHOT_ICON_NAME;
1407 break;
1408 case LLInventoryType::NIT_TEXTURE:
1409 case LLInventoryType::NIT_IMAGE:
1410 idx = TEXTURE_ICON_NAME;
1411 break;
1412
1413
1414 // CALLING CARDS
1415
1416 case LLInventoryType::NIT_CALLCARD_ON:
1417 idx = CALLINGCARD_ONLINE_ICON_NAME;
1418 break;
1419 case LLInventoryType::NIT_CALLCARD_OFF:
1420 case LLInventoryType::NIT_CALLCARD:
1421 idx = CALLINGCARD_OFFLINE_ICON_NAME;
1422 break;
1423
1424
1425 // LANDMARKS
1426
1427 case LLInventoryType::NIT_LANDMARK_USED:
1428 idx = LANDMARK_VISITED_ICON_NAME;
1429 break;
1430 case LLInventoryType::NIT_LANDMARK_UNUSED:
1431 case LLInventoryType::NIT_LANDMARK:
1432 idx = LANDMARK_ICON_NAME;
1433 break;
1434
1435
1436 // SOUNDS
1437
1438 case LLInventoryType::NIT_SOUND:
1439 idx = SOUND_ICON_NAME;
1440 break;
1441
1442
1443 // ANIMATIONS
1444
1445 case LLInventoryType::NIT_ANIMATION:
1446 idx = ANIMATION_ICON_NAME;
1447 break;
1448
1449
1450 // GESTURES
1451
1452 case LLInventoryType::NIT_GESTURE:
1453 idx = GESTURE_ICON_NAME;
1454 break;
1455
1456
1457 // NOTECARD
1458
1459 case LLInventoryType::NIT_NOTECARD:
1460 idx = NOTECARD_ICON_NAME;
1461 break;
1462
1463
1464 // SCRIPTS
1465
1466 case LLInventoryType::NIT_SCRIPT_LSL2:
1467 idx = SCRIPT_ICON_NAME;
1468 break;
1469
1470
1471 // OBJECTS
1472
1473 case LLInventoryType::NIT_OBJECT:
1474 if( item_is_multi )
1475 {
1476 idx = OBJECT_MULTI_ICON_NAME;
1477 }
1478 else
1479 {
1480 idx = OBJECT_ICON_NAME;
1481 }
1482 break;
1483
1182 default: 1484 default:
1183 // no-op, go with choice above
1184 break; 1485 break;
1185 }
1186 break;
1187 case LLAssetType::AT_NOTECARD:
1188 idx = NOTECARD_ICON_NAME;
1189 break;
1190 case LLAssetType::AT_ANIMATION:
1191 idx = ANIMATION_ICON_NAME;
1192 break;
1193 case LLAssetType::AT_GESTURE:
1194 idx = GESTURE_ICON_NAME;
1195 break;
1196 default:
1197 break;
1198 } 1486 }
1199 1487
1200 return ICON_NAME[idx]; 1488 return ICON_NAME[idx];
1201} 1489}
1202 1490
diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h
index a37d370..80e5768 100644
--- a/linden/indra/newview/llinventoryview.h
+++ b/linden/indra/newview/llinventoryview.h
@@ -58,6 +58,7 @@ class LLCheckBoxCtrl;
58class LLSpinCtrl; 58class LLSpinCtrl;
59class LLScrollableContainerView; 59class LLScrollableContainerView;
60class LLTextBox; 60class LLTextBox;
61class LLComboBox;
61class LLIconCtrl; 62class LLIconCtrl;
62class LLSaveFolderState; 63class LLSaveFolderState;
63class LLSearchEditor; 64class LLSearchEditor;
@@ -239,6 +240,8 @@ public:
239 static void onFoldersByName(void *user_data); 240 static void onFoldersByName(void *user_data);
240 static BOOL checkFoldersByName(void *user_data); 241 static BOOL checkFoldersByName(void *user_data);
241 static void onSearchEdit(const std::string& search_string, void* user_data ); 242 static void onSearchEdit(const std::string& search_string, void* user_data );
243 static void onQuickFilterCommit(LLUICtrl* ctrl, void* user_data);
244 static void refreshQuickFilter(LLUICtrl* ctrl);
242 static void onFilterSelected(void* userdata, bool from_click); 245 static void onFilterSelected(void* userdata, bool from_click);
243 static void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data); 246 static void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data);
244 247
@@ -259,6 +262,7 @@ protected:
259 262
260protected: 263protected:
261 LLSearchEditor* mSearchEditor; 264 LLSearchEditor* mSearchEditor;
265 LLComboBox* mQuickFilterCombo;
262 LLTabContainer* mFilterTabs; 266 LLTabContainer* mFilterTabs;
263 LLHandle<LLFloater> mFinderHandle; 267 LLHandle<LLFloater> mFinderHandle;
264 LLInventoryPanel* mActivePanel; 268 LLInventoryPanel* mActivePanel;
@@ -344,6 +348,9 @@ std::string get_item_icon_name(LLAssetType::EType asset_type,
344 U32 attachment_point, 348 U32 attachment_point,
345 BOOL item_is_multi ); 349 BOOL item_is_multi );
346 350
351std::string get_item_icon_name(LLInventoryType::NType inv_ntype,
352 BOOL item_is_multi );
353
347LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, 354LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
348 LLInventoryType::EType inventory_type, 355 LLInventoryType::EType inventory_type,
349 U32 attachment_point, 356 U32 attachment_point,
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp
index 3c0e6d7..e41ecdc 100644
--- a/linden/indra/newview/llpanelinventory.cpp
+++ b/linden/indra/newview/llpanelinventory.cpp
@@ -146,6 +146,7 @@ public:
146 virtual BOOL isUpToDate() const { return TRUE; } 146 virtual BOOL isUpToDate() const { return TRUE; }
147 virtual BOOL hasChildren() const { return FALSE; } 147 virtual BOOL hasChildren() const { return FALSE; }
148 virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; } 148 virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; }
149 virtual LLInventoryType::NType getNInventoryType() const { return LLInventoryType::NIT_NONE; }
149 // LLDragAndDropBridge functionality 150 // LLDragAndDropBridge functionality
150 virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; 151 virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
151 virtual BOOL dragOrDrop(MASK mask, BOOL drop, 152 virtual BOOL dragOrDrop(MASK mask, BOOL drop,
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 90b1bd3..7547dd2 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -5499,6 +5499,10 @@ void LLSelectMgr::updateSelectionCenter()
5499 5499
5500 std::vector < LLViewerObject *> jointed_objects; 5500 std::vector < LLViewerObject *> jointed_objects;
5501 5501
5502 // Initialize the bounding box to the root prim, so the BBox orientation
5503 // matches the root prim's (affecting the orientation of the manipulators).
5504 bbox.addBBoxAgent( (mSelectedObjects->getFirstRootObject(TRUE))->getBoundingBoxAgent() );
5505
5502 for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); 5506 for (LLObjectSelection::iterator iter = mSelectedObjects->begin();
5503 iter != mSelectedObjects->end(); iter++) 5507 iter != mSelectedObjects->end(); iter++)
5504 { 5508 {
diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h
index c5f9d06..00a53d3 100644
--- a/linden/indra/newview/llwearable.h
+++ b/linden/indra/newview/llwearable.h
@@ -37,28 +37,10 @@
37#include "llpermissions.h" 37#include "llpermissions.h"
38#include "llsaleinfo.h" 38#include "llsaleinfo.h"
39#include "llassetstorage.h" 39#include "llassetstorage.h"
40#include "llwearabletype.h"
40 41
41class LLViewerInventoryItem; 42class LLViewerInventoryItem;
42 43
43enum EWearableType // If you change this, update LLWearable::getTypeName(), getTypeLabel(), and LLVOAvatar::getTEWearableType()
44{
45 WT_SHAPE = 0,
46 WT_SKIN = 1,
47 WT_HAIR = 2,
48 WT_EYES = 3,
49 WT_SHIRT = 4,
50 WT_PANTS = 5,
51 WT_SHOES = 6,
52 WT_SOCKS = 7,
53 WT_JACKET = 8,
54 WT_GLOVES = 9,
55 WT_UNDERSHIRT = 10,
56 WT_UNDERPANTS = 11,
57 WT_SKIRT = 12,
58 WT_COUNT = 13,
59 WT_INVALID = 255
60};
61
62class LLWearable 44class LLWearable
63{ 45{
64 friend class LLWearableList; 46 friend class LLWearableList;
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
index 1cb1da0..590555f 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml
@@ -5,18 +5,64 @@
5 title="Inventory" width="467"> 5 title="Inventory" width="467">
6 <search_editor bottom="-50" follows="left|top|right" height="16" label="Type here to search" 6 <search_editor bottom="-50" follows="left|top|right" height="16" label="Type here to search"
7 left="6" mouse_opaque="true" name="inventory search editor" width="455" /> 7 left="6" mouse_opaque="true" name="inventory search editor" width="455" />
8 <tab_container bottom_delta="-512" follows="left|top|right|bottom" height="508" left="2" 8
9 mouse_opaque="false" name="inventory filter tabs" tab_position="top" 9 <text name="group_titles_textbox" font="SansSerifSmall" follows="left|top"
10 width="463"> 10 height="16" left="10" bottom_delta="-24" width="120">
11 Quick Filter:
12 </text>
13
14 <!-- Inventory Type Filter Labels -->
15 <string name="filter_type_all">All Types</string>
16 <string name="filter_type_animation">Animations</string>
17 <string name="filter_type_bodypart">Body Parts</string>
18 <string name="filter_type_callingcard">Calling Cards</string>
19 <string name="filter_type_clothing">Clothing</string>
20 <string name="filter_type_gesture">Gestures</string>
21 <string name="filter_type_landmark">Landmarks</string>
22 <string name="filter_type_notecard">Notecards</string>
23 <string name="filter_type_object">Objects</string>
24 <string name="filter_type_script">Scripts</string>
25 <string name="filter_type_sound">Sounds</string>
26 <string name="filter_type_texture">Textures</string>
27 <string name="filter_type_snapshot">Snapshots</string>
28 <string name="filter_type_custom">Custom...</string>
29
30 <combo_box name="Quick Filter" label="Quick Filter" follows="left|top"
31 height="20" left="80" width="150" bottom_delta="0">
32
33 <combo_item name="filter_type_all">All Types</combo_item>
34 <separator />
35 <combo_item name="filter_type_animation">Animations</combo_item>
36 <combo_item name="filter_type_bodypart">Body Parts</combo_item>
37 <combo_item name="filter_type_callingcard">Calling Cards</combo_item>
38 <combo_item name="filter_type_clothing">Clothing</combo_item>
39 <combo_item name="filter_type_gesture">Gestures</combo_item>
40 <combo_item name="filter_type_landmark">Landmarks</combo_item>
41 <combo_item name="filter_type_notecard">Notecards</combo_item>
42 <combo_item name="filter_type_object">Objects</combo_item>
43 <combo_item name="filter_type_script">Scripts</combo_item>
44 <combo_item name="filter_type_sound">Sounds</combo_item>
45 <combo_item name="filter_type_texture">Textures</combo_item>
46 <combo_item name="filter_type_snapshot">Snapshots</combo_item>
47 <separator />
48 <combo_item name="filter_type_custom">Custom...</combo_item>
49
50 </combo_box>
51
52 <tab_container name="inventory filter tabs" follows="left|top|right|bottom"
53 bottom_delta="-487" height="480" left="2" width="463"
54 mouse_opaque="false" tab_position="top">
55
11 <inventory_panel allow_multi_select="true" border="true" bottom="-507" 56 <inventory_panel allow_multi_select="true" border="true" bottom="-507"
12 follows="left|top|right|bottom" height="491" label="All Items" left="1" 57 follows="left|top|right|bottom" height="431" label="All Items" left="1"
13 mouse_opaque="true" name="All Items" sort_order="InventorySortOrder" 58 mouse_opaque="true" name="All Items" sort_order="InventorySortOrder"
14 width="461" /> 59 width="461" />
15 <inventory_panel allow_multi_select="true" border="true" bottom_delta="0" 60 <inventory_panel allow_multi_select="true" border="true" bottom_delta="0"
16 follows="left|top|right|bottom" height="491" label="Recent Items" 61 follows="left|top|right|bottom" height="431" label="Recent Items"
17 left_delta="0" mouse_opaque="true" name="Recent Items" 62 left_delta="0" mouse_opaque="true" name="Recent Items"
18 sort_order="RecentItemsSortOrder" width="461" /> 63 sort_order="RecentItemsSortOrder" width="461" />
19 </tab_container> 64 </tab_container>
65
20 <menu_bar bottom="-34" drop_shadow="false" follows="left|top|right" height="18" left="2" 66 <menu_bar bottom="-34" drop_shadow="false" follows="left|top|right" height="18" left="2"
21 mouse_opaque="false" name="Inventory Menu" opaque="false" width="461"> 67 mouse_opaque="false" name="Inventory Menu" opaque="false" width="461">
22 <menu bottom_delta="16" drop_shadow="true" height="101" 68 <menu bottom_delta="16" drop_shadow="true" height="101"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml
index 9a9b8db..9a5756b 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml
@@ -1,102 +1,133 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-495" can_close="true" can_drag_on_left="false" can_minimize="false" 2
3 can_resize="false" can_tear_off="true" enabled="true" height="408" 3<floater name="Inventory Finder" title="inventory_recent_items"
4 left="457" min_height="408" min_width="160" mouse_opaque="true" 4 bottom="-495" left="457" height="428" width="170"
5 name="Inventory Finder" title="inventory_recent_items" width="160"> 5 can_close="true" can_drag_on_left="false" can_minimize="false"
6 <icon bottom="-36" color="1 1 1 1" enabled="true" follows="left|top" height="16" 6 can_resize="false" can_tear_off="true">
7 image_name="inv_item_animation.tga" left="8" mouse_opaque="true" 7
8 name="icon_animation" width="16" /> 8
9 <check_box bottom="-36" enabled="true" follows="left|top" font="SansSerifSmall" 9 <icon name="icon_animation" image_name="inv_item_animation.tga"
10 height="16" initial_value="false" label="Animation" left="26" 10 bottom="-36" left="8" height="16" width="16" follows="left|top" />
11 mouse_opaque="true" name="check_animation" radio_style="false" width="126" /> 11 <check_box label="Animation" name="check_animation"
12 <icon bottom="-56" color="1 1 1 1" enabled="true" follows="left|top" height="16" 12 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
13 image_name="inv_item_callingcard_online.tga" left="8" mouse_opaque="true" 13 font="SansSerifSmall" initial_value="false" />
14 name="icon_calling_card" width="16" /> 14
15 <check_box bottom="-56" enabled="true" follows="left|top" font="SansSerifSmall" 15
16 height="16" initial_value="false" label="Calling Cards" left="26" 16 <icon name="icon_bodypart" image_name="inv_item_skin.tga"
17 mouse_opaque="true" name="check_calling_card" radio_style="false" 17 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
18 width="126" /> 18 <check_box label="Body Parts" name="check_bodypart"
19 <icon bottom="-76" color="1 1 1 1" enabled="true" follows="left|top" height="16" 19 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
20 image_name="inv_item_shirt.tga" left="8" mouse_opaque="true" 20 font="SansSerifSmall" initial_value="false" />
21 name="icon_clothing" width="16" /> 21
22 <check_box bottom="-76" enabled="true" follows="left|top" font="SansSerifSmall" 22
23 height="16" initial_value="false" label="Clothing" left="26" 23 <icon name="icon_calling_card" image_name="inv_item_callingcard_online.tga"
24 mouse_opaque="true" name="check_clothing" radio_style="false" width="126" /> 24 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
25 <icon bottom="-96" color="1 1 1 1" enabled="true" follows="left|top" height="16" 25 <check_box label="Calling Cards" name="check_calling_card"
26 image_name="inv_item_gesture.tga" left="8" mouse_opaque="true" 26 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
27 name="icon_gesture" width="16" /> 27 font="SansSerifSmall" initial_value="false" />
28 <check_box bottom="-96" enabled="true" follows="left|top" font="SansSerifSmall" 28
29 height="16" initial_value="false" label="Gestures" left="26" 29
30 mouse_opaque="true" name="check_gesture" radio_style="false" width="126" /> 30 <icon name="icon_clothing" image_name="inv_item_shirt.tga"
31 <icon bottom="-116" color="1 1 1 1" enabled="true" follows="left|top" height="16" 31 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
32 image_name="inv_item_landmark_visited.tga" left="8" mouse_opaque="true" 32 <check_box label="Clothing" name="check_clothing"
33 name="icon_landmark" width="16" /> 33 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
34 <check_box bottom="-116" enabled="true" follows="left|top" font="SansSerifSmall" 34 font="SansSerifSmall" initial_value="false" />
35 height="16" initial_value="false" label="Landmarks" left="26" 35
36 mouse_opaque="true" name="check_landmark" radio_style="false" width="126" /> 36
37 <icon bottom="-136" color="1 1 1 1" enabled="true" follows="left|top" height="16" 37 <icon name="icon_gesture" image_name="inv_item_gesture.tga"
38 image_name="inv_item_notecard.tga" left="8" mouse_opaque="true" 38 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
39 name="icon_notecard" width="16" /> 39 <check_box label="Gestures" name="check_gesture"
40 <check_box bottom="-136" enabled="true" follows="left|top" font="SansSerifSmall" 40 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
41 height="16" initial_value="false" label="Notecards" left="26" 41 font="SansSerifSmall" initial_value="false" />
42 mouse_opaque="true" name="check_notecard" radio_style="false" width="126" /> 42
43 <icon bottom="-156" color="1 1 1 1" enabled="true" follows="left|top" height="16" 43
44 image_name="inv_item_object.tga" left="8" mouse_opaque="true" 44 <icon name="icon_landmark" image_name="inv_item_landmark_visited.tga"
45 name="icon_object" width="16" /> 45 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
46 <check_box bottom="-156" enabled="true" follows="left|top" font="SansSerifSmall" 46 <check_box label="Landmarks" name="check_landmark"
47 height="16" initial_value="false" label="Objects" left="26" 47 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
48 mouse_opaque="true" name="check_object" radio_style="false" width="126" /> 48 font="SansSerifSmall" initial_value="false" />
49 <icon bottom="-176" color="1 1 1 1" enabled="true" follows="left|top" height="16" 49
50 image_name="inv_item_script.tga" left="8" mouse_opaque="true" 50
51 name="icon_script" width="16" /> 51 <icon name="icon_notecard" image_name="inv_item_notecard.tga"
52 <check_box bottom="-176" enabled="true" follows="left|top" font="SansSerifSmall" 52 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
53 height="16" initial_value="false" label="Scripts" left="26" 53 <check_box label="Notecards" name="check_notecard"
54 mouse_opaque="true" name="check_script" radio_style="false" width="126" /> 54 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
55 <icon bottom="-196" color="1 1 1 1" enabled="true" follows="left|top" height="16" 55 font="SansSerifSmall" initial_value="false" />
56 image_name="inv_item_sound.tga" left="8" mouse_opaque="true" 56
57 name="icon_sound" width="16" /> 57
58 <check_box bottom="-196" enabled="true" follows="left|top" font="SansSerifSmall" 58 <icon name="icon_object" image_name="inv_item_object.tga"
59 height="16" initial_value="false" label="Sounds" left="26" 59 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
60 mouse_opaque="true" name="check_sound" radio_style="false" width="126" /> 60 <check_box label="Objects" name="check_object"
61 <icon bottom="-216" color="1 1 1 1" enabled="true" follows="left|top" height="16" 61 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
62 image_name="inv_item_texture.tga" left="8" mouse_opaque="true" 62 font="SansSerifSmall" initial_value="false" />
63 name="icon_texture" width="16" /> 63
64 <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall" 64
65 height="16" initial_value="false" label="Textures" left="26" 65 <icon name="icon_script" image_name="inv_item_script.tga"
66 mouse_opaque="true" name="check_texture" radio_style="false" width="126" /> 66 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
67 <icon bottom="-236" color="1 1 1 1" enabled="true" follows="left|top" height="16" 67 <check_box label="Scripts" name="check_script"
68 image_name="inv_item_snapshot.tga" left="8" mouse_opaque="true" 68 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
69 name="icon_snapshot" width="16" /> 69 font="SansSerifSmall" initial_value="false" />
70 <check_box bottom="-236" enabled="true" follows="left|top" font="SansSerifSmall" 70
71 height="16" initial_value="false" label="Snapshots" left="26" 71
72 mouse_opaque="true" name="check_snapshot" radio_style="false" width="126" /> 72 <icon name="icon_sound" image_name="inv_item_sound.tga"
73 <button bottom="-260" enabled="true" follows="left|top" font="SansSerif" 73 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
74 halign="center" height="20" label="All" label_selected="All" left="8" 74 <check_box label="Sounds" name="check_sound"
75 mouse_opaque="true" name="All" scale_image="true" width="100" /> 75 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
76 <button bottom="-284" enabled="true" follows="left|top" font="SansSerif" 76 font="SansSerifSmall" initial_value="false" />
77 halign="center" height="20" label="None" label_selected="None" left="8" 77
78 mouse_opaque="true" name="None" scale_image="true" width="100" /> 78
79 <check_box bottom="-304" enabled="true" follows="left|top" font="SansSerifSmall" 79 <icon name="icon_texture" image_name="inv_item_texture.tga"
80 height="16" initial_value="false" label="Always show folders" left="8" 80 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
81 mouse_opaque="true" name="check_show_empty" radio_style="false" width="144" /> 81 <check_box label="Textures" name="check_texture"
82 <check_box bottom="-324" enabled="true" follows="left|top" font="SansSerifSmall" 82 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
83 height="16" initial_value="false" label="Since Logoff" left="8" 83 font="SansSerifSmall" initial_value="false" />
84 mouse_opaque="true" name="check_since_logoff" radio_style="false" 84
85 width="144" /> 85
86 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 86 <icon name="icon_snapshot" image_name="inv_item_snapshot.tga"
87 bottom="-336" drop_shadow_visible="true" enabled="true" follows="left|top" 87 bottom_delta="-20" left="8" height="16" width="16" follows="left|top" />
88 font="SansSerifSmall" h_pad="0" halign="center" height="12" left="8" 88 <check_box label="Snapshots" name="check_snapshot"
89 mouse_opaque="true" name="- OR -" v_pad="0" width="144"> 89 bottom_delta="0" left="26" height="16" width="126" follows="left|top"
90 font="SansSerifSmall" initial_value="false" />
91
92
93 <button label="All" label_selected="All" name="All"
94 bottom_delta="-24" left="8" height="20" width="100" follows="left|top"
95 font="SansSerif" halign="center" scale_image="true" />
96
97 <button label="None" label_selected="None" name="None"
98 bottom_delta="-24" left="8" height="20" width="100" follows="left|top"
99 font="SansSerif" halign="center" scale_image="true" />
100
101
102 <check_box label="Always show folders" name="check_show_empty"
103 bottom_delta="-20" left="8" height="16" width="144" follows="left|top"
104 font="SansSerifSmall" initial_value="false" />
105
106
107 <check_box label="Since Logoff" name="check_since_logoff"
108 bottom_delta="-20" left="8" height="16" width="144" follows="left|top"
109 font="SansSerifSmall" initial_value="false" />
110
111
112 <text name="- OR -" type="string" length="1"
113 bottom_delta="-12" left="8" height="12" width="144" follows="left|top"
114 halign="center" h_pad="0" v_pad="0"
115 bg_visible="false" border_drop_shadow_visible="false"
116 border_visible="false" drop_shadow_visible="true"
117 font="SansSerifSmall">
90 - OR - 118 - OR -
91 </text> 119 </text>
92 <spinner bottom="-356" enabled="true" follows="left|top" height="16" increment="1" 120
93 initial_val="0" label="Hours Ago" label_width="64" left="8" 121
94 max_val="240000" min_val="0" mouse_opaque="true" name="spin_hours_ago" 122 <spinner label="Hours Ago" label_width="64" name="spin_hours_ago"
95 width="144" /> 123 bottom_delta="-20" left="8" height="16" width="144" follows="left|top"
96 <spinner bottom="-376" enabled="true" follows="left|top" height="16" increment="1" 124 increment="1" initial_val="0" max_val="240000" min_val="0" />
97 initial_val="0" label="Days Ago" label_width="64" left="8" max_val="10000" 125 <spinner label="Days Ago" label_width="64" name="spin_days_ago"
98 min_val="0" mouse_opaque="true" name="spin_days_ago" width="144" /> 126 bottom_delta="-20" left="8" width="144" height="16" follows="left|top"
99 <button bottom="-400" enabled="true" follows="top|right" font="SansSerif" 127 increment="1" initial_val="0" max_val="10000" min_val="0" />
100 halign="center" height="20" label="Close" label_selected="Close" 128
101 mouse_opaque="true" name="Close" right="-6" scale_image="true" width="76" /> 129
130 <button label="Close" label_selected="Close" name="Close"
131 bottom="-420" right="-6" height="20" width="76" follows="top|right"
132 font="SansSerif" halign="center" scale_image="true" />
102</floater> 133</floater>