merge
commit
7f0a778990
|
|
@ -36,6 +36,10 @@
|
|||
// pull in the actual class definition
|
||||
#include "llfasttimer_class.h"
|
||||
|
||||
//
|
||||
// Important note: These implementations must be FAST!
|
||||
//
|
||||
|
||||
#if LL_WINDOWS
|
||||
//
|
||||
// Windows implementation of CPU clock
|
||||
|
|
@ -99,15 +103,17 @@ inline U64 LLFastTimer::getCPUClockCount64()
|
|||
#endif
|
||||
|
||||
|
||||
#if LL_LINUX || LL_SOLARIS
|
||||
#if (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
|
||||
//
|
||||
// Linux and Solaris implementation of CPU clock - all architectures.
|
||||
// Linux and Solaris implementation of CPU clock - non-x86.
|
||||
// This is accurate but SLOW! Only use out of desperation.
|
||||
//
|
||||
// Try to use the MONOTONIC clock if available, this is a constant time counter
|
||||
// with nanosecond resolution (but not necessarily accuracy) and attempts are made
|
||||
// to synchronize this value between cores at kernel start. It should not be affected
|
||||
// by CPU frequency. If not available use the REALTIME clock, but this may be affected by
|
||||
// NTP adjustments or other user activity affecting the system time.
|
||||
// with nanosecond resolution (but not necessarily accuracy) and attempts are
|
||||
// made to synchronize this value between cores at kernel start. It should not
|
||||
// be affected by CPU frequency. If not available use the REALTIME clock, but
|
||||
// this may be affected by NTP adjustments or other user activity affecting
|
||||
// the system time.
|
||||
inline U64 LLFastTimer::getCPUClockCount64()
|
||||
{
|
||||
struct timespec tp;
|
||||
|
|
@ -124,12 +130,12 @@ inline U32 LLFastTimer::getCPUClockCount32()
|
|||
{
|
||||
return (U32)(LLFastTimer::getCPUClockCount64() >> 8);
|
||||
}
|
||||
#endif // (LL_LINUX || LL_SOLARIS))
|
||||
#endif // (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
|
||||
|
||||
|
||||
#if (LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
|
||||
#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
|
||||
//
|
||||
// Mac x86 implementation of CPU clock
|
||||
// Mac+Linux+Solaris FAST x86 implementation of CPU clock
|
||||
inline U32 LLFastTimer::getCPUClockCount32()
|
||||
{
|
||||
U64 x;
|
||||
|
|
|
|||
|
|
@ -230,17 +230,17 @@ void LLFastTimer::DeclareTimer::updateCachedPointers()
|
|||
}
|
||||
|
||||
//static
|
||||
#if LL_LINUX || LL_SOLARIS || ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__)) )
|
||||
#if (LL_DARWIN || LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__))
|
||||
U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
|
||||
{
|
||||
return sClockResolution >> 8;
|
||||
}
|
||||
#else // windows or x86-mac
|
||||
#else // windows or x86-mac or x86-linux or x86-solaris
|
||||
U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
|
||||
{
|
||||
static U64 sCPUClockFrequency = U64(CProcessor().GetCPUFrequency(50));
|
||||
|
||||
// we drop the low-order byte in out timers, so report a lower frequency
|
||||
// we drop the low-order byte in our timers, so report a lower frequency
|
||||
return sCPUClockFrequency >> 8;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -60,6 +60,10 @@
|
|||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#if LL_LINUX
|
||||
#include "llsys.h"
|
||||
#endif // LL_LINUX
|
||||
|
||||
#if !LL_DARWIN && !LL_SOLARIS
|
||||
|
||||
#ifdef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE
|
||||
|
|
@ -116,6 +120,11 @@ CProcessor::CProcessor()
|
|||
////////////////////////////////////////////////////////////////////////////
|
||||
F64 CProcessor::GetCPUFrequency(unsigned int uiMeasureMSecs)
|
||||
{
|
||||
#if LL_LINUX
|
||||
// use the shinier LLCPUInfo interface
|
||||
return 1000000.0F * gSysCPU.getMHz();
|
||||
#endif
|
||||
|
||||
#ifndef PROCESSOR_FREQUENCY_MEASURE_AVAILABLE
|
||||
return 0;
|
||||
#else
|
||||
|
|
@ -781,7 +790,7 @@ bool CProcessor::AnalyzeAMDProcessor()
|
|||
case 5: // Family = 5: K5 / K6 processor family
|
||||
switch (CPUInfo.uiModel)
|
||||
{
|
||||
case 0: // Model = 0: K5 SSA 5 (Pentium Rating *ggg* 75, 90 and 100 Mhz)
|
||||
case 0: // Model = 0: K5 SSA 5 (Pentium Rating *ggg* 75, 90 and 100 MHz)
|
||||
strcpy(CPUInfo.strModel, "AMD K5 SSA5 (PR75, PR90, PR100)"); /* Flawfinder: ignore */
|
||||
strncat(strCPUName, "AMD K5 SSA5 (PR75, PR90, PR100)", sizeof(strCPUName) - strlen(strCPUName) -1); /* Flawfinder: ignore */
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -519,15 +519,15 @@ LLCPUInfo::LLCPUInfo()
|
|||
mHasSSE = info->_Ext.SSE_StreamingSIMD_Extensions;
|
||||
mHasSSE2 = info->_Ext.SSE2_StreamingSIMD2_Extensions;
|
||||
mHasAltivec = info->_Ext.Altivec_Extensions;
|
||||
mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0);
|
||||
mCPUMHz = (F64)(proc.GetCPUFrequency(50)/1000000.0F);
|
||||
mFamily.assign( info->strFamily );
|
||||
mCPUString = "Unknown";
|
||||
|
||||
#if LL_WINDOWS || LL_DARWIN || LL_SOLARIS
|
||||
out << proc.strCPUName;
|
||||
if (200 < mCPUMhz && mCPUMhz < 10000) // *NOTE: cpu speed is often way wrong, do a sanity check
|
||||
if (200 < mCPUMHz && mCPUMHz < 10000) // *NOTE: cpu speed is often way wrong, do a sanity check
|
||||
{
|
||||
out << " (" << mCPUMhz << " MHz)";
|
||||
out << " (" << mCPUMHz << " MHz)";
|
||||
}
|
||||
mCPUString = out.str();
|
||||
|
||||
|
|
@ -572,7 +572,7 @@ LLCPUInfo::LLCPUInfo()
|
|||
if (LLStringUtil::convertToF64(cpuinfo["cpu mhz"], mhz)
|
||||
&& 200.0 < mhz && mhz < 10000.0)
|
||||
{
|
||||
mCPUMhz = (S32)llrint(mhz);
|
||||
mCPUMHz = (F64)(mhz);
|
||||
}
|
||||
if (!cpuinfo["model name"].empty())
|
||||
mCPUString = cpuinfo["model name"];
|
||||
|
|
@ -595,9 +595,9 @@ bool LLCPUInfo::hasSSE2() const
|
|||
return mHasSSE2;
|
||||
}
|
||||
|
||||
S32 LLCPUInfo::getMhz() const
|
||||
F64 LLCPUInfo::getMHz() const
|
||||
{
|
||||
return mCPUMhz;
|
||||
return mCPUMHz;
|
||||
}
|
||||
|
||||
std::string LLCPUInfo::getCPUString() const
|
||||
|
|
@ -644,7 +644,7 @@ void LLCPUInfo::stream(std::ostream& s) const
|
|||
s << "->mHasSSE: " << (U32)mHasSSE << std::endl;
|
||||
s << "->mHasSSE2: " << (U32)mHasSSE2 << std::endl;
|
||||
s << "->mHasAltivec: " << (U32)mHasAltivec << std::endl;
|
||||
s << "->mCPUMhz: " << mCPUMhz << std::endl;
|
||||
s << "->mCPUMHz: " << mCPUMHz << std::endl;
|
||||
s << "->mCPUString: " << mCPUString << std::endl;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ public:
|
|||
bool hasAltivec() const;
|
||||
bool hasSSE() const;
|
||||
bool hasSSE2() const;
|
||||
S32 getMhz() const;
|
||||
F64 getMHz() const;
|
||||
|
||||
// Family is "AMD Duron" or "Intel Pentium Pro"
|
||||
const std::string& getFamily() const { return mFamily; }
|
||||
|
|
@ -90,7 +90,7 @@ private:
|
|||
bool mHasSSE;
|
||||
bool mHasSSE2;
|
||||
bool mHasAltivec;
|
||||
S32 mCPUMhz;
|
||||
F64 mCPUMHz;
|
||||
std::string mFamily;
|
||||
std::string mCPUString;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ F64 calc_clock_frequency(U32 uiMeasureMSecs)
|
|||
// Both Linux and Mac use gettimeofday for accurate time
|
||||
F64 calc_clock_frequency(unsigned int uiMeasureMSecs)
|
||||
{
|
||||
return 1000000.0; // microseconds, so 1 Mhz.
|
||||
return 1000000.0; // microseconds, so 1 MHz.
|
||||
}
|
||||
|
||||
U64 get_clock_count()
|
||||
|
|
|
|||
|
|
@ -1295,6 +1295,13 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
|
|||
{
|
||||
resetAxes(mAutoPilotTargetFacing);
|
||||
}
|
||||
// Restore previous flying state before invoking mAutoPilotFinishedCallback to allow
|
||||
// callback function to change the flying state (like in near_sit_down_point()).
|
||||
// If the user cancelled, don't change the fly state
|
||||
if (!user_cancel)
|
||||
{
|
||||
setFlying(mAutoPilotFlyOnStop);
|
||||
}
|
||||
//NB: auto pilot can terminate for a reason other than reaching the destination
|
||||
if (mAutoPilotFinishedCallback)
|
||||
{
|
||||
|
|
@ -1302,11 +1309,6 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
|
|||
}
|
||||
mLeaderID = LLUUID::null;
|
||||
|
||||
// If the user cancelled, don't change the fly state
|
||||
if (!user_cancel)
|
||||
{
|
||||
setFlying(mAutoPilotFlyOnStop);
|
||||
}
|
||||
setControlFlags(AGENT_CONTROL_STOP);
|
||||
|
||||
if (user_cancel && !mAutoPilotBehaviorName.empty())
|
||||
|
|
|
|||
|
|
@ -862,7 +862,7 @@ bool LLAppViewer::init()
|
|||
minSpecs += "\n";
|
||||
unsupported = true;
|
||||
}
|
||||
if(gSysCPU.getMhz() < minCPU)
|
||||
if(gSysCPU.getMHz() < minCPU)
|
||||
{
|
||||
minSpecs += LLNotifications::instance().getGlobalString("UnsupportedCPU");
|
||||
minSpecs += "\n";
|
||||
|
|
@ -2524,7 +2524,7 @@ void LLAppViewer::writeSystemInfo()
|
|||
|
||||
gDebugInfo["CPUInfo"]["CPUString"] = gSysCPU.getCPUString();
|
||||
gDebugInfo["CPUInfo"]["CPUFamily"] = gSysCPU.getFamily();
|
||||
gDebugInfo["CPUInfo"]["CPUMhz"] = gSysCPU.getMhz();
|
||||
gDebugInfo["CPUInfo"]["CPUMhz"] = (S32)gSysCPU.getMHz();
|
||||
gDebugInfo["CPUInfo"]["CPUAltivec"] = gSysCPU.hasAltivec();
|
||||
gDebugInfo["CPUInfo"]["CPUSSE"] = gSysCPU.hasSSE();
|
||||
gDebugInfo["CPUInfo"]["CPUSSE2"] = gSysCPU.hasSSE2();
|
||||
|
|
@ -2537,7 +2537,7 @@ void LLAppViewer::writeSystemInfo()
|
|||
// which may have been the intended grid. This can b
|
||||
gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
|
||||
|
||||
// *FIX:Mani - move this ddown in llappviewerwin32
|
||||
// *FIX:Mani - move this down in llappviewerwin32
|
||||
#ifdef LL_WINDOWS
|
||||
DWORD thread_id = GetCurrentThreadId();
|
||||
gDebugInfo["MainloopThreadID"] = (S32)thread_id;
|
||||
|
|
|
|||
|
|
@ -621,9 +621,9 @@ void LLFeatureManager::applyBaseMasks()
|
|||
|
||||
#if LL_SOLARIS && defined(__sparc) // even low MHz SPARCs are fast
|
||||
#error The 800 is hinky. Would something like a LL_MIN_MHZ make more sense here?
|
||||
if (gSysCPU.getMhz() < 800)
|
||||
if (gSysCPU.getMHz() < 800)
|
||||
#else
|
||||
if (gSysCPU.getMhz() < 1100)
|
||||
if (gSysCPU.getMHz() < 1100)
|
||||
#endif
|
||||
{
|
||||
maskFeatures("CPUSlow");
|
||||
|
|
|
|||
|
|
@ -1416,8 +1416,8 @@ void LLFolderView::startRenamingSelectedItem( void )
|
|||
mRenamer->setVisible( TRUE );
|
||||
// set focus will fail unless item is visible
|
||||
mRenamer->setFocus( TRUE );
|
||||
mRenamer->setTopLostCallback(boost::bind(onRenamerLost, _1));
|
||||
mRenamer->setFocusLostCallback(boost::bind(onRenamerLost, _1));
|
||||
mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
|
||||
mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1));
|
||||
gViewerWindow->addPopup(mRenamer);
|
||||
}
|
||||
}
|
||||
|
|
@ -2386,9 +2386,9 @@ S32 LLFolderView::notify(const LLSD& info)
|
|||
/// Local function definitions
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
//static
|
||||
void LLFolderView::onRenamerLost( LLFocusableElement* renamer)
|
||||
{
|
||||
mRenameItem = NULL;
|
||||
LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(renamer);
|
||||
if (uictrl)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ protected:
|
|||
LLScrollContainer* mScrollContainer; // NULL if this is not a child of a scroll container.
|
||||
|
||||
void commitRename( const LLSD& data );
|
||||
static void onRenamerLost( LLFocusableElement* renamer);
|
||||
void onRenamerLost( LLFocusableElement* renamer);
|
||||
|
||||
void finishRenamingItem( void );
|
||||
void closeRenamer( void );
|
||||
|
|
|
|||
|
|
@ -2680,6 +2680,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
{
|
||||
// This is the lost+found folder.
|
||||
mItems.push_back(std::string("Empty Lost And Found"));
|
||||
|
||||
mDisabledItems.push_back(std::string("New Folder"));
|
||||
mDisabledItems.push_back(std::string("New Script"));
|
||||
mDisabledItems.push_back(std::string("New Note"));
|
||||
mDisabledItems.push_back(std::string("New Gesture"));
|
||||
mDisabledItems.push_back(std::string("New Clothes"));
|
||||
mDisabledItems.push_back(std::string("New Body Parts"));
|
||||
}
|
||||
|
||||
if(trash_id == mUUID)
|
||||
|
|
|
|||
|
|
@ -200,7 +200,11 @@ void LLFloaterMove::setFlyingMode(BOOL fly)
|
|||
if (instance)
|
||||
{
|
||||
instance->setFlyingModeImpl(fly);
|
||||
BOOL is_sitting = isAgentAvatarValid() && gAgentAvatarp->isSitting();
|
||||
LLVOAvatarSelf* avatar_object = gAgentAvatarp;
|
||||
bool is_sitting = avatar_object
|
||||
&& (avatar_object->getRegion() != NULL)
|
||||
&& (!avatar_object->isDead())
|
||||
&& avatar_object->isSitting();
|
||||
instance->showModeButtons(!fly && !is_sitting);
|
||||
}
|
||||
if (fly)
|
||||
|
|
|
|||
|
|
@ -133,10 +133,6 @@ mRemoveFromOutfitBtn(NULL), mLookObserver(NULL)
|
|||
mLookItemTypes.push_back(LLLookItemType());
|
||||
}
|
||||
|
||||
// TODO: make these strings translatable
|
||||
mLookItemTypes[LIT_ALL] = LLLookItemType("All Items", ALL_ITEMS_MASK);
|
||||
mLookItemTypes[LIT_WEARABLE] = LLLookItemType("Shape & Clothing", WEARABLE_MASK);
|
||||
mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType("Attachments", ATTACHMENT_MASK);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -159,10 +155,15 @@ LLPanelOutfitEdit::~LLPanelOutfitEdit()
|
|||
BOOL LLPanelOutfitEdit::postBuild()
|
||||
{
|
||||
// gInventory.isInventoryUsable() no longer needs to be tested per Richard's fix for race conditions between inventory and panels
|
||||
|
||||
|
||||
mLookItemTypes[LIT_ALL] = LLLookItemType(getString("Filter.All"), ALL_ITEMS_MASK);
|
||||
mLookItemTypes[LIT_WEARABLE] = LLLookItemType(getString("Filter.Clothes/Body"), WEARABLE_MASK);
|
||||
mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType(getString("Filter.Objects"), ATTACHMENT_MASK);
|
||||
|
||||
mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name");
|
||||
|
||||
childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL);
|
||||
childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);
|
||||
|
||||
mLookContents = getChild<LLScrollListCtrl>("look_items_list");
|
||||
mLookContents->sortByColumn("look_item_sort", TRUE);
|
||||
|
|
@ -174,7 +175,7 @@ BOOL LLPanelOutfitEdit::postBuild()
|
|||
mInventoryItemsPanel->setSelectCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
|
||||
mInventoryItemsPanel->getRootFolder()->setReshapeCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this, _1, _2));
|
||||
|
||||
LLComboBox* type_filter = getChild<LLComboBox>("inventory_filter");
|
||||
LLComboBox* type_filter = getChild<LLComboBox>("filter_wearables_combobox");
|
||||
type_filter->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onTypeFilterChanged, this, _1));
|
||||
type_filter->removeall();
|
||||
for (U32 i = 0; i < mLookItemTypes.size(); ++i)
|
||||
|
|
@ -236,6 +237,11 @@ void LLPanelOutfitEdit::showAddWearablesPanel()
|
|||
childSetVisible("add_wearables_panel", childGetValue("add_btn"));
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::showWearablesFilter()
|
||||
{
|
||||
childSetVisible("filter_combobox_panel", childGetValue("filter_button"));
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::saveOutfit(bool as_new)
|
||||
{
|
||||
if (!as_new && LLAppearanceMgr::getInstance()->updateBaseOutfit())
|
||||
|
|
@ -457,20 +463,18 @@ void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderView
|
|||
|
||||
void LLPanelOutfitEdit::onOutfitItemSelectionChange(void)
|
||||
{
|
||||
S32 left_offset = -4;
|
||||
S32 top_offset = -10;
|
||||
LLScrollListItem* item = mLookContents->getLastSelectedItem();
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
LLRect rect = item->getRect();
|
||||
LLRect btn_rect(
|
||||
left_offset + rect.mRight - 50,
|
||||
top_offset + rect.mTop,
|
||||
left_offset + rect.mRight - 30,
|
||||
top_offset + rect.mBottom);
|
||||
LLRect item_rect;
|
||||
mLookContents->localRectToOtherView(item->getRect(), &item_rect, getChild<LLUICtrl>("outfit_wearables_panel"));
|
||||
|
||||
// TODO button(and item list) should be removed (when new widget is ready)
|
||||
LLRect btn_rect = mEditWearableBtn->getRect();
|
||||
btn_rect.set(item_rect.mRight - btn_rect.getWidth(), item_rect.mTop, item_rect.mRight, item_rect.mBottom);
|
||||
|
||||
mEditWearableBtn->setRect(btn_rect);
|
||||
mEditWearableBtn->setShape(btn_rect);
|
||||
|
||||
mEditWearableBtn->setEnabled(TRUE);
|
||||
if (!mEditWearableBtn->getVisible())
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ public:
|
|||
// only update the location if there is none already available.
|
||||
|
||||
void showAddWearablesPanel();
|
||||
void showWearablesFilter();
|
||||
void saveOutfit(bool as_new = false);
|
||||
void showSaveMenu();
|
||||
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ LLViewerJoystick::LLViewerJoystick()
|
|||
memset(mBtn, 0, sizeof(mBtn));
|
||||
|
||||
// factor in bandwidth? bandwidth = gViewerStats->mKBitStat
|
||||
mPerfScale = 4000.f / gSysCPU.getMhz();
|
||||
mPerfScale = 4000.f / gSysCPU.getMHz(); // hmm. why?
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -4428,6 +4428,9 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
|
|||
}
|
||||
|
||||
gAgentCamera.setForceMouselook(force_mouselook);
|
||||
// Forcing turning off flying here to prevent flying after pressing "Stand"
|
||||
// to stand up from an object. See EXT-1655.
|
||||
gAgent.setFlying(FALSE);
|
||||
|
||||
LLViewerObject* object = gObjectList.findObject(sitObjectID);
|
||||
if (object)
|
||||
|
|
|
|||
|
|
@ -5644,6 +5644,8 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
|
|||
mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot);
|
||||
|
||||
gPipeline.markMoved(mDrawable, TRUE);
|
||||
// Notice that removing sitDown() from here causes avatars sitting on
|
||||
// objects to be not rendered for new arrivals. See EXT-6835 and EXT-1655.
|
||||
sitDown(TRUE);
|
||||
mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject
|
||||
mRoot.setPosition(getPosition());
|
||||
|
|
|
|||
|
|
@ -25,6 +25,10 @@
|
|||
(unknown)
|
||||
</panel.string>
|
||||
|
||||
<!-- Wearables filtering strings -->
|
||||
<string name="Filter.All" value="All"/>
|
||||
<string name="Filter.Clothes/Body" value="Clothes/Body"/>
|
||||
<string name="Filter.Objects" value="Objects"/>
|
||||
|
||||
<button
|
||||
follows="top|left"
|
||||
|
|
@ -154,6 +158,16 @@
|
|||
sort_column="look_item_sort"
|
||||
name="look_item_sort" />
|
||||
</scroll_list>
|
||||
<!-- TODO remove this button. Added it temporary for QA to be able to test new edit wearable panel (see EXT-6564)-->
|
||||
<button
|
||||
follows="left|top|right"
|
||||
height="20"
|
||||
label="edit"
|
||||
left="0"
|
||||
top="0"
|
||||
layout="topleft"
|
||||
name="edit_wearable_btn"
|
||||
width="40" />
|
||||
|
||||
<panel
|
||||
background_visible="true"
|
||||
|
|
@ -222,29 +236,18 @@
|
|||
<layout_panel
|
||||
auto_resize="true"
|
||||
default_tab_group="3"
|
||||
height="250"
|
||||
min_height="120"
|
||||
height="210"
|
||||
min_height="210"
|
||||
name="add_wearables_panel"
|
||||
width="300"
|
||||
tab_group="2"
|
||||
user_resize="true"
|
||||
visible="false">
|
||||
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerifBold"
|
||||
height="13"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
name="status"
|
||||
text_color="LtGray"
|
||||
top="5"
|
||||
value="Add Wearables"
|
||||
use_ellipses="true"
|
||||
width="275" />
|
||||
|
||||
<!-- *NOTE is not used, invisible and disabled -->
|
||||
<filter_editor
|
||||
background_image="TextField_Search_Off"
|
||||
enabled="false"
|
||||
follows="left|top|right"
|
||||
font="SansSerif"
|
||||
label="Filter"
|
||||
|
|
@ -254,13 +257,79 @@
|
|||
height="20"
|
||||
name="look_item_filter"
|
||||
text_color="black"
|
||||
text_pad_left="25" />
|
||||
text_pad_left="25"
|
||||
visible="false"/>
|
||||
|
||||
<layout_stack
|
||||
animate="true"
|
||||
follows="all"
|
||||
height="25"
|
||||
width="300"
|
||||
layout="topleft"
|
||||
orientation="horizontal"
|
||||
name="filter_panels"
|
||||
top="0"
|
||||
left="0">
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
follows="left|top|right"
|
||||
height="25"
|
||||
label="IM Control Panel"
|
||||
name="filter_button_panel"
|
||||
width="150"
|
||||
auto_resize="true"
|
||||
user_resize="false">
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerifBold"
|
||||
height="13"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
name="add_to_outfit_label"
|
||||
text_color="LtGray"
|
||||
top="3"
|
||||
value="Add to Outfit:"
|
||||
use_ellipses="true"
|
||||
width="270" />
|
||||
<button
|
||||
follows="top|right"
|
||||
height="20"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay=""
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
is_toggle="true"
|
||||
label="O"
|
||||
layout="topleft"
|
||||
right="-1"
|
||||
name="filter_button"
|
||||
top="3"
|
||||
width="20" />
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
auto_resize="true"
|
||||
height="25"
|
||||
min_width="130"
|
||||
name="filter_combobox_panel"
|
||||
width="150"
|
||||
user_resize="false"
|
||||
visible="false">
|
||||
<combo_box
|
||||
follows="top|left|right"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
right="-5"
|
||||
name="filter_wearables_combobox"
|
||||
top="0"
|
||||
width="130"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
<inventory_panel
|
||||
allow_multi_select="false"
|
||||
border="false"
|
||||
follows="left|top|right|bottom"
|
||||
height="176"
|
||||
height="155"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
mouse_opaque="false"
|
||||
|
|
|
|||
Loading…
Reference in New Issue