Merged
commit
5fe6a5489c
|
|
@ -101,6 +101,7 @@ set(llui_SOURCE_FILES
|
|||
lluictrlfactory.cpp
|
||||
lluiimage.cpp
|
||||
lluistring.cpp
|
||||
lluitextutil.cpp
|
||||
llundo.cpp
|
||||
llurlaction.cpp
|
||||
llurlentry.cpp
|
||||
|
|
@ -197,6 +198,7 @@ set(llui_HEADER_FILES
|
|||
llui.h
|
||||
lluiimage.h
|
||||
lluistring.h
|
||||
lluitextutil.h
|
||||
llundo.h
|
||||
llurlaction.h
|
||||
llurlentry.h
|
||||
|
|
|
|||
|
|
@ -32,12 +32,13 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "lluictrl.h"
|
||||
#include "llscrollbar.h"
|
||||
#include "llaccordionctrltab.h"
|
||||
#include "lllocalcliprect.h"
|
||||
|
||||
#include "lllocalcliprect.h"
|
||||
#include "llscrollbar.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lluictrl.h"
|
||||
#include "lluitextutil.h"
|
||||
|
||||
static const std::string DD_BUTTON_NAME = "dd_button";
|
||||
static const std::string DD_TEXTBOX_NAME = "dd_textbox";
|
||||
|
|
@ -72,7 +73,8 @@ public:
|
|||
|
||||
virtual BOOL postBuild();
|
||||
|
||||
void setTitle(const std::string& title);
|
||||
std::string getTitle();
|
||||
void setTitle(const std::string& title, const std::string& hl);
|
||||
|
||||
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
|
@ -146,10 +148,28 @@ BOOL LLAccordionCtrlTab::LLAccordionCtrlTabHeader::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitle(const std::string& title)
|
||||
std::string LLAccordionCtrlTab::LLAccordionCtrlTabHeader::getTitle()
|
||||
{
|
||||
if(mHeaderTextbox)
|
||||
mHeaderTextbox->setText(title);
|
||||
{
|
||||
return mHeaderTextbox->getText();
|
||||
}
|
||||
else
|
||||
{
|
||||
return LLStringUtil::null;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitle(const std::string& title, const std::string& hl)
|
||||
{
|
||||
if(mHeaderTextbox)
|
||||
{
|
||||
LLTextUtil::textboxSetHighlightedVal(
|
||||
mHeaderTextbox,
|
||||
LLStyle::Params(),
|
||||
title,
|
||||
hl);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::draw()
|
||||
|
|
@ -436,12 +456,25 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel)
|
|||
addChild(panel,0);
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::setTitle(const std::string& title)
|
||||
std::string LLAccordionCtrlTab::getTitle()
|
||||
{
|
||||
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
|
||||
if (header)
|
||||
{
|
||||
header->setTitle(title);
|
||||
return header->getTitle();
|
||||
}
|
||||
else
|
||||
{
|
||||
return LLStringUtil::null;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAccordionCtrlTab::setTitle(const std::string& title, const std::string& hl)
|
||||
{
|
||||
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
|
||||
if (header)
|
||||
{
|
||||
header->setTitle(title, hl);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -903,5 +936,3 @@ BOOL LLAccordionCtrlTab::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
}
|
||||
return LLUICtrl::handleToolTip(x, y, mask);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -113,8 +113,10 @@ public:
|
|||
void setAccordionView(LLView* panel);
|
||||
LLView* getAccordionView() { return mContainerPanel; };
|
||||
|
||||
// Set text in LLAccordionCtrlTabHeader
|
||||
void setTitle(const std::string& title);
|
||||
std::string getTitle();
|
||||
|
||||
// Set text and highlight substring in LLAccordionCtrlTabHeader
|
||||
void setTitle(const std::string& title, const std::string& hl = LLStringUtil::null);
|
||||
|
||||
boost::signals2::connection setFocusReceivedCallback(const focus_signal_t::slot_type& cb);
|
||||
boost::signals2::connection setFocusLostCallback(const focus_signal_t::slot_type& cb);
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ struct LLFoundData
|
|||
{
|
||||
LLFoundData() :
|
||||
mAssetType(LLAssetType::AT_NONE),
|
||||
mWearableType(LLWearableType::WT_NONE),
|
||||
mWearableType(LLWearableType::WT_INVALID),
|
||||
mWearable(NULL) {}
|
||||
|
||||
LLFoundData(const LLUUID& item_id,
|
||||
|
|
@ -392,7 +392,7 @@ public:
|
|||
linked_item->getAssetUUID(),
|
||||
linked_item->getName(),
|
||||
linked_item->getType(),
|
||||
linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_NONE
|
||||
linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID
|
||||
);
|
||||
found.mWearable = mWearable;
|
||||
mHolder->mFoundList.push_front(found);
|
||||
|
|
@ -1115,7 +1115,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF()
|
|||
linked_item->getAssetUUID(),
|
||||
linked_item->getName(),
|
||||
linked_item->getType(),
|
||||
linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_NONE
|
||||
linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID
|
||||
);
|
||||
|
||||
#if 0
|
||||
|
|
|
|||
|
|
@ -316,9 +316,7 @@ void LLAvatarList::refresh()
|
|||
}
|
||||
|
||||
// Send refresh_complete signal.
|
||||
std::vector<LLSD> cur_values;
|
||||
getValues(cur_values);
|
||||
mRefreshCompleteSignal(this, LLSD((S32)cur_values.size()));
|
||||
mRefreshCompleteSignal(this, LLSD((S32)size(false)));
|
||||
}
|
||||
|
||||
// Commit if we've added/removed items.
|
||||
|
|
|
|||
|
|
@ -36,12 +36,13 @@
|
|||
#include "llavataractions.h"
|
||||
#include "llavatarlistitem.h"
|
||||
|
||||
#include "llfloaterreg.h"
|
||||
#include "llagent.h"
|
||||
#include "lloutputmonitorctrl.h"
|
||||
#include "llavatariconctrl.h"
|
||||
#include "lltextutil.h"
|
||||
#include "llbutton.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lluitextutil.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llavatariconctrl.h"
|
||||
#include "lloutputmonitorctrl.h"
|
||||
|
||||
bool LLAvatarListItem::sStaticInitialized = false;
|
||||
S32 LLAvatarListItem::sLeftPadding = 0;
|
||||
|
|
|
|||
|
|
@ -183,20 +183,6 @@ void LLSysWellChiclet::setCounter(S32 counter)
|
|||
|
||||
mButton->setLabel(s_count);
|
||||
|
||||
setNewMessagesState(counter > mCounter);
|
||||
|
||||
// we have to flash to 'Lit' state each time new unread message is coming.
|
||||
if (counter > mCounter)
|
||||
{
|
||||
mFlashToLitTimer->flash();
|
||||
}
|
||||
else if (counter == 0)
|
||||
{
|
||||
// if notification is resolved while well is flashing it can leave in the 'Lit' state
|
||||
// when flashing finishes itself. Let break flashing here.
|
||||
mFlashToLitTimer->stopFlashing();
|
||||
}
|
||||
|
||||
mCounter = counter;
|
||||
}
|
||||
|
||||
|
|
@ -316,7 +302,26 @@ void LLIMWellChiclet::createMenu()
|
|||
|
||||
void LLIMWellChiclet::messageCountChanged(const LLSD& session_data)
|
||||
{
|
||||
setCounter(LLBottomTray::getInstance()->getTotalUnreadIMCount());
|
||||
const LLUUID& session_id = session_data["session_id"];
|
||||
const S32 counter = LLBottomTray::getInstance()->getTotalUnreadIMCount();
|
||||
const bool im_not_visible = !LLFloaterReg::instanceVisible("im_container")
|
||||
&& !LLFloaterReg::instanceVisible("impanel", session_id);
|
||||
|
||||
setNewMessagesState(counter > mCounter && im_not_visible);
|
||||
|
||||
// we have to flash to 'Lit' state each time new unread message is coming.
|
||||
if (counter > mCounter && im_not_visible)
|
||||
{
|
||||
mFlashToLitTimer->flash();
|
||||
}
|
||||
else if (counter == 0)
|
||||
{
|
||||
// if notification is resolved while well is flashing it can leave in the 'Lit' state
|
||||
// when flashing finishes itself. Let break flashing here.
|
||||
mFlashToLitTimer->stopFlashing();
|
||||
}
|
||||
|
||||
setCounter(counter);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
|
|
|||
|
|
@ -46,6 +46,20 @@ static LLRegisterPanelClassWrapper<LLCOFWearables> t_cof_wearables("cof_wearable
|
|||
|
||||
const LLSD REARRANGE = LLSD().with("rearrange", LLSD());
|
||||
|
||||
static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR;
|
||||
|
||||
|
||||
bool LLWearableItemNameComparator::doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const
|
||||
{
|
||||
std::string name1 = wearable_item1->getItemName();
|
||||
std::string name2 = wearable_item2->getItemName();
|
||||
|
||||
LLStringUtil::toUpper(name1);
|
||||
LLStringUtil::toUpper(name2);
|
||||
|
||||
return name1 < name2;
|
||||
}
|
||||
|
||||
|
||||
LLCOFWearables::LLCOFWearables() : LLPanel(),
|
||||
mAttachments(NULL),
|
||||
|
|
@ -73,6 +87,10 @@ BOOL LLCOFWearables::postBuild()
|
|||
mClothing->setCommitOnSelectionChange(true);
|
||||
mBodyParts->setCommitOnSelectionChange(true);
|
||||
|
||||
//clothing is sorted according to its position relatively to the body
|
||||
mAttachments->setComparator(&WEARABLE_NAME_COMPARATOR);
|
||||
mBodyParts->setComparator(&WEARABLE_NAME_COMPARATOR);
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
||||
|
|
@ -164,16 +182,15 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
|
|||
|
||||
if (mAttachments->size())
|
||||
{
|
||||
mAttachments->sort(); //*TODO by Name
|
||||
mAttachments->sort();
|
||||
mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false)
|
||||
}
|
||||
|
||||
if (mBodyParts->size())
|
||||
{
|
||||
mBodyParts->sort(); //*TODO by name
|
||||
mBodyParts->sort();
|
||||
mBodyParts->notify(REARRANGE);
|
||||
}
|
||||
|
||||
mBodyParts->notify(REARRANGE);
|
||||
}
|
||||
|
||||
//create a clothing list item, update verbs and show/hide line separator
|
||||
|
|
|
|||
|
|
@ -40,6 +40,53 @@
|
|||
|
||||
class LLFlatListView;
|
||||
|
||||
|
||||
/** Abstract comparator of wearable list items */
|
||||
class LLWearableListItemComparator : public LLFlatListView::ItemComparator
|
||||
{
|
||||
LOG_CLASS(LLWearableListItemComparator);
|
||||
|
||||
public:
|
||||
LLWearableListItemComparator() {};
|
||||
virtual ~LLWearableListItemComparator() {};
|
||||
|
||||
virtual bool compare(const LLPanel* item1, const LLPanel* item2) const
|
||||
{
|
||||
const LLPanelWearableListItem* wearable_item1 = dynamic_cast<const LLPanelWearableListItem*>(item1);
|
||||
const LLPanelWearableListItem* wearable_item2 = dynamic_cast<const LLPanelWearableListItem*>(item2);
|
||||
|
||||
if (!wearable_item1 || !wearable_item2)
|
||||
{
|
||||
llwarning("item1 and item2 cannot be null", 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return doCompare(wearable_item1, wearable_item2);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Returns true if wearable_item1 < wearable_item2, false otherwise
|
||||
* Implement this method in your particular comparator.
|
||||
*/
|
||||
virtual bool doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const = 0;
|
||||
};
|
||||
|
||||
|
||||
class LLWearableItemNameComparator : public LLWearableListItemComparator
|
||||
{
|
||||
LOG_CLASS(LLWearableItemNameComparator);
|
||||
|
||||
public:
|
||||
LLWearableItemNameComparator() {};
|
||||
virtual ~LLWearableItemNameComparator() {};
|
||||
|
||||
protected:
|
||||
virtual bool doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Adaptor between LLAccordionCtrlTab and LLFlatListView to facilitate communication between them
|
||||
* (notify, notifyParent) regarding size changes of a list and selection changes across accordion tabs.
|
||||
|
|
|
|||
|
|
@ -846,16 +846,16 @@ void LLFolderView::clearSelection()
|
|||
mSelectThisID.setNull();
|
||||
}
|
||||
|
||||
BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection) const
|
||||
std::set<LLUUID> LLFolderView::getSelectionList() const
|
||||
{
|
||||
std::set<LLUUID> selection;
|
||||
for (selected_items_t::const_iterator item_it = mSelectedItems.begin();
|
||||
item_it != mSelectedItems.end();
|
||||
++item_it)
|
||||
{
|
||||
selection.insert((*item_it)->getListener()->getUUID());
|
||||
}
|
||||
|
||||
return (selection.size() != 0);
|
||||
return selection;
|
||||
}
|
||||
|
||||
BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
|
||||
|
|
@ -2070,8 +2070,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
|
|||
}
|
||||
|
||||
|
||||
std::set<LLUUID> selected_items;
|
||||
getSelectionList(selected_items);
|
||||
std::set<LLUUID> selected_items = getSelectionList();
|
||||
|
||||
LLMultiPreview* multi_previewp = NULL;
|
||||
LLMultiProperties* multi_propertiesp = NULL;
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ public:
|
|||
|
||||
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
|
||||
|
||||
virtual BOOL getSelectionList(std::set<LLUUID> &selection) const;
|
||||
virtual std::set<LLUUID> getSelectionList() const;
|
||||
|
||||
// make sure if ancestor is selected, descendents are not
|
||||
void sanitizeSelection();
|
||||
|
|
|
|||
|
|
@ -387,6 +387,12 @@ void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
|
|||
getRoot()->extendSelection(selection, NULL, selected_items);
|
||||
}
|
||||
|
||||
std::set<LLUUID> LLFolderViewItem::getSelectionList() const
|
||||
{
|
||||
std::set<LLUUID> selection;
|
||||
return selection;
|
||||
}
|
||||
|
||||
EInventorySortGroup LLFolderViewItem::getSortGroup() const
|
||||
{
|
||||
return SG_ITEM;
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ public:
|
|||
virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
|
||||
|
||||
// gets multiple-element selection
|
||||
virtual BOOL getSelectionList(std::set<LLUUID> &selection) const {return TRUE;}
|
||||
virtual std::set<LLUUID> getSelectionList() const;
|
||||
|
||||
// Returns true is this object and all of its children can be removed (deleted by user)
|
||||
virtual BOOL isRemovable();
|
||||
|
|
|
|||
|
|
@ -40,12 +40,12 @@
|
|||
#include "llmenugl.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lltrans.h"
|
||||
#include "lluitextutil.h"
|
||||
|
||||
// newview
|
||||
#include "llagent.h"
|
||||
#include "llgroupactions.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lltextutil.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
#include "llvoiceclient.h"
|
||||
|
|
|
|||
|
|
@ -1104,6 +1104,21 @@ void LLIMFloater::closeHiddenIMToasts()
|
|||
channel->closeHiddenToasts(IMToastMatcher());
|
||||
}
|
||||
}
|
||||
// static
|
||||
void LLIMFloater::confirmLeaveCallCallback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
const LLSD& payload = notification["payload"];
|
||||
LLUUID session_id = payload["session_id"];
|
||||
|
||||
LLFloater* im_floater = LLFloaterReg::findInstance("impanel", session_id);
|
||||
if (option == 0 && im_floater != NULL)
|
||||
{
|
||||
im_floater->closeFloater();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLIMFloater::isChatMultiTab()
|
||||
|
|
@ -1176,7 +1191,7 @@ void LLIMFloater::onClickCloseBtn()
|
|||
{
|
||||
LLSD payload;
|
||||
payload["session_id"] = mSessionID;
|
||||
LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload);
|
||||
LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload, confirmLeaveCallCallback);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -155,6 +155,8 @@ private:
|
|||
|
||||
static void closeHiddenIMToasts();
|
||||
|
||||
static void confirmLeaveCallCallback(const LLSD& notification, const LLSD& response);
|
||||
|
||||
LLPanelChatControlPanel* mControlPanel;
|
||||
LLUUID mSessionID;
|
||||
S32 mLastMessageIndex;
|
||||
|
|
|
|||
|
|
@ -60,8 +60,8 @@ LLIconDictionary::LLIconDictionary()
|
|||
{
|
||||
addEntry(LLInventoryIcon::ICONNAME_TEXTURE, new IconEntry("Inv_Texture", "Inv_Texture_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_SOUND, new IconEntry("Inv_Texture", "Inv_Texture_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_ONLINE, new IconEntry("Inv_Callingcard", "Inv_Callingcard_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_OFFLINE, new IconEntry("Inv_Callingcard", "Inv_Callingcard_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_ONLINE, new IconEntry("Inv_CallingCard", "Inv_CallingCard_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_OFFLINE, new IconEntry("Inv_CallingCard", "Inv_CallingCard_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_LANDMARK, new IconEntry("Inv_Landmark", "Inv_Landmark_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_LANDMARK_VISITED, new IconEntry("Inv_Landmark", "Inv_Landmark_Link"));
|
||||
addEntry(LLInventoryIcon::ICONNAME_SCRIPT, new IconEntry("Inv_Script", "Inv_Script_Link"));
|
||||
|
|
|
|||
|
|
@ -40,11 +40,13 @@
|
|||
// llcommon
|
||||
#include "llcommonutils.h"
|
||||
|
||||
// llui
|
||||
#include "lliconctrl.h"
|
||||
#include "lluitextutil.h"
|
||||
|
||||
#include "llcallbacklist.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "lltextutil.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -320,6 +322,7 @@ LLInventoryItemsList::Params::Params()
|
|||
LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p)
|
||||
: LLFlatListViewEx(p)
|
||||
, mNeedsRefresh(false)
|
||||
, mPrevVisibility(false)
|
||||
{
|
||||
// TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView
|
||||
// but reset to true in all derived classes. This settings might need to
|
||||
|
|
@ -327,6 +330,8 @@ LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p
|
|||
setCommitOnSelectionChange(true);
|
||||
|
||||
setNoFilteredItemsMsg(LLTrans::getString("InventoryNoMatchingItems"));
|
||||
|
||||
gIdleCallbacks.addFunction(idle, this);
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
@ -344,12 +349,31 @@ void LLInventoryItemsList::refreshList(const LLInventoryModel::item_array_t item
|
|||
mNeedsRefresh = true;
|
||||
}
|
||||
|
||||
void LLInventoryItemsList::draw()
|
||||
boost::signals2::connection LLInventoryItemsList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb)
|
||||
{
|
||||
LLFlatListViewEx::draw();
|
||||
if(mNeedsRefresh)
|
||||
return mRefreshCompleteSignal.connect(cb);
|
||||
}
|
||||
|
||||
void LLInventoryItemsList::doIdle()
|
||||
{
|
||||
bool cur_visibility = getVisible();
|
||||
if(cur_visibility != mPrevVisibility || mNeedsRefresh)
|
||||
{
|
||||
refresh();
|
||||
|
||||
mRefreshCompleteSignal(this, LLSD());
|
||||
|
||||
mPrevVisibility = getVisible();
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLInventoryItemsList::idle(void* user_data)
|
||||
{
|
||||
LLInventoryItemsList* self = static_cast<LLInventoryItemsList*>(user_data);
|
||||
if ( self )
|
||||
{ // Do the real idle
|
||||
self->doIdle();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
// newview
|
||||
#include "llflatlistview.h"
|
||||
#include "llviewerinventory.h"
|
||||
|
||||
class LLIconCtrl;
|
||||
class LLTextBox;
|
||||
|
|
@ -120,6 +121,9 @@ public:
|
|||
/* Removes item highlight */
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
||||
/** Get the name of a corresponding inventory item */
|
||||
const std::string& getItemName() const { return mItem->getName(); }
|
||||
|
||||
virtual ~LLPanelInventoryListItemBase(){}
|
||||
|
||||
protected:
|
||||
|
|
@ -208,14 +212,23 @@ public:
|
|||
|
||||
void refreshList(const LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array);
|
||||
|
||||
boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
/**
|
||||
* Let list know items need to be refreshed in next draw()
|
||||
* Let list know items need to be refreshed in next doIdle()
|
||||
*/
|
||||
void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; }
|
||||
|
||||
bool getNeedsRefresh(){ return mNeedsRefresh; }
|
||||
|
||||
/*virtual*/ void draw();
|
||||
/**
|
||||
* Idle routine used to refresh the list regardless of the current list
|
||||
* visibility, unlike draw() which is called only for the visible list.
|
||||
* This is needed for example to filter items of the list hidden by closed
|
||||
* accordion tab.
|
||||
*/
|
||||
void doIdle(); // Real idle routine
|
||||
static void idle(void* user_data); // static glue to doIdle()
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
|
|
@ -225,7 +238,7 @@ protected:
|
|||
|
||||
/**
|
||||
* Refreshes list items, adds new items and removes deleted items.
|
||||
* Called from draw() until all new items are added, ,
|
||||
* Called from doIdle() until all new items are added,
|
||||
* maximum 50 items can be added during single call.
|
||||
*/
|
||||
void refresh();
|
||||
|
|
@ -245,6 +258,10 @@ private:
|
|||
uuid_vec_t mIDs; // IDs of items that were added in refreshList().
|
||||
// Will be used in refresh() to determine added and removed ids
|
||||
bool mNeedsRefresh;
|
||||
|
||||
bool mPrevVisibility;
|
||||
|
||||
commit_signal_t mRefreshCompleteSignal;
|
||||
};
|
||||
|
||||
#endif //LL_LLINVENTORYITEMSLIST_H
|
||||
|
|
|
|||
|
|
@ -775,8 +775,7 @@ void LLInventoryPanel::doCreate(const LLSD& userdata)
|
|||
|
||||
bool LLInventoryPanel::beginIMSession()
|
||||
{
|
||||
std::set<LLUUID> selected_items;
|
||||
mFolderRoot->getSelectionList(selected_items);
|
||||
std::set<LLUUID> selected_items = mFolderRoot->getSelectionList();
|
||||
|
||||
std::string name;
|
||||
static int session_num = 1;
|
||||
|
|
@ -873,8 +872,7 @@ bool LLInventoryPanel::beginIMSession()
|
|||
|
||||
bool LLInventoryPanel::attachObject(const LLSD& userdata)
|
||||
{
|
||||
std::set<LLUUID> selected_items;
|
||||
mFolderRoot->getSelectionList(selected_items);
|
||||
std::set<LLUUID> selected_items = mFolderRoot->getSelectionList();
|
||||
|
||||
std::string joint_name = userdata.asString();
|
||||
LLViewerJointAttachment* attachmentp = NULL;
|
||||
|
|
|
|||
|
|
@ -169,6 +169,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
|
|||
// Setting list commit callback to monitor currently selected wearable item.
|
||||
list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1));
|
||||
|
||||
// Setting list refresh callback to apply filter on list change.
|
||||
list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onWearableItemsListRefresh, this, _1));
|
||||
|
||||
// Fetch the new outfit contents.
|
||||
cat->fetch();
|
||||
|
||||
|
|
@ -244,35 +247,9 @@ void LLOutfitsList::performAction(std::string action)
|
|||
|
||||
void LLOutfitsList::setFilterSubString(const std::string& string)
|
||||
{
|
||||
applyFilter(string);
|
||||
|
||||
mFilterSubString = string;
|
||||
|
||||
for (outfits_map_t::iterator
|
||||
iter = mOutfitsMap.begin(),
|
||||
iter_end = mOutfitsMap.end();
|
||||
iter != iter_end; ++iter)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
if (tab)
|
||||
{
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*> (tab->getAccordionView());
|
||||
if (list)
|
||||
{
|
||||
list->setFilterSubString(mFilterSubString);
|
||||
}
|
||||
|
||||
if(!mFilterSubString.empty())
|
||||
{
|
||||
//store accordion tab state when filter is not empty
|
||||
tab->notifyChildren(LLSD().with("action","store_state"));
|
||||
tab->setDisplayChildren(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
//restore accordion state after all those accodrion tab manipulations
|
||||
tab->notifyChildren(LLSD().with("action","restore_state"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -350,4 +327,102 @@ void LLOutfitsList::changeOutfitSelection(LLWearableItemsList* list, const LLUUI
|
|||
mSelectedOutfitUUID = category_id;
|
||||
}
|
||||
|
||||
void LLOutfitsList::onWearableItemsListRefresh(LLUICtrl* ctrl)
|
||||
{
|
||||
if (!ctrl || mFilterSubString.empty())
|
||||
return;
|
||||
|
||||
for (outfits_map_t::iterator
|
||||
iter = mOutfitsMap.begin(),
|
||||
iter_end = mOutfitsMap.end();
|
||||
iter != iter_end; ++iter)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
if (tab) continue;
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
if (list != ctrl) continue;
|
||||
|
||||
std::string title = tab->getTitle();
|
||||
LLStringUtil::toUpper(title);
|
||||
|
||||
std::string cur_filter = mFilterSubString;
|
||||
LLStringUtil::toUpper(cur_filter);
|
||||
|
||||
if (std::string::npos == title.find(cur_filter))
|
||||
{
|
||||
// hide tab if its title doesn't pass filter
|
||||
// and it has no visible items
|
||||
tab->setVisible(list->size() != 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tab->setTitle(tab->getTitle(), cur_filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
|
||||
{
|
||||
for (outfits_map_t::iterator
|
||||
iter = mOutfitsMap.begin(),
|
||||
iter_end = mOutfitsMap.end();
|
||||
iter != iter_end; ++iter)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
if (!tab) continue;
|
||||
|
||||
bool more_restrictive = mFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, mFilterSubString.size()).compare(mFilterSubString);
|
||||
|
||||
// Restore tab visibility in case of less restrictive filter
|
||||
// to compare it with updated string if it was previously hidden.
|
||||
if (!more_restrictive)
|
||||
{
|
||||
tab->setVisible(TRUE);
|
||||
}
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
if (list)
|
||||
{
|
||||
list->setFilterSubString(new_filter_substring);
|
||||
}
|
||||
|
||||
if(mFilterSubString.empty() && !new_filter_substring.empty())
|
||||
{
|
||||
//store accordion tab state when filter is not empty
|
||||
tab->notifyChildren(LLSD().with("action","store_state"));
|
||||
}
|
||||
|
||||
if (!new_filter_substring.empty())
|
||||
{
|
||||
tab->setDisplayChildren(true);
|
||||
|
||||
std::string title = tab->getTitle();
|
||||
LLStringUtil::toUpper(title);
|
||||
|
||||
std::string cur_filter = new_filter_substring;
|
||||
LLStringUtil::toUpper(cur_filter);
|
||||
|
||||
if (std::string::npos == title.find(cur_filter))
|
||||
{
|
||||
// hide tab if its title doesn't pass filter
|
||||
// and it has no visible items
|
||||
tab->setVisible(list->size() != 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tab->setTitle(tab->getTitle(), cur_filter);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// restore tab title when filter is empty
|
||||
tab->setTitle(tab->getTitle());
|
||||
|
||||
//restore accordion state after all those accodrion tab manipulations
|
||||
tab->notifyChildren(LLSD().with("action","restore_state"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -94,6 +94,17 @@ private:
|
|||
*/
|
||||
void changeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id);
|
||||
|
||||
/**
|
||||
* Called upon list refresh event to update tab visibility depending on
|
||||
* the results of applying filter to the title and list items of the tab.
|
||||
*/
|
||||
void onWearableItemsListRefresh(LLUICtrl* ctrl);
|
||||
|
||||
/**
|
||||
* Highlights filtered items and hides tabs which haven't passed filter.
|
||||
*/
|
||||
void applyFilter(const std::string& new_filter_substring);
|
||||
|
||||
LLInventoryCategoriesObserver* mCategoriesObserver;
|
||||
|
||||
LLAccordionCtrl* mAccordion;
|
||||
|
|
|
|||
|
|
@ -993,10 +993,13 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
|
|||
}
|
||||
else if("create_pick" == command_name)
|
||||
{
|
||||
std::set<LLUUID> selection;
|
||||
if ( mCurrentSelectedList && mCurrentSelectedList->getRootFolder()->getSelectionList(selection) )
|
||||
if (mCurrentSelectedList)
|
||||
{
|
||||
return ( 1 == selection.size() && !LLAgentPicksInfo::getInstance()->isPickLimitReached() );
|
||||
std::set<LLUUID> selection = mCurrentSelectedList->getRootFolder()->getSelectionList();
|
||||
if (!selection.empty())
|
||||
{
|
||||
return ( 1 == selection.size() && !LLAgentPicksInfo::getInstance()->isPickLimitReached() );
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1099,8 +1099,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
|
|||
if (root)
|
||||
{
|
||||
can_delete = TRUE;
|
||||
std::set<LLUUID> selection_set;
|
||||
root->getSelectionList(selection_set);
|
||||
std::set<LLUUID> selection_set = root->getSelectionList();
|
||||
if (selection_set.empty()) return FALSE;
|
||||
for (std::set<LLUUID>::iterator iter = selection_set.begin();
|
||||
iter != selection_set.end();
|
||||
|
|
|
|||
|
|
@ -1489,7 +1489,7 @@ void LLPanelObjectInventory::updateInventory()
|
|||
BOOL inventory_has_focus = FALSE;
|
||||
if (mHaveInventory)
|
||||
{
|
||||
mFolders->getSelectionList(selected_items);
|
||||
selected_items = mFolders->getSelectionList();
|
||||
inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -493,8 +493,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
|
|||
LLFolderView* root = getActivePanel()->getRootFolder();
|
||||
if (root)
|
||||
{
|
||||
std::set<LLUUID> selection_set;
|
||||
root->getSelectionList(selection_set);
|
||||
std::set<LLUUID> selection_set = root->getSelectionList();
|
||||
can_delete = (selection_set.size() > 0);
|
||||
for (std::set<LLUUID>::iterator iter = selection_set.begin();
|
||||
iter != selection_set.end();
|
||||
|
|
@ -515,8 +514,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
|
|||
LLFolderView* root = getActivePanel()->getRootFolder();
|
||||
if (root)
|
||||
{
|
||||
std::set<LLUUID> selection_set;
|
||||
root->getSelectionList(selection_set);
|
||||
std::set<LLUUID> selection_set = root->getSelectionList();
|
||||
can_delete = (selection_set.size() > 0);
|
||||
for (std::set<LLUUID>::iterator iter = selection_set.begin();
|
||||
iter != selection_set.end();
|
||||
|
|
@ -568,8 +566,7 @@ bool LLPanelOutfitsInventory::hasItemsSelected()
|
|||
LLFolderView* root = getActivePanel()->getRootFolder();
|
||||
if (root)
|
||||
{
|
||||
std::set<LLUUID> selection_set;
|
||||
root->getSelectionList(selection_set);
|
||||
std::set<LLUUID> selection_set = root->getSelectionList();
|
||||
has_items_selected = (selection_set.size() > 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include "llsidetray.h"
|
||||
#include "llworldmap.h"
|
||||
#include "llteleporthistorystorage.h"
|
||||
#include "lltextutil.h"
|
||||
#include "lluitextutil.h"
|
||||
|
||||
#include "llaccordionctrl.h"
|
||||
#include "llaccordionctrltab.h"
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@
|
|||
#include "llavataractions.h"
|
||||
#include "llagent.h"
|
||||
|
||||
#include "llimview.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llparticipantlist.h"
|
||||
#include "llspeakers.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
|
@ -809,10 +811,43 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co
|
|||
LLIMSpeakerMgr* mgr = dynamic_cast<LLIMSpeakerMgr*>(mParent.mSpeakerMgr);
|
||||
if (mgr)
|
||||
{
|
||||
if (!unmute)
|
||||
{
|
||||
LLSD payload;
|
||||
payload["session_id"] = mgr->getSessionID();
|
||||
payload["excluded_avatar_id"] = excluded_avatar_id;
|
||||
LLNotificationsUtil::add("ConfirmMuteAll", LLSD(), payload, confirmMuteAllCallback);
|
||||
return;
|
||||
}
|
||||
|
||||
mgr->moderateVoiceOtherParticipants(excluded_avatar_id, unmute);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLParticipantList::LLParticipantListMenu::confirmMuteAllCallback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
if (option != 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const LLSD& payload = notification["payload"];
|
||||
const LLUUID& session_id = payload["session_id"];
|
||||
const LLUUID& excluded_avatar_id = payload["excluded_avatar_id"];
|
||||
|
||||
LLIMSpeakerMgr * speaker_manager = dynamic_cast<LLIMSpeakerMgr*> (
|
||||
LLIMModel::getInstance()->getSpeakerManager(session_id));
|
||||
if (speaker_manager)
|
||||
{
|
||||
speaker_manager->moderateVoiceOtherParticipants(excluded_avatar_id, false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata)
|
||||
{
|
||||
std::string item = userdata.asString();
|
||||
|
|
|
|||
|
|
@ -216,6 +216,8 @@ class LLParticipantList
|
|||
* @see moderateVoiceParticipant()
|
||||
*/
|
||||
void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute);
|
||||
|
||||
static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -323,8 +323,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
|
|||
U32 LLSidepanelInventory::getSelectedCount()
|
||||
{
|
||||
LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
|
||||
std::set<LLUUID> selection_list;
|
||||
panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList(selection_list);
|
||||
std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
|
||||
return selection_list.size();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ BOOL LLTexLayerParamAlpha::getSkip() const
|
|||
}
|
||||
|
||||
LLWearableType::EType type = (LLWearableType::EType)getWearableType();
|
||||
if ((type != LLWearableType::WT_NONE) && !avatar->isWearingWearableType(type))
|
||||
if ((type != LLWearableType::WT_INVALID) && !avatar->isWearingWearableType(type))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -731,6 +731,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
LLMemType mt_ss(LLMemType::MTYPE_DISPLAY_STATE_SORT);
|
||||
gPipeline.sAllowRebuildPriorityGroup = TRUE ;
|
||||
gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
|
||||
stop_glerror();
|
||||
|
||||
|
|
|
|||
|
|
@ -1545,7 +1545,7 @@ LLWearableType::EType LLViewerInventoryItem::getWearableType() const
|
|||
if (!isWearableType())
|
||||
{
|
||||
llwarns << "item is not a wearable" << llendl;
|
||||
return LLWearableType::WT_NONE;
|
||||
return LLWearableType::WT_INVALID;
|
||||
}
|
||||
return LLWearableType::EType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -796,7 +796,7 @@ private:
|
|||
mSelectedItems.clear();
|
||||
if (mActivePanel)
|
||||
{
|
||||
mActivePanel->getRootFolder()->getSelectionList(mSelectedItems);
|
||||
mSelectedItems = mActivePanel->getRootFolder()->getSelectionList();
|
||||
}
|
||||
mSelectedItems.erase(mMoveIntoFolderID);
|
||||
}
|
||||
|
|
@ -829,8 +829,7 @@ private:
|
|||
}
|
||||
|
||||
// get selected items (without destination folder)
|
||||
selected_items_t selected_items;
|
||||
mActivePanel->getRootFolder()->getSelectionList(selected_items);
|
||||
selected_items_t selected_items = mActivePanel->getRootFolder()->getSelectionList();
|
||||
selected_items.erase(mMoveIntoFolderID);
|
||||
|
||||
// compare stored & current sets of selected items
|
||||
|
|
@ -6475,18 +6474,3 @@ void LLOfferInfo::forceResponse(InventoryOfferResponse response)
|
|||
LLNotifications::instance().forceResponse(params, response);
|
||||
}
|
||||
|
||||
static bool confirm_leave_call_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
const LLSD& payload = notification["payload"];
|
||||
LLUUID session_id = payload["session_id"];
|
||||
|
||||
LLFloater* im_floater = LLFloaterReg::findInstance("impanel", session_id);
|
||||
if (option == 0 && im_floater != NULL)
|
||||
{
|
||||
im_floater->closeFloater();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
static LLNotificationFunctorRegistration confirm_leave_call_cb("ConfirmLeaveCall", confirm_leave_call_callback);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
LLViewerVisualParamInfo::LLViewerVisualParamInfo()
|
||||
:
|
||||
mWearableType( LLWearableType::WT_NONE ),
|
||||
mWearableType( LLWearableType::WT_INVALID ),
|
||||
mCrossWearable(FALSE),
|
||||
mCamDist( 0.5f ),
|
||||
mCamAngle( 0.f ),
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ public:
|
|||
bool is_local_texture,
|
||||
EBakedTextureIndex baked_texture_index = BAKED_NUM_INDICES,
|
||||
const std::string& default_image_name = "",
|
||||
LLWearableType::EType wearable_type = LLWearableType::WT_NONE);
|
||||
LLWearableType::EType wearable_type = LLWearableType::WT_INVALID);
|
||||
const std::string mDefaultImageName;
|
||||
const LLWearableType::EType mWearableType;
|
||||
// It's either a local texture xor baked
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ void LLVOAvatarSelf::markDead()
|
|||
param;
|
||||
param = (LLViewerVisualParam*) getNextVisualParam())
|
||||
{
|
||||
if (param->getWearableType() != LLWearableType::WT_NONE)
|
||||
if (param->getWearableType() != LLWearableType::WT_INVALID)
|
||||
{
|
||||
param->setIsDummy(TRUE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1856,6 +1856,11 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
|
|||
}
|
||||
|
||||
LLTextureEntry *te = getTE(texture_index);
|
||||
if(!te)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
LL_DEBUGS("MediaOnAPrim") << "BEFORE: texture_index = " << texture_index
|
||||
<< " hasMedia = " << te->hasMedia() << " : "
|
||||
<< ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ static std::string asset_id_to_filename(const LLUUID &asset_id);
|
|||
|
||||
LLWearable::LLWearable(const LLTransactionID& transaction_id) :
|
||||
mDefinitionVersion(LLWearable::sCurrentDefinitionVersion),
|
||||
mType(LLWearableType::WT_NONE)
|
||||
mType(LLWearableType::WT_INVALID)
|
||||
{
|
||||
mTransactionID = transaction_id;
|
||||
mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
|
||||
|
|
@ -96,7 +96,7 @@ LLWearable::LLWearable(const LLTransactionID& transaction_id) :
|
|||
|
||||
LLWearable::LLWearable(const LLAssetID& asset_id) :
|
||||
mDefinitionVersion( LLWearable::sCurrentDefinitionVersion ),
|
||||
mType(LLWearableType::WT_NONE)
|
||||
mType(LLWearableType::WT_INVALID)
|
||||
{
|
||||
mAssetID = asset_id;
|
||||
mTransactionID.setNull();
|
||||
|
|
|
|||
|
|
@ -76,14 +76,15 @@ LLWearableDictionary::LLWearableDictionary()
|
|||
addEntry(LLWearableType::WT_PANTS, new WearableEntry("pants", "New Pants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_PANTS));
|
||||
addEntry(LLWearableType::WT_SHOES, new WearableEntry("shoes", "New Shoes", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SHOES));
|
||||
addEntry(LLWearableType::WT_SOCKS, new WearableEntry("socks", "New Socks", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SOCKS));
|
||||
addEntry(LLWearableType::WT_JACKET, new WearableEntry("jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_JACKET));
|
||||
addEntry(LLWearableType::WT_GLOVES, new WearableEntry("gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_GLOVES));
|
||||
addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry("undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT));
|
||||
addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry("underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS));
|
||||
addEntry(LLWearableType::WT_JACKET, new WearableEntry("jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_JACKET));
|
||||
addEntry(LLWearableType::WT_GLOVES, new WearableEntry("gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_GLOVES));
|
||||
addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry("undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT));
|
||||
addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry("underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS));
|
||||
addEntry(LLWearableType::WT_SKIRT, new WearableEntry("skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SKIRT));
|
||||
addEntry(LLWearableType::WT_ALPHA, new WearableEntry("alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_ALPHA));
|
||||
addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
|
||||
addEntry(LLWearableType::WT_NONE, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE));
|
||||
addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
|
||||
addEntry(LLWearableType::WT_INVALID, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE));
|
||||
addEntry(LLWearableType::WT_NONE, new WearableEntry("none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE));
|
||||
addEntry(LLWearableType::WT_COUNT, NULL);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ public:
|
|||
WT_TATTOO = 14,
|
||||
WT_COUNT = 15,
|
||||
|
||||
WT_NONE = -1,
|
||||
WT_INVALID = 255,
|
||||
WT_NONE = -1,
|
||||
};
|
||||
|
||||
static const std::string& getTypeName(EType type);
|
||||
|
|
|
|||
|
|
@ -284,6 +284,7 @@ BOOL LLPipeline::sRenderFrameTest = FALSE;
|
|||
BOOL LLPipeline::sRenderAttachedLights = TRUE;
|
||||
BOOL LLPipeline::sRenderAttachedParticles = TRUE;
|
||||
BOOL LLPipeline::sRenderDeferred = FALSE;
|
||||
BOOL LLPipeline::sAllowRebuildPriorityGroup = FALSE ;
|
||||
S32 LLPipeline::sVisibleLightCount = 0;
|
||||
F32 LLPipeline::sMinRenderSize = 0.f;
|
||||
|
||||
|
|
@ -1780,6 +1781,12 @@ void LLPipeline::updateGL()
|
|||
|
||||
void LLPipeline::rebuildPriorityGroups()
|
||||
{
|
||||
if(!sAllowRebuildPriorityGroup)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
sAllowRebuildPriorityGroup = FALSE ;
|
||||
|
||||
LLTimer update_timer;
|
||||
LLMemType mt(LLMemType::MTYPE_PIPELINE);
|
||||
|
||||
|
|
|
|||
|
|
@ -462,6 +462,7 @@ public:
|
|||
static BOOL sRenderAttachedLights;
|
||||
static BOOL sRenderAttachedParticles;
|
||||
static BOOL sRenderDeferred;
|
||||
static BOOL sAllowRebuildPriorityGroup;
|
||||
static S32 sVisibleLightCount;
|
||||
static F32 sMinRenderSize;
|
||||
|
||||
|
|
|
|||
|
|
@ -6139,6 +6139,23 @@ Are you sure you want to leave this call?
|
|||
<unique/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="ConfirmMuteAll"
|
||||
type="alert">
|
||||
You have selected to mute all participants in a group call.
|
||||
This will also cause all residents that later join the call to be
|
||||
muted, even after you have left the call.
|
||||
|
||||
Mute everyone?
|
||||
<usetemplate
|
||||
ignoretext="Confirm before I mute all participants in a group call"
|
||||
name="okcancelignore"
|
||||
notext="Ok"
|
||||
yestext="Cancel"/>
|
||||
<unique/>
|
||||
</notification>
|
||||
|
||||
<global name="UnsupportedCPU">
|
||||
- Your CPU speed does not meet the minimum requirements.
|
||||
</global>
|
||||
|
|
|
|||
Loading…
Reference in New Issue