aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.txt232
-rw-r--r--linden/indra/llinventory/llinventory.cpp138
-rw-r--r--linden/indra/llinventory/llinventory.h12
-rw-r--r--linden/indra/llinventory/llinventorytype.h86
-rw-r--r--linden/indra/llinventory/llwearabletype.h54
-rw-r--r--linden/indra/llui/llcombobox.cpp5
-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
-rw-r--r--linden/install.xml7
18 files changed, 1151 insertions, 279 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 6879450..7f91f38 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,13 @@
1=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2=- 1.1.0 -=
3=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
4
52009-01-13 McCabe Maxsted <hakushakukun@gmail.com>
6
7 * linden/install.xml
8 Removed bad Windows Glib package.
9
10
12009-01-12 McCabe Maxsted <hakushakukun@gmail.com> 112009-01-12 McCabe Maxsted <hakushakukun@gmail.com>
2 12
3 * linden/indra/llcommon/llversionviewer.h 13 * linden/indra/llcommon/llversionviewer.h
@@ -37,21 +47,7 @@
37 Tweaked the layout a bit. 47 Tweaked the layout a bit.
38 48
39 49
402009-01-11 Jacek Antonelli <jacek.antonelli@gmail.com> 502009-01-11 McCabe Maxsted <hakushakukun@gmail.com>
41
42 * linden/indra/cmake/GStreamer.cmake:
43 Added more gstreamer include paths.
44 * linden/install.xml:
45 Added glib package to install.xml.
46 * linden/indra/newview/CMakeLists.txt:
47 Use BOOST_SIGNALS_LIB in newview/CMakeLists.
48 * cmake/DBusGlib.cmake:
49 Removed references to unused dbusglib.
50 * newview/CMakeLists.txt:
51 Ditto.
52
53
54 McCabe Maxsted <hakushakukun@gmail.com>
55 51
56 * linden/indra/newview/llvieweraudio.cpp: 52 * linden/indra/newview/llvieweraudio.cpp:
57 Wind disabled by default, ambient wind muting fixed, added debug setting 'MuteAudio'. 53 Wind disabled by default, ambient wind muting fixed, added debug setting 'MuteAudio'.
@@ -85,6 +81,20 @@
85 * linden/indra/newview/llpanelobject.cpp: 81 * linden/indra/newview/llpanelobject.cpp:
86 Ditto. 82 Ditto.
87 * linden/indra/newview/skins/default/xui/en-us/floater_tools.xml: 83 * linden/indra/newview/skins/default/xui/en-us/floater_tools.xml:
84 Ditto.
85
86
87 Jacek Antonelli <jacek.antonelli@gmail.com>
88
89 * linden/indra/cmake/GStreamer.cmake:
90 Added more gstreamer include paths.
91 * linden/install.xml:
92 Added glib package to install.xml.
93 * linden/indra/newview/CMakeLists.txt:
94 Use BOOST_SIGNALS_LIB in newview/CMakeLists.
95 * cmake/DBusGlib.cmake:
96 Removed references to unused dbusglib.
97 * newview/CMakeLists.txt:
88 98
89 99
902009-01-10 Armin <email@unknown.com> 1002009-01-10 Armin <email@unknown.com>
@@ -273,6 +283,13 @@
273 Moved "Disable Camera Constraints" to Preferences > Input/Camera. 283 Moved "Disable Camera Constraints" to Preferences > Input/Camera.
274 284
275 285
286 Jacek Antonelli <jacek.antonelli@gmail.com>
287
288 * linden/indra/newview/llselectmgr.cpp:
289 VWR-1582: Local ruler mode wrong for linked objects.
290 Also VWR-11103 (regression of above).
291
292
2762008-12-15 Jacek Antonelli <jacek.antonelli@gmail.com> 2932008-12-15 Jacek Antonelli <jacek.antonelli@gmail.com>
277 294
278 * linden/install.xml: 295 * linden/install.xml:
@@ -312,6 +329,100 @@
312 Backported from LL's 1.22 RC3. 329 Backported from LL's 1.22 RC3.
313 330
314 331
3322008-12-10 Jacek Antonelli <jacek.antonelli@gmail.com>
333
334 * linden/indra/newview/llinventoryview.cpp:
335 Use NType to find inventory icon name.
336 * linden/indra/newview/llinventoryview.h:
337 Ditto.
338
339 * linden/indra/newview/llinventoryview.cpp:
340 Clearing search shouldn't clear filter type.
341
342
3432008-12-09 Jacek Antonelli <jacek.antonelli@gmail.com>
344
345 * linden/indra/newview/llinventoryview.cpp:
346 Start fetching inventory when quick filter changes.
347
348 * linden/indra/newview/llinventoryview.cpp:
349 Refresh filter text when quick filter changes.
350
351 * linden/indra/newview/llfolderview.cpp:
352 Refactored; added LLInventoryFilter::rebuildFilterText().
353 * linden/indra/newview/llfolderview.h:
354 Ditto.
355
356 * linden/indra/newview/llfolderview.cpp:
357 Updated Inventory window filter text generation.
358 It was putting the wrong types in the title when
359 filtering. [#25]
360
361
3622008-12-08 Jacek Antonelli <jacek.antonelli@gmail.com>
363
364 * linden/indra/newview/llinventoryview.cpp:
365 Hooked up Body Parts quickfilter and checkbox.
366
367 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
368 Added Quick Filter item for Body Parts.
369
370 * linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml:
371 Added Show Filters checkbox for Body Parts.
372
373 * linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml:
374 Converted Show Filters window to relative positioning.
375
376 * linden/indra/newview/llfolderview.cpp:
377 Inventory filtering is now done by NType.
378
379 * linden/indra/newview/llinventorybridge.cpp:
380 LLInvFVBridge and derived classes have NTypes.
381 * linden/indra/newview/llinventorybridge.h:
382 Ditto.
383 * linden/indra/newview/llpanelinventory.cpp:
384 Ditto.
385
386 * linden/indra/newview/llfolderview.h:
387 Added LLFolderViewEventListener::getNInventoryType()
388 Pure virtual method, overridden in derived classes.
389
390 * linden/indra/newview/llinventoryview.cpp:
391 LLInventoryView uses new inventory type.
392
393 * linden/indra/llinventory/llinventory.cpp:
394 Recalculate ntype when changing type or flags.
395
396 * linden/indra/llinventory/llinventory.cpp:
397 Added LLInventoryItem::recalcNInventoryType().
398 * linden/indra/llinventory/llinventory.h:
399 Ditto.
400
401 * linden/indra/llinventory/llinventory.cpp:
402 Added calc_ntype() function.
403 * linden/indra/llinventory/llinventory.h:
404 Ditto.
405
406 * linden/indra/llinventory/llwearabletype.h:
407 Moved enum EWearableType to its own file.
408 Was in newview/llwearable.h, now in llinventory/llwearabletype.h.
409 This allows it to be used in llinventory code.
410 * linden/indra/newview/llwearable.h:
411 Ditto.
412
413
4142008-12-07 Jacek Antonelli <jacek.antonelli@gmail.com>
415
416 * linden/indra/llinventory/llinventory.cpp:
417 Added LLInventoryItem::mNInventoryType (new type) field.
418 Will always by NIT_NONE so far.
419 * linden/indra/llinventory/llinventory.h:
420 Ditto.
421
422 * linden/indra/llinventory/llinventorytype.h:
423 New bitfield enumerator for inventory types.
424
425
3152008-12-05 McCabe Maxsted <hakushakukun@gmail.com> 4262008-12-05 McCabe Maxsted <hakushakukun@gmail.com>
316 427
317 * linden/indra/newview/llappviewer.cpp: 428 * linden/indra/newview/llappviewer.cpp:
@@ -343,7 +454,6 @@
343 * linden/indra/newview/skins/default/xui/en-us/notify.xml: 454 * linden/indra/newview/skins/default/xui/en-us/notify.xml:
344 VWR-4826 (ability to ignore friendship offers). 455 VWR-4826 (ability to ignore friendship offers).
345 456
346
347 * linden/indra/newview/app_settings/settings.xml: 457 * linden/indra/newview/app_settings/settings.xml:
348 Beacons no longer persist between sessions. 458 Beacons no longer persist between sessions.
349 That distressed users who accidentally enabled them, 459 That distressed users who accidentally enabled them,
@@ -355,15 +465,70 @@
355 * linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml: 465 * linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml:
356 Ditto. 466 Ditto.
357 467
358
359 * linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml: 468 * linden/indra/newview/skins/default/xui/en-us/floater_instant_message.xml:
360 Moved 'Offer Teleport' in IM to be on the left side. 469 Moved 'Offer Teleport' in IM to be on the left side.
361 470
362
363 * linden/indra/newview/skins/default/xui/en-us/panel_groups.xml: 471 * linden/indra/newview/skins/default/xui/en-us/panel_groups.xml:
364 Switched Invite and Leave buttons in group panel. 472 Switched Invite and Leave buttons in group panel.
365 473
366 474
475 Jacek Antonelli <jacek.antonelli@gmail.com>
476
477 * linden/indra/newview/llinventoryview.cpp:
478 Read filter labels from LLTrans, no hard-coding.
479
480 * linden/indra/newview/skins/default/xui/en-us/strings.xml:
481 Defined strings for filter types (to allow translation).
482
483
4842008-11-22 Jacek Antonelli <jacek.antonelli@gmail.com>
485
486 * linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml:
487 Cleaned up Show Filters floater XML.
488
489
490 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
491 Added separators to Quick Filter.
492
493
494 * linden/indra/llui/llcombobox.cpp:
495 Combobox widget now supports separators in XUI.
496
497
498 * linden/indra/newview/llinventoryview.cpp:
499 Renamed "Clothing" filter to "Clothing / Body Parts".
500 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
501 Ditto.
502 * linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml:
503 Ditto.
504
505
506 * linden/indra/newview/llinventoryview.cpp:
507 Renamed "Show All Items" filter to "All Types".
508 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
509 Ditto.
510
511
512 * linden/indra/newview/llinventoryview.cpp:
513 Renamed "Show All Items" to "All Types".
514 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
515 Ditto.
516
517
518 * linden/indra/newview/llinventoryview.cpp:
519 Bogus quick filter strings should be ignored.
520
521
522 * linden/indra/newview/llinventoryview.cpp:
523 Disabled testing output when changing quick filter.
524
525
526 * linden/indra/newview/llinventoryview.cpp:
527 Quick Filter combo box refreshes properly.
528 * linden/indra/newview/llinventoryview.h:
529 Ditto.
530
531
3672008-11-22 McCabe Maxsted <hakushakukun@gmail.com> 5322008-11-22 McCabe Maxsted <hakushakukun@gmail.com>
368 533
369 * linden\indra\newview\skins\default\colors_base.xml: 534 * linden\indra\newview\skins\default\colors_base.xml:
@@ -398,6 +563,37 @@
398 Friends show yellow in minimap (VWR-3336). 563 Friends show yellow in minimap (VWR-3336).
399 564
400 565
5662008-11-11 Jacek Antonelli <jacek.antonelli@gmail.com>
567
568 * linden/indra/newview/llinventoryview.cpp:
569 Show Filters window refreshes properly.
570
571
5722008-11-08 Jacek Antonelli <jacek.antonelli@gmail.com>
573
574 * linden/indra/newview/llinventoryview.cpp:
575 Added 'Custom' filter option (opens filters window).
576 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
577 Ditto.
578
579
580 * linden/indra/newview/llinventoryview.cpp:
581 Quick Filter works, but is a bit rough.
582 It doesn't refresh its display when you change tabs,
583 and the Show Filters window doesn't refresh either.
584
585
586 * linden/indra/newview/llinventoryview.cpp:
587 Added commit callback for Quick Filter.
588 * linden/indra/newview/llinventoryview.h:
589 Ditto.
590
591
592 * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml:
593 Added XUI for the Quick Filter combo box.
594
595
596
4012008-10-18 McCabe Maxsted <hakushakukun@gmail.com> 5972008-10-18 McCabe Maxsted <hakushakukun@gmail.com>
402 598
403 * linden\indra\newview\skins\default\xui\en-us\menu_viewer.xml: 599 * linden\indra\newview\skins\default\xui\en-us\menu_viewer.xml:
diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp
index 0c7e0ed..e492889 100644
--- a/linden/indra/llinventory/llinventory.cpp
+++ b/linden/indra/llinventory/llinventory.cpp
@@ -73,6 +73,116 @@ const U8 TASK_INVENTORY_ASSET_KEY = 1;
73const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730"); 73const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730");
74 74
75 75
76/**
77 * @brief Return the equivalent new inventory type.
78 *
79 * Takes an inventory type, asset type, and inventory flags,
80 * and returns the equivalent LLInventory::NType.
81 *
82 * For example, an inventory type of IT_WEARABLE, asset type
83 * of AT_BODYPART, and flags indicated WT_SHAPE, would be
84 * converted to NIT_SHAPE.
85 *
86 * Returns the most specific type that can be determined,
87 * or NIT_NONE if no type could be determined.
88 *
89 */
90LLInventoryType::NType calc_ntype(
91 LLInventoryType::EType inv_type,
92 LLAssetType::EType asset_type,
93 U32 flags )
94{
95 switch( inv_type )
96 {
97
98 // WEARABLES
99 case LLInventoryType::IT_WEARABLE:
100 {
101 switch( asset_type )
102 {
103 // BODY PARTS
104 case LLAssetType::AT_BODYPART:
105 {
106 switch( flags & LLInventoryItem::II_FLAGS_WEARABLES_MASK )
107 {
108 case WT_SHAPE: return LLInventoryType::NIT_SHAPE;
109 case WT_SKIN: return LLInventoryType::NIT_SKIN;
110 case WT_HAIR: return LLInventoryType::NIT_HAIR;
111 case WT_EYES: return LLInventoryType::NIT_EYES;
112 default: return LLInventoryType::NIT_BODYPART;
113 }
114 }
115
116 // CLOTHING
117 case LLAssetType::AT_CLOTHING:
118 {
119 switch( flags & LLInventoryItem::II_FLAGS_WEARABLES_MASK )
120 {
121 case WT_SHIRT: return LLInventoryType::NIT_SHIRT;
122 case WT_PANTS: return LLInventoryType::NIT_PANTS;
123 case WT_SHOES: return LLInventoryType::NIT_SHOES;
124 case WT_SOCKS: return LLInventoryType::NIT_SOCKS;
125 case WT_JACKET: return LLInventoryType::NIT_JACKET;
126 case WT_GLOVES: return LLInventoryType::NIT_GLOVES;
127 case WT_UNDERSHIRT: return LLInventoryType::NIT_UNDERSHIRT;
128 case WT_UNDERPANTS: return LLInventoryType::NIT_UNDERPANTS;
129 case WT_SKIRT: return LLInventoryType::NIT_SKIRT;
130 default: return LLInventoryType::NIT_CLOTHING;
131 }
132 }
133 default:
134 return LLInventoryType::NIT_WEARABLE;
135 }
136 }
137
138 // TEXTURES
139 case LLInventoryType::IT_TEXTURE:
140 return LLInventoryType::NIT_TEXTURE;
141
142 // SNAPSHOTS
143 case LLInventoryType::IT_SNAPSHOT:
144 return LLInventoryType::NIT_SNAPSHOT;
145
146 // CALLING CARDS
147 case LLInventoryType::IT_CALLINGCARD:
148 return LLInventoryType::NIT_CALLCARD;
149
150 // LANDMARKS
151 case LLInventoryType::IT_LANDMARK:
152 return LLInventoryType::NIT_LANDMARK;
153
154 // SOUNDS
155 case LLInventoryType::IT_SOUND:
156 return LLInventoryType::NIT_SOUND;
157
158 // ANIMATIONS
159 case LLInventoryType::IT_ANIMATION:
160 return LLInventoryType::NIT_ANIMATION;
161
162 // GESTURES
163 case LLInventoryType::IT_GESTURE:
164 return LLInventoryType::NIT_GESTURE;
165
166 // NOTECARDS
167 case LLInventoryType::IT_NOTECARD:
168 return LLInventoryType::NIT_NOTECARD;
169
170 // SCRIPTS
171 case LLInventoryType::IT_LSL:
172 return LLInventoryType::NIT_SCRIPT_LSL2;
173
174 // OBJECTS
175 case LLInventoryType::IT_OBJECT:
176 case LLInventoryType::IT_ATTACHMENT:
177 return LLInventoryType::NIT_OBJECT;
178
179 // UNKNOWN TYPE!
180 default:
181 return LLInventoryType::NIT_NONE;
182 }
183}
184
185
76///---------------------------------------------------------------------------- 186///----------------------------------------------------------------------------
77/// Class LLInventoryObject 187/// Class LLInventoryObject
78///---------------------------------------------------------------------------- 188///----------------------------------------------------------------------------
@@ -290,11 +400,13 @@ LLInventoryItem::LLInventoryItem(
290 mDescription(desc), 400 mDescription(desc),
291 mSaleInfo(sale_info), 401 mSaleInfo(sale_info),
292 mInventoryType(inv_type), 402 mInventoryType(inv_type),
403 mNInventoryType(LLInventoryType::NIT_NONE),
293 mFlags(flags), 404 mFlags(flags),
294 mCreationDate(creation_date_utc) 405 mCreationDate(creation_date_utc)
295{ 406{
296 LLStringUtil::replaceNonstandardASCII(mDescription, ' '); 407 LLStringUtil::replaceNonstandardASCII(mDescription, ' ');
297 LLStringUtil::replaceChar(mDescription, '|', ' '); 408 LLStringUtil::replaceChar(mDescription, '|', ' ');
409 recalcNInventoryType();
298} 410}
299 411
300LLInventoryItem::LLInventoryItem() : 412LLInventoryItem::LLInventoryItem() :
@@ -304,6 +416,7 @@ LLInventoryItem::LLInventoryItem() :
304 mDescription(), 416 mDescription(),
305 mSaleInfo(), 417 mSaleInfo(),
306 mInventoryType(LLInventoryType::IT_NONE), 418 mInventoryType(LLInventoryType::IT_NONE),
419 mNInventoryType(LLInventoryType::NIT_NONE),
307 mFlags(0), 420 mFlags(0),
308 mCreationDate(0) 421 mCreationDate(0)
309{ 422{
@@ -328,6 +441,7 @@ void LLInventoryItem::copyItem(const LLInventoryItem* other)
328 mDescription = other->mDescription; 441 mDescription = other->mDescription;
329 mSaleInfo = other->mSaleInfo; 442 mSaleInfo = other->mSaleInfo;
330 mInventoryType = other->mInventoryType; 443 mInventoryType = other->mInventoryType;
444 mNInventoryType = other->mNInventoryType;
331 mFlags = other->mFlags; 445 mFlags = other->mFlags;
332 mCreationDate = other->mCreationDate; 446 mCreationDate = other->mCreationDate;
333} 447}
@@ -399,6 +513,12 @@ U32 LLInventoryItem::getCRC32() const
399} 513}
400 514
401 515
516void LLInventoryItem::recalcNInventoryType()
517{
518 setNInventoryType( calc_ntype(mInventoryType, mType, mFlags) );
519}
520
521
402void LLInventoryItem::setDescription(const std::string& d) 522void LLInventoryItem::setDescription(const std::string& d)
403{ 523{
404 std::string new_desc(d); 524 std::string new_desc(d);
@@ -415,14 +535,27 @@ void LLInventoryItem::setPermissions(const LLPermissions& perm)
415 mPermissions = perm; 535 mPermissions = perm;
416} 536}
417 537
538void LLInventoryItem::setType(LLAssetType::EType type)
539{
540 mType = type;
541 recalcNInventoryType();
542}
543
418void LLInventoryItem::setInventoryType(LLInventoryType::EType inv_type) 544void LLInventoryItem::setInventoryType(LLInventoryType::EType inv_type)
419{ 545{
420 mInventoryType = inv_type; 546 mInventoryType = inv_type;
547 recalcNInventoryType();
548}
549
550void LLInventoryItem::setNInventoryType(LLInventoryType::NType inv_type)
551{
552 mNInventoryType = inv_type;
421} 553}
422 554
423void LLInventoryItem::setFlags(U32 flags) 555void LLInventoryItem::setFlags(U32 flags)
424{ 556{
425 mFlags = flags; 557 mFlags = flags;
558 recalcNInventoryType();
426} 559}
427 560
428void LLInventoryItem::setCreationDate(time_t creation_date_utc) 561void LLInventoryItem::setCreationDate(time_t creation_date_utc)
@@ -446,6 +579,11 @@ LLInventoryType::EType LLInventoryItem::getInventoryType() const
446 return mInventoryType; 579 return mInventoryType;
447} 580}
448 581
582LLInventoryType::NType LLInventoryItem::getNInventoryType() const
583{
584 return mNInventoryType;
585}
586
449U32 LLInventoryItem::getFlags() const 587U32 LLInventoryItem::getFlags() const
450{ 588{
451 return mFlags; 589 return mFlags;
diff --git a/linden/indra/llinventory/llinventory.h b/linden/indra/llinventory/llinventory.h
index d3cce6b..c573f74 100644
--- a/linden/indra/llinventory/llinventory.h
+++ b/linden/indra/llinventory/llinventory.h
@@ -42,6 +42,7 @@
42#include "llsaleinfo.h" 42#include "llsaleinfo.h"
43#include "llsd.h" 43#include "llsd.h"
44#include "lluuid.h" 44#include "lluuid.h"
45#include "llwearabletype.h"
45#include "llxmlnode.h" 46#include "llxmlnode.h"
46 47
47// consts for Key field in the task inventory update message 48// consts for Key field in the task inventory update message
@@ -56,6 +57,10 @@ enum
56}; 57};
57 58
58 59
60LLInventoryType::NType calc_ntype( LLInventoryType::EType inv_type,
61 LLAssetType::EType asset_type,
62 U32 flags );
63
59 64
60//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 65//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61// Class LLInventoryObject 66// Class LLInventoryObject
@@ -131,6 +136,7 @@ protected:
131 std::string mDescription; 136 std::string mDescription;
132 LLSaleInfo mSaleInfo; 137 LLSaleInfo mSaleInfo;
133 LLInventoryType::EType mInventoryType; 138 LLInventoryType::EType mInventoryType;
139 LLInventoryType::NType mNInventoryType;
134 U32 mFlags; 140 U32 mFlags;
135 time_t mCreationDate; // seconds from 1/1/1970, UTC 141 time_t mCreationDate; // seconds from 1/1/1970, UTC
136 142
@@ -236,6 +242,7 @@ public:
236 const std::string& getDescription() const; 242 const std::string& getDescription() const;
237 const LLSaleInfo& getSaleInfo() const; 243 const LLSaleInfo& getSaleInfo() const;
238 LLInventoryType::EType getInventoryType() const; 244 LLInventoryType::EType getInventoryType() const;
245 LLInventoryType::NType getNInventoryType() const;
239 U32 getFlags() const; 246 U32 getFlags() const;
240 time_t getCreationDate() const; 247 time_t getCreationDate() const;
241 U32 getCRC32() const; // really more of a checksum. 248 U32 getCRC32() const; // really more of a checksum.
@@ -246,7 +253,9 @@ public:
246 void setDescription(const std::string& new_desc); 253 void setDescription(const std::string& new_desc);
247 void setSaleInfo(const LLSaleInfo& sale_info); 254 void setSaleInfo(const LLSaleInfo& sale_info);
248 void setPermissions(const LLPermissions& perm); 255 void setPermissions(const LLPermissions& perm);
256 void setType(LLAssetType::EType type);
249 void setInventoryType(LLInventoryType::EType inv_type); 257 void setInventoryType(LLInventoryType::EType inv_type);
258 void setNInventoryType(LLInventoryType::NType inv_type);
250 void setFlags(U32 flags); 259 void setFlags(U32 flags);
251 void setCreationDate(time_t creation_date_utc); 260 void setCreationDate(time_t creation_date_utc);
252 261
@@ -277,6 +286,9 @@ public:
277 LLSD asLLSD() const; 286 LLSD asLLSD() const;
278 bool fromLLSD(LLSD& sd); 287 bool fromLLSD(LLSD& sd);
279 288
289private:
290 void recalcNInventoryType();
291
280}; 292};
281 293
282BOOL item_dictionary_sort(LLInventoryItem* a,LLInventoryItem* b); 294BOOL item_dictionary_sort(LLInventoryItem* a,LLInventoryItem* b);
diff --git a/linden/indra/llinventory/llinventorytype.h b/linden/indra/llinventory/llinventorytype.h
index 00a4d28..f228cd0 100644
--- a/linden/indra/llinventory/llinventorytype.h
+++ b/linden/indra/llinventory/llinventorytype.h
@@ -71,6 +71,92 @@ public:
71 IT_NONE = -1 71 IT_NONE = -1
72 }; 72 };
73 73
74
75 /**
76 * @brief New enumerator for inventory types
77 *
78 * This is intended as a replacement to the above EType.
79 * EType will be phased out in favor of this enum.
80 *
81 * This enum acts as a bitfield, which This has several
82 * useful properties for filtering:
83 *
84 * 1. The inventory item's type can be compared by either
85 * equality or bitwise AND. Bitwise AND allows a quick
86 * check to see whether the type is one of multiple
87 * possible types.
88 *
89 * 2. It allows for a fast hierarchical organization, by
90 * defining a broad type (e.g. NIT_BODYPART) whose
91 * value is the bitwise OR-ing of several more specific
92 * sub-types (e.g. NIT_SKIN|NIT_HAIR|...).
93 *
94 */
95 enum NType
96 {
97 /* No Type */
98 NIT_NONE = 0x0000000,
99
100 /* Body Parts */
101 NIT_SHAPE = 1 << 0,
102 NIT_SKIN = 1 << 1,
103 NIT_HAIR = 1 << 2,
104 NIT_EYES = 1 << 3,
105 NIT_BODYPART = 0x000000f,
106
107 /* Clothing */
108 NIT_SHIRT = 1 << 4,
109 NIT_PANTS = 1 << 5,
110 NIT_SHOES = 1 << 6,
111 NIT_SOCKS = 1 << 7,
112 NIT_JACKET = 1 << 8,
113 NIT_GLOVES = 1 << 9,
114 NIT_UNDERSHIRT = 1 << 10,
115 NIT_UNDERPANTS = 1 << 11,
116 NIT_SKIRT = 1 << 12,
117 NIT_CLOTHING = 0x0001ff0,
118
119 /* Body Parts | Clothing */
120 NIT_WEARABLE = 0x0001fff,
121
122 /* Images */
123 NIT_TEXTURE = 1 << 13,
124 NIT_SNAPSHOT = 1 << 14,
125 NIT_IMAGE = 0x0006000,
126
127 /* Calling Cards */
128 NIT_CALLCARD_OFF = 1 << 15,
129 NIT_CALLCARD_ON = 1 << 16,
130 NIT_CALLCARD = 0x0018000,
131
132 /* Landmarks */
133 NIT_LANDMARK_UNUSED = 1 << 17,
134 NIT_LANDMARK_USED = 1 << 18,
135 NIT_LANDMARK = 0x0060000,
136
137 /* Sounds */
138 NIT_SOUND = 1 << 19,
139
140 /* Animations */
141 NIT_ANIMATION = 1 << 20,
142
143 /* Gestures */
144 NIT_GESTURE = 1 << 21,
145
146 /* Notecards */
147 NIT_NOTECARD = 1 << 22,
148
149 /* Scripts */
150 NIT_SCRIPT_LSL2 = 1 << 23,
151
152 /* Objects */
153 NIT_OBJECT = 1 << 24,
154
155 /* Bitwise OR-ing of all the above */
156 NIT_ALL = 0x1ffffff,
157 };
158
159
74 // machine transation between type and strings 160 // machine transation between type and strings
75 static EType lookup(const std::string& name); 161 static EType lookup(const std::string& name);
76 static const char* lookup(EType type); 162 static const char* lookup(EType type);
diff --git a/linden/indra/llinventory/llwearabletype.h b/linden/indra/llinventory/llwearabletype.h
new file mode 100644
index 0000000..b0a40b2
--- /dev/null
+++ b/linden/indra/llinventory/llwearabletype.h
@@ -0,0 +1,54 @@
1/**
2 * @file llwearable.h
3 * @brief EWearableType enum definition
4 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 *
7 * Copyright (c) 2002-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLWEARABLETYPE_H
33#define LL_LLWEARABLETYPE_H
34
35enum EWearableType // If you change this, update LLWearable::getTypeName(), getTypeLabel(), and LLVOAvatar::getTEWearableType()
36{
37 WT_SHAPE = 0,
38 WT_SKIN = 1,
39 WT_HAIR = 2,
40 WT_EYES = 3,
41 WT_SHIRT = 4,
42 WT_PANTS = 5,
43 WT_SHOES = 6,
44 WT_SOCKS = 7,
45 WT_JACKET = 8,
46 WT_GLOVES = 9,
47 WT_UNDERSHIRT = 10,
48 WT_UNDERPANTS = 11,
49 WT_SKIRT = 12,
50 WT_COUNT = 13,
51 WT_INVALID = 255
52};
53
54#endif // LL_LLWEARABLETYPE_H
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index 9a2e13b..cb9dd4e 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -194,6 +194,11 @@ LLView* LLComboBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *
194 194
195 combo_box->add(label, LLSD(value) ); 195 combo_box->add(label, LLSD(value) );
196 } 196 }
197
198 else if (child->hasName("separator"))
199 {
200 combo_box->addSeparator();
201 }
197 } 202 }
198 } 203 }
199 204
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>
diff --git a/linden/install.xml b/linden/install.xml
index 4d2b5d0..fd8f6ff 100644
--- a/linden/install.xml
+++ b/linden/install.xml
@@ -390,13 +390,6 @@
390 <key>url</key> 390 <key>url</key>
391 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri> 391 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri>
392 </map> 392 </map>
393 <key>windows</key>
394 <map>
395 <key>md5sum</key>
396 <string>3d5e29d444dde4815b36082eedfc775a</string>
397 <key>url</key>
398 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-windows-20080817.tar.bz2</uri>
399 </map>
400 </map> 393 </map>
401 </map> 394 </map>
402 <key>google</key> 395 <key>google</key>