Merge branch 'UICleanup' of git://github.com/Shyotl/SingularityViewer
Conflicts: indra/llappearance/llwearable.h indra/llui/llcombobox.h indra/newview/jcfloaterareasearch.cpp indra/newview/jcfloaterareasearch.h indra/newview/llpanelgrouproles.cpp indra/newview/llpanelgrouproles.h indra/newview/llviewermenu.cpp - Plugged in new MenuFloaterDict for AssetBlacklist and SoundExplorer in menu_viewer.xml and removed the old listeners for them. indra/newview/skins/default/xui/es/floater_inventory.xml Compile Fixes: indra/llcommon/llstl.h - error: expected nested-name-specifier before ‘const’ indra/llui/llmultisliderctrl.cpp:283:12: error: ‘caller’ was not declared in this scope indra/llui/lltexteditor.cpp - error: operands to ?: have different types ‘const LLPointer<LLTextSegment>’ and ‘long int’ - error: passing ‘const LLPointer<LLTextSegment>’ as ‘this’ argument of ‘LLPointer<Type>& LLPointer<Type>::operator=(const LLPointer<Type>&) [with Type = LLTextSegment]’ discards qualifiers indra/newview/llfloaterpermissionsmgr.cpp - Silly Shyotl, boost bind, not std bind. indra/newview/llfloaterproperties.* - error: ‘LLInstanceTracker<LLFloaterProperties, LLUUID>’ is an inaccessible base of ‘LLFloaterProperties’ indra/newview/llgivemoney.cpp - Again, boost::ref, not std::ref indra/newview/llpreviewscript.cpp - no known conversion for argument 1 from ‘std::vector<const LLPointer<LLTextSegment> >’ to ‘std::vector<LLPointer<LLTextSegment> >&
This commit is contained in:
@@ -135,7 +135,6 @@ set(viewer_SOURCE_FILES
|
||||
llcompilequeue.cpp
|
||||
llconfirmationmanager.cpp
|
||||
llconsole.cpp
|
||||
llcontainerview.cpp
|
||||
llcurrencyuimanager.cpp
|
||||
llcylinder.cpp
|
||||
lldaycyclemanager.cpp
|
||||
@@ -416,12 +415,8 @@ set(viewer_SOURCE_FILES
|
||||
llsky.cpp
|
||||
llspatialpartition.cpp
|
||||
llsprite.cpp
|
||||
llsrv.cpp
|
||||
llstartup.cpp
|
||||
llstatbar.cpp
|
||||
llstatgraph.cpp
|
||||
llstatusbar.cpp
|
||||
llstatview.cpp
|
||||
llstylemap.cpp
|
||||
llsurface.cpp
|
||||
llsurfacepatch.cpp
|
||||
@@ -638,7 +633,6 @@ set(viewer_HEADER_FILES
|
||||
llcompilequeue.h
|
||||
llconfirmationmanager.h
|
||||
llconsole.h
|
||||
llcontainerview.h
|
||||
llcurrencyuimanager.h
|
||||
llcylinder.h
|
||||
lldaycyclemanager.h
|
||||
@@ -921,12 +915,8 @@ set(viewer_HEADER_FILES
|
||||
llsky.h
|
||||
llspatialpartition.h
|
||||
llsprite.h
|
||||
llsrv.h
|
||||
llstartup.h
|
||||
llstatbar.h
|
||||
llstatgraph.h
|
||||
llstatusbar.h
|
||||
llstatview.h
|
||||
llstylemap.h
|
||||
llsurface.h
|
||||
llsurfacepatch.h
|
||||
|
||||
@@ -885,11 +885,11 @@ return Leave current function or event handler
|
||||
# Comment
|
||||
[one_sided_delimiter .8, .3, .15]
|
||||
// Comment:Non-functional commentary or disabled code
|
||||
[two_sided_delimiter_esc .8, .3, .15]
|
||||
[two_sided_delimiter .8, .3, .15]
|
||||
/* */ Comment:Non-functional commentary or disabled code
|
||||
|
||||
# String literals
|
||||
[two_sided_delimiter_esc 0, .2, 0]
|
||||
" " String literal
|
||||
[double_quotation_marks 0, .2, 0]
|
||||
" String literal
|
||||
|
||||
#functions are supplied by the program now
|
||||
|
||||
@@ -38,180 +38,132 @@
|
||||
#include "llscrolllistctrl.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "lltracker.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "jcfloaterareasearch.h"
|
||||
|
||||
JCFloaterAreaSearch* JCFloaterAreaSearch::sInstance = NULL;
|
||||
LLViewerRegion* JCFloaterAreaSearch::sLastRegion = NULL;
|
||||
S32 JCFloaterAreaSearch::sRequested = 0;
|
||||
std::map<LLUUID, AObjectDetails> JCFloaterAreaSearch::sObjectDetails;
|
||||
std::string JCFloaterAreaSearch::sSearchedName;
|
||||
std::string JCFloaterAreaSearch::sSearchedDesc;
|
||||
std::string JCFloaterAreaSearch::sSearchedOwner;
|
||||
std::string JCFloaterAreaSearch::sSearchedGroup;
|
||||
|
||||
const std::string request_string = "JCFloaterAreaSearch::Requested_\xF8\xA7\xB5";
|
||||
const F32 min_refresh_interval = 0.25f; // Minimum interval between list refreshes in seconds.
|
||||
|
||||
JCFloaterAreaSearch::JCFloaterAreaSearch() :
|
||||
LLFloater(),
|
||||
mCounterText(0),
|
||||
mResultList(0)
|
||||
JCFloaterAreaSearch::JCFloaterAreaSearch(const LLSD& data) :
|
||||
LLFloater(),
|
||||
mCounterText(0),
|
||||
mResultList(0),
|
||||
mLastRegion(0),
|
||||
mStopped(false)
|
||||
{
|
||||
llassert_always(sInstance == NULL);
|
||||
sInstance = this;
|
||||
mLastUpdateTimer.reset();
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_area_search.xml");
|
||||
}
|
||||
|
||||
JCFloaterAreaSearch::~JCFloaterAreaSearch()
|
||||
{
|
||||
sInstance = NULL;
|
||||
}
|
||||
|
||||
void JCFloaterAreaSearch::close(bool app)
|
||||
{
|
||||
if (app)
|
||||
if (app || mStopped)
|
||||
{
|
||||
LLFloater::close(app);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sInstance)
|
||||
{
|
||||
sInstance->setVisible(FALSE);
|
||||
}
|
||||
setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL JCFloaterAreaSearch::postBuild()
|
||||
{
|
||||
mResultList = getChild<LLScrollListCtrl>("result_list");
|
||||
mResultList->setDoubleClickCallback(onDoubleClick,this);
|
||||
mResultList->setDoubleClickCallback(boost::bind(&JCFloaterAreaSearch::onDoubleClick,this));
|
||||
mResultList->sortByColumn("Name", TRUE);
|
||||
|
||||
mCounterText = getChild<LLTextBox>("counter");
|
||||
|
||||
childSetAction("Refresh", search, this);
|
||||
childSetAction("Stop", cancel, this);
|
||||
getChild<LLButton>("Refresh")->setClickedCallback(boost::bind(&JCFloaterAreaSearch::onRefresh,this));
|
||||
getChild<LLButton>("Stop")->setClickedCallback(boost::bind(&JCFloaterAreaSearch::onStop,this));
|
||||
|
||||
childSetKeystrokeCallback("Name query chunk", onCommitLine, 0);
|
||||
childSetKeystrokeCallback("Description query chunk", onCommitLine, 0);
|
||||
childSetKeystrokeCallback("Owner query chunk", onCommitLine, 0);
|
||||
childSetKeystrokeCallback("Group query chunk", onCommitLine, 0);
|
||||
getChild<LLFilterEditor>("Name query chunk")->setCommitCallback(boost::bind(&JCFloaterAreaSearch::onCommitLine,this,_1,_2,LIST_OBJECT_NAME));
|
||||
getChild<LLFilterEditor>("Description query chunk")->setCommitCallback(boost::bind(&JCFloaterAreaSearch::onCommitLine,this,_1,_2,LIST_OBJECT_DESC));
|
||||
getChild<LLFilterEditor>("Owner query chunk")->setCommitCallback(boost::bind(&JCFloaterAreaSearch::onCommitLine,this,_1,_2,LIST_OBJECT_OWNER));
|
||||
getChild<LLFilterEditor>("Group query chunk")->setCommitCallback(boost::bind(&JCFloaterAreaSearch::onCommitLine,this,_1,_2,LIST_OBJECT_GROUP));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::checkRegion()
|
||||
void JCFloaterAreaSearch::onOpen()
|
||||
{
|
||||
// Check if we changed region, and if we did, clear the object details cache.
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region != sLastRegion)
|
||||
{
|
||||
sLastRegion = region;
|
||||
sRequested = 0;
|
||||
sObjectDetails.clear();
|
||||
if (sInstance)
|
||||
{
|
||||
sInstance->mResultList->deleteAllItems();
|
||||
sInstance->mCounterText->setText(std::string("Listed/Pending/Total"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::toggle()
|
||||
{
|
||||
if (sInstance)
|
||||
{
|
||||
if (sInstance->getVisible())
|
||||
{
|
||||
sInstance->setVisible(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
checkRegion();
|
||||
sInstance->setVisible(TRUE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sInstance = new JCFloaterAreaSearch();
|
||||
LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_area_search.xml");
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::onDoubleClick(void *userdata)
|
||||
{
|
||||
JCFloaterAreaSearch *self = (JCFloaterAreaSearch*)userdata;
|
||||
LLScrollListItem *item = self->mResultList->getFirstSelected();
|
||||
if (!item) return;
|
||||
LLUUID object_id = item->getUUID();
|
||||
LLViewerObject* objectp = gObjectList.findObject(object_id);
|
||||
if (objectp)
|
||||
{
|
||||
LLTracker::trackLocation(objectp->getPositionGlobal(), sObjectDetails[object_id].name, "", LLTracker::LOCATION_ITEM);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::cancel(void* data)
|
||||
{
|
||||
checkRegion();
|
||||
if (sInstance)
|
||||
{
|
||||
sInstance->close(TRUE);
|
||||
}
|
||||
sSearchedName = "";
|
||||
sSearchedDesc = "";
|
||||
sSearchedOwner = "";
|
||||
sSearchedGroup = "";
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::search(void* data)
|
||||
{
|
||||
//llinfos << "Clicked search" << llendl;
|
||||
checkRegion();
|
||||
results();
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::onCommitLine(LLLineEditor* line, void* user_data)
|
||||
void JCFloaterAreaSearch::checkRegion(bool force_clear)
|
||||
{
|
||||
std::string name = line->getName();
|
||||
std::string text = line->getText();
|
||||
LLStringUtil::toLower(text);
|
||||
line->setText(text);
|
||||
if (name == "Name query chunk") sSearchedName = text;
|
||||
else if (name == "Description query chunk") sSearchedDesc = text;
|
||||
else if (name == "Owner query chunk") sSearchedOwner = text;
|
||||
else if (name == "Group query chunk") sSearchedGroup = text;
|
||||
//llinfos << "loaded " << name << " with "<< text << llendl;
|
||||
|
||||
if (text.length() > 3)
|
||||
// Check if we changed region, and if we did, clear the object details cache.
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (force_clear || region != mLastRegion)
|
||||
{
|
||||
checkRegion();
|
||||
results();
|
||||
mLastRegion = region;
|
||||
mPendingObjects.clear();
|
||||
mCachedObjects.clear();
|
||||
mResultList->deleteAllItems();
|
||||
mCounterText->setText(std::string("Listed/Pending/Total"));
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::requestIfNeeded(LLViewerObject *objectp)
|
||||
void JCFloaterAreaSearch::onDoubleClick()
|
||||
{
|
||||
LLUUID object_id = objectp->getID();
|
||||
if (sObjectDetails.count(object_id) == 0)
|
||||
LLScrollListItem *item = mResultList->getFirstSelected();
|
||||
if (!item) return;
|
||||
LLUUID object_id = item->getUUID();
|
||||
std::map<LLUUID,ObjectData>::iterator it = mCachedObjects.find(object_id);
|
||||
if(it != mCachedObjects.end())
|
||||
{
|
||||
LLViewerObject* objectp = gObjectList.findObject(object_id);
|
||||
if (objectp)
|
||||
{
|
||||
LLTracker::trackLocation(objectp->getPositionGlobal(), it->second.name, "", LLTracker::LOCATION_ITEM);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JCFloaterAreaSearch::onStop()
|
||||
{
|
||||
mStopped = true;
|
||||
mPendingObjects.clear();
|
||||
mCounterText->setText(std::string("Stopped"));
|
||||
}
|
||||
|
||||
void JCFloaterAreaSearch::onRefresh()
|
||||
{
|
||||
//llinfos << "Clicked search" << llendl;
|
||||
mStopped = false;
|
||||
checkRegion(true);
|
||||
results();
|
||||
}
|
||||
|
||||
void JCFloaterAreaSearch::onCommitLine(LLUICtrl* caller, const LLSD& value, OBJECT_COLUMN_ORDER type)
|
||||
{
|
||||
std::string text = value.asString();
|
||||
LLStringUtil::toLower(text);
|
||||
caller->setValue(text);
|
||||
mFilterStrings[type] = text;
|
||||
//llinfos << "loaded " << name << " with "<< text << llendl;
|
||||
checkRegion();
|
||||
results();
|
||||
}
|
||||
|
||||
bool JCFloaterAreaSearch::requestIfNeeded(LLUUID object_id)
|
||||
{
|
||||
if (!mCachedObjects.count(object_id) && !mPendingObjects.count(object_id))
|
||||
{
|
||||
if(mStopped)
|
||||
return true;
|
||||
|
||||
//llinfos << "not in list" << llendl;
|
||||
AObjectDetails* details = &sObjectDetails[object_id];
|
||||
details->name = request_string;
|
||||
details->desc = request_string;
|
||||
details->owner_id = LLUUID::null;
|
||||
details->group_id = LLUUID::null;
|
||||
mPendingObjects.insert(object_id);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
|
||||
@@ -223,20 +175,20 @@ void JCFloaterAreaSearch::requestIfNeeded(LLViewerObject *objectp)
|
||||
msg->addUUIDFast(_PREHASH_ObjectID, object_id);
|
||||
gAgent.sendReliableMessage();
|
||||
//llinfos << "Sent data request for object " << object_id << llendl;
|
||||
sRequested++;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::results()
|
||||
{
|
||||
if (!sInstance) return;
|
||||
if (!(sInstance->getVisible())) return;
|
||||
if (sRequested > 0 && sInstance->mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return;
|
||||
if (!getVisible()) return;
|
||||
|
||||
if (mPendingObjects.size() > 0 && mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return;
|
||||
//llinfos << "results()" << llendl;
|
||||
uuid_vec_t selected = sInstance->mResultList->getSelectedIDs();
|
||||
S32 scrollpos = sInstance->mResultList->getScrollPos();
|
||||
sInstance->mResultList->deleteAllItems();
|
||||
uuid_vec_t selected = mResultList->getSelectedIDs();
|
||||
S32 scrollpos = mResultList->getScrollPos();
|
||||
mResultList->deleteAllItems();
|
||||
S32 i;
|
||||
S32 total = gObjectList.getNumObjects();
|
||||
|
||||
@@ -250,23 +202,18 @@ void JCFloaterAreaSearch::results()
|
||||
!objectp->flagTemporary() && !objectp->flagTemporaryOnRez())
|
||||
{
|
||||
LLUUID object_id = objectp->getID();
|
||||
if (sObjectDetails.count(object_id) == 0)
|
||||
if(!requestIfNeeded(object_id))
|
||||
{
|
||||
//llinfos << "not all entries are \"\"" << llendl;
|
||||
requestIfNeeded(objectp);
|
||||
}
|
||||
else
|
||||
{
|
||||
//llinfos << "all entries are \"\" or we have data" << llendl;
|
||||
AObjectDetails* details = &sObjectDetails[object_id];
|
||||
std::string object_name = details->name;
|
||||
std::string object_desc = details->desc;
|
||||
std::string object_owner;
|
||||
std::string object_group;
|
||||
gCacheName->getFullName(details->owner_id, object_owner);
|
||||
gCacheName->getGroupName(details->group_id, object_group);
|
||||
if (object_name != request_string)
|
||||
std::map<LLUUID,ObjectData>::iterator it = mCachedObjects.find(object_id);
|
||||
if(it != mCachedObjects.end())
|
||||
{
|
||||
//llinfos << "all entries are \"\" or we have data" << llendl;
|
||||
std::string object_name = it->second.name;
|
||||
std::string object_desc = it->second.desc;
|
||||
std::string object_owner;
|
||||
std::string object_group;
|
||||
gCacheName->getFullName(it->second.owner_id, object_owner);
|
||||
gCacheName->getGroupName(it->second.group_id, object_group);
|
||||
//llinfos << "both names are loaded or aren't needed" << llendl;
|
||||
std::string onU = object_owner;
|
||||
std::string cnU = object_group;
|
||||
@@ -274,62 +221,67 @@ void JCFloaterAreaSearch::results()
|
||||
LLStringUtil::toLower(object_desc);
|
||||
LLStringUtil::toLower(object_owner);
|
||||
LLStringUtil::toLower(object_group);
|
||||
if ((sSearchedName == "" || object_name.find(sSearchedName) != -1) &&
|
||||
(sSearchedDesc == "" || object_desc.find(sSearchedDesc) != -1) &&
|
||||
(sSearchedOwner == "" || object_owner.find(sSearchedOwner) != -1) &&
|
||||
(sSearchedGroup == "" || object_group.find(sSearchedGroup) != -1))
|
||||
if ((mFilterStrings[LIST_OBJECT_NAME].empty() || object_name.find(mFilterStrings[LIST_OBJECT_NAME]) != -1) &&
|
||||
(mFilterStrings[LIST_OBJECT_DESC].empty() || object_desc.find(mFilterStrings[LIST_OBJECT_DESC]) != -1) &&
|
||||
(mFilterStrings[LIST_OBJECT_OWNER].empty() || object_owner.find(mFilterStrings[LIST_OBJECT_OWNER]) != -1) &&
|
||||
(mFilterStrings[LIST_OBJECT_GROUP].empty() || object_group.find(mFilterStrings[LIST_OBJECT_GROUP]) != -1))
|
||||
{
|
||||
//llinfos << "pass" << llendl;
|
||||
LLSD element;
|
||||
element["id"] = object_id;
|
||||
element["columns"][LIST_OBJECT_NAME]["column"] = "Name";
|
||||
element["columns"][LIST_OBJECT_NAME]["type"] = "text";
|
||||
element["columns"][LIST_OBJECT_NAME]["value"] = details->name; //item->getName();//ai->second//"avatar_icon";
|
||||
element["columns"][LIST_OBJECT_NAME]["value"] = it->second.name;
|
||||
element["columns"][LIST_OBJECT_DESC]["column"] = "Description";
|
||||
element["columns"][LIST_OBJECT_DESC]["type"] = "text";
|
||||
element["columns"][LIST_OBJECT_DESC]["value"] = details->desc; //ai->second;
|
||||
element["columns"][LIST_OBJECT_DESC]["value"] = it->second.desc;
|
||||
element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner";
|
||||
element["columns"][LIST_OBJECT_OWNER]["type"] = "text";
|
||||
element["columns"][LIST_OBJECT_OWNER]["value"] = onU; //ai->first;
|
||||
element["columns"][LIST_OBJECT_OWNER]["value"] = onU;
|
||||
element["columns"][LIST_OBJECT_GROUP]["column"] = "Group";
|
||||
element["columns"][LIST_OBJECT_GROUP]["type"] = "text";
|
||||
element["columns"][LIST_OBJECT_GROUP]["value"] = cnU; //ai->second;
|
||||
sInstance->mResultList->addElement(element, ADD_BOTTOM);
|
||||
mResultList->addElement(element, ADD_BOTTOM);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sInstance->mResultList->updateSort();
|
||||
sInstance->mResultList->selectMultiple(selected);
|
||||
sInstance->mResultList->setScrollPos(scrollpos);
|
||||
sInstance->mCounterText->setText(llformat("%d listed/%d pending/%d total", sInstance->mResultList->getItemCount(), sRequested, sObjectDetails.size()));
|
||||
sInstance->mLastUpdateTimer.reset();
|
||||
mResultList->updateSort();
|
||||
mResultList->selectMultiple(selected);
|
||||
mResultList->setScrollPos(scrollpos);
|
||||
mCounterText->setText(llformat("%d listed/%d pending/%d total", mResultList->getItemCount(), mPendingObjects.size(), mPendingObjects.size()+mCachedObjects.size()));
|
||||
mLastUpdateTimer.reset();
|
||||
}
|
||||
|
||||
// static
|
||||
void JCFloaterAreaSearch::processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data)
|
||||
{
|
||||
checkRegion();
|
||||
JCFloaterAreaSearch* floater = findInstance();
|
||||
if(!floater)
|
||||
return;
|
||||
floater->checkRegion();
|
||||
|
||||
LLUUID object_id;
|
||||
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, object_id);
|
||||
|
||||
bool exists = (sObjectDetails.count(object_id) != 0);
|
||||
AObjectDetails* details = &sObjectDetails[object_id];
|
||||
if (!exists || details->name == request_string)
|
||||
{
|
||||
// We cache unknown objects (to avoid having to request them later)
|
||||
// and requested objects.
|
||||
if (exists && sRequested > 0) sRequested--;
|
||||
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, details->owner_id);
|
||||
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, details->group_id);
|
||||
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, details->name);
|
||||
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, details->desc);
|
||||
gCacheName->get(details->owner_id, false, boost::bind(&JCFloaterAreaSearch::results));
|
||||
gCacheName->get(details->group_id, true, boost::bind(&JCFloaterAreaSearch::results));
|
||||
//llinfos << "Got info for " << (exists ? "requested" : "unknown") << " object " << object_id << llendl;
|
||||
}
|
||||
std::set<LLUUID>::iterator it = floater->mPendingObjects.find(object_id);
|
||||
if(it != floater->mPendingObjects.end())
|
||||
floater->mPendingObjects.erase(it);
|
||||
//else if(floater->mCachedObjects.count(object_id)) //Let entries update.
|
||||
// return;
|
||||
|
||||
ObjectData* data = &floater->mCachedObjects[object_id];
|
||||
// We cache unknown objects (to avoid having to request them later)
|
||||
// and requested objects.
|
||||
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, data->owner_id);
|
||||
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, data->group_id);
|
||||
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Name, data->name);
|
||||
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, data->desc);
|
||||
gCacheName->get(data->owner_id, false, boost::bind(&JCFloaterAreaSearch::results,floater));
|
||||
gCacheName->get(data->group_id, true, boost::bind(&JCFloaterAreaSearch::results,floater));
|
||||
//llinfos << "Got info for " << (exists ? "requested" : "unknown") << " object " << object_id << llendl;
|
||||
}
|
||||
|
||||
@@ -40,59 +40,53 @@ class LLTextBox;
|
||||
class LLScrollListCtrl;
|
||||
class LLViewerRegion;
|
||||
|
||||
struct AObjectDetails
|
||||
{
|
||||
LLUUID id;
|
||||
std::string name;
|
||||
std::string desc;
|
||||
LLUUID owner_id;
|
||||
LLUUID group_id;
|
||||
};
|
||||
|
||||
class JCFloaterAreaSearch : public LLFloater
|
||||
class JCFloaterAreaSearch : public LLFloater, public LLFloaterSingleton<JCFloaterAreaSearch>
|
||||
{
|
||||
public:
|
||||
JCFloaterAreaSearch();
|
||||
JCFloaterAreaSearch(const LLSD& data);
|
||||
virtual ~JCFloaterAreaSearch();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void close(bool app = false);
|
||||
/*virtual*/ void onOpen();
|
||||
|
||||
static void results();
|
||||
static void toggle();
|
||||
static JCFloaterAreaSearch* getInstance() { return sInstance; }
|
||||
void results();
|
||||
static void processObjectPropertiesFamily(LLMessageSystem* msg, void** user_data);
|
||||
|
||||
private:
|
||||
static void checkRegion();
|
||||
static void cancel(void* data);
|
||||
static void search(void* data);
|
||||
static void onCommitLine(LLLineEditor* line, void* user_data);
|
||||
static void requestIfNeeded(LLViewerObject *objectp);
|
||||
static void onDoubleClick(void *userdata);
|
||||
|
||||
enum OBJECT_COLUMN_ORDER
|
||||
{
|
||||
LIST_OBJECT_NAME,
|
||||
LIST_OBJECT_NAME = 0,
|
||||
LIST_OBJECT_DESC,
|
||||
LIST_OBJECT_OWNER,
|
||||
LIST_OBJECT_GROUP
|
||||
LIST_OBJECT_GROUP,
|
||||
LIST_OBJECT_COUNT
|
||||
};
|
||||
|
||||
static JCFloaterAreaSearch* sInstance;
|
||||
|
||||
static S32 sRequested;
|
||||
void checkRegion(bool force_clear = false);
|
||||
void onStop();
|
||||
void onRefresh();
|
||||
void onCommitLine(LLUICtrl* caller, const LLSD& value, OBJECT_COLUMN_ORDER type);
|
||||
bool requestIfNeeded(LLUUID object_id);
|
||||
void onDoubleClick();
|
||||
|
||||
LLTextBox* mCounterText;
|
||||
LLScrollListCtrl* mResultList;
|
||||
LLFrameTimer mLastUpdateTimer;
|
||||
LLViewerRegion* mLastRegion;
|
||||
bool mStopped;
|
||||
|
||||
static std::map<LLUUID, AObjectDetails> sObjectDetails;
|
||||
struct ObjectData
|
||||
{
|
||||
LLUUID id;
|
||||
std::string name;
|
||||
std::string desc;
|
||||
LLUUID owner_id;
|
||||
LLUUID group_id;
|
||||
};
|
||||
std::set<LLUUID> mPendingObjects;
|
||||
std::map<LLUUID, ObjectData> mCachedObjects;
|
||||
|
||||
static std::string sSearchedName;
|
||||
static std::string sSearchedDesc;
|
||||
static std::string sSearchedOwner;
|
||||
static std::string sSearchedGroup;
|
||||
|
||||
static LLViewerRegion* sLastRegion;
|
||||
std::string mFilterStrings[LIST_OBJECT_COUNT];
|
||||
};
|
||||
|
||||
@@ -1493,7 +1493,7 @@ void LLAgentCamera::updateCamera()
|
||||
|
||||
gAgentAvatarp->mRoot->updateWorldMatrixChildren();
|
||||
|
||||
for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
|
||||
/*for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); //Can be an array.
|
||||
iter != gAgentAvatarp->mAttachmentPoints.end(); )
|
||||
{
|
||||
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
|
||||
@@ -1502,7 +1502,11 @@ void LLAgentCamera::updateCamera()
|
||||
attachment_iter != attachment->mAttachedObjects.end();
|
||||
++attachment_iter)
|
||||
{
|
||||
LLViewerObject *attached_object = (*attachment_iter);
|
||||
LLViewerObject *attached_object = (*attachment_iter);*/
|
||||
std::vector<std::pair<LLViewerObject*,LLViewerJointAttachment*> >::iterator attachment_iter = gAgentAvatarp->mAttachedObjectsVector.begin();
|
||||
for(;attachment_iter!=gAgentAvatarp->mAttachedObjectsVector.end();++attachment_iter)
|
||||
{{
|
||||
LLViewerObject* attached_object = attachment_iter->first;
|
||||
if (attached_object && !attached_object->isDead() && attached_object->mDrawable.notNull())
|
||||
{
|
||||
// clear any existing "early" movements of attachment
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "llmarketplacenotifications.h"
|
||||
#include "llmd5.h"
|
||||
#include "llmeshrepository.h"
|
||||
#include "llmodaldialog.h"
|
||||
#include "llpumpio.h"
|
||||
#include "llmimetypes.h"
|
||||
#include "llstartup.h"
|
||||
@@ -688,6 +689,7 @@ bool LLAppViewer::init()
|
||||
|
||||
// Widget construction depends on LLUI being initialized
|
||||
LLUI::initClass(&gSavedSettings,
|
||||
&gSavedPerAccountSettings,
|
||||
&gSavedSettings,
|
||||
&gColors,
|
||||
LLUIImageList::getInstance(),
|
||||
|
||||
@@ -87,7 +87,7 @@ const F32 AGENT_TYPING_TIMEOUT = 5.f; // seconds
|
||||
LLChatBar *gChatBar = NULL;
|
||||
|
||||
// legacy calllback glue
|
||||
void toggleChatHistory(LLUICtrl*, const LLSD&);
|
||||
void toggleChatHistory();
|
||||
//void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel);
|
||||
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Modified: RLVa-0.2.2a
|
||||
void send_chat_from_viewer(std::string utf8_out_text, EChatType type, S32 channel);
|
||||
@@ -138,7 +138,7 @@ LLChatBar::~LLChatBar()
|
||||
BOOL LLChatBar::postBuild()
|
||||
{
|
||||
if (LLUICtrl* history_ctrl = findChild<LLUICtrl>("History"))
|
||||
history_ctrl->setCommitCallback(toggleChatHistory);
|
||||
history_ctrl->setCommitCallback(boost::bind(&toggleChatHistory));
|
||||
if (LLUICtrl* say_ctrl = getChild<LLUICtrl>("Say"))
|
||||
say_ctrl->setCommitCallback(boost::bind(&LLChatBar::onClickSay, this, _1));
|
||||
|
||||
@@ -149,8 +149,7 @@ BOOL LLChatBar::postBuild()
|
||||
mInputEditor = findChild<LLLineEditor>("Chat Editor");
|
||||
if (mInputEditor)
|
||||
{
|
||||
mInputEditor->setCallbackUserData(this);
|
||||
mInputEditor->setKeystrokeCallback(&onInputEditorKeystroke);
|
||||
mInputEditor->setKeystrokeCallback(boost::bind(&LLChatBar::onInputEditorKeystroke,this));
|
||||
mInputEditor->setFocusLostCallback(boost::bind(&LLChatBar::onInputEditorFocusLost));
|
||||
mInputEditor->setFocusReceivedCallback(boost::bind(&LLChatBar::onInputEditorGainFocus));
|
||||
mInputEditor->setCommitOnFocusLost( FALSE );
|
||||
@@ -545,13 +544,10 @@ void LLChatBar::stopChat()
|
||||
gSavedSettings.setBOOL("ChatVisible", FALSE);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata )
|
||||
void LLChatBar::onInputEditorKeystroke()
|
||||
{
|
||||
LLChatBar* self = (LLChatBar *)userdata;
|
||||
|
||||
LLWString raw_text;
|
||||
if (self->mInputEditor) raw_text = self->mInputEditor->getWText();
|
||||
if (mInputEditor) raw_text = mInputEditor->getWText();
|
||||
|
||||
// Can't trim the end, because that will cause autocompletion
|
||||
// to eat trailing spaces that might be part of a gesture.
|
||||
@@ -580,8 +576,8 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata )
|
||||
// the selection will already be deleted, but we need to trim
|
||||
// off the character before
|
||||
std::string new_text = raw_text.substr(0, length-1);
|
||||
self->mInputEditor->setText( new_text );
|
||||
self->mInputEditor->setCursorToEnd();
|
||||
mInputEditor->setText( new_text );
|
||||
mInputEditor->setCursorToEnd();
|
||||
length = length - 1;
|
||||
}
|
||||
*/
|
||||
@@ -600,15 +596,15 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata )
|
||||
|
||||
if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str))
|
||||
{
|
||||
if (self->mInputEditor)
|
||||
if (mInputEditor)
|
||||
{
|
||||
std::string rest_of_match = utf8_out_str.substr(utf8_trigger.size());
|
||||
self->mInputEditor->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part
|
||||
S32 outlength = self->mInputEditor->getLength(); // in characters
|
||||
mInputEditor->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part
|
||||
S32 outlength = mInputEditor->getLength(); // in characters
|
||||
|
||||
// Select to end of line, starting from the character
|
||||
// after the last one the user typed.
|
||||
self->mInputEditor->setSelection(length, outlength);
|
||||
mInputEditor->setSelection(length, outlength);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -890,7 +886,7 @@ void LLChatBar::onCommitGesture(LLUICtrl* ctrl)
|
||||
}
|
||||
}
|
||||
|
||||
void toggleChatHistory(LLUICtrl* ctrl, const LLSD&)
|
||||
void toggleChatHistory()
|
||||
{
|
||||
LLFloaterChat::toggleInstance(LLSD());
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ public:
|
||||
void onClickSay(LLUICtrl* ctrl);
|
||||
|
||||
static void onTabClick( void* userdata );
|
||||
static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
|
||||
void onInputEditorKeystroke();
|
||||
static void onInputEditorFocusLost();
|
||||
static void onInputEditorGainFocus();
|
||||
|
||||
|
||||
@@ -53,37 +53,8 @@
|
||||
|
||||
static LLRegisterWidget<LLColorSwatchCtrl> r("color_swatch");
|
||||
|
||||
LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const LLColor4& color,
|
||||
void (*commit_callback)(LLUICtrl* ctrl, void* userdata),
|
||||
void* userdata )
|
||||
: LLUICtrl(name, rect, TRUE, commit_callback, userdata, FOLLOWS_LEFT | FOLLOWS_TOP),
|
||||
mValid( TRUE ),
|
||||
mColor( color ),
|
||||
mBorderColor( gColors.getColor("DefaultHighlightLight") ),
|
||||
mCanApplyImmediately(FALSE),
|
||||
mOnCancelCallback(NULL),
|
||||
mOnSelectCallback(NULL)
|
||||
{
|
||||
mCaption = new LLTextBox( name,
|
||||
LLRect( 0, BTN_HEIGHT_SMALL, getRect().getWidth(), 0 ),
|
||||
name,
|
||||
LLFontGL::getFontSansSerifSmall() );
|
||||
mCaption->setFollows( FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_BOTTOM );
|
||||
addChild( mCaption );
|
||||
|
||||
// Scalable UI made this off-by-one, I don't know why. JC
|
||||
LLRect border_rect(0, getRect().getHeight()-1, getRect().getWidth()-1, 0);
|
||||
border_rect.mBottom += BTN_HEIGHT_SMALL;
|
||||
mBorder = new LLViewBorder(std::string("border"), border_rect, LLViewBorder::BEVEL_IN);
|
||||
addChild(mBorder);
|
||||
|
||||
mAlphaGradientImage = LLUI::getUIImage("color_swatch_alpha.tga");
|
||||
}
|
||||
|
||||
LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color,
|
||||
void (*commit_callback)(LLUICtrl* ctrl, void* userdata),
|
||||
void* userdata )
|
||||
: LLUICtrl(name, rect, TRUE, commit_callback, userdata, FOLLOWS_LEFT | FOLLOWS_TOP),
|
||||
LLColorSwatchCtrl::LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color)
|
||||
: LLUICtrl(name, rect, TRUE, NULL, FOLLOWS_LEFT | FOLLOWS_TOP),
|
||||
mValid( TRUE ),
|
||||
mColor( color ),
|
||||
mBorderColor( gColors.getColor("DefaultHighlightLight") ),
|
||||
@@ -217,26 +188,34 @@ void LLColorSwatchCtrl::draw()
|
||||
// Check state
|
||||
if ( mValid )
|
||||
{
|
||||
// Draw the color swatch
|
||||
gl_rect_2d_checkerboard( calcScreenRect(), interior );
|
||||
gl_rect_2d(interior, mColor, TRUE);
|
||||
LLColor4 opaque_color = mColor;
|
||||
opaque_color.mV[VALPHA] = 1.f;
|
||||
gGL.color4fv(opaque_color.mV);
|
||||
if (mAlphaGradientImage.notNull())
|
||||
if (!mColor.isOpaque())
|
||||
{
|
||||
gGL.pushMatrix();
|
||||
gl_rect_2d_checkerboard( calcScreenRect(), interior );
|
||||
// Draw the color swatch
|
||||
}
|
||||
|
||||
gl_rect_2d(interior, mColor, TRUE);
|
||||
if (!mColor.isOpaque())
|
||||
{
|
||||
LLColor4 opaque_color = mColor;
|
||||
opaque_color.mV[VALPHA] = 1.f;
|
||||
gGL.color4fv(opaque_color.mV);
|
||||
if (mAlphaGradientImage.notNull())
|
||||
{
|
||||
mAlphaGradientImage->draw(interior, mColor);
|
||||
gGL.pushMatrix();
|
||||
{
|
||||
mAlphaGradientImage->draw(interior, mColor);
|
||||
}
|
||||
gGL.popMatrix();
|
||||
}
|
||||
gGL.popMatrix();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!mFallbackImageName.empty())
|
||||
{
|
||||
LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName);
|
||||
LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE,
|
||||
LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
if( fallback_image->getComponents() == 4 )
|
||||
{
|
||||
gl_rect_2d_checkerboard( calcScreenRect(), interior );
|
||||
@@ -388,8 +367,6 @@ LLView* LLColorSwatchCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFa
|
||||
BOOL can_apply_immediately = FALSE;
|
||||
node->getAttributeBOOL("can_apply_immediately", can_apply_immediately);
|
||||
|
||||
LLUICtrlCallback callback = NULL;
|
||||
|
||||
if (label.empty())
|
||||
{
|
||||
label.assign(node->getValue());
|
||||
@@ -399,9 +376,7 @@ LLView* LLColorSwatchCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFa
|
||||
name,
|
||||
rect,
|
||||
label,
|
||||
color,
|
||||
callback,
|
||||
NULL );
|
||||
color );
|
||||
|
||||
color_swatch->setCanApplyImmediately(can_apply_immediately);
|
||||
color_swatch->initFromXML(node, parent);
|
||||
|
||||
@@ -56,12 +56,7 @@ public:
|
||||
COLOR_CANCEL
|
||||
} EColorPickOp;
|
||||
|
||||
LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const LLColor4& color,
|
||||
void (*on_commit_callback)(LLUICtrl* ctrl, void* userdata),
|
||||
void* callback_userdata);
|
||||
LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color,
|
||||
void (*on_commit_callback)(LLUICtrl* ctrl, void* userdata),
|
||||
void* callback_userdata);
|
||||
LLColorSwatchCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLColor4& color);
|
||||
|
||||
~LLColorSwatchCtrl ();
|
||||
|
||||
|
||||
@@ -1,287 +0,0 @@
|
||||
/**
|
||||
* @file llcontainerview.cpp
|
||||
* @brief Container for all statistics info
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llcontainerview.h"
|
||||
|
||||
#include "llerror.h"
|
||||
#include "llfontgl.h"
|
||||
#include "llgl.h"
|
||||
#include "llui.h"
|
||||
#include "llresmgr.h"
|
||||
#include "llstring.h"
|
||||
#include "llscrollcontainer.h"
|
||||
|
||||
LLContainerView::LLContainerView(const std::string& name, const LLRect& rect)
|
||||
: LLView(name, rect, FALSE)
|
||||
{
|
||||
mShowLabel = TRUE;
|
||||
mCollapsible = TRUE;
|
||||
mDisplayChildren = TRUE;
|
||||
mScrollContainer = NULL;
|
||||
}
|
||||
|
||||
LLContainerView::~LLContainerView()
|
||||
{
|
||||
// Children all cleaned up by default view destructor.
|
||||
}
|
||||
|
||||
BOOL LLContainerView::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = FALSE;
|
||||
if (mDisplayChildren)
|
||||
{
|
||||
handled = (LLView::childrenHandleMouseDown(x, y, mask) != NULL);
|
||||
}
|
||||
if (!handled)
|
||||
{
|
||||
if( mCollapsible && mShowLabel && (y >= getRect().getHeight() - 10) )
|
||||
{
|
||||
setDisplayChildren(!mDisplayChildren);
|
||||
reshape(getRect().getWidth(), getRect().getHeight(), FALSE);
|
||||
handled = TRUE;
|
||||
}
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
BOOL LLContainerView::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = FALSE;
|
||||
if (mDisplayChildren)
|
||||
{
|
||||
handled = (LLView::childrenHandleMouseUp(x, y, mask) != NULL);
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
|
||||
void LLContainerView::draw()
|
||||
{
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
|
||||
gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
|
||||
}
|
||||
|
||||
// Draw the label
|
||||
if (mShowLabel)
|
||||
{
|
||||
LLResMgr::getInstance()->getRes( LLFONT_OCRA )->renderUTF8(mLabel, 0, 2, getRect().getHeight() - 2, LLColor4(1,1,1,1), LLFontGL::LEFT, LLFontGL::TOP);
|
||||
}
|
||||
|
||||
LLView::draw();
|
||||
}
|
||||
|
||||
|
||||
void LLContainerView::reshape(S32 width, S32 height, BOOL called_from_parent)
|
||||
{
|
||||
S32 desired_width = width;
|
||||
S32 desired_height = height;
|
||||
|
||||
if (mScrollContainer)
|
||||
{
|
||||
BOOL dum_bool;
|
||||
mScrollContainer->calcVisibleSize(&desired_width, &desired_height, &dum_bool, &dum_bool);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if we're uncontained - make height as small as possible
|
||||
desired_height = 0;
|
||||
}
|
||||
|
||||
arrange(desired_width, desired_height, called_from_parent);
|
||||
|
||||
// sometimes, after layout, our container will change size (scrollbars popping in and out)
|
||||
// if so, attempt another layout
|
||||
if (mScrollContainer)
|
||||
{
|
||||
S32 new_container_width;
|
||||
S32 new_container_height;
|
||||
BOOL dum_bool;
|
||||
mScrollContainer->calcVisibleSize(&new_container_width, &new_container_height, &dum_bool, &dum_bool);
|
||||
|
||||
if ((new_container_width != desired_width) ||
|
||||
(new_container_height != desired_height)) // the container size has changed, attempt to arrange again
|
||||
{
|
||||
arrange(new_container_width, new_container_height, called_from_parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLContainerView::arrange(S32 width, S32 height, BOOL called_from_parent)
|
||||
{
|
||||
// Determine the sizes and locations of all contained views
|
||||
S32 total_height = 0;
|
||||
S32 top, left, right, bottom;
|
||||
//LLView *childp;
|
||||
|
||||
// These will be used for the children
|
||||
left = 4;
|
||||
top = getRect().getHeight() - 4;
|
||||
right = width - 2;
|
||||
bottom = top;
|
||||
|
||||
// Leave some space for the top label/grab handle
|
||||
if (mShowLabel)
|
||||
{
|
||||
total_height += 20;
|
||||
}
|
||||
|
||||
if (mDisplayChildren)
|
||||
{
|
||||
// Determine total height
|
||||
U32 child_height = 0;
|
||||
for (child_list_const_iter_t child_iter = getChildList()->begin();
|
||||
child_iter != getChildList()->end(); ++child_iter)
|
||||
{
|
||||
LLView *childp = *child_iter;
|
||||
if (!childp->getVisible())
|
||||
{
|
||||
llwarns << "Incorrect visibility!" << llendl;
|
||||
}
|
||||
LLRect child_rect = childp->getRequiredRect();
|
||||
child_height += child_rect.getHeight();
|
||||
child_height += 2;
|
||||
}
|
||||
total_height += child_height;
|
||||
}
|
||||
|
||||
if (total_height < height)
|
||||
total_height = height;
|
||||
|
||||
if (followsTop())
|
||||
{
|
||||
// HACK: casting away const. Should use setRect or some helper function instead.
|
||||
const_cast<LLRect&>(getRect()).mBottom = getRect().mTop - total_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
// HACK: casting away const. Should use setRect or some helper function instead.
|
||||
const_cast<LLRect&>(getRect()).mTop = getRect().mBottom + total_height;
|
||||
}
|
||||
// HACK: casting away const. Should use setRect or some helper function instead.
|
||||
const_cast<LLRect&>(getRect()).mRight = getRect().mLeft + width;
|
||||
|
||||
top = total_height;
|
||||
if (mShowLabel)
|
||||
{
|
||||
top -= 20;
|
||||
}
|
||||
|
||||
bottom = top;
|
||||
|
||||
if (mDisplayChildren)
|
||||
{
|
||||
// Iterate through all children, and put in container from top down.
|
||||
for (child_list_const_iter_t child_iter = getChildList()->begin();
|
||||
child_iter != getChildList()->end(); ++child_iter)
|
||||
{
|
||||
LLView *childp = *child_iter;
|
||||
LLRect child_rect = childp->getRequiredRect();
|
||||
bottom -= child_rect.getHeight();
|
||||
LLRect r(left, bottom + child_rect.getHeight(), right, bottom);
|
||||
childp->setRect(r);
|
||||
childp->reshape(right - left, top - bottom);
|
||||
top = bottom - 2;
|
||||
bottom = top;
|
||||
}
|
||||
}
|
||||
|
||||
if (!called_from_parent)
|
||||
{
|
||||
if (getParent())
|
||||
{
|
||||
getParent()->reshape(getParent()->getRect().getWidth(), getParent()->getRect().getHeight(), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
LLRect LLContainerView::getRequiredRect()
|
||||
{
|
||||
LLRect req_rect;
|
||||
//LLView *childp;
|
||||
U32 total_height = 0;
|
||||
|
||||
// Determine the sizes and locations of all contained views
|
||||
|
||||
// Leave some space for the top label/grab handle
|
||||
|
||||
if (mShowLabel)
|
||||
{
|
||||
total_height = 20;
|
||||
}
|
||||
|
||||
|
||||
if (mDisplayChildren)
|
||||
{
|
||||
// Determine total height
|
||||
U32 child_height = 0;
|
||||
for (child_list_const_iter_t child_iter = getChildList()->begin();
|
||||
child_iter != getChildList()->end(); ++child_iter)
|
||||
{
|
||||
LLView *childp = *child_iter;
|
||||
LLRect child_rect = childp->getRequiredRect();
|
||||
child_height += child_rect.getHeight();
|
||||
child_height += 2;
|
||||
}
|
||||
|
||||
total_height += child_height;
|
||||
}
|
||||
req_rect.mTop = total_height;
|
||||
return req_rect;
|
||||
}
|
||||
|
||||
void LLContainerView::setLabel(const std::string& label)
|
||||
{
|
||||
mLabel = label;
|
||||
}
|
||||
|
||||
void LLContainerView::setDisplayChildren(const BOOL displayChildren)
|
||||
{
|
||||
mDisplayChildren = displayChildren;
|
||||
for (child_list_const_iter_t child_iter = getChildList()->begin();
|
||||
child_iter != getChildList()->end(); ++child_iter)
|
||||
{
|
||||
LLView *childp = *child_iter;
|
||||
childp->setVisible(mDisplayChildren);
|
||||
}
|
||||
}
|
||||
|
||||
void LLContainerView::setScrollContainer(LLScrollableContainerView* scroll)
|
||||
{
|
||||
mScrollContainer = scroll;
|
||||
scroll->setPassBackToChildren(false);
|
||||
}
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/**
|
||||
* @file llcontainerview.h
|
||||
* @brief Container for all statistics info.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLCONTAINERVIEW_H
|
||||
#define LL_LLCONTAINERVIEW_H
|
||||
|
||||
#include "stdtypes.h"
|
||||
#include "lltextbox.h"
|
||||
#include "llstatbar.h"
|
||||
|
||||
class LLScrollableContainerView;
|
||||
|
||||
class LLContainerView : public LLView
|
||||
{
|
||||
protected:
|
||||
BOOL mDisplayChildren;
|
||||
std::string mLabel;
|
||||
public:
|
||||
BOOL mCollapsible;
|
||||
public:
|
||||
LLContainerView(const std::string& name, const LLRect& rect);
|
||||
~LLContainerView();
|
||||
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
|
||||
virtual void draw();
|
||||
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
virtual LLRect getRequiredRect(); // Return the height of this object, given the set options.
|
||||
|
||||
void setLabel(const std::string& label);
|
||||
void showLabel(BOOL show) { mShowLabel = show; }
|
||||
void setDisplayChildren(const BOOL displayChildren);
|
||||
BOOL getDisplayChildren() { return mDisplayChildren; }
|
||||
void setScrollContainer(LLScrollableContainerView* scroll);
|
||||
|
||||
private:
|
||||
LLScrollableContainerView* mScrollContainer;
|
||||
void arrange(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
BOOL mShowLabel;
|
||||
};
|
||||
#endif // LL_CONTAINERVIEW_
|
||||
@@ -113,7 +113,7 @@ public:
|
||||
bool considerUpdateCurrency();
|
||||
// return true if update needed
|
||||
void currencyKey(S32);
|
||||
static void onCurrencyKey(LLLineEditor* caller, void* data);
|
||||
void onCurrencyKey(LLLineEditor* caller);
|
||||
|
||||
void prepare();
|
||||
void updateUI();
|
||||
@@ -337,13 +337,9 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value)
|
||||
mCurrencyChanged = true;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLCurrencyUIManager::Impl::onCurrencyKey(
|
||||
LLLineEditor* caller, void* data)
|
||||
void LLCurrencyUIManager::Impl::onCurrencyKey(LLLineEditor* caller)
|
||||
{
|
||||
S32 value = atoi(caller->getText().c_str());
|
||||
LLCurrencyUIManager::Impl* self = (LLCurrencyUIManager::Impl*)data;
|
||||
self->currencyKey(value);
|
||||
currencyKey(caller->getValue().asInteger());
|
||||
}
|
||||
|
||||
void LLCurrencyUIManager::Impl::prepare()
|
||||
@@ -352,8 +348,7 @@ void LLCurrencyUIManager::Impl::prepare()
|
||||
if (lindenAmount)
|
||||
{
|
||||
lindenAmount->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
|
||||
lindenAmount->setKeystrokeCallback(onCurrencyKey);
|
||||
lindenAmount->setCallbackUserData(this);
|
||||
lindenAmount->setKeystrokeCallback(boost::bind(&LLCurrencyUIManager::Impl::onCurrencyKey,this,_1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,25 +56,25 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy
|
||||
switch(var_type)
|
||||
{
|
||||
case VAR_TYPE_F32:
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,130,190,110), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, *((F32*)var), -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,130,190,110), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, *((F32*)var), -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider1->setPrecision(3);
|
||||
addChild(mSlider1);
|
||||
mSlider2 = NULL;
|
||||
mSlider3 = NULL;
|
||||
break;
|
||||
case VAR_TYPE_S32:
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,100,190,80), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, (F32)*((S32*)var), -255.f, 255.f, 1.f, LLStringUtil::null);
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,100,190,80), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, (F32)*((S32*)var), -255.f, 255.f, 1.f, LLStringUtil::null);
|
||||
mSlider1->setPrecision(0);
|
||||
addChild(mSlider1);
|
||||
mSlider2 = NULL;
|
||||
mSlider3 = NULL;
|
||||
break;
|
||||
case VAR_TYPE_VEC3:
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,130,190,110), std::string("x: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VX], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider1 = new LLSliderCtrl(std::string("slider 1"), LLRect(20,130,190,110), std::string("x: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, ((LLVector3*)var)->mV[VX], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider1->setPrecision(3);
|
||||
mSlider2 = new LLSliderCtrl(std::string("slider 2"), LLRect(20,100,190,80), std::string("y: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VY], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider2 = new LLSliderCtrl(std::string("slider 2"), LLRect(20,100,190,80), std::string("y: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, ((LLVector3*)var)->mV[VY], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider2->setPrecision(3);
|
||||
mSlider3 = new LLSliderCtrl(std::string("slider 3"), LLRect(20,70,190,50), std::string("z: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VZ], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider3 = new LLSliderCtrl(std::string("slider 3"), LLRect(20,70,190,50), std::string("z: "), NULL, 70, 130, TRUE, TRUE, FALSE, NULL, ((LLVector3*)var)->mV[VZ], -100.f, 100.f, 0.1f, LLStringUtil::null);
|
||||
mSlider3->setPrecision(3);
|
||||
addChild(mSlider1);
|
||||
addChild(mSlider2);
|
||||
@@ -85,7 +85,7 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy
|
||||
break;
|
||||
}
|
||||
|
||||
mAnimateButton = new LLButton(std::string("Animate"), LLRect(20, 45, 180, 25), LLStringUtil::null, onAnimateClicked, this);
|
||||
mAnimateButton = new LLButton(std::string("Animate"), LLRect(20, 45, 180, 25), LLStringUtil::null, boost::bind(&LLDebugVarMessageBox::onAnimateClicked, this));
|
||||
addChild(mAnimateButton);
|
||||
|
||||
mText = new LLTextBox(std::string("value"), LLRect(20,20,190,0));
|
||||
@@ -113,7 +113,6 @@ void LLDebugVarMessageBox::show(const std::string& title, F32 *var, F32 max_valu
|
||||
box->mSlider1->setValue(*var);
|
||||
}
|
||||
box->mSlider1->setCommitCallback(boost::bind(&LLDebugVarMessageBox::slider_changed,_1,box));
|
||||
box->mSlider1->setCallbackUserData(box);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -200,11 +199,10 @@ void LLDebugVarMessageBox::slider_changed(LLUICtrl* ctrl, void* user_data)
|
||||
}
|
||||
}
|
||||
|
||||
void LLDebugVarMessageBox::onAnimateClicked(void* user_data)
|
||||
void LLDebugVarMessageBox::onAnimateClicked()
|
||||
{
|
||||
LLDebugVarMessageBox* msg_boxp = (LLDebugVarMessageBox*)user_data;
|
||||
msg_boxp->mAnimate = !msg_boxp->mAnimate;
|
||||
msg_boxp->mAnimateButton->setToggleState(msg_boxp->mAnimate);
|
||||
mAnimate = !mAnimate;
|
||||
mAnimateButton->setToggleState(mAnimate);
|
||||
}
|
||||
|
||||
void LLDebugVarMessageBox::onClose(bool app_quitting)
|
||||
|
||||
@@ -67,7 +67,7 @@ protected:
|
||||
|
||||
static LLDebugVarMessageBox* show(const std::string& title, EDebugVarType var_type, void *var);
|
||||
static void slider_changed(LLUICtrl* ctrl, void* user_data);
|
||||
static void onAnimateClicked(void* user_data);
|
||||
void onAnimateClicked();
|
||||
|
||||
public:
|
||||
static void show(const std::string& title, F32 *var, F32 max_value = 100.f, F32 increment = 0.1f);
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "llvelocitybar.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llfloaterstats.h"
|
||||
#include "lluictrlfactory.h"
|
||||
|
||||
//
|
||||
// Globals
|
||||
@@ -84,29 +85,30 @@ LLDebugView::LLDebugView(const std::string& name, const LLRect &rect)
|
||||
addChild(mFastTimerView);
|
||||
|
||||
r.set(150, rect.getHeight() - 50, 870, 100);
|
||||
gTextureView = new LLTextureView("gTextureView", r);
|
||||
gTextureView->setRect(r);
|
||||
gTextureView->setFollowsBottom();
|
||||
gTextureView->setFollowsLeft();
|
||||
LLTextureView::Params tvp;
|
||||
tvp.name("gTextureView");
|
||||
tvp.rect(r);
|
||||
tvp.visible(false);
|
||||
gTextureView = LLUICtrlFactory::create<LLTextureView>(tvp);
|
||||
addChild(gTextureView);
|
||||
//gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE);
|
||||
|
||||
if(gAuditTexture)
|
||||
{
|
||||
r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100);
|
||||
gTextureSizeView = new LLTextureSizeView("gTextureSizeView");
|
||||
gTextureSizeView->setRect(r);
|
||||
gTextureSizeView->setFollowsBottom();
|
||||
gTextureSizeView->setFollowsLeft();
|
||||
gTextureSizeView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_SIZE) ;
|
||||
LLTextureSizeView::Params tsvp;
|
||||
tsvp.name = "gTextureSizeView";
|
||||
tsvp.rect = r;
|
||||
tsvp.type = LLTextureSizeView::TEXTURE_MEM_OVER_SIZE;
|
||||
gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsvp);
|
||||
addChild(gTextureSizeView);
|
||||
|
||||
r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureMemByCategory.size() * 30, 100);
|
||||
gTextureCategoryView = new LLTextureSizeView("gTextureCategoryView");
|
||||
gTextureCategoryView->setRect(r);
|
||||
gTextureCategoryView->setFollowsBottom();
|
||||
gTextureCategoryView->setFollowsLeft();
|
||||
gTextureCategoryView->setType(LLTextureSizeView::TEXTURE_MEM_OVER_CATEGORY);
|
||||
LLTextureSizeView::Params tscp;
|
||||
tscp.name = "gTextureCategoryView";
|
||||
tscp.rect = r;
|
||||
tscp.type = LLTextureSizeView::TEXTURE_MEM_OVER_CATEGORY;
|
||||
gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tscp);
|
||||
addChild(gTextureCategoryView);
|
||||
}
|
||||
|
||||
|
||||
@@ -1066,6 +1066,10 @@ bool LLFace::canRenderAsMask()
|
||||
}
|
||||
|
||||
const LLTextureEntry* te = getTextureEntry();
|
||||
if( !te || !getViewerObject() || !getTexture() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static const LLCachedControl<bool> use_rmse_auto_mask("SHUseRMSEAutoMask",false);
|
||||
static const LLCachedControl<F32> auto_mask_max_rmse("SHAutoMaskMaxRMSE",.09f);
|
||||
@@ -1168,6 +1172,15 @@ static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_EMISSIVE("Emissive");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_BINORMAL("Binormal");
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK("Face Feedback");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_POSITION("Feedback Position");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_NORMAL("Feedback Normal");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_TEXTURE("Feedback Texture");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_COLOR("Feedback Color");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_EMISSIVE("Feedback Emissive");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_FEEDBACK_BINORMAL("Feedback Binormal");
|
||||
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX_TAIL("Tail");
|
||||
static LLFastTimer::DeclareTimer FTM_FACE_POSITION_STORE("Pos");
|
||||
@@ -1375,7 +1388,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
!rebuild_weights && //TODO: add support for weights
|
||||
!volume.isUnique()) //source volume is NOT flexi
|
||||
{ //use transform feedback to pack vertex buffer
|
||||
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK);
|
||||
LLGLEnable discard(GL_RASTERIZER_DISCARD);
|
||||
LLVertexBuffer* buff = (LLVertexBuffer*) vf.mVertexBuffer.get();
|
||||
|
||||
if (vf.mVertexBuffer.isNull() || buff->getNumVerts() != vf.mNumVertices)
|
||||
@@ -1392,7 +1406,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_pos)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_POSITION);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_POSITION);
|
||||
gTransformPositionProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_VERTEX, mGeomIndex, mGeomCount);
|
||||
@@ -1417,7 +1431,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_color)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_COLOR);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_COLOR);
|
||||
gTransformColorProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_COLOR, mGeomIndex, mGeomCount);
|
||||
@@ -1433,7 +1447,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_emissive)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_EMISSIVE);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_EMISSIVE);
|
||||
gTransformColorProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_EMISSIVE, mGeomIndex, mGeomCount);
|
||||
@@ -1454,7 +1468,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_normal)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_NORMAL);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_NORMAL);
|
||||
gTransformNormalProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_NORMAL, mGeomIndex, mGeomCount);
|
||||
@@ -1467,7 +1481,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_binormal)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_BINORMAL);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_BINORMAL);
|
||||
gTransformBinormalProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_BINORMAL, mGeomIndex, mGeomCount);
|
||||
@@ -1480,7 +1494,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
||||
|
||||
if (rebuild_tcoord)
|
||||
{
|
||||
LLFastTimer t(FTM_FACE_GEOM_TEXTURE);
|
||||
LLFastTimer t(FTM_FACE_GEOM_FEEDBACK_TEXTURE);
|
||||
gTransformTexCoordProgram.bind();
|
||||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_TEXCOORD0, mGeomIndex, mGeomCount);
|
||||
|
||||
@@ -92,8 +92,8 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker() :
|
||||
|
||||
BOOL LLFloaterAvatarPicker::postBuild()
|
||||
{
|
||||
childSetKeystrokeCallback("Edit", &LLFloaterAvatarPicker::editKeystroke, (void*)this);
|
||||
childSetKeystrokeCallback("EditUUID", &LLFloaterAvatarPicker::editKeystroke, (void*)this);
|
||||
getChild<LLLineEditor>("Edit")->setKeystrokeCallback(boost::bind(&LLFloaterAvatarPicker::editKeystroke,this,_1));
|
||||
getChild<LLLineEditor>("EditUUID")->setKeystrokeCallback(boost::bind(&LLFloaterAvatarPicker::editKeystroke, this,_1));
|
||||
|
||||
childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));
|
||||
getChildView("Find")->setEnabled(FALSE);
|
||||
@@ -716,14 +716,12 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
|
||||
search_results->setFocus(TRUE);
|
||||
}
|
||||
|
||||
//static
|
||||
void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
|
||||
void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller)
|
||||
{
|
||||
LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)user_data;
|
||||
if(caller->getName() == "Edit")
|
||||
self->getChildView("Find")->setEnabled(caller->getText().size() >= 3);
|
||||
getChildView("Find")->setEnabled(caller->getText().size() >= 3);
|
||||
else
|
||||
self->childSetEnabled("Select", caller->getValue().asUUID().notNull());
|
||||
childSetEnabled("Select", caller->getValue().asUUID().notNull());
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
void openFriendsTab();
|
||||
|
||||
private:
|
||||
static void editKeystroke(class LLLineEditor* caller, void* user_data);
|
||||
void editKeystroke(class LLLineEditor* caller);
|
||||
|
||||
void onBtnFind();
|
||||
void onBtnSelect();
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
#include "llfloaterbuy.h"
|
||||
|
||||
#include "llagent.h" // for agent id
|
||||
#include "llalertdialog.h"
|
||||
#include "llinventorymodel.h" // for gInventory
|
||||
#include "llinventorydefines.h"
|
||||
#include "llinventoryicon.h"
|
||||
|
||||
@@ -265,7 +265,7 @@ BOOL LLFloaterBvhPreview::postBuild()
|
||||
mPlayButton = getChild<LLButton>( "play_btn");
|
||||
if (!mPlayButton)
|
||||
{
|
||||
mPlayButton = new LLButton(std::string("play_btn"), LLRect(0,0,0,0));
|
||||
mPlayButton = new LLButton("play_btn");
|
||||
}
|
||||
mPlayButton->setClickedCallback(boost::bind(&LLFloaterBvhPreview::onBtnPlay,this));
|
||||
|
||||
@@ -280,7 +280,7 @@ BOOL LLFloaterBvhPreview::postBuild()
|
||||
mStopButton = getChild<LLButton>( "stop_btn");
|
||||
if (!mStopButton)
|
||||
{
|
||||
mStopButton = new LLButton(std::string("stop_btn"), LLRect(0,0,0,0));
|
||||
mStopButton = new LLButton("stop_btn");
|
||||
}
|
||||
mStopButton->setClickedCallback(boost::bind(&LLFloaterBvhPreview::onBtnStop, this));
|
||||
|
||||
@@ -748,16 +748,15 @@ void LLFloaterBvhPreview::onMouseCaptureLost()
|
||||
//-----------------------------------------------------------------------------
|
||||
// onBtnPlay()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLFloaterBvhPreview::onBtnPlay(void* user_data)
|
||||
void LLFloaterBvhPreview::onBtnPlay()
|
||||
{
|
||||
LLFloaterBvhPreview* previewp = (LLFloaterBvhPreview*)user_data;
|
||||
if (!previewp->getEnabled())
|
||||
if (!getEnabled())
|
||||
return;
|
||||
|
||||
if (previewp->mMotionID.notNull())
|
||||
if (mMotionID.notNull())
|
||||
{
|
||||
LLVOAvatar* avatarp;
|
||||
if (previewp->mInWorld)
|
||||
if (mInWorld)
|
||||
{
|
||||
if (!gAgentAvatarp)
|
||||
{
|
||||
@@ -767,27 +766,27 @@ void LLFloaterBvhPreview::onBtnPlay(void* user_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!previewp->mAnimPreview)
|
||||
if (!mAnimPreview)
|
||||
{
|
||||
return;
|
||||
}
|
||||
avatarp = previewp->mAnimPreview->getDummyAvatar();
|
||||
avatarp = mAnimPreview->getDummyAvatar();
|
||||
}
|
||||
|
||||
if(!avatarp->isMotionActive(previewp->mMotionID))
|
||||
if(!avatarp->isMotionActive(mMotionID))
|
||||
{
|
||||
previewp->resetMotion();
|
||||
previewp->mPauseRequest = NULL;
|
||||
resetMotion();
|
||||
mPauseRequest = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (avatarp->areAnimationsPaused())
|
||||
{
|
||||
previewp->mPauseRequest = NULL;
|
||||
mPauseRequest = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
previewp->mPauseRequest = avatarp->requestPause();
|
||||
mPauseRequest = avatarp->requestPause();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -796,16 +795,15 @@ void LLFloaterBvhPreview::onBtnPlay(void* user_data)
|
||||
//-----------------------------------------------------------------------------
|
||||
// onBtnStop()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLFloaterBvhPreview::onBtnStop(void* user_data)
|
||||
void LLFloaterBvhPreview::onBtnStop()
|
||||
{
|
||||
LLFloaterBvhPreview* previewp = (LLFloaterBvhPreview*)user_data;
|
||||
if (!previewp->getEnabled())
|
||||
if (!getEnabled())
|
||||
return;
|
||||
|
||||
if (previewp->mMotionID.notNull())
|
||||
if (mMotionID.notNull())
|
||||
{
|
||||
LLVOAvatar* avatarp;
|
||||
if (previewp->mInWorld)
|
||||
if (mInWorld)
|
||||
{
|
||||
if (!gAgentAvatarp)
|
||||
{
|
||||
@@ -815,14 +813,14 @@ void LLFloaterBvhPreview::onBtnStop(void* user_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!previewp->mAnimPreview)
|
||||
if (!mAnimPreview)
|
||||
{
|
||||
return;
|
||||
}
|
||||
avatarp = previewp->mAnimPreview->getDummyAvatar();
|
||||
avatarp = mAnimPreview->getDummyAvatar();
|
||||
}
|
||||
previewp->resetMotion();
|
||||
previewp->mPauseRequest = avatarp->requestPause();
|
||||
resetMotion();
|
||||
mPauseRequest = avatarp->requestPause();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ public:
|
||||
|
||||
void refresh();
|
||||
|
||||
static void onBtnPlay(void*);
|
||||
static void onBtnStop(void*);
|
||||
void onBtnPlay();
|
||||
void onBtnStop();
|
||||
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
|
||||
static void onSliderMove(LLUICtrl*, void*);
|
||||
static void onCommitBaseAnim(LLUICtrl*, void*);
|
||||
|
||||
@@ -559,8 +559,8 @@ const S32 HEADER_HEIGHT = 3 * (LINE_HEIGHT + LLFLOATER_VPAD) + (2 * LLPANEL_BORD
|
||||
|
||||
void LLFloaterCustomize::initScrollingPanelList()
|
||||
{
|
||||
LLScrollableContainerView* scroll_container =
|
||||
getChild<LLScrollableContainerView>("panel_container");
|
||||
LLScrollContainer* scroll_container =
|
||||
getChild<LLScrollContainer>("panel_container");
|
||||
// LLScrollingPanelList's do not import correctly
|
||||
// mScrollingPanelList = LLUICtrlFactory::getScrollingPanelList(this, "panel_list");
|
||||
mScrollingPanelList = new LLScrollingPanelList(std::string("panel_list"), LLRect());
|
||||
|
||||
@@ -54,7 +54,7 @@ class LLJoint;
|
||||
class LLLineEditor;
|
||||
class LLMakeOutfitDialog;
|
||||
class LLRadioGroup;
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
class LLScrollingPanelList;
|
||||
class LLTabContainer;
|
||||
class LLTextBox;
|
||||
@@ -142,7 +142,7 @@ private:
|
||||
LLWearableType::EType mCurrentWearableType;
|
||||
|
||||
LLScrollingPanelList* mScrollingPanelList;
|
||||
LLScrollableContainerView* mScrollContainer;
|
||||
LLScrollContainer* mScrollContainer;
|
||||
LLPointer<LLVisualParamReset> mResetParams;
|
||||
|
||||
LLInventoryObserver* mInventoryObserver;
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
LLFloaterEditUI* LLFloaterEditUI::sInstance = NULL;
|
||||
|
||||
void LLFloaterEditUI::navigateHierarchyButtonPressed(void* data)
|
||||
void LLFloaterEditUI::navigateHierarchyButtonPressed(S32 i)
|
||||
{
|
||||
LLView* view = LLView::sEditingUIView;
|
||||
if( !view ) return;
|
||||
@@ -62,7 +62,7 @@ void LLFloaterEditUI::navigateHierarchyButtonPressed(void* data)
|
||||
for(idx = 0,itor = parentChildren->begin();itor!=parentChildren->end();itor++,idx++){
|
||||
if((*itor)==view)break;
|
||||
}
|
||||
switch((intptr_t)data)
|
||||
switch(i)
|
||||
{
|
||||
case 0 ://up
|
||||
view = view->getParent();
|
||||
@@ -142,10 +142,7 @@ LLFloaterEditUI::LLFloaterEditUI()
|
||||
LLStringUtil::null,
|
||||
NULL,
|
||||
254,
|
||||
onCommitLabel,
|
||||
NULL,
|
||||
NULL,
|
||||
this);
|
||||
boost::bind(&LLFloaterEditUI::onCommitLabel,_1));
|
||||
addChild(line);
|
||||
mLabelLine = line;
|
||||
|
||||
@@ -154,8 +151,7 @@ LLFloaterEditUI::LLFloaterEditUI()
|
||||
|
||||
spin = new LLSpinCtrl(std::string("height_spin"), LLRect(x, y+20, x+100, y),
|
||||
std::string("Height:"), LLFontGL::getFontSansSerifSmall(),
|
||||
onCommitHeight,
|
||||
this,
|
||||
boost::bind(&LLFloaterEditUI::onCommitHeight,_1),
|
||||
0.f,
|
||||
2.f,
|
||||
1000.f,
|
||||
@@ -168,8 +164,7 @@ LLFloaterEditUI::LLFloaterEditUI()
|
||||
|
||||
spin = new LLSpinCtrl(std::string("width_spin"), LLRect(x, y+20, x+100, y),
|
||||
std::string("Width:"), LLFontGL::getFontSansSerifSmall(),
|
||||
onCommitWidth,
|
||||
this,
|
||||
boost::bind(&LLFloaterEditUI::onCommitHeight,_1),
|
||||
0.f,
|
||||
2.f,
|
||||
1000.f,
|
||||
@@ -190,28 +185,22 @@ LLFloaterEditUI::LLFloaterEditUI()
|
||||
y -= VPAD + 20;
|
||||
|
||||
x += 40;
|
||||
button = new LLButton(std::string("up"),LLRect(x, y+16, x+32, y));
|
||||
button = new LLButton(std::string("up"),LLRect(x, y+16, x+32, y), std::string(), boost::bind(LLFloaterEditUI::navigateHierarchyButtonPressed,0));
|
||||
addChild(button);
|
||||
x -= 40;
|
||||
y -= VPAD + 20;
|
||||
button = new LLButton(std::string("<<"),LLRect(x, y+16, x+32, y));
|
||||
button = new LLButton(std::string("<<"),LLRect(x, y+16, x+32, y), std::string(), boost::bind(LLFloaterEditUI::navigateHierarchyButtonPressed,2));
|
||||
addChild(button);
|
||||
x += 40;
|
||||
button = new LLButton(std::string("rfrsh"),LLRect(x, y+16, x+32, y));
|
||||
button = new LLButton(std::string("rfrsh"),LLRect(x, y+16, x+32, y), std::string(), boost::bind(LLFloaterEditUI::navigateHierarchyButtonPressed,4));
|
||||
addChild(button);
|
||||
x += 40;
|
||||
button = new LLButton(std::string(">>"),LLRect(x, y+16, x+32, y));
|
||||
button = new LLButton(std::string(">>"),LLRect(x, y+16, x+32, y), std::string(), boost::bind(LLFloaterEditUI::navigateHierarchyButtonPressed,3));
|
||||
addChild(button);
|
||||
x -= 40;
|
||||
y -= VPAD + 20;
|
||||
button = new LLButton(std::string("dn"),LLRect(x, y+16, x+32, y));
|
||||
button = new LLButton(std::string("dn"),LLRect(x, y+16, x+32, y), std::string(), boost::bind(LLFloaterEditUI::navigateHierarchyButtonPressed,1));
|
||||
addChild(button);
|
||||
|
||||
childSetAction("up",navigateHierarchyButtonPressed,(void*)0);
|
||||
childSetAction("dn",navigateHierarchyButtonPressed,(void*)1);
|
||||
childSetAction("<<",navigateHierarchyButtonPressed,(void*)2);
|
||||
childSetAction(">>",navigateHierarchyButtonPressed,(void*)3);
|
||||
childSetAction("rfrsh",navigateHierarchyButtonPressed,(void*)4);
|
||||
sInstance = this;
|
||||
}
|
||||
|
||||
@@ -380,7 +369,7 @@ BOOL LLFloaterEditUI::processKeystroke(KEY key, MASK mask)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterEditUI::onCommitLabel(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterEditUI::onCommitLabel(LLUICtrl* ctrl)
|
||||
{
|
||||
LLView* view = LLView::sEditingUIView;
|
||||
if (!view) return;
|
||||
@@ -396,7 +385,7 @@ void LLFloaterEditUI::onCommitLabel(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterEditUI::onCommitHeight(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterEditUI::onCommitHeight(LLUICtrl* ctrl)
|
||||
{
|
||||
LLView* view = LLView::sEditingUIView;
|
||||
if (!view) return;
|
||||
@@ -410,7 +399,7 @@ void LLFloaterEditUI::onCommitHeight(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterEditUI::onCommitWidth(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterEditUI::onCommitWidth(LLUICtrl* ctrl)
|
||||
{
|
||||
LLView* view = LLView::sEditingUIView;
|
||||
if (!view) return;
|
||||
|
||||
@@ -51,14 +51,14 @@ public:
|
||||
|
||||
void refreshView(LLView* view);
|
||||
void refreshButton(LLView* view);
|
||||
static void navigateHierarchyButtonPressed(void* data);
|
||||
static void navigateHierarchyButtonPressed(S32 i);
|
||||
static void show(void* unused = NULL);
|
||||
|
||||
static BOOL processKeystroke(KEY key, MASK mask);
|
||||
|
||||
static void onCommitLabel(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitHeight(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitWidth(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitLabel(LLUICtrl* ctrl);
|
||||
static void onCommitHeight(LLUICtrl* ctrl);
|
||||
static void onCommitWidth(LLUICtrl* ctrl);
|
||||
|
||||
protected:
|
||||
LLView* mLastView;
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "llfloateravatarpicker.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llbutton.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llfloateravatarinfo.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "llnamelistctrl.h"
|
||||
@@ -353,14 +354,9 @@ void LLPanelFriends::filterContacts(const std::string& search_name)
|
||||
mLastContactSearch = search_name;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPanelFriends::onContactSearchEdit(const std::string& search_string, void* user_data)
|
||||
void LLPanelFriends::onContactFilterEdit(const std::string& search_string)
|
||||
{
|
||||
LLPanelFriends* panelp = (LLPanelFriends*)user_data;
|
||||
if (panelp)
|
||||
{
|
||||
panelp->filterContacts(search_string);
|
||||
}
|
||||
filterContacts(search_string);
|
||||
}
|
||||
|
||||
/*void LLPanelFriends::onChangeContactGroup(LLUICtrl* ctrl, void* user_data)
|
||||
@@ -387,10 +383,10 @@ BOOL LLPanelFriends::postBuild()
|
||||
// <dogmode>
|
||||
// Contact search and group system.
|
||||
// 09/05/2010 - Charley Levenque
|
||||
LLSearchEditor* contact = getChild<LLSearchEditor>("buddy_search_lineedit");
|
||||
LLFilterEditor* contact = getChild<LLFilterEditor>("buddy_search_lineedit");
|
||||
if (contact)
|
||||
{
|
||||
contact->setSearchCallback(&onContactSearchEdit, this);
|
||||
contact->setCommitCallback(boost::bind(&LLPanelFriends::onContactFilterEdit, this, _2));
|
||||
}
|
||||
|
||||
getChild<LLTextBox>("s_num")->setValue("0");
|
||||
|
||||
@@ -133,7 +133,7 @@ private:
|
||||
static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
|
||||
static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
|
||||
static void onPickAvatar(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names );
|
||||
static void onContactSearchEdit(const std::string& search_string, void* user_data);
|
||||
void onContactFilterEdit(const std::string& search_string);
|
||||
static void onClickIM(void* user_data);
|
||||
static void onClickAssign(void* user_data);
|
||||
static void onClickExpand(void* user_data);
|
||||
|
||||
@@ -186,6 +186,12 @@ void LLFloaterGesture::toggleVisibility()
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLFloaterGesture::instanceVisible()
|
||||
{
|
||||
return sInstance && sInstance->getVisible();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterGesture::refreshAll()
|
||||
{
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
#include "lldarray.h"
|
||||
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
class LLView;
|
||||
class LLButton;
|
||||
class LLLineEditor;
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
static void show();
|
||||
static void toggleVisibility();
|
||||
static void refreshAll();
|
||||
static bool instanceVisible();
|
||||
|
||||
protected:
|
||||
// Reads from the gesture manager's list of active gestures
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include "message.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llcombobox.h"
|
||||
@@ -448,9 +447,10 @@ LLPanelRegionTools::LLPanelRegionTools(const std::string& title)
|
||||
|
||||
BOOL LLPanelRegionTools::postBuild()
|
||||
{
|
||||
getChild<LLUICtrl>("region name")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetKeystrokeCallback("region name", onChangeSimName, this);
|
||||
childSetPrevalidate("region name", &LLLineEditor::prevalidatePrintableNotPipe);
|
||||
LLLineEditor* region_name = getChild<LLLineEditor>("region name");
|
||||
region_name->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
region_name->setKeystrokeCallback(boost::bind(&LLPanelRegionTools::onChangeSimName, this));
|
||||
region_name->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
|
||||
getChild<LLUICtrl>("check prelude")->setCommitCallback(boost::bind(&LLPanelRegionTools:: onChangePrelude, this));
|
||||
getChild<LLUICtrl>("check fixed sun")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
@@ -470,36 +470,42 @@ BOOL LLPanelRegionTools::postBuild()
|
||||
childSetAction("Revert Terrain", boost::bind(&LLPanelRegionTools::onRevertTerrain, this));
|
||||
childSetAction("Swap Terrain", boost::bind(&LLPanelRegionTools::onSwapTerrain, this));
|
||||
|
||||
getChild<LLUICtrl>("estate")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("estate", &LLLineEditor::prevalidatePositiveS32);
|
||||
LLLineEditor* estate = getChild<LLLineEditor>("estate name");
|
||||
estate->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
estate->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
|
||||
getChild<LLUICtrl>("parentestate")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("parentestate", &LLLineEditor::prevalidatePositiveS32);
|
||||
childDisable("parentestate");
|
||||
LLLineEditor* parentestate = getChild<LLLineEditor>("parentestate");
|
||||
parentestate->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
parentestate->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
parentestate->setEnabled(false);
|
||||
|
||||
getChild<LLUICtrl>("gridposx")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("gridposx", &LLLineEditor::prevalidatePositiveS32);
|
||||
childDisable("gridposx");
|
||||
LLLineEditor* gridposx = getChild<LLLineEditor>("gridposx");
|
||||
gridposx->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
gridposx->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
gridposx->setEnabled(false);
|
||||
|
||||
getChild<LLUICtrl>("gridposy")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("gridposy", &LLLineEditor::prevalidatePositiveS32);
|
||||
childDisable("gridposy");
|
||||
LLLineEditor* gridposy = getChild<LLLineEditor>("gridposy");
|
||||
gridposy->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
gridposy->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
gridposy->setEnabled(false);
|
||||
|
||||
getChild<LLUICtrl>("redirectx")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("redirectx", &LLLineEditor::prevalidatePositiveS32);
|
||||
LLLineEditor* redirectx = getChild<LLLineEditor>("redirectx");
|
||||
redirectx->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
redirectx->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
|
||||
getChild<LLUICtrl>("redirecty")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
childSetPrevalidate("redirecty", &LLLineEditor::prevalidatePositiveS32);
|
||||
LLLineEditor* redirecty = getChild<LLLineEditor>("redirecty");
|
||||
redirecty->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
redirecty->setPrevalidate(&LLLineEditor::prevalidatePositiveS32);
|
||||
|
||||
getChild<LLUICtrl>("billable factor")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
|
||||
getChild<LLUICtrl>("land cost")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
|
||||
|
||||
childSetAction("Refresh", boost::bind(&LLPanelRegionTools::onRefresh, this));
|
||||
childSetAction("Apply", boost::bind(&LLPanelRegionTools::onApplyChanges, this));
|
||||
getChild<LLButton>("Refresh")->setClickedCallback(boost::bind(&LLPanelRegionTools::onRefresh, this));
|
||||
getChild<LLButton>("Apply")->setClickedCallback(boost::bind(&LLPanelRegionTools::onApplyChanges, this));
|
||||
|
||||
childSetAction("Select Region", boost::bind(&LLPanelRegionTools::onSelectRegion, this));
|
||||
childSetAction("Autosave now", boost::bind(onSaveState, this));
|
||||
getChild<LLButton>("Select Region")->setClickedCallback(boost::bind(&LLPanelRegionTools::onSelectRegion, this));
|
||||
getChild<LLButton>("Autosave now")->setClickedCallback(boost::bind(&LLPanelRegionTools::onSaveState,(void*)NULL));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -586,7 +592,8 @@ void LLPanelRegionTools::enableAllWidgets()
|
||||
getChildView("Autosave now")->setEnabled(TRUE);
|
||||
}
|
||||
|
||||
void LLPanelRegionTools::onSaveState(void* userdata)
|
||||
//static
|
||||
void LLPanelRegionTools::onSaveState(void*)
|
||||
{
|
||||
if (gAgent.isGodlike())
|
||||
{
|
||||
@@ -820,13 +827,11 @@ void LLPanelRegionTools::onChangePrelude()
|
||||
onChangeAnything();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
|
||||
void LLPanelRegionTools::onChangeSimName()
|
||||
{
|
||||
if (userdata && gAgent.isGodlike())
|
||||
if ( gAgent.isGodlike())
|
||||
{
|
||||
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
||||
region_tools->getChildView("Apply")->setEnabled(TRUE);
|
||||
getChildView("Apply")->setEnabled(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,8 +135,8 @@ public:
|
||||
|
||||
/*virtual*/ void refresh();
|
||||
|
||||
static void onSaveState(void* userdata);
|
||||
static void onChangeSimName(LLLineEditor* caller, void* userdata);
|
||||
static void onSaveState(void*);
|
||||
void onChangeSimName();
|
||||
|
||||
void onChangeAnything();
|
||||
void onChangePrelude();
|
||||
|
||||
@@ -114,6 +114,10 @@ LLFloaterGroupInfo::LLFloaterGroupInfo(const std::string& name, const LLRect &re
|
||||
: LLFloater(name, rect, title),
|
||||
mGroupID( group_id )
|
||||
{
|
||||
llinfos << name << " : " << title << llendl;
|
||||
llinfos << rect << llendl;
|
||||
llinfos << getRect() << llendl;
|
||||
llinfos << getLocalRect() << llendl;
|
||||
// Construct the filename of the group panel xml definition file.
|
||||
mPanelGroupp = new LLPanelGroup("panel_group.xml",
|
||||
"PanelGroup",
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
#include "llfloatergroupinfo.h"
|
||||
#include "llfloaterdirectory.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llselectmgr.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
// Viewer libs
|
||||
#include "llviewercontrol.h"
|
||||
#include "llmediactrl.h"
|
||||
#include "llalertdialog.h"
|
||||
|
||||
// Linden libs
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
@@ -721,6 +721,8 @@ BOOL LLImagePreviewAvatar::render()
|
||||
mNeedsUpdate = FALSE;
|
||||
LLVOAvatar* avatarp = mDummyAvatar;
|
||||
|
||||
gGL.pushUIMatrix();
|
||||
gGL.loadUIIdentity();
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.pushMatrix();
|
||||
@@ -785,6 +787,7 @@ BOOL LLImagePreviewAvatar::render()
|
||||
}
|
||||
}
|
||||
|
||||
gGL.popUIMatrix();
|
||||
gGL.color4f(1,1,1,1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -99,8 +99,13 @@ BOOL LLFloaterJoystick::postBuild()
|
||||
rect = LLRect(350, r.mTop, r.mRight + 200, 0);
|
||||
}
|
||||
|
||||
mAxisStatsView = new LLStatView("axis values", joystick, "", rect);
|
||||
mAxisStatsView->setDisplayChildren(TRUE);
|
||||
|
||||
LLStatView::Params params;
|
||||
params.name("axis values");
|
||||
params.rect(rect);
|
||||
params.show_label(true);
|
||||
params.label(joystick);
|
||||
mAxisStatsView = LLUICtrlFactory::create<LLStatView>(params);
|
||||
|
||||
for (U32 i = 0; i < 6; i++)
|
||||
{
|
||||
|
||||
@@ -1129,11 +1129,10 @@ BOOL LLPanelLandObjects::postBuild()
|
||||
mCleanOtherObjectsTime = getChild<LLLineEditor>("clean other time");
|
||||
|
||||
mCleanOtherObjectsTime->setFocusLostCallback(boost::bind(&LLPanelLandObjects::onLostFocus, _1, this));
|
||||
mCleanOtherObjectsTime->setCommitCallback(onCommitClean);
|
||||
mCleanOtherObjectsTime->setCommitCallback(onCommitClean, this);
|
||||
|
||||
mCleanOtherObjectsTime->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
|
||||
|
||||
childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32);
|
||||
childSetUserData("clean other time", this);
|
||||
|
||||
mBtnRefresh = getChild<LLButton>("Refresh List");
|
||||
mBtnRefresh->setClickedCallback(onClickRefresh, this);
|
||||
|
||||
|
||||
@@ -37,16 +37,18 @@
|
||||
#include "llagent.h"
|
||||
#include "llagentui.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llfolderview.h"
|
||||
#include "llfoldervieweventlistener.h"
|
||||
#include "llinventory.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventorypanel.h"
|
||||
#include "llviewerinventory.h"
|
||||
#include "llparcel.h"
|
||||
#include "llpermissions.h"
|
||||
#include "llsaleinfo.h"
|
||||
#include "llparcel.h"
|
||||
#include "llviewerinventory.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
#include "llviewerwindow.h" // alertXml
|
||||
@@ -67,21 +69,26 @@ LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
|
||||
mResolutionLabel(NULL),
|
||||
mIsDirty( FALSE ),
|
||||
mActive( TRUE ),
|
||||
mSearchEdit(NULL),
|
||||
mContextConeOpacity(0.f)
|
||||
mFilterEdit(NULL),
|
||||
mContextConeOpacity(0.f),
|
||||
mInventoryPanel(NULL),
|
||||
mSavedFolderState(NULL),
|
||||
mNoCopyLandmarkSelected( FALSE )
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_landmark_ctrl.xml");
|
||||
|
||||
}
|
||||
BOOL LLFloaterLandmark::postBuild()
|
||||
{
|
||||
mTentativeLabel = getChild<LLTextBox>("Multiple");
|
||||
|
||||
mResolutionLabel = getChild<LLTextBox>("unknown");
|
||||
|
||||
|
||||
childSetCommitCallback("show_folders_check", onShowFolders, this);
|
||||
childSetVisible("show_folders_check", FALSE);
|
||||
LLUICtrl* show_folders_check = getChild<LLUICtrl>("show_folders_check");
|
||||
show_folders_check->setCommitCallback(boost::bind(&LLFloaterLandmark::onShowFolders,this, _1));
|
||||
show_folders_check->setVisible(FALSE);
|
||||
|
||||
mSearchEdit = getChild<LLSearchEditor>("inventory search editor");
|
||||
mSearchEdit->setSearchCallback(onSearchEdit, this);
|
||||
mFilterEdit = getChild<LLFilterEditor>("inventory search editor");
|
||||
mFilterEdit->setCommitCallback(boost::bind(&LLFloaterLandmark::onFilterEdit, this, _2));
|
||||
|
||||
mInventoryPanel = getChild<LLInventoryPanel>("inventory panel");
|
||||
|
||||
@@ -93,7 +100,7 @@ LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
|
||||
|
||||
mInventoryPanel->setFilterTypes(filter_types);
|
||||
//mInventoryPanel->setFilterPermMask(getFilterPermMask()); //Commented out due to no-copy texture loss.
|
||||
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterLandmark::onSelectionChange, _1, _2, (void*)this));
|
||||
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterLandmark::onSelectionChange, this, _1, _2));
|
||||
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
|
||||
mInventoryPanel->setAllowMultiSelect(FALSE);
|
||||
|
||||
@@ -110,17 +117,19 @@ LLFloaterLandmark::LLFloaterLandmark(const LLSD& data)
|
||||
|
||||
mSavedFolderState = new LLSaveFolderState();
|
||||
mNoCopyLandmarkSelected = FALSE;
|
||||
|
||||
childSetAction("Close", LLFloaterLandmark::onBtnClose,this);
|
||||
childSetAction("New", LLFloaterLandmark::onBtnNew,this);
|
||||
childSetAction("NewFolder", LLFloaterLandmark::onBtnNewFolder,this);
|
||||
childSetAction("Edit", LLFloaterLandmark::onBtnEdit,this);
|
||||
childSetAction("Rename", LLFloaterLandmark::onBtnRename,this);
|
||||
childSetAction("Delete", LLFloaterLandmark::onBtnDelete,this);
|
||||
|
||||
getChild<LLButton>("Close")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnClose,this));
|
||||
getChild<LLButton>("New")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnNew,this));
|
||||
getChild<LLButton>("NewFolder")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnNewFolder,this));
|
||||
getChild<LLButton>("Edit")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnEdit,this));
|
||||
getChild<LLButton>("Rename")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnRename,this));
|
||||
getChild<LLButton>("Delete")->setClickedCallback(boost::bind(&LLFloaterLandmark::onBtnDelete,this));
|
||||
|
||||
setCanMinimize(FALSE);
|
||||
|
||||
mSavedFolderState->setApply(FALSE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LLFloaterLandmark::~LLFloaterLandmark()
|
||||
@@ -185,9 +194,9 @@ BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask)
|
||||
{
|
||||
LLFolderView* root_folder = mInventoryPanel->getRootFolder();
|
||||
|
||||
if (root_folder && mSearchEdit)
|
||||
if (root_folder && mFilterEdit)
|
||||
{
|
||||
if (mSearchEdit->hasFocus() &&
|
||||
if (mFilterEdit->hasFocus() &&
|
||||
(key == KEY_RETURN || key == KEY_DOWN) &&
|
||||
mask == MASK_NONE)
|
||||
{
|
||||
@@ -209,7 +218,7 @@ BOOL LLFloaterLandmark::handleKeyHere(KEY key, MASK mask)
|
||||
|
||||
if (root_folder->hasFocus() && key == KEY_UP)
|
||||
{
|
||||
mSearchEdit->focusFirstItem(TRUE);
|
||||
mFilterEdit->focusFirstItem(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,27 +270,23 @@ const LLUUID& LLFloaterLandmark::findItemID(const LLUUID& asset_id, BOOL copyabl
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnClose(void* userdata)
|
||||
void LLFloaterLandmark::onBtnClose()
|
||||
{
|
||||
LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
|
||||
self->mIsDirty = FALSE;
|
||||
self->close();
|
||||
mIsDirty = FALSE;
|
||||
close();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnEdit(void* userdata)
|
||||
void LLFloaterLandmark::onBtnEdit()
|
||||
{
|
||||
LLFloaterLandmark* self = (LLFloaterLandmark*) userdata;
|
||||
// There isn't one, so make a new preview
|
||||
LLViewerInventoryItem* itemp = gInventory.getItem(self->mImageAssetID);
|
||||
LLViewerInventoryItem* itemp = gInventory.getItem(mImageAssetID);
|
||||
if(itemp)
|
||||
{
|
||||
open_landmark(itemp, itemp->getName(), TRUE);
|
||||
}
|
||||
}
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnNew(void* userdata)
|
||||
|
||||
void LLFloaterLandmark::onBtnNew()
|
||||
{
|
||||
LLViewerRegion* agent_region = gAgent.getRegion();
|
||||
if(!agent_region)
|
||||
@@ -316,17 +321,15 @@ void LLFloaterLandmark::onBtnNew(void* userdata)
|
||||
NOT_WEARABLE, PERM_ALL,
|
||||
NULL);
|
||||
}
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnNewFolder(void* userdata)
|
||||
|
||||
void LLFloaterLandmark::onBtnNewFolder()
|
||||
{
|
||||
|
||||
}
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnDelete(void* userdata)
|
||||
{
|
||||
LLFloaterLandmark* self = (LLFloaterLandmark*)userdata;
|
||||
|
||||
LLViewerInventoryItem* item = gInventory.getItem(self->mImageAssetID);
|
||||
void LLFloaterLandmark::onBtnDelete()
|
||||
{
|
||||
LLViewerInventoryItem* item = gInventory.getItem(mImageAssetID);
|
||||
if(item)
|
||||
{
|
||||
// Move the item to the trash
|
||||
@@ -360,82 +363,75 @@ void LLFloaterLandmark::onBtnDelete(void* userdata)
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterLandmark::onBtnRename(void* userdata)
|
||||
void LLFloaterLandmark::onBtnRename()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterLandmark::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data)
|
||||
void LLFloaterLandmark::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
|
||||
{
|
||||
LLFloaterLandmark* self = (LLFloaterLandmark*)data;
|
||||
if (items.size())
|
||||
{
|
||||
LLFolderViewItem* first_item = items.front();
|
||||
LLInventoryItem* itemp = gInventory.getItem(first_item->getListener()->getUUID());
|
||||
self->mNoCopyLandmarkSelected = FALSE;
|
||||
mNoCopyLandmarkSelected = FALSE;
|
||||
if (itemp)
|
||||
{
|
||||
if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
|
||||
{
|
||||
self->mNoCopyLandmarkSelected = TRUE;
|
||||
mNoCopyLandmarkSelected = TRUE;
|
||||
}
|
||||
self->mImageAssetID = itemp->getUUID();
|
||||
self->mIsDirty = TRUE;
|
||||
mImageAssetID = itemp->getUUID();
|
||||
mIsDirty = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterLandmark::onShowFolders(LLUICtrl* ctrl, void *user_data)
|
||||
void LLFloaterLandmark::onShowFolders(LLUICtrl* ctrl)
|
||||
{
|
||||
LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
|
||||
LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
|
||||
|
||||
if (check_box->get())
|
||||
{
|
||||
picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
|
||||
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
|
||||
}
|
||||
else
|
||||
{
|
||||
picker->mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NO_FOLDERS);
|
||||
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NO_FOLDERS);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterLandmark::onSearchEdit(const std::string& search_string, void* user_data )
|
||||
void LLFloaterLandmark::onFilterEdit(const LLSD& value )
|
||||
{
|
||||
LLFloaterLandmark* picker = (LLFloaterLandmark*)user_data;
|
||||
|
||||
std::string upper_case_search_string = search_string;
|
||||
std::string upper_case_search_string = value.asString();
|
||||
LLStringUtil::toUpper(upper_case_search_string);
|
||||
|
||||
if (upper_case_search_string.empty())
|
||||
{
|
||||
if (picker->mInventoryPanel->getFilterSubString().empty())
|
||||
if (mInventoryPanel->getFilterSubString().empty())
|
||||
{
|
||||
// current filter and new filter empty, do nothing
|
||||
return;
|
||||
}
|
||||
|
||||
picker->mSavedFolderState->setApply(TRUE);
|
||||
picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
|
||||
mSavedFolderState->setApply(TRUE);
|
||||
mInventoryPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
|
||||
// add folder with current item to list of previously opened folders
|
||||
LLOpenFoldersWithSelection opener;
|
||||
picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener);
|
||||
picker->mInventoryPanel->getRootFolder()->scrollToShowSelection();
|
||||
mInventoryPanel->getRootFolder()->applyFunctorRecursively(opener);
|
||||
mInventoryPanel->getRootFolder()->scrollToShowSelection();
|
||||
|
||||
}
|
||||
else if (picker->mInventoryPanel->getFilterSubString().empty())
|
||||
else if (mInventoryPanel->getFilterSubString().empty())
|
||||
{
|
||||
// first letter in search term, save existing folder open state
|
||||
if (!picker->mInventoryPanel->getRootFolder()->isFilterModified())
|
||||
if (!mInventoryPanel->getRootFolder()->isFilterModified())
|
||||
{
|
||||
picker->mSavedFolderState->setApply(FALSE);
|
||||
picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(*picker->mSavedFolderState);
|
||||
mSavedFolderState->setApply(FALSE);
|
||||
mInventoryPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
|
||||
}
|
||||
}
|
||||
|
||||
picker->mInventoryPanel->setFilterSubString(upper_case_search_string);
|
||||
mInventoryPanel->setFilterSubString(upper_case_search_string);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ class LLSearchEditor;
|
||||
class LLInventoryPanel;
|
||||
class LLSaveFolderState;
|
||||
class LLViewerTexture;
|
||||
class LLFilterEditor;
|
||||
|
||||
// used for setting drag & drop callbacks.
|
||||
typedef BOOL (*drag_n_drop_callback)(LLUICtrl*, LLInventoryItem*, void*);
|
||||
@@ -61,6 +62,8 @@ public:
|
||||
LLFloaterLandmark(const LLSD& data);
|
||||
virtual ~LLFloaterLandmark();
|
||||
|
||||
BOOL postBuild();
|
||||
|
||||
// LLView overrides
|
||||
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
|
||||
BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
|
||||
@@ -78,15 +81,15 @@ public:
|
||||
BOOL isDirty() const { return mIsDirty; }
|
||||
void setActive( BOOL active );
|
||||
|
||||
static void onBtnClose( void* userdata );
|
||||
static void onBtnNew( void* userdata );
|
||||
static void onBtnEdit( void* userdata );
|
||||
static void onBtnDelete( void* userdata );
|
||||
static void onBtnNewFolder( void* userdata );
|
||||
static void onBtnRename( void* userdata );
|
||||
static void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data);
|
||||
static void onShowFolders(LLUICtrl* ctrl, void* userdata);
|
||||
static void onSearchEdit(const std::string& search_string, void* user_data );
|
||||
void onBtnClose();
|
||||
void onBtnNew();
|
||||
void onBtnEdit();
|
||||
void onBtnDelete();
|
||||
void onBtnNewFolder();
|
||||
void onBtnRename();
|
||||
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
|
||||
void onShowFolders(LLUICtrl* ctrl);
|
||||
void onFilterEdit(const LLSD& value);
|
||||
|
||||
protected:
|
||||
LLPointer<LLViewerTexture> mLandmarkp;
|
||||
@@ -104,7 +107,7 @@ protected:
|
||||
BOOL mIsDirty;
|
||||
BOOL mActive;
|
||||
|
||||
LLSearchEditor* mSearchEdit;
|
||||
LLFilterEditor* mFilterEdit;
|
||||
LLInventoryPanel* mInventoryPanel;
|
||||
PermissionMask mImmediateFilterPermMask;
|
||||
PermissionMask mNonImmediateFilterPermMask;
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "lltextbox.h"
|
||||
|
||||
#include "llagent.h" // for agent id
|
||||
#include "llalertdialog.h"
|
||||
#include "llfloaterinventory.h"
|
||||
#include "llinventorybridge.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
||||
@@ -81,7 +81,7 @@ LLFloaterPermissionsMgr::LLFloaterPermissionsMgr() :
|
||||
LLRect scrollable_container_rect(0, y, getRect().getWidth(), 0);
|
||||
LLRect permissions_rect(0, 0, getRect().getWidth() - HPAD - HPAD, 0);
|
||||
mPermissions = new LLPermissionsView(permissions_rect);
|
||||
mScroller = new LLScrollableContainerView(
|
||||
mScroller = new LLScrollContainer(
|
||||
std::string("permissions container"),
|
||||
scrollable_container_rect,
|
||||
mPermissions
|
||||
@@ -107,15 +107,11 @@ LLPermissionsView::LLPermissionsView(const LLRect &rect) : LLView(std::string("p
|
||||
void LLPermissionsView::clearPermissionsData()
|
||||
{
|
||||
deleteAllChildren();
|
||||
std::for_each(mPermData.begin(), mPermData.end(), DeletePairedPointer());
|
||||
mPermData.clear();
|
||||
}
|
||||
|
||||
void LLPermissionsView::addPermissionsData(const std::string& object_name, const LLUUID& object_id, U32 permissions_flags)
|
||||
{
|
||||
// grow to make room for new element
|
||||
LLPermissionsData* perm_datap = new LLPermissionsData(object_id, permissions_flags);
|
||||
|
||||
reshape(getRect().getWidth(), getRect().getHeight() + LINE + VPAD + BTN_HEIGHT + VPAD);
|
||||
S32 y = getRect().getHeight() - LINE - VPAD;
|
||||
LLRect label_rect(HPAD, y + LINE, getRect().getWidth(), y);
|
||||
@@ -126,39 +122,33 @@ void LLPermissionsView::addPermissionsData(const std::string& object_name, const
|
||||
y -= LINE + VPAD;
|
||||
|
||||
LLRect btn_rect(HPAD, y + BTN_HEIGHT, 120, y);
|
||||
LLButton* button = new LLButton(std::string("Revoke permissions"), btn_rect, LLStringUtil::null, revokePermissions, (void*)perm_datap);
|
||||
LLButton* button = new LLButton(std::string("Revoke permissions"), btn_rect, LLStringUtil::null, boost::bind(&LLPermissionsView::revokePermissions, object_id, permissions_flags));
|
||||
button->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
|
||||
addChild(button);
|
||||
|
||||
btn_rect.set(HPAD + 120 + HPAD, y + BTN_HEIGHT, HPAD + 120 + HPAD + 120, y);
|
||||
button = new LLButton(std::string("Find in world"), btn_rect, LLStringUtil::null, findObject, (void*)perm_datap);
|
||||
/*btn_rect.set(HPAD + 120 + HPAD, y + BTN_HEIGHT, HPAD + 120 + HPAD + 120, y);
|
||||
button = new LLButton(std::string("Find in world"), btn_rect, LLStringUtil::null, boost::bind(&LLPermissionsView::findObject, object_id, permissions_flags));
|
||||
button->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
|
||||
addChild(button);
|
||||
|
||||
mPermData.insert(std::make_pair(object_id, perm_datap));
|
||||
addChild(button);*/
|
||||
}
|
||||
|
||||
void LLPermissionsView::revokePermissions(void *userdata)
|
||||
void LLPermissionsView::revokePermissions(const LLUUID& object_id, U32 permission_flags)
|
||||
{
|
||||
LLPermissionsData* perm_data = (LLPermissionsData*)userdata;
|
||||
if (perm_data)
|
||||
LLViewerObject* objectp = gObjectList.findObject(object_id);
|
||||
if (objectp)
|
||||
{
|
||||
LLViewerObject* objectp = gObjectList.findObject(perm_data->mObjectID);
|
||||
if (objectp)
|
||||
{
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_RevokePermissions);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addUUIDFast(_PREHASH_ObjectID, perm_data->mObjectID);
|
||||
msg->addU32Fast(_PREHASH_ObjectPermissions, perm_data->mPermFlags);
|
||||
msg->sendReliable(objectp->getRegion()->getHost());
|
||||
}
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_RevokePermissions);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addUUIDFast(_PREHASH_ObjectID, object_id);
|
||||
msg->addU32Fast(_PREHASH_ObjectPermissions, permission_flags);
|
||||
msg->sendReliable(objectp->getRegion()->getHost());
|
||||
}
|
||||
}
|
||||
|
||||
void LLPermissionsView::findObject(void *userdata)
|
||||
/*void LLPermissionsView::findObject(const LLUUID& object_id, U32 permission_flags)
|
||||
{
|
||||
}
|
||||
}*/
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "llfloater.h"
|
||||
#include <vector>
|
||||
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
class LLPermissionsView;
|
||||
|
||||
class LLFloaterPermissionsMgr
|
||||
@@ -59,20 +59,11 @@ public:
|
||||
LLPermissionsView* mPermissions;
|
||||
|
||||
protected:
|
||||
LLScrollableContainerView* mScroller;
|
||||
LLScrollContainer* mScroller;
|
||||
|
||||
static LLFloaterPermissionsMgr* sInstance;
|
||||
};
|
||||
|
||||
class LLPermissionsData
|
||||
{
|
||||
public:
|
||||
LLPermissionsData(const LLUUID& object_id, U32 permission_flags) : mObjectID(object_id), mPermFlags(permission_flags) {};
|
||||
|
||||
LLUUID mObjectID;
|
||||
U32 mPermFlags;
|
||||
};
|
||||
|
||||
class LLPermissionsView : public LLView
|
||||
{
|
||||
public:
|
||||
@@ -83,11 +74,8 @@ public:
|
||||
void clearPermissionsData();
|
||||
void addPermissionsData(const std::string& object_name, const LLUUID& object_id, U32 permissions_flags);
|
||||
|
||||
static void revokePermissions(void *userdata);
|
||||
static void findObject(void *userdata);
|
||||
|
||||
protected:
|
||||
std::map<LLUUID, LLPermissionsData*> mPermData;
|
||||
static void revokePermissions(const LLUUID& object_id, U32 permission_flags);
|
||||
//static void findObject(const LLUUID& object_id, U32 permission_flags);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "lfsimfeaturehandler.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llfloaterperms.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
@@ -83,7 +83,8 @@ bool can_set_export(const U32& base, const U32& own, const U32& next);
|
||||
class LLPropertiesObserver : public LLInventoryObserver
|
||||
{
|
||||
public:
|
||||
LLPropertiesObserver()
|
||||
LLPropertiesObserver(LLFloaterProperties* floater)
|
||||
: mFloater(floater)
|
||||
{
|
||||
gInventory.addObserver(this);
|
||||
}
|
||||
@@ -92,6 +93,8 @@ public:
|
||||
gInventory.removeObserver(this);
|
||||
}
|
||||
virtual void changed(U32 mask);
|
||||
private:
|
||||
LLFloaterProperties* mFloater;
|
||||
};
|
||||
|
||||
void LLPropertiesObserver::changed(U32 mask)
|
||||
@@ -99,7 +102,7 @@ void LLPropertiesObserver::changed(U32 mask)
|
||||
// if there's a change we're interested in.
|
||||
if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
|
||||
{
|
||||
LLFloaterProperties::dirtyAll();
|
||||
mFloater->dirty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,25 +112,10 @@ void LLPropertiesObserver::changed(U32 mask)
|
||||
/// Class LLFloaterProperties
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
// static
|
||||
LLFloaterProperties::instance_map LLFloaterProperties::sInstances;
|
||||
LLPropertiesObserver* LLFloaterProperties::sPropertiesObserver = NULL;
|
||||
S32 LLFloaterProperties::sPropertiesObserverCount = 0;
|
||||
|
||||
// static
|
||||
LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id,
|
||||
const LLUUID& object_id)
|
||||
//static
|
||||
LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id, const LLUUID &object_id)
|
||||
{
|
||||
// for simplicity's sake, we key the properties window with a
|
||||
// single uuid. However, the items are keyed by item and object
|
||||
// (obj == null -> agent inventory). So, we xor the two ids, and
|
||||
// use that as a lookup key
|
||||
instance_map::iterator it = sInstances.find(item_id ^ object_id);
|
||||
if(it != sInstances.end())
|
||||
{
|
||||
return (*it).second;
|
||||
}
|
||||
return NULL;
|
||||
return getInstance(item_id ^ object_id);
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -150,87 +138,71 @@ LLFloaterProperties* LLFloaterProperties::show(const LLUUID& item_id,
|
||||
return instance;
|
||||
}
|
||||
|
||||
void LLFloaterProperties::dirtyAll()
|
||||
{
|
||||
// ...this is more clear. Possibly more correct, because the
|
||||
// refresh method may delete the object.
|
||||
for(instance_map::iterator it = sInstances.begin(); it!=sInstances.end(); )
|
||||
{
|
||||
(*it++).second->dirty();
|
||||
}
|
||||
}
|
||||
|
||||
// Default constructor
|
||||
LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_id, const LLUUID& object_id) :
|
||||
LLFloater(name, rect, title),
|
||||
LLFloater(name, rect, title), LLInstanceTracker<LLFloaterProperties,LLUUID>(object_id ^ item_id),
|
||||
mItemID(item_id),
|
||||
mObjectID(object_id),
|
||||
mDirty(TRUE)
|
||||
{
|
||||
mPropertiesObserver = new LLPropertiesObserver(this);
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
|
||||
|
||||
if (!sPropertiesObserver)
|
||||
{
|
||||
sPropertiesObserver = new LLPropertiesObserver;
|
||||
}
|
||||
sPropertiesObserverCount++;
|
||||
|
||||
childSetTextArg("TextPrice", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
|
||||
// add the object to the static structure
|
||||
LLUUID key = mItemID ^ mObjectID;
|
||||
sInstances.insert(instance_map::value_type(key, this));
|
||||
// build the UI
|
||||
// item name & description
|
||||
childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
childSetCommitCallback("LabelItemName",onCommitName,this);
|
||||
childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
childSetCommitCallback("LabelItemDesc", onCommitDescription, this);
|
||||
// Creator information
|
||||
childSetAction("BtnCreator",onClickCreator,this);
|
||||
// owner information
|
||||
childSetAction("BtnOwner",onClickOwner,this);
|
||||
// acquired date
|
||||
// owner permissions
|
||||
// Permissions debug text
|
||||
// group permissions
|
||||
childSetCommitCallback("CheckGroupCopy",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckGroupMod",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckGroupMove",&onCommitPermissions, this);
|
||||
// everyone permissions
|
||||
childSetCommitCallback("CheckEveryoneCopy",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckEveryoneMove",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckExport", &onCommitPermissions, this);
|
||||
if (!gHippoGridManager->getCurrentGrid()->isSecondLife())
|
||||
LFSimFeatureHandler::instance().setSupportsExportCallback(boost::bind(&LLFloaterProperties::refresh, this));
|
||||
// next owner permissions
|
||||
childSetCommitCallback("CheckNextOwnerModify",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckNextOwnerCopy",&onCommitPermissions, this);
|
||||
childSetCommitCallback("CheckNextOwnerTransfer",&onCommitPermissions, this);
|
||||
// Mark for sale or not, and sale info
|
||||
childSetCommitCallback("CheckPurchase",&onCommitSaleInfo, this);
|
||||
childSetCommitCallback("RadioSaleType",&onCommitSaleType, this);
|
||||
// "Price" label for edit
|
||||
childSetCommitCallback("EditPrice",&onCommitSaleInfo, this);
|
||||
// The UI has been built, now fill in all the values
|
||||
refresh();
|
||||
}
|
||||
|
||||
// Destroys the object
|
||||
LLFloaterProperties::~LLFloaterProperties()
|
||||
{
|
||||
// clean up the static data.
|
||||
instance_map::iterator it = sInstances.find(mItemID ^ mObjectID);
|
||||
if(it != sInstances.end())
|
||||
{
|
||||
sInstances.erase(it);
|
||||
}
|
||||
sPropertiesObserverCount--;
|
||||
if (!sPropertiesObserverCount)
|
||||
{
|
||||
delete sPropertiesObserver;
|
||||
sPropertiesObserver = NULL;
|
||||
}
|
||||
delete mPropertiesObserver;
|
||||
mPropertiesObserver = NULL;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterProperties::postBuild()
|
||||
{
|
||||
|
||||
childSetTextArg("TextPrice", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
// build the UI
|
||||
// item name & description
|
||||
getChild<LLLineEditor>("LabelItemName")->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitName,this));
|
||||
getChild<LLLineEditor>("LabelItemDesc")->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitDescription,this));
|
||||
// Creator information
|
||||
getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLFloaterProperties::onClickCreator,this));
|
||||
// owner information
|
||||
getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLFloaterProperties::onClickOwner,this));
|
||||
// acquired date
|
||||
// owner permissions
|
||||
// Permissions debug text
|
||||
// group permissions
|
||||
getChild<LLUICtrl>("CheckGroupCopy")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckGroupMod")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckGroupMove")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
// everyone permissions
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckEveryoneMove")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckExport")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
if (!gHippoGridManager->getCurrentGrid()->isSecondLife())
|
||||
LFSimFeatureHandler::instance().setSupportsExportCallback(boost::bind(&LLFloaterProperties::refresh, this));
|
||||
// next owner permissions
|
||||
getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
|
||||
// Mark for sale or not, and sale info
|
||||
getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleInfo, this));
|
||||
getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleType, this));
|
||||
// "Price" label for edit
|
||||
getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleInfo, this));
|
||||
// The UI has been built, now fill in all the values
|
||||
refresh();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterProperties::onOpen()
|
||||
{
|
||||
refresh();
|
||||
}
|
||||
|
||||
void LLFloaterProperties::refresh()
|
||||
@@ -269,11 +241,11 @@ void LLFloaterProperties::refresh()
|
||||
"CheckNextOwnerTransfer",
|
||||
"CheckPurchase",
|
||||
"RadioSaleType",
|
||||
"EditPrice"
|
||||
"Edit Cost"
|
||||
};
|
||||
for(size_t t=0; t<LL_ARRAY_SIZE(enableNames); ++t)
|
||||
{
|
||||
childSetEnabled(enableNames[t],false);
|
||||
getChildView(enableNames[t])->setEnabled(false);
|
||||
}
|
||||
const char* hideNames[]={
|
||||
"BaseMaskDebug",
|
||||
@@ -284,7 +256,7 @@ void LLFloaterProperties::refresh()
|
||||
};
|
||||
for(size_t t=0; t<LL_ARRAY_SIZE(hideNames); ++t)
|
||||
{
|
||||
childSetVisible(hideNames[t],false);
|
||||
getChildView(hideNames[t])->setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -309,14 +281,16 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
|
||||
// do not enable the UI for incomplete items.
|
||||
LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
|
||||
BOOL is_complete = i->isComplete();
|
||||
|
||||
BOOL is_complete = i->isFinished();
|
||||
const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
|
||||
const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
|
||||
const LLPermissions& perm = item->getPermissions();
|
||||
BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm,
|
||||
GP_OBJECT_MANIPULATE);
|
||||
BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm,
|
||||
GP_OBJECT_SET_SALE);
|
||||
BOOL is_link = i->getIsLinkType();
|
||||
const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm,
|
||||
GP_OBJECT_MANIPULATE);
|
||||
const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm,
|
||||
GP_OBJECT_SET_SALE) &&
|
||||
!cannot_restrict_permissions;
|
||||
const BOOL is_link = i->getIsLinkType();
|
||||
|
||||
// You need permission to modify the object to modify an inventory
|
||||
// item in it.
|
||||
@@ -332,16 +306,16 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
// ITEM NAME & DESC //
|
||||
//////////////////////
|
||||
BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
|
||||
GP_OBJECT_MANIPULATE)
|
||||
&& is_obj_modify && is_complete;
|
||||
GP_OBJECT_MANIPULATE)
|
||||
&& is_obj_modify && is_complete;
|
||||
|
||||
childSetEnabled("LabelItemNameTitle",TRUE);
|
||||
childSetEnabled("LabelItemName",is_modifiable);
|
||||
childSetText("LabelItemName",item->getName());
|
||||
childSetEnabled("LabelItemDescTitle",TRUE);
|
||||
childSetEnabled("LabelItemDesc",is_modifiable);
|
||||
childSetVisible("IconLocked",!is_modifiable);
|
||||
childSetText("LabelItemDesc",item->getDescription());
|
||||
getChildView("LabelItemNameTitle")->setEnabled(TRUE);
|
||||
getChildView("LabelItemName")->setEnabled(is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
|
||||
getChild<LLUICtrl>("LabelItemName")->setValue(item->getName());
|
||||
getChildView("LabelItemDescTitle")->setEnabled(TRUE);
|
||||
getChildView("LabelItemDesc")->setEnabled(is_modifiable);
|
||||
getChildView("IconLocked")->setVisible(!is_modifiable);
|
||||
getChild<LLUICtrl>("LabelItemDesc")->setValue(item->getDescription());
|
||||
|
||||
//////////////////
|
||||
// CREATOR NAME //
|
||||
@@ -353,17 +327,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
{
|
||||
std::string name;
|
||||
gCacheName->getFullName(item->getCreatorUUID(), name);
|
||||
childSetEnabled("BtnCreator",TRUE);
|
||||
childSetEnabled("LabelCreatorTitle",TRUE);
|
||||
childSetEnabled("LabelCreatorName",TRUE);
|
||||
childSetText("LabelCreatorName",name);
|
||||
getChildView("BtnCreator")->setEnabled(TRUE);
|
||||
getChildView("LabelCreatorTitle")->setEnabled(TRUE);
|
||||
getChildView("LabelCreatorName")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("LabelCreatorName")->setValue(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled("BtnCreator",FALSE);
|
||||
childSetEnabled("LabelCreatorTitle",FALSE);
|
||||
childSetEnabled("LabelCreatorName",FALSE);
|
||||
childSetText("LabelCreatorName",getString("unknown"));
|
||||
getChildView("BtnCreator")->setEnabled(FALSE);
|
||||
getChildView("LabelCreatorTitle")->setEnabled(FALSE);
|
||||
getChildView("LabelCreatorName")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown"));
|
||||
}
|
||||
|
||||
////////////////
|
||||
@@ -386,20 +360,20 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
//childSetEnabled("BtnOwner",TRUE);
|
||||
getChildView("BtnOwner")->setEnabled(TRUE);
|
||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e
|
||||
childSetEnabled("BtnOwner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES));
|
||||
getChildView("BtnOwner")->setEnabled(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES));
|
||||
// [/RLVa:KB]
|
||||
childSetEnabled("LabelOwnerTitle",TRUE);
|
||||
childSetEnabled("LabelOwnerName",TRUE);
|
||||
childSetText("LabelOwnerName",name);
|
||||
getChildView("LabelOwnerTitle")->setEnabled(TRUE);
|
||||
getChildView("LabelOwnerName")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("LabelOwnerName")->setValue(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled("BtnOwner",FALSE);
|
||||
childSetEnabled("LabelOwnerTitle",FALSE);
|
||||
childSetEnabled("LabelOwnerName",FALSE);
|
||||
childSetText("LabelOwnerName",getString("public"));
|
||||
getChildView("BtnOwner")->setEnabled(FALSE);
|
||||
getChildView("LabelOwnerTitle")->setEnabled(FALSE);
|
||||
getChildView("LabelOwnerName")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("LabelOwnerName")->setValue(getString("public"));
|
||||
}
|
||||
|
||||
//////////////////
|
||||
@@ -410,13 +384,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
time_t time_utc = item->getCreationDate();
|
||||
if (0 == time_utc)
|
||||
{
|
||||
childSetText("LabelAcquiredDate",getString("unknown"));
|
||||
getChild<LLUICtrl>("LabelAcquiredDate")->setValue(getString("unknown"));
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string timestr;
|
||||
timeToFormattedString(time_utc, gSavedSettings.getString("TimestampFormat"), timestr);
|
||||
childSetText("LabelAcquiredDate", timestr);
|
||||
std::string timeStr;
|
||||
timeToFormattedString(time_utc, gSavedSettings.getString("TimestampFormat"), timeStr);
|
||||
getChild<LLUICtrl>("LabelAcquiredDate")->setValue(timeStr);
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
@@ -424,11 +398,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
///////////////////////
|
||||
if(can_agent_manipulate)
|
||||
{
|
||||
childSetText("OwnerLabel",getString("you_can"));
|
||||
getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can"));
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetText("OwnerLabel",getString("owner_can"));
|
||||
getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can"));
|
||||
}
|
||||
|
||||
U32 base_mask = perm.getMaskBase();
|
||||
@@ -437,19 +411,19 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
U32 everyone_mask = perm.getMaskEveryone();
|
||||
U32 next_owner_mask = perm.getMaskNextOwner();
|
||||
|
||||
childSetEnabled("OwnerLabel",TRUE);
|
||||
childSetEnabled("CheckOwnerModify",FALSE);
|
||||
childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY)));
|
||||
childSetEnabled("CheckOwnerCopy",FALSE);
|
||||
childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY)));
|
||||
childSetEnabled("CheckOwnerTransfer",FALSE);
|
||||
childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
|
||||
getChildView("OwnerLabel")->setEnabled(TRUE);
|
||||
getChildView("CheckOwnerModify")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY)));
|
||||
getChildView("CheckOwnerCopy")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckOwnerCopy")->setValue(LLSD((BOOL)(owner_mask & PERM_COPY)));
|
||||
getChildView("CheckOwnerTransfer")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckOwnerTransfer")->setValue(LLSD((BOOL)(owner_mask & PERM_TRANSFER)));
|
||||
|
||||
bool supports_export = LFSimFeatureHandler::instance().simSupportsExport();
|
||||
childSetEnabled("CheckOwnerExport",false);
|
||||
childSetValue("CheckOwnerExport", supports_export && owner_mask & PERM_EXPORT);
|
||||
getChildView("CheckOwnerExport")->setEnabled(false);
|
||||
getChild<LLUICtrl>("CheckOwnerExport")->setValue(LLSD((BOOL)(supports_export && owner_mask & PERM_EXPORT)));
|
||||
if (!gHippoGridManager->getCurrentGrid()->isSecondLife())
|
||||
childSetVisible("CheckOwnerExport", false);
|
||||
getChildView("CheckOwnerExport")->setVisible(false);
|
||||
|
||||
///////////////////////
|
||||
// DEBUG PERMISSIONS //
|
||||
@@ -475,43 +449,43 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
perm_string += mask_to_string(base_mask);
|
||||
if (!supports_export && base_mask & PERM_EXPORT) // Hide Export when not available
|
||||
perm_string.erase(perm_string.find_last_of("E"));
|
||||
childSetText("BaseMaskDebug",perm_string);
|
||||
childSetVisible("BaseMaskDebug",TRUE);
|
||||
getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string);
|
||||
getChildView("BaseMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "O: ";
|
||||
perm_string += mask_to_string(owner_mask);
|
||||
if (!supports_export && owner_mask & PERM_EXPORT) // Hide Export when not available
|
||||
perm_string.erase(perm_string.find_last_of("E"));
|
||||
childSetText("OwnerMaskDebug",perm_string);
|
||||
childSetVisible("OwnerMaskDebug",TRUE);
|
||||
getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string);
|
||||
getChildView("OwnerMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "G";
|
||||
perm_string += overwrite_group ? "*: " : ": ";
|
||||
perm_string += mask_to_string(group_mask);
|
||||
childSetText("GroupMaskDebug",perm_string);
|
||||
childSetVisible("GroupMaskDebug",TRUE);
|
||||
getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string);
|
||||
getChildView("GroupMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "E";
|
||||
perm_string += overwrite_everyone ? "*: " : ": ";
|
||||
perm_string += mask_to_string(everyone_mask);
|
||||
if (!supports_export && everyone_mask & PERM_EXPORT) // Hide Export when not available
|
||||
perm_string.erase(perm_string.find_last_of("E"));
|
||||
childSetText("EveryoneMaskDebug",perm_string);
|
||||
childSetVisible("EveryoneMaskDebug",TRUE);
|
||||
|
||||
getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string);
|
||||
getChildView("EveryoneMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "N";
|
||||
perm_string += slam_perm ? "*: " : ": ";
|
||||
perm_string += mask_to_string(next_owner_mask);
|
||||
childSetText("NextMaskDebug",perm_string);
|
||||
childSetVisible("NextMaskDebug",TRUE);
|
||||
getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string);
|
||||
getChildView("NextMaskDebug")->setVisible(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetVisible("BaseMaskDebug",FALSE);
|
||||
childSetVisible("OwnerMaskDebug",FALSE);
|
||||
childSetVisible("GroupMaskDebug",FALSE);
|
||||
childSetVisible("EveryoneMaskDebug",FALSE);
|
||||
childSetVisible("NextMaskDebug",FALSE);
|
||||
getChildView("BaseMaskDebug")->setVisible(FALSE);
|
||||
getChildView("OwnerMaskDebug")->setVisible(FALSE);
|
||||
getChildView("GroupMaskDebug")->setVisible(FALSE);
|
||||
getChildView("EveryoneMaskDebug")->setVisible(FALSE);
|
||||
getChildView("NextMaskDebug")->setVisible(FALSE);
|
||||
}
|
||||
|
||||
/////////////
|
||||
@@ -521,25 +495,25 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
// Check for ability to change values.
|
||||
if (!is_link && is_obj_modify && can_agent_manipulate)
|
||||
{
|
||||
childSetEnabled("GroupLabel", true);
|
||||
childSetEnabled("CheckGroupCopy", (owner_mask & (PERM_TRANSFER|PERM_COPY)) == (PERM_TRANSFER|PERM_COPY));
|
||||
childSetEnabled("CheckGroupMod", owner_mask & PERM_MODIFY);
|
||||
childSetEnabled("CheckGroupMove", true);
|
||||
childSetEnabled("EveryoneLabel", true);
|
||||
childSetEnabled("CheckEveryoneCopy", (owner_mask & (PERM_TRANSFER|PERM_COPY)) == (PERM_TRANSFER|PERM_COPY));
|
||||
childSetEnabled("CheckEveryoneMove",true);
|
||||
getChild<LLUICtrl>("GroupLabel")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("CheckGroupCopy")->setEnabled((owner_mask & (PERM_TRANSFER|PERM_COPY)) == (PERM_TRANSFER|PERM_COPY));
|
||||
getChild<LLUICtrl>("CheckGroupMod")->setEnabled(owner_mask & PERM_MODIFY);
|
||||
getChild<LLUICtrl>("CheckGroupMove")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("EveryoneLabel")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setEnabled((owner_mask & (PERM_TRANSFER|PERM_COPY)) == (PERM_TRANSFER|PERM_COPY));
|
||||
getChild<LLUICtrl>("CheckEveryoneMove")->setEnabled(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled("GroupLabel", false);
|
||||
childSetEnabled("CheckGroupCopy", false);
|
||||
childSetEnabled("CheckGroupMod", false);
|
||||
childSetEnabled("CheckGroupMove", false);
|
||||
childSetEnabled("EveryoneLabel", false);
|
||||
childSetEnabled("CheckEveryoneCopy",false);
|
||||
childSetEnabled("CheckEveryoneMove",false);
|
||||
getChild<LLUICtrl>("GroupLabel")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckGroupCopy")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckGroupMod")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckGroupMove")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("EveryoneLabel")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setEnabled(FALSE);
|
||||
getChild<LLUICtrl>("CheckEveryoneMove")->setEnabled(FALSE);
|
||||
}
|
||||
childSetEnabled("CheckExport", supports_export && item->getType() != LLAssetType::AT_OBJECT && gAgentID == item->getCreatorUUID()
|
||||
getChild<LLUICtrl>("CheckExport")->setEnabled(supports_export && item->getType() != LLAssetType::AT_OBJECT && gAgentID == item->getCreatorUUID()
|
||||
&& can_set_export(base_mask, owner_mask, next_owner_mask));
|
||||
|
||||
// Set values.
|
||||
@@ -547,13 +521,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
BOOL is_group_modify = (group_mask & PERM_MODIFY) ? TRUE : FALSE;
|
||||
BOOL is_group_move = (group_mask & PERM_MOVE) ? TRUE : FALSE;
|
||||
|
||||
childSetValue("CheckGroupCopy", is_group_copy);
|
||||
childSetValue("CheckGroupMod", is_group_modify);
|
||||
childSetValue("CheckGroupMove", is_group_move);
|
||||
getChild<LLUICtrl>("CheckGroupCopy")->setValue(LLSD((BOOL)is_group_copy));
|
||||
getChild<LLUICtrl>("CheckGroupMod")->setValue(LLSD((BOOL)is_group_modify));
|
||||
getChild<LLUICtrl>("CheckGroupMove")->setValue(LLSD((BOOL)is_group_move));
|
||||
|
||||
childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY)));
|
||||
childSetValue("CheckEveryoneMove",LLSD((BOOL)(everyone_mask & PERM_MOVE)));
|
||||
childSetValue("CheckExport", supports_export && everyone_mask & PERM_EXPORT);
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setValue(LLSD((BOOL)(everyone_mask & PERM_COPY)));
|
||||
getChild<LLUICtrl>("CheckEveryoneMove")->setValue(LLSD((BOOL)(everyone_mask & PERM_MOVE)));
|
||||
getChild<LLUICtrl>("CheckExport")->setValue(LLSD((BOOL)(supports_export && everyone_mask & PERM_EXPORT)));
|
||||
|
||||
///////////////
|
||||
// SALE INFO //
|
||||
@@ -565,39 +539,40 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
if (is_obj_modify && can_agent_sell
|
||||
&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
|
||||
{
|
||||
childSetEnabled("SaleLabel",is_complete);
|
||||
childSetEnabled("CheckPurchase",is_complete);
|
||||
getChildView("SaleLabel")->setEnabled(is_complete);
|
||||
getChildView("CheckPurchase")->setEnabled(is_complete);
|
||||
|
||||
bool no_export = !(everyone_mask & PERM_EXPORT); // Next owner perms can't be changed if set
|
||||
childSetEnabled("NextOwnerLabel", no_export);
|
||||
childSetEnabled("CheckNextOwnerModify", no_export && base_mask & PERM_MODIFY);
|
||||
childSetEnabled("CheckNextOwnerCopy", no_export && base_mask & PERM_COPY);
|
||||
childSetEnabled("CheckNextOwnerTransfer", no_export && next_owner_mask & PERM_COPY);
|
||||
getChildView("NextOwnerLabel")->setEnabled(no_export);
|
||||
getChildView("CheckNextOwnerModify")->setEnabled(no_export && (base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
|
||||
getChildView("CheckNextOwnerCopy")->setEnabled(no_export && (base_mask & PERM_COPY) && !cannot_restrict_permissions);
|
||||
getChildView("CheckNextOwnerTransfer")->setEnabled(no_export && (next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
|
||||
|
||||
childSetEnabled("RadioSaleType",is_complete && is_for_sale);
|
||||
childSetEnabled("TextPrice",is_complete && is_for_sale);
|
||||
childSetEnabled("EditPrice",is_complete && is_for_sale);
|
||||
getChildView("RadioSaleType")->setEnabled(is_complete && is_for_sale);
|
||||
getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);
|
||||
getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale);
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled("SaleLabel",FALSE);
|
||||
childSetEnabled("CheckPurchase",FALSE);
|
||||
getChildView("SaleLabel")->setEnabled(FALSE);
|
||||
getChildView("CheckPurchase")->setEnabled(FALSE);
|
||||
|
||||
childSetEnabled("NextOwnerLabel",FALSE);
|
||||
childSetEnabled("CheckNextOwnerModify",FALSE);
|
||||
childSetEnabled("CheckNextOwnerCopy",FALSE);
|
||||
childSetEnabled("CheckNextOwnerTransfer",FALSE);
|
||||
getChildView("NextOwnerLabel")->setEnabled(FALSE);
|
||||
getChildView("CheckNextOwnerModify")->setEnabled(FALSE);
|
||||
getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);
|
||||
getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE);
|
||||
|
||||
childSetEnabled("RadioSaleType",FALSE);
|
||||
childSetEnabled("TextPrice",FALSE);
|
||||
childSetEnabled("EditPrice",FALSE);
|
||||
getChildView("RadioSaleType")->setEnabled(FALSE);
|
||||
getChildView("TextPrice")->setEnabled(FALSE);
|
||||
getChildView("Edit Cost")->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
// Set values.
|
||||
childSetValue("CheckPurchase", is_for_sale);
|
||||
childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
|
||||
childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));
|
||||
childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
|
||||
getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale);
|
||||
getChildView("Edit Cost")->setEnabled(is_for_sale);
|
||||
getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
|
||||
getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY)));
|
||||
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
|
||||
|
||||
LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
|
||||
if (is_for_sale)
|
||||
@@ -605,21 +580,18 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
||||
radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
|
||||
S32 numerical_price;
|
||||
numerical_price = sale_info.getSalePrice();
|
||||
childSetText("EditPrice",llformat("%d",numerical_price));
|
||||
getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price));
|
||||
}
|
||||
else
|
||||
{
|
||||
radioSaleType->setSelectedIndex(-1);
|
||||
childSetText("EditPrice",llformat("%d",0));
|
||||
getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0));
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onClickCreator(void* data)
|
||||
void LLFloaterProperties::onClickCreator()
|
||||
{
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
LLInventoryItem* item = self->findItem();
|
||||
LLInventoryItem* item = findItem();
|
||||
if(!item) return;
|
||||
if(!item->getCreatorUUID().isNull())
|
||||
{
|
||||
@@ -628,11 +600,9 @@ void LLFloaterProperties::onClickCreator(void* data)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onClickOwner(void* data)
|
||||
void LLFloaterProperties::onClickOwner()
|
||||
{
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
LLInventoryItem* item = self->findItem();
|
||||
LLInventoryItem* item = findItem();
|
||||
if(!item) return;
|
||||
if(item->getPermissions().isGroupOwned())
|
||||
{
|
||||
@@ -651,20 +621,15 @@ void LLFloaterProperties::onClickOwner(void* data)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onCommitName(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterProperties::onCommitName()
|
||||
{
|
||||
//llinfos << "LLFloaterProperties::onCommitName()" << llendl;
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->findItem();
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
|
||||
if(!item)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLLineEditor* labelItemName = self->getChild<LLLineEditor>("LabelItemName");
|
||||
LLLineEditor* labelItemName = getChild<LLLineEditor>("LabelItemName");
|
||||
|
||||
if(labelItemName&&
|
||||
(item->getName() != labelItemName->getText()) &&
|
||||
@@ -672,7 +637,7 @@ void LLFloaterProperties::onCommitName(LLUICtrl* ctrl, void* data)
|
||||
{
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->rename(labelItemName->getText());
|
||||
if(self->mObjectID.isNull())
|
||||
if(mObjectID.isNull())
|
||||
{
|
||||
new_item->updateServer(FALSE);
|
||||
gInventory.updateItem(new_item);
|
||||
@@ -680,7 +645,7 @@ void LLFloaterProperties::onCommitName(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLViewerObject* object = gObjectList.findObject(self->mObjectID);
|
||||
LLViewerObject* object = gObjectList.findObject(mObjectID);
|
||||
if(object)
|
||||
{
|
||||
object->updateInventory(
|
||||
@@ -692,16 +657,13 @@ void LLFloaterProperties::onCommitName(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onCommitDescription(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterProperties::onCommitDescription()
|
||||
{
|
||||
//llinfos << "LLFloaterProperties::onCommitDescription()" << llendl;
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->findItem();
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
|
||||
if(!item) return;
|
||||
|
||||
LLLineEditor* labelItemDesc = self->getChild<LLLineEditor>("LabelItemDesc");
|
||||
LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
|
||||
if(!labelItemDesc)
|
||||
{
|
||||
return;
|
||||
@@ -712,7 +674,7 @@ void LLFloaterProperties::onCommitDescription(LLUICtrl* ctrl, void* data)
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
|
||||
new_item->setDescription(labelItemDesc->getText());
|
||||
if(self->mObjectID.isNull())
|
||||
if(mObjectID.isNull())
|
||||
{
|
||||
new_item->updateServer(FALSE);
|
||||
gInventory.updateItem(new_item);
|
||||
@@ -720,7 +682,7 @@ void LLFloaterProperties::onCommitDescription(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLViewerObject* object = gObjectList.findObject(self->mObjectID);
|
||||
LLViewerObject* object = gObjectList.findObject(mObjectID);
|
||||
if(object)
|
||||
{
|
||||
object->updateInventory(
|
||||
@@ -732,74 +694,71 @@ void LLFloaterProperties::onCommitDescription(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterProperties::onCommitPermissions()
|
||||
{
|
||||
//llinfos << "LLFloaterProperties::onCommitPermissions()" << llendl;
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)self->findItem();
|
||||
LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
|
||||
if(!item) return;
|
||||
LLPermissions perm(item->getPermissions());
|
||||
|
||||
|
||||
LLCheckBoxCtrl* CheckGroupCopy = self->getChild<LLCheckBoxCtrl>("CheckGroupCopy");
|
||||
LLCheckBoxCtrl* CheckGroupCopy = getChild<LLCheckBoxCtrl>("CheckGroupCopy");
|
||||
if(CheckGroupCopy)
|
||||
{
|
||||
perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckGroupCopy->get(), PERM_COPY);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckGroupMod = self->getChild<LLCheckBoxCtrl>("CheckGroupMod");
|
||||
LLCheckBoxCtrl* CheckGroupMod = getChild<LLCheckBoxCtrl>("CheckGroupMod");
|
||||
if(CheckGroupMod)
|
||||
{
|
||||
perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckGroupMod->get(), PERM_MODIFY);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckGroupMove = self->getChild<LLCheckBoxCtrl>("CheckGroupMove");
|
||||
LLCheckBoxCtrl* CheckGroupMove = getChild<LLCheckBoxCtrl>("CheckGroupMove");
|
||||
if(CheckGroupMove)
|
||||
{
|
||||
perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckGroupMove->get(), PERM_MOVE);
|
||||
}
|
||||
|
||||
LLCheckBoxCtrl* CheckEveryoneMove = self->getChild<LLCheckBoxCtrl>("CheckEveryoneMove");
|
||||
LLCheckBoxCtrl* CheckEveryoneMove = getChild<LLCheckBoxCtrl>("CheckEveryoneMove");
|
||||
if(CheckEveryoneMove)
|
||||
{
|
||||
perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckEveryoneMove->get(), PERM_MOVE);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckEveryoneCopy = self->getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
|
||||
LLCheckBoxCtrl* CheckEveryoneCopy = getChild<LLCheckBoxCtrl>("CheckEveryoneCopy");
|
||||
if(CheckEveryoneCopy)
|
||||
{
|
||||
perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckEveryoneCopy->get(), PERM_COPY);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckExport = self->getChild<LLCheckBoxCtrl>("CheckExport");
|
||||
LLCheckBoxCtrl* CheckExport = getChild<LLCheckBoxCtrl>("CheckExport");
|
||||
if(CheckExport)
|
||||
{
|
||||
perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), CheckExport->get(), PERM_EXPORT);
|
||||
}
|
||||
|
||||
LLCheckBoxCtrl* CheckNextOwnerModify = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
|
||||
LLCheckBoxCtrl* CheckNextOwnerModify = getChild<LLCheckBoxCtrl>("CheckNextOwnerModify");
|
||||
if(CheckNextOwnerModify)
|
||||
{
|
||||
perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckNextOwnerModify->get(), PERM_MODIFY);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckNextOwnerCopy = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
|
||||
LLCheckBoxCtrl* CheckNextOwnerCopy = getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy");
|
||||
if(CheckNextOwnerCopy)
|
||||
{
|
||||
perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckNextOwnerCopy->get(), PERM_COPY);
|
||||
}
|
||||
LLCheckBoxCtrl* CheckNextOwnerTransfer = self->getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
|
||||
LLCheckBoxCtrl* CheckNextOwnerTransfer = getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer");
|
||||
if(CheckNextOwnerTransfer)
|
||||
{
|
||||
perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(),
|
||||
CheckNextOwnerTransfer->get(), PERM_TRANSFER);
|
||||
}
|
||||
if(perm != item->getPermissions()
|
||||
&& item->isComplete())
|
||||
&& item->isFinished())
|
||||
{
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->setPermissions(perm);
|
||||
@@ -828,7 +787,7 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
|
||||
flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP;
|
||||
}
|
||||
new_item->setFlags(flags);
|
||||
if(self->mObjectID.isNull())
|
||||
if(mObjectID.isNull())
|
||||
{
|
||||
new_item->updateServer(FALSE);
|
||||
gInventory.updateItem(new_item);
|
||||
@@ -836,7 +795,7 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLViewerObject* object = gObjectList.findObject(self->mObjectID);
|
||||
LLViewerObject* object = gObjectList.findObject(mObjectID);
|
||||
if(object)
|
||||
{
|
||||
object->updateInventory(
|
||||
@@ -849,26 +808,22 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data)
|
||||
else
|
||||
{
|
||||
// need to make sure we don't just follow the click
|
||||
self->refresh();
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onCommitSaleInfo(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterProperties::onCommitSaleInfo()
|
||||
{
|
||||
//llinfos << "LLFloaterProperties::onCommitSaleInfo()" << llendl;
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
self->updateSaleInfo();
|
||||
updateSaleInfo();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterProperties::onCommitSaleType(LLUICtrl* ctrl, void* data)
|
||||
void LLFloaterProperties::onCommitSaleType()
|
||||
{
|
||||
//llinfos << "LLFloaterProperties::onCommitSaleType()" << llendl;
|
||||
LLFloaterProperties* self = (LLFloaterProperties*)data;
|
||||
if(!self) return;
|
||||
self->updateSaleInfo();
|
||||
updateSaleInfo();
|
||||
}
|
||||
|
||||
void LLFloaterProperties::updateSaleInfo()
|
||||
@@ -878,10 +833,10 @@ void LLFloaterProperties::updateSaleInfo()
|
||||
LLSaleInfo sale_info(item->getSaleInfo());
|
||||
if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
|
||||
{
|
||||
childSetValue("CheckPurchase",LLSD((BOOL)FALSE));
|
||||
getChild<LLUICtrl>("CheckPurchase")->setValue(LLSD((BOOL)FALSE));
|
||||
}
|
||||
|
||||
if((BOOL)childGetValue("CheckPurchase"))
|
||||
if((BOOL)getChild<LLUICtrl>("CheckPurchase")->getValue())
|
||||
{
|
||||
// turn on sale info
|
||||
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
|
||||
@@ -913,13 +868,11 @@ void LLFloaterProperties::updateSaleInfo()
|
||||
sale_type = LLSaleInfo::FS_ORIGINAL;
|
||||
}
|
||||
|
||||
LLLineEditor* EditPrice = getChild<LLLineEditor>("EditPrice");
|
||||
|
||||
|
||||
S32 price = -1;
|
||||
if(EditPrice)
|
||||
{
|
||||
price = atoi(EditPrice->getText().c_str());
|
||||
}
|
||||
price = getChild<LLUICtrl>("Edit Cost")->getValue().asInteger();;
|
||||
|
||||
// Invalid data - turn off the sale
|
||||
if (price < 0)
|
||||
{
|
||||
@@ -935,7 +888,7 @@ void LLFloaterProperties::updateSaleInfo()
|
||||
sale_info.setSaleType(LLSaleInfo::FS_NOT);
|
||||
}
|
||||
if(sale_info != item->getSaleInfo()
|
||||
&& item->isComplete())
|
||||
&& item->isFinished())
|
||||
{
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
|
||||
@@ -994,16 +947,25 @@ LLInventoryItem* LLFloaterProperties::findItem() const
|
||||
return item;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLFloaterProperties::closeByID(const LLUUID& item_id, const LLUUID &object_id)
|
||||
{
|
||||
LLFloaterProperties* floaterp = find(item_id, object_id);
|
||||
|
||||
LLFloaterProperties* floaterp = getInstance(item_id ^ object_id);
|
||||
if (floaterp)
|
||||
{
|
||||
floaterp->close();
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLFloaterProperties::dirtyAll()
|
||||
{
|
||||
for(instance_iter it = beginInstances();it!=endInstances();++it)
|
||||
{
|
||||
it->dirty();
|
||||
}
|
||||
}
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// LLMultiProperties
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#include <map>
|
||||
#include "llmultifloater.h"
|
||||
#include "lliconctrl.h"
|
||||
#include "llinstancetracker.h"
|
||||
#include "lluuid.h"
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLFloaterProperties
|
||||
@@ -50,7 +52,7 @@ class LLTextBox;
|
||||
|
||||
class LLPropertiesObserver;
|
||||
|
||||
class LLFloaterProperties : public LLFloater
|
||||
class LLFloaterProperties : public LLFloater, public LLInstanceTracker<LLFloaterProperties, LLUUID>
|
||||
{
|
||||
public:
|
||||
static LLFloaterProperties* find(const LLUUID& item_id,
|
||||
@@ -62,21 +64,23 @@ public:
|
||||
static void closeByID(const LLUUID& item_id, const LLUUID& object_id);
|
||||
|
||||
LLFloaterProperties(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_id, const LLUUID& object_id);
|
||||
virtual ~LLFloaterProperties();
|
||||
/*virtual*/ ~LLFloaterProperties();
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen();
|
||||
|
||||
// do everything necessary
|
||||
void dirty() { mDirty = TRUE; }
|
||||
void refresh();
|
||||
|
||||
|
||||
protected:
|
||||
// ui callbacks
|
||||
static void onClickCreator(void* data);
|
||||
static void onClickOwner(void* data);
|
||||
static void onCommitName(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitDescription(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitPermissions(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitSaleInfo(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitSaleType(LLUICtrl* ctrl, void* data);
|
||||
void onClickCreator();
|
||||
void onClickOwner();
|
||||
void onCommitName();
|
||||
void onCommitDescription();
|
||||
void onCommitPermissions();
|
||||
void onCommitSaleInfo();
|
||||
void onCommitSaleType();
|
||||
void updateSaleInfo();
|
||||
|
||||
LLInventoryItem* findItem() const;
|
||||
@@ -95,10 +99,7 @@ protected:
|
||||
|
||||
BOOL mDirty;
|
||||
|
||||
typedef std::map<LLUUID, LLFloaterProperties*, lluuid_less> instance_map;
|
||||
static instance_map sInstances;
|
||||
static LLPropertiesObserver* sPropertiesObserver;
|
||||
static S32 sPropertiesObserverCount;
|
||||
LLPropertiesObserver* mPropertiesObserver;
|
||||
};
|
||||
|
||||
class LLMultiProperties : public LLMultiFloater
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
#include "llradiogroup.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llappviewer.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llfloateravatarpicker.h"
|
||||
|
||||
@@ -184,7 +184,7 @@ BOOL LLFloaterSellLandUI::postBuild()
|
||||
{
|
||||
childSetCommitCallback("sell_to", onChangeValue, this);
|
||||
childSetCommitCallback("price", onChangeValue, this);
|
||||
childSetPrevalidate("price", LLLineEditor::prevalidateNonNegativeS32);
|
||||
getChild<LLLineEditor>("price")->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
|
||||
childSetCommitCallback("sell_objects", onChangeValue, this);
|
||||
childSetAction("sell_to_select_agent", doSelectAgent, this);
|
||||
childSetAction("cancel_btn", doCancel, this);
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "llcolorswatch.h"
|
||||
//#include "llfirstuse.h"
|
||||
#include "llfloater.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llspinctrl.h"
|
||||
#include "lltexteditor.h"
|
||||
@@ -107,7 +108,7 @@ BOOL LLFloaterSettingsDebug::postBuild()
|
||||
getChild<LLUICtrl>("boolean_combo")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
|
||||
getChild<LLUICtrl>("copy_btn")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onCopyToClipboard, this));
|
||||
getChild<LLUICtrl>("default_btn")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onClickDefault, this));
|
||||
getChild<LLSearchEditor>("search_settings_input")->setSearchCallback(onUpdateFilter, this);
|
||||
getChild<LLFilterEditor>("search_settings_input")->setCommitCallback(boost::bind(&LLFloaterSettingsDebug::onUpdateFilter, this, _2));
|
||||
mComment = getChild<LLTextEditor>("comment_text");
|
||||
return TRUE;
|
||||
}
|
||||
@@ -532,9 +533,9 @@ void LLFloaterSettingsDebug::updateControl()
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterSettingsDebug::onUpdateFilter(const std::string& searchTerm, void*)
|
||||
void LLFloaterSettingsDebug::onUpdateFilter(const LLSD& value)
|
||||
{
|
||||
LLFloaterSettingsDebug::getInstance()->updateFilter(searchTerm);
|
||||
updateFilter(value.asString());
|
||||
}
|
||||
|
||||
void LLFloaterSettingsDebug::updateFilter(std::string searchTerm)
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
void updateControl();
|
||||
|
||||
// updates control filter to display in the controls list on keystroke
|
||||
static void onUpdateFilter(const std::string& searchTerm, void*);
|
||||
void onUpdateFilter(const LLSD& value);
|
||||
void updateFilter(std::string searchTerm);
|
||||
|
||||
void onSettingSelect();
|
||||
|
||||
@@ -63,15 +63,22 @@ void LLFloaterStats::buildStats()
|
||||
//
|
||||
// Viewer Basic
|
||||
//
|
||||
stat_viewp = new LLStatView("basic stat view", "Basic", "OpenDebugStatBasic", rect);
|
||||
LLStatView::Params params;
|
||||
params.name("basic stat view");
|
||||
params.show_label(true);
|
||||
params.label("Basic");
|
||||
params.setting("OpenDebugStatBasic");
|
||||
params.rect(rect);
|
||||
|
||||
stat_viewp = LLUICtrlFactory::create<LLStatView>(params);
|
||||
addStatView(stat_viewp);
|
||||
|
||||
stat_barp = stat_viewp->addStat("FPS", &(LLViewerStats::getInstance()->mFPSStat),
|
||||
"DebugStatModeFPS", TRUE, TRUE);
|
||||
stat_barp->setUnitLabel(" fps");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 45.f;
|
||||
stat_barp->mTickSpacing = 7.5f;
|
||||
stat_barp->mMaxBar = 60.f;
|
||||
stat_barp->mTickSpacing = 3.f;
|
||||
stat_barp->mLabelSpacing = 15.f;
|
||||
stat_barp->mPrecision = 1;
|
||||
|
||||
@@ -113,16 +120,25 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mDisplayMean = FALSE;
|
||||
}
|
||||
|
||||
stat_viewp = new LLStatView("advanced stat view", "Advanced", "OpenDebugStatAdvanced", rect);
|
||||
params.name("advanced stat view");
|
||||
params.show_label(true);
|
||||
params.label("Advanced");
|
||||
params.setting("OpenDebugStatAdvanced");
|
||||
params.rect(rect);
|
||||
stat_viewp = LLUICtrlFactory::create<LLStatView>(params);
|
||||
addStatView(stat_viewp);
|
||||
|
||||
|
||||
LLStatView *render_statviewp = stat_viewp->addStatView("render stat view", "Render", "OpenDebugStatRender", rect);
|
||||
params.name("render stat view");
|
||||
params.show_label(true);
|
||||
params.label("Render");
|
||||
params.setting("OpenDebugStatRender");
|
||||
params.rect(rect);
|
||||
LLStatView *render_statviewp = stat_viewp->addStatView(params);
|
||||
|
||||
stat_barp = render_statviewp->addStat("KTris Drawn", &(LLViewerStats::getInstance()->mTrianglesDrawnStat), "DebugStatModeKTrisDrawnFr");
|
||||
stat_barp->setUnitLabel("/fr");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 500.f;
|
||||
stat_barp->mMaxBar = 3000.f;
|
||||
stat_barp->mTickSpacing = 100.f;
|
||||
stat_barp->mLabelSpacing = 500.f;
|
||||
stat_barp->mPrecision = 1;
|
||||
@@ -131,9 +147,9 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp = render_statviewp->addStat("KTris Drawn", &(LLViewerStats::getInstance()->mTrianglesDrawnStat), "DebugStatModeKTrisDrawnSec");
|
||||
stat_barp->setUnitLabel("/sec");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 3000.f;
|
||||
stat_barp->mTickSpacing = 250.f;
|
||||
stat_barp->mLabelSpacing = 1000.f;
|
||||
stat_barp->mMaxBar = 100000.f;
|
||||
stat_barp->mTickSpacing = 4000.f;
|
||||
stat_barp->mLabelSpacing = 20000.f;
|
||||
stat_barp->mPrecision = 1;
|
||||
|
||||
stat_barp = render_statviewp->addStat("Total Objs", &(LLViewerStats::getInstance()->mNumObjectsStat), "DebugStatModeTotalObjs");
|
||||
@@ -144,7 +160,6 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = FALSE;
|
||||
|
||||
stat_barp = render_statviewp->addStat("New Objs", &(LLViewerStats::getInstance()->mNumNewObjectsStat), "DebugStatModeNewObjs");
|
||||
stat_barp->setLabel("New Objs");
|
||||
stat_barp->setUnitLabel("/sec");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 1000.f;
|
||||
@@ -153,7 +168,6 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = TRUE;
|
||||
|
||||
stat_barp = render_statviewp->addStat("Object Cache Hit Rate", &(LLViewerStats::getInstance()->mNumNewObjectsStat), std::string(), false, true);
|
||||
stat_barp->setLabel("Object Cache Hit Rate");
|
||||
stat_barp->setUnitLabel("%");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 100.f;
|
||||
@@ -162,10 +176,14 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = FALSE;
|
||||
|
||||
// Texture statistics
|
||||
LLStatView *texture_statviewp = render_statviewp->addStatView("texture stat view", "Texture", "OpenDebugStatTexture", rect);
|
||||
params.name("texture stat view");
|
||||
params.show_label(true);
|
||||
params.label("Texture");
|
||||
params.setting("OpenDebugStatTexture");
|
||||
params.rect(rect);
|
||||
LLStatView *texture_statviewp = render_statviewp->addStatView(params);
|
||||
|
||||
stat_barp = texture_statviewp->addStat("Cache Hit Rate", &(LLTextureFetch::sCacheHitRate), std::string(), false, true);
|
||||
stat_barp->setLabel("Cache Hit Rate");
|
||||
stat_barp->setUnitLabel("%");
|
||||
stat_barp->mMinBar = 0.f;
|
||||
stat_barp->mMaxBar = 100.f;
|
||||
@@ -233,10 +251,14 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mLabelSpacing = 200.f;
|
||||
stat_barp->mPrecision = 1;
|
||||
stat_barp->mPerSec = FALSE;
|
||||
|
||||
|
||||
// Network statistics
|
||||
LLStatView *net_statviewp = stat_viewp->addStatView("network stat view", "Network", "OpenDebugStatNet", rect);
|
||||
params.name("network stat view");
|
||||
params.show_label(true);
|
||||
params.label("Network");
|
||||
params.setting("OpenDebugStatNet");
|
||||
params.rect(rect);
|
||||
LLStatView *net_statviewp = stat_viewp->addStatView(params);
|
||||
|
||||
stat_barp = net_statviewp->addStat("UDP Packets In", &(LLViewerStats::getInstance()->mPacketsInStat), "DebugStatModePacketsIn");
|
||||
stat_barp->setUnitLabel("/sec");
|
||||
@@ -307,7 +329,12 @@ void LLFloaterStats::buildStats()
|
||||
|
||||
|
||||
// Simulator stats
|
||||
LLStatView *sim_statviewp = new LLStatView("sim stat view", "Simulator", "OpenDebugStatSim", rect);
|
||||
params.name("sim stat view");
|
||||
params.show_label(true);
|
||||
params.label("Simulator");
|
||||
params.setting("OpenDebugStatSim");
|
||||
params.rect(rect);
|
||||
LLStatView *sim_statviewp = LLUICtrlFactory::create<LLStatView>(params);
|
||||
addStatView(sim_statviewp);
|
||||
|
||||
stat_barp = sim_statviewp->addStat("Time Dilation", &(LLViewerStats::getInstance()->mSimTimeDilation), "DebugStatModeTimeDialation");
|
||||
@@ -336,7 +363,12 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = FALSE;
|
||||
stat_barp->mDisplayMean = FALSE;
|
||||
|
||||
LLStatView *phys_details_viewp = sim_statviewp->addStatView("phys detail view", "Physics Details", "OpenDebugStatPhysicsDetails", rect);
|
||||
params.name("phys detail view");
|
||||
params.show_label(true);
|
||||
params.label("Physics Details");
|
||||
params.setting("OpenDebugStatPhysicsDetails");
|
||||
params.rect(rect);
|
||||
LLStatView *phys_details_viewp = sim_statviewp->addStatView(params);
|
||||
|
||||
stat_barp = phys_details_viewp->addStat("Pinned Objects", &(LLViewerStats::getInstance()->mPhysicsPinnedTasks), "DebugStatModePinnedObjects");
|
||||
stat_barp->mPrecision = 0;
|
||||
@@ -439,7 +471,12 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = FALSE;
|
||||
stat_barp->mDisplayMean = FALSE;
|
||||
|
||||
LLStatView *pathfinding_viewp = sim_statviewp->addStatView("pathfinding view", "Pathfinding Details", std::string(), rect);
|
||||
params.name("pathfinding view");
|
||||
params.show_label(true);
|
||||
params.label("Pathfinding Details");
|
||||
params.rect(rect);
|
||||
LLStatView *pathfinding_viewp = sim_statviewp->addStatView(params);
|
||||
|
||||
stat_barp = pathfinding_viewp->addStat("AI Step Time", &(LLViewerStats::getInstance()->mSimSimAIStepMsec));
|
||||
stat_barp->setUnitLabel("ms");
|
||||
stat_barp->mPrecision = 3;
|
||||
@@ -516,7 +553,12 @@ void LLFloaterStats::buildStats()
|
||||
stat_barp->mPerSec = FALSE;
|
||||
stat_barp->mDisplayMean = FALSE;
|
||||
|
||||
LLStatView *sim_time_viewp = sim_statviewp->addStatView("sim perf view", "Time (ms)", "OpenDebugStatSimTime", rect);
|
||||
params.name("sim perf view");
|
||||
params.show_label(true);
|
||||
params.label("Time (ms)");
|
||||
params.setting("OpenDebugStatSimTime");
|
||||
params.rect(rect);
|
||||
LLStatView *sim_time_viewp = sim_statviewp->addStatView(params);
|
||||
|
||||
stat_barp = sim_time_viewp->addStat("Total Frame Time", &(LLViewerStats::getInstance()->mSimFrameMsec), "DebugStatModeSimFrameMsec");
|
||||
stat_barp->setUnitLabel("ms");
|
||||
@@ -600,7 +642,12 @@ void LLFloaterStats::buildStats()
|
||||
|
||||
|
||||
// 2nd level time blocks under 'Details' second
|
||||
LLStatView *detailed_time_viewp = sim_time_viewp->addStatView("sim perf view", "Time Details (ms)", "OpenDebugStatSimTimeDetails", rect);
|
||||
params.name("sim perf view");
|
||||
params.show_label(true);
|
||||
params.label("Time (ms)");
|
||||
params.setting("OpenDebugStatSimTimeDetails");
|
||||
params.rect(rect);
|
||||
LLStatView *detailed_time_viewp = sim_time_viewp->addStatView(params);
|
||||
{
|
||||
stat_barp = detailed_time_viewp->addStat(" Physics Step", &(LLViewerStats::getInstance()->mSimSimPhysicsStepMsec), "DebugStatModeSimSimPhysicsStepMsec");
|
||||
stat_barp->setUnitLabel("ms");
|
||||
@@ -670,12 +717,15 @@ LLFloaterStats::LLFloaterStats(const LLSD& val)
|
||||
|
||||
LLRect stats_rect(0, getRect().getHeight() - LLFLOATER_HEADER_SIZE,
|
||||
getRect().getWidth() - LLFLOATER_CLOSE_BOX_SIZE, 0);
|
||||
mStatsContainer = new LLContainerView("statistics_view", stats_rect);
|
||||
mStatsContainer->showLabel(FALSE);
|
||||
|
||||
LLContainerView::Params rvp;
|
||||
rvp.name("statistics_view");
|
||||
rvp.rect(stats_rect);
|
||||
mStatsContainer = LLUICtrlFactory::create<LLContainerView>(rvp);
|
||||
|
||||
LLRect scroll_rect(LL_SCROLL_BORDER, getRect().getHeight() - LLFLOATER_HEADER_SIZE - LL_SCROLL_BORDER,
|
||||
getRect().getWidth() - LL_SCROLL_BORDER, LL_SCROLL_BORDER);
|
||||
mScrollContainer = new LLScrollableContainerView(std::string("statistics_scroll"), scroll_rect, mStatsContainer);
|
||||
mScrollContainer = new LLScrollContainer(std::string("statistics_scroll"), scroll_rect, mStatsContainer);
|
||||
mScrollContainer->setFollowsAll();
|
||||
mScrollContainer->setReserveScrollCorner(TRUE);
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
class LLContainerView;
|
||||
class LLStatView;
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
|
||||
class LLFloaterStats
|
||||
: public LLFloater,
|
||||
@@ -58,7 +58,7 @@ class LLFloaterStats
|
||||
private:
|
||||
void buildStats();
|
||||
LLContainerView* mStatsContainer;
|
||||
LLScrollableContainerView* mScrollContainer;
|
||||
LLScrollContainer* mScrollContainer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -62,15 +62,15 @@ public:
|
||||
LLFloaterTestImpl();
|
||||
|
||||
private:
|
||||
static void onClickButton(void*);
|
||||
static void onClickText(void*);
|
||||
static void onClickTab(void*, bool);
|
||||
static void onCommitCheck(LLUICtrl*, void*);
|
||||
static void onCommitCombo(LLUICtrl*, void*);
|
||||
static void onCommitLine(LLUICtrl*, void*);
|
||||
static void onKeyLine(LLLineEditor*, void*);
|
||||
static void onFocusLostLine(LLFocusableElement*, void*);
|
||||
static void onChangeRadioGroup(LLUICtrl*, void*);
|
||||
static void onClickButton();
|
||||
static void onClickText();
|
||||
static void onClickTab();
|
||||
static void onCommitCheck();
|
||||
static void onCommitCombo(LLUICtrl* ctrl, const LLSD& value);
|
||||
static void onCommitLine();
|
||||
static void onKeyLine();
|
||||
static void onFocusLostLine();
|
||||
static void onChangeRadioGroup();
|
||||
|
||||
LLButton* mBtnSimple;
|
||||
LLButton* mBtnUnicode;
|
||||
@@ -83,7 +83,7 @@ private:
|
||||
LLRadioGroup* mRadioGroup;
|
||||
LLRadioCtrl* mRadio1;
|
||||
LLRadioCtrl* mRadio2;
|
||||
LLScrollableContainerView* mScroll;
|
||||
LLScrollContainer* mScroll;
|
||||
LLScrollListCtrl* mScrollList;
|
||||
LLTabContainer* mTab;
|
||||
LLTextEditor* mTextEditor;
|
||||
@@ -118,7 +118,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
btn = new LLButton(std::string("can't click"),
|
||||
LLRect(LEFT+150, y, LEFT+150+100, y-LINE),
|
||||
LLStringUtil::null,
|
||||
onClickButton, this);
|
||||
boost::bind(&LLFloaterTestImpl::onClickButton));
|
||||
btn->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP);
|
||||
btn->setFont(LLFontGL::getFontSansSerifSmall());
|
||||
addChild(btn);
|
||||
@@ -128,7 +128,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
50, // max_width
|
||||
LLFontGL::getFontSansSerifSmall(),
|
||||
TRUE); // mouse_opaque
|
||||
text->setClickedCallback(onClickText);
|
||||
text->setClickedCallback(boost::bind(&onClickText));
|
||||
text->setRect(LLRect(LEFT, y, RIGHT, y-LINE));
|
||||
addChild(text);
|
||||
|
||||
@@ -137,7 +137,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
btn = new LLButton(std::string("can click"),
|
||||
LLRect(LEFT+150, y, LEFT+150+100, y-LINE),
|
||||
LLStringUtil::null,
|
||||
onClickButton, this);
|
||||
boost::bind(&LLFloaterTestImpl::onClickButton));
|
||||
btn->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP);
|
||||
btn->setFont(LLFontGL::getFontSansSerifSmall());
|
||||
addChild(btn);
|
||||
@@ -160,7 +160,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
addChild(tab);
|
||||
mTab = tab;
|
||||
|
||||
tab->setCommitCallback(boost::bind(&LLFloaterTestImpl::onClickTab,_1,_2));
|
||||
tab->setCommitCallback(boost::bind(&LLFloaterTestImpl::onClickTab));
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// First tab container panel
|
||||
@@ -194,7 +194,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
std::string("tool_zoom.tga"),
|
||||
std::string("tool_zoom_active.tga"),
|
||||
LLStringUtil::null,
|
||||
onClickButton, this,
|
||||
boost::bind(&LLFloaterTestImpl::onClickButton),
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
btn->setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
panel->addChild(btn);
|
||||
@@ -205,7 +205,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
LLRect(LEFT, y, LEFT+150, y-LLCHECKBOXCTRL_HEIGHT),
|
||||
std::string("Simple Checkbox"),
|
||||
LLFontGL::getFontSansSerifSmall(),
|
||||
onCommitCheck, this,
|
||||
boost::bind(&LLFloaterTestImpl::onCommitCheck),
|
||||
TRUE, // initial_value
|
||||
FALSE, // radio_style
|
||||
std::string("UIFloaterTestBool")); // control_which
|
||||
@@ -217,7 +217,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
LLRect(LEFT, y, LEFT+150, y-LLCHECKBOXCTRL_HEIGHT),
|
||||
std::string("TODO: Unicode Checkbox"),
|
||||
LLFontGL::getFontSansSerifSmall(),
|
||||
onCommitCheck, this,
|
||||
boost::bind(&LLFloaterTestImpl::onCommitCheck),
|
||||
TRUE, // initial_value
|
||||
FALSE, // radio_style
|
||||
LLStringUtil::null); // control_which
|
||||
@@ -229,7 +229,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
combo = new LLComboBox(std::string("combo"),
|
||||
LLRect(LEFT, y, LEFT+100, y-LLCOMBOBOX_HEIGHT),
|
||||
std::string("Combobox Label"),
|
||||
onCommitCombo, this);
|
||||
boost::bind(&LLFloaterTestImpl::onCommitCombo, _1,_2) );
|
||||
combo->add(std::string("first item"));
|
||||
combo->add(std::string("second item"));
|
||||
combo->add(std::string("should go to the top"), ADD_TOP);
|
||||
@@ -253,10 +253,9 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
std::string("test some unicode text here"),
|
||||
LLFontGL::getFontSansSerif(),
|
||||
200, // max_length_bytes
|
||||
onCommitLine,
|
||||
onKeyLine,
|
||||
onFocusLostLine,
|
||||
this);
|
||||
boost::bind(&LLFloaterTestImpl::onCommitLine),
|
||||
boost::bind(&LLFloaterTestImpl::onKeyLine),
|
||||
boost::bind(&LLFloaterTestImpl::onFocusLostLine));
|
||||
line->setHandleEditKeysDirectly(true);
|
||||
panel->addChild(line);
|
||||
|
||||
@@ -266,7 +265,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
std::string("radio_group"),
|
||||
LLRect(LEFT, y, LEFT+200, y - 50),
|
||||
0, // initial_index
|
||||
onChangeRadioGroup, this,
|
||||
boost::bind(&LLFloaterTestImpl::onChangeRadioGroup),
|
||||
TRUE); // border
|
||||
panel->addChild(group);
|
||||
|
||||
@@ -292,7 +291,7 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
btn = new LLButton(std::string("Simple Button"),
|
||||
LLRect(LEFT, y, LEFT+100, y - 20),
|
||||
LLStringUtil::null,
|
||||
onClickButton, this);
|
||||
boost::bind(&LLFloaterTestImpl::onClickButton));
|
||||
btn->setFollows(FOLLOWS_TOP|FOLLOWS_LEFT);
|
||||
panel->addChild(btn);
|
||||
mBtnSimple = btn;
|
||||
@@ -305,58 +304,56 @@ LLFloaterTestImpl::LLFloaterTestImpl()
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onClickButton(void*)
|
||||
void LLFloaterTestImpl::onClickButton()
|
||||
{
|
||||
llinfos << "button clicked" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onClickText(void*)
|
||||
void LLFloaterTestImpl::onClickText()
|
||||
{
|
||||
llinfos << "text clicked" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onClickTab(void*, bool)
|
||||
void LLFloaterTestImpl::onClickTab()
|
||||
{
|
||||
llinfos << "click tab" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onCommitCheck(LLUICtrl*, void*)
|
||||
void LLFloaterTestImpl::onCommitCheck()
|
||||
{
|
||||
llinfos << "commit check" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onCommitCombo(LLUICtrl* ctrl, void*)
|
||||
void LLFloaterTestImpl::onCommitCombo(LLUICtrl* ctrl, const LLSD& value)
|
||||
{
|
||||
LLComboBox* combo = (LLComboBox*)ctrl;
|
||||
std::string name = combo->getSimple();
|
||||
LLSD value = combo->getValue();
|
||||
llinfos << "commit combo name " << name << " value " << value.asString() << llendl;
|
||||
llinfos << "commit combo name " << combo->getSimple() << " value " << value.asString() << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onCommitLine(LLUICtrl*, void*)
|
||||
void LLFloaterTestImpl::onCommitLine()
|
||||
{
|
||||
llinfos << "commit line editor" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onKeyLine(LLLineEditor*, void*)
|
||||
void LLFloaterTestImpl::onKeyLine()
|
||||
{
|
||||
llinfos << "keystroke line editor" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onFocusLostLine(LLFocusableElement*, void*)
|
||||
void LLFloaterTestImpl::onFocusLostLine()
|
||||
{
|
||||
llinfos << "focus lost line editor" << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTestImpl::onChangeRadioGroup(LLUICtrl*, void*)
|
||||
void LLFloaterTestImpl::onChangeRadioGroup()
|
||||
{
|
||||
llinfos << "change radio group" << llendl;
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llregionhandle.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llsearcheditor.h"
|
||||
#include "lltextbox.h"
|
||||
#include "lltracker.h"
|
||||
#include "lltrans.h"
|
||||
@@ -208,23 +209,22 @@ BOOL LLFloaterWorldMap::postBuild()
|
||||
|
||||
LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo");
|
||||
avatar_combo->selectFirstItem();
|
||||
avatar_combo->setPrearrangeCallback( onAvatarComboPrearrange );
|
||||
avatar_combo->setTextEntryCallback( onComboTextEntry );
|
||||
avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange,this) );
|
||||
avatar_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry,this) );
|
||||
mListFriendCombo = dynamic_cast<LLCtrlListInterface *>(avatar_combo);
|
||||
|
||||
LLLineEditor *location_editor = getChild<LLLineEditor>("location");
|
||||
LLSearchEditor *location_editor = getChild<LLSearchEditor>("location");
|
||||
location_editor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1));
|
||||
location_editor->setKeystrokeCallback( onSearchTextEntry );
|
||||
location_editor->setKeystrokeCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this));
|
||||
|
||||
LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("search_results");
|
||||
search_results->setDoubleClickCallback(boost::bind(&LLFloaterWorldMap::onClickTeleportBtn,this));
|
||||
mListSearchResults = dynamic_cast<LLCtrlListInterface *>(search_results);
|
||||
|
||||
LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo");
|
||||
|
||||
landmark_combo->selectFirstItem();
|
||||
landmark_combo->setPrearrangeCallback( onLandmarkComboPrearrange );
|
||||
landmark_combo->setTextEntryCallback( onComboTextEntry );
|
||||
landmark_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onLandmarkComboPrearrange, this) );
|
||||
landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
|
||||
mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo);
|
||||
|
||||
avatar_combo->setCommitCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboCommit,this) );
|
||||
@@ -1078,22 +1078,20 @@ void LLFloaterWorldMap::onGoHome()
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLFloaterWorldMap::onLandmarkComboPrearrange( LLUICtrl* ctrl, void* userdata )
|
||||
void LLFloaterWorldMap::onLandmarkComboPrearrange( )
|
||||
{
|
||||
LLFloaterWorldMap* self = gFloaterWorldMap;
|
||||
if( !self || self->mIsClosing )
|
||||
if( mIsClosing )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLCtrlListInterface *list = self->childGetListInterface("landmark combo");
|
||||
|
||||
LLCtrlListInterface *list = mListLandmarkCombo;
|
||||
if (!list) return;
|
||||
|
||||
|
||||
LLUUID current_choice = list->getCurrentID();
|
||||
|
||||
gFloaterWorldMap->buildLandmarkIDLists();
|
||||
|
||||
|
||||
buildLandmarkIDLists();
|
||||
|
||||
if( current_choice.isNull() || !list->setCurrentByID( current_choice ) )
|
||||
{
|
||||
LLTracker::stopTracking(false);
|
||||
@@ -1101,7 +1099,7 @@ void LLFloaterWorldMap::onLandmarkComboPrearrange( LLUICtrl* ctrl, void* userdat
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterWorldMap::onComboTextEntry( LLLineEditor* ctrl, void* userdata )
|
||||
void LLFloaterWorldMap::onComboTextEntry()
|
||||
{
|
||||
// Reset the tracking whenever we start typing into any of the search fields,
|
||||
// so that hitting <enter> does an auto-complete versus teleporting us to the
|
||||
@@ -1109,11 +1107,10 @@ void LLFloaterWorldMap::onComboTextEntry( LLLineEditor* ctrl, void* userdata )
|
||||
LLTracker::stopTracking(false);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterWorldMap::onSearchTextEntry( LLLineEditor* ctrl, void* userdata )
|
||||
void LLFloaterWorldMap::onSearchTextEntry( )
|
||||
{
|
||||
onComboTextEntry(ctrl, userdata);
|
||||
gFloaterWorldMap->updateSearchEnabled();
|
||||
onComboTextEntry();
|
||||
updateSearchEnabled();
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -1164,26 +1161,25 @@ void LLFloaterWorldMap::onLandmarkComboCommit()
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterWorldMap::onAvatarComboPrearrange( LLUICtrl* ctrl, void* userdata )
|
||||
void LLFloaterWorldMap::onAvatarComboPrearrange( )
|
||||
{
|
||||
LLFloaterWorldMap* self = gFloaterWorldMap;
|
||||
if( !self || self->mIsClosing )
|
||||
if( mIsClosing )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLCtrlListInterface *list = self->childGetListInterface("friend combo");
|
||||
|
||||
LLCtrlListInterface *list = mListFriendCombo;
|
||||
if (!list) return;
|
||||
|
||||
|
||||
LLUUID current_choice;
|
||||
|
||||
|
||||
if( LLAvatarTracker::instance().haveTrackingInfo() )
|
||||
{
|
||||
current_choice = LLAvatarTracker::instance().getAvatarID();
|
||||
}
|
||||
|
||||
self->buildAvatarIDList();
|
||||
|
||||
|
||||
buildAvatarIDList();
|
||||
|
||||
if( !list->setCurrentByID( current_choice ) || current_choice.isNull() )
|
||||
{
|
||||
LLTracker::stopTracking(false);
|
||||
|
||||
@@ -116,14 +116,14 @@ public:
|
||||
protected:
|
||||
void onGoHome();
|
||||
|
||||
static void onLandmarkComboPrearrange( LLUICtrl* ctrl, void* data );
|
||||
void onLandmarkComboPrearrange();
|
||||
void onLandmarkComboCommit();
|
||||
|
||||
static void onAvatarComboPrearrange( LLUICtrl* ctrl, void* data );
|
||||
void onAvatarComboPrearrange();
|
||||
void onAvatarComboCommit();
|
||||
|
||||
static void onComboTextEntry( LLLineEditor* ctrl, void* data );
|
||||
static void onSearchTextEntry( LLLineEditor* ctrl, void* data );
|
||||
void onComboTextEntry( );
|
||||
void onSearchTextEntry( );
|
||||
|
||||
void onClearBtn();
|
||||
void onClickTeleportBtn();
|
||||
|
||||
@@ -235,10 +235,9 @@ LLFolderView::LLFolderView( const std::string& name,
|
||||
|
||||
mRenamer = new LLLineEditor(std::string("ren"), getRect(), LLStringUtil::null, getLabelFontForStyle(LLFontGL::NORMAL),
|
||||
DB_INV_ITEM_NAME_STR_LEN,
|
||||
&LLFolderView::commitRename,
|
||||
boost::bind(&LLFolderView::commitRename,this),
|
||||
NULL,
|
||||
NULL,
|
||||
this,
|
||||
&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
//mRenamer->setWriteableBgColor(LLColor4::white);
|
||||
// Escape is handled by reverting the rename, not commiting it (default behavior)
|
||||
@@ -897,13 +896,9 @@ BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
|
||||
return can_drag;
|
||||
}
|
||||
|
||||
void LLFolderView::commitRename( LLUICtrl* renamer, void* user_data )
|
||||
void LLFolderView::commitRename( )
|
||||
{
|
||||
LLFolderView* root = reinterpret_cast<LLFolderView*>(user_data);
|
||||
if( root )
|
||||
{
|
||||
root->finishRenamingItem();
|
||||
}
|
||||
finishRenamingItem();
|
||||
}
|
||||
|
||||
void LLFolderView::draw()
|
||||
@@ -2067,7 +2062,7 @@ void LLFolderView::scrollToShowItem(LLFolderViewItem* item, const LLRect& constr
|
||||
}
|
||||
}
|
||||
|
||||
void LLFolderView::setScrollContainer(LLScrollableContainerView* parent)
|
||||
void LLFolderView::setScrollContainer(LLScrollContainer* parent)
|
||||
{
|
||||
mScrollContainer = parent;
|
||||
parent->setPassBackToChildren(false);
|
||||
|
||||
@@ -60,7 +60,7 @@ class LLInventoryModel;
|
||||
class LLPanel;
|
||||
class LLLineEditor;
|
||||
class LLMenuGL;
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
class LLUICtrl;
|
||||
class LLTextBox;
|
||||
|
||||
@@ -217,7 +217,7 @@ public:
|
||||
|
||||
void scrollToShowSelection();
|
||||
void scrollToShowItem(LLFolderViewItem* item, const LLRect& constraint_rect);
|
||||
void setScrollContainer(LLScrollableContainerView* parent);
|
||||
void setScrollContainer(LLScrollContainer* parent);
|
||||
LLRect getVisibleRect();
|
||||
|
||||
BOOL search(LLFolderViewItem* first_item, const std::string &search_string, BOOL backward);
|
||||
@@ -258,9 +258,9 @@ private:
|
||||
void updateRenamerPosition();
|
||||
|
||||
protected:
|
||||
LLScrollableContainerView* mScrollContainer; // NULL if this is not a child of a scroll container.
|
||||
LLScrollContainer* mScrollContainer; // NULL if this is not a child of a scroll container.
|
||||
|
||||
static void commitRename( LLUICtrl* renamer, void* user_data );
|
||||
void commitRename( );
|
||||
void onRenamerLost();
|
||||
|
||||
void finishRenamingItem( void );
|
||||
|
||||
@@ -93,7 +93,7 @@ LLFolderViewItem::LLFolderViewItem( const std::string& name, LLUIImagePtr icon,
|
||||
S32 creation_date,
|
||||
LLFolderView* root,
|
||||
LLFolderViewEventListener* listener ) :
|
||||
LLUICtrl( name, LLRect(0, 0, 0, 0), TRUE, NULL, NULL, FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_RIGHT),
|
||||
LLUICtrl( name, LLRect(0, 0, 0, 0), TRUE, NULL, FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_RIGHT),
|
||||
mLabelWidth(0),
|
||||
mLabelWidthDirty(false),
|
||||
mParentFolder( NULL ),
|
||||
|
||||
@@ -54,24 +54,11 @@
|
||||
|
||||
#include "hippogridmanager.h"
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
///----------------------------------------------------------------------------
|
||||
/// Local function declarations, constants, enums, and typedefs
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLGiveMoneyInfo
|
||||
//
|
||||
// A small class used to track callback information
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
struct LLGiveMoneyInfo
|
||||
{
|
||||
LLFloaterPay* mFloater;
|
||||
S32 mAmount;
|
||||
LLGiveMoneyInfo(LLFloaterPay* floater, S32 amount) :
|
||||
mFloater(floater), mAmount(amount){}
|
||||
};
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLFloaterPay
|
||||
///----------------------------------------------------------------------------
|
||||
@@ -88,13 +75,19 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
|
||||
LLFloater(name, std::string("FloaterPayRectB"), LLStringUtil::null, RESIZE_NO,
|
||||
DEFAULT_MIN_WIDTH, DEFAULT_MIN_HEIGHT, DRAG_ON_TOP,
|
||||
MINIMIZE_NO, CLOSE_YES),
|
||||
mCallbackData(),
|
||||
mCallback(callback),
|
||||
mObjectNameText(NULL),
|
||||
mTargetUUID(uuid),
|
||||
mTargetIsObject(target_is_object),
|
||||
mTargetIsGroup(FALSE)
|
||||
mTargetIsGroup(FALSE),
|
||||
mDefaultValue(0)
|
||||
{
|
||||
mQuickPayInfo[0] = PAY_BUTTON_DEFAULT_0;
|
||||
mQuickPayInfo[1] = PAY_BUTTON_DEFAULT_1;
|
||||
mQuickPayInfo[2] = PAY_BUTTON_DEFAULT_2;
|
||||
mQuickPayInfo[3] = PAY_BUTTON_DEFAULT_3;
|
||||
BOOST_STATIC_ASSERT(MAX_PAY_BUTTONS == 4);
|
||||
|
||||
if (target_is_object)
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_pay_object.xml");
|
||||
@@ -105,55 +98,14 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_pay.xml");
|
||||
}
|
||||
|
||||
|
||||
S32 i =0;
|
||||
for(U32 i = 0; i < MAX_PAY_BUTTONS; ++i)
|
||||
{
|
||||
mQuickPayButton[i] = getChild<LLButton>("fastpay " + boost::lexical_cast<std::string>(mQuickPayInfo[i]));
|
||||
mQuickPayButton[i]->setClickedCallback(boost::bind(&LLFloaterPay::onGive,this,boost::ref(mQuickPayInfo[i])));
|
||||
mQuickPayButton[i]->setVisible(FALSE);
|
||||
mQuickPayButton[i]->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
}
|
||||
|
||||
LLGiveMoneyInfo* info = new LLGiveMoneyInfo(this, PAY_BUTTON_DEFAULT_0);
|
||||
mCallbackData.push_back(info);
|
||||
|
||||
childSetAction("fastpay 1",&LLFloaterPay::onGive,info);
|
||||
childSetVisible("fastpay 1", FALSE);
|
||||
childSetLabelArg("fastpay 1", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
|
||||
|
||||
mQuickPayButton[i] = getChild<LLButton>("fastpay 1");
|
||||
mQuickPayInfo[i] = info;
|
||||
++i;
|
||||
|
||||
info = new LLGiveMoneyInfo(this, PAY_BUTTON_DEFAULT_1);
|
||||
mCallbackData.push_back(info);
|
||||
|
||||
childSetAction("fastpay 5",&LLFloaterPay::onGive,info);
|
||||
childSetVisible("fastpay 5", FALSE);
|
||||
childSetLabelArg("fastpay 5", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
|
||||
mQuickPayButton[i] = getChild<LLButton>("fastpay 5");
|
||||
mQuickPayInfo[i] = info;
|
||||
++i;
|
||||
|
||||
info = new LLGiveMoneyInfo(this, PAY_BUTTON_DEFAULT_2);
|
||||
mCallbackData.push_back(info);
|
||||
|
||||
childSetAction("fastpay 10",&LLFloaterPay::onGive,info);
|
||||
childSetVisible("fastpay 10", FALSE);
|
||||
childSetLabelArg("fastpay 10", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
|
||||
mQuickPayButton[i] = getChild<LLButton>("fastpay 10");
|
||||
mQuickPayInfo[i] = info;
|
||||
++i;
|
||||
|
||||
info = new LLGiveMoneyInfo(this, PAY_BUTTON_DEFAULT_3);
|
||||
mCallbackData.push_back(info);
|
||||
|
||||
childSetAction("fastpay 20",&LLFloaterPay::onGive,info);
|
||||
childSetVisible("fastpay 20", FALSE);
|
||||
childSetLabelArg("fastpay 20", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
|
||||
mQuickPayButton[i] = getChild<LLButton>("fastpay 20");
|
||||
mQuickPayInfo[i] = info;
|
||||
++i;
|
||||
|
||||
|
||||
childSetVisible("amount text", FALSE);
|
||||
|
||||
std::string last_amount;
|
||||
@@ -162,21 +114,20 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
|
||||
last_amount = llformat("%d", sLastAmount);
|
||||
}
|
||||
|
||||
childSetVisible("amount", FALSE);
|
||||
|
||||
childSetKeystrokeCallback("amount", &LLFloaterPay::onKeystroke, this);
|
||||
childSetText("amount", last_amount);
|
||||
childSetPrevalidate("amount", LLLineEditor::prevalidateNonNegativeS32);
|
||||
LLLineEditor* amount = getChild<LLLineEditor>("amount");
|
||||
amount->setVisible(false);
|
||||
amount->setKeystrokeCallback(boost::bind(&LLFloaterPay::onKeystroke, this, _1));
|
||||
amount->setText(last_amount);
|
||||
amount->setPrevalidate(&LLLineEditor::prevalidateNonNegativeS32);
|
||||
|
||||
info = new LLGiveMoneyInfo(this, 0);
|
||||
mCallbackData.push_back(info);
|
||||
|
||||
childSetAction("pay btn",&LLFloaterPay::onGive,info);
|
||||
setDefaultBtn("pay btn");
|
||||
childSetVisible("pay btn", FALSE);
|
||||
childSetEnabled("pay btn", (sLastAmount > 0));
|
||||
LLButton* pay_btn = getChild<LLButton>("pay btn");
|
||||
pay_btn->setClickedCallback(boost::bind(&LLFloaterPay::onGive,this,boost::ref(mDefaultValue)));
|
||||
setDefaultBtn(pay_btn);
|
||||
pay_btn->setVisible(false);
|
||||
pay_btn->setEnabled(sLastAmount > 0);
|
||||
|
||||
childSetAction("cancel btn",&LLFloaterPay::onCancel,this);
|
||||
getChild<LLButton>("cancel btn")->setClickedCallback(boost::bind(&LLFloaterPay::onCancel,this));
|
||||
|
||||
center();
|
||||
open(); /*Flawfinder: ignore*/
|
||||
@@ -185,7 +136,6 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
|
||||
// Destroys the object
|
||||
LLFloaterPay::~LLFloaterPay()
|
||||
{
|
||||
std::for_each(mCallbackData.begin(), mCallbackData.end(), DeletePointer());
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -250,7 +200,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
|
||||
self->mQuickPayButton[i]->setLabelSelected(button_str);
|
||||
self->mQuickPayButton[i]->setLabelUnselected(button_str);
|
||||
self->mQuickPayButton[i]->setVisible(TRUE);
|
||||
self->mQuickPayInfo[i]->mAmount = pay_button;
|
||||
self->mQuickPayInfo[i] = pay_button;
|
||||
self->childSetVisible("fastpay text",TRUE);
|
||||
|
||||
if ( pay_button > max_pay_amount )
|
||||
@@ -411,37 +361,22 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id,
|
||||
childSetTextArg("payee_name", "[NAME]", full_name);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterPay::onCancel(void* data)
|
||||
void LLFloaterPay::onCancel()
|
||||
{
|
||||
LLFloaterPay* self = reinterpret_cast<LLFloaterPay*>(data);
|
||||
if(self)
|
||||
{
|
||||
self->close();
|
||||
}
|
||||
close();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterPay::onKeystroke(LLLineEditor*, void* data)
|
||||
void LLFloaterPay::onKeystroke(LLLineEditor* caller)
|
||||
{
|
||||
LLFloaterPay* self = reinterpret_cast<LLFloaterPay*>(data);
|
||||
if(self)
|
||||
{
|
||||
// enable the Pay button when amount is non-empty and positive, disable otherwise
|
||||
std::string amtstr = self->childGetText("amount");
|
||||
self->childSetEnabled("pay btn", !amtstr.empty() && atoi(amtstr.c_str()) > 0);
|
||||
}
|
||||
// enable the Pay button when amount is non-empty and positive, disable otherwise
|
||||
std::string amtstr = caller->getValue().asString();
|
||||
childSetEnabled("pay btn", !amtstr.empty() && atoi(amtstr.c_str()) > 0);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterPay::onGive(void* data)
|
||||
void LLFloaterPay::onGive(const S32& amount)
|
||||
{
|
||||
LLGiveMoneyInfo* info = reinterpret_cast<LLGiveMoneyInfo*>(data);
|
||||
if(info && info->mFloater)
|
||||
{
|
||||
info->mFloater->give(info->mAmount);
|
||||
info->mFloater->close();
|
||||
}
|
||||
give(amount);
|
||||
close();
|
||||
}
|
||||
|
||||
void LLFloaterPay::give(S32 amount)
|
||||
|
||||
@@ -46,7 +46,6 @@ class LLLineEditor;
|
||||
class LLTextBox;
|
||||
class LLButton;
|
||||
class LLObjectSelection;
|
||||
struct LLGiveMoneyInfo;
|
||||
|
||||
typedef void (*money_callback)(const LLUUID&, LLViewerRegion*,S32,BOOL,S32,const std::string&);
|
||||
|
||||
@@ -72,16 +71,15 @@ public:
|
||||
BOOL is_group);
|
||||
|
||||
private:
|
||||
static void onCancel(void* data);
|
||||
static void onKeystroke(LLLineEditor* editor, void* data);
|
||||
static void onGive(void* data);
|
||||
void onCancel();
|
||||
void onKeystroke(LLLineEditor* caller);
|
||||
void onGive(const S32& amount);
|
||||
void give(S32 amount);
|
||||
static void processPayPriceReply(LLMessageSystem* msg, void **userdata);
|
||||
void onCacheOwnerName( const LLUUID& owner_id, const std::string& full_name, bool is_group);
|
||||
void finishPayUI(const LLUUID& target_id, BOOL is_group);
|
||||
|
||||
protected:
|
||||
std::vector<LLGiveMoneyInfo*> mCallbackData;
|
||||
money_callback mCallback;
|
||||
LLTextBox* mObjectNameText;
|
||||
LLUUID mTargetUUID;
|
||||
@@ -90,7 +88,8 @@ protected:
|
||||
BOOL mHaveName;
|
||||
|
||||
LLButton* mQuickPayButton[MAX_PAY_BUTTONS];
|
||||
LLGiveMoneyInfo* mQuickPayInfo[MAX_PAY_BUTTONS];
|
||||
S32 mQuickPayInfo[MAX_PAY_BUTTONS];
|
||||
S32 mDefaultValue;
|
||||
|
||||
LLSafeHandle<LLObjectSelection> mObjectSelection;
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
#pragma warning(pop) // Restore all warnings to the previous state
|
||||
#endif
|
||||
|
||||
const U32 MAX_CACHED_GROUPS = 10;
|
||||
const U32 MAX_CACHED_GROUPS = 20;
|
||||
|
||||
//
|
||||
// LLRoleActionSet
|
||||
@@ -236,8 +236,15 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) :
|
||||
mRoleDataComplete(FALSE),
|
||||
mRoleMemberDataComplete(FALSE),
|
||||
mGroupPropertiesDataComplete(FALSE),
|
||||
mPendingRoleMemberRequest(FALSE)
|
||||
mPendingRoleMemberRequest(FALSE),
|
||||
mAccessTime(0.0f)
|
||||
{
|
||||
mMemberVersion.generate();
|
||||
}
|
||||
|
||||
void LLGroupMgrGroupData::setAccessed()
|
||||
{
|
||||
mAccessTime = (F32)LLFrameTimer::getTotalSeconds();
|
||||
}
|
||||
|
||||
BOOL LLGroupMgrGroupData::getRoleData(const LLUUID& role_id, LLRoleData& role_data)
|
||||
@@ -419,6 +426,7 @@ void LLGroupMgrGroupData::removeMemberData()
|
||||
}
|
||||
mMembers.clear();
|
||||
mMemberDataComplete = FALSE;
|
||||
mMemberVersion.generate();
|
||||
}
|
||||
|
||||
void LLGroupMgrGroupData::removeRoleData()
|
||||
@@ -947,7 +955,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
|
||||
LLUUID request_id;
|
||||
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap || (group_datap->mMemberRequestID != request_id))
|
||||
{
|
||||
llwarns << "processGroupMembersReply: Received incorrect (stale?) group or request id" << llendl;
|
||||
@@ -1017,6 +1025,8 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
|
||||
}
|
||||
}
|
||||
|
||||
group_datap->mMemberVersion.generate();
|
||||
|
||||
if (group_datap->mMembers.size() == (U32)group_datap->mMemberCount)
|
||||
{
|
||||
group_datap->mMemberDataComplete = TRUE;
|
||||
@@ -1118,7 +1128,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
|
||||
LLUUID request_id;
|
||||
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap || (group_datap->mRoleDataRequestID != request_id))
|
||||
{
|
||||
llwarns << "processGroupPropertiesReply: Received incorrect (stale?) group or request id" << llendl;
|
||||
@@ -1207,7 +1217,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
|
||||
U32 total_pairs;
|
||||
msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs);
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap || (group_datap->mRoleMembersRequestID != request_id))
|
||||
{
|
||||
llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) group or request id" << llendl;
|
||||
@@ -1311,7 +1321,7 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
|
||||
LLUUID request_id;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id);
|
||||
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
|
||||
LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
|
||||
if (!group_datap || (group_datap->mTitlesRequestID != request_id))
|
||||
{
|
||||
llwarns << "processGroupTitlesReply: Received incorrect (stale?) group" << llendl;
|
||||
@@ -1443,7 +1453,7 @@ void LLGroupMgr::processCreateGroupReply(LLMessageSystem* msg, void ** data)
|
||||
|
||||
LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
||||
{
|
||||
LLGroupMgrGroupData* group_datap;
|
||||
LLGroupMgrGroupData* group_datap = NULL;
|
||||
|
||||
group_map_t::iterator existing_group = LLGroupMgr::getInstance()->mGroups.find(id);
|
||||
if (existing_group == LLGroupMgr::getInstance()->mGroups.end())
|
||||
@@ -1456,6 +1466,11 @@ LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
||||
group_datap = existing_group->second;
|
||||
}
|
||||
|
||||
if (group_datap)
|
||||
{
|
||||
group_datap->setAccessed();
|
||||
}
|
||||
|
||||
return group_datap;
|
||||
}
|
||||
|
||||
@@ -1496,25 +1511,41 @@ void LLGroupMgr::notifyObservers(LLGroupChange gc)
|
||||
|
||||
void LLGroupMgr::addGroup(LLGroupMgrGroupData* group_datap)
|
||||
{
|
||||
if (mGroups.size() > MAX_CACHED_GROUPS)
|
||||
while (mGroups.size() >= MAX_CACHED_GROUPS)
|
||||
{
|
||||
// get rid of groups that aren't observed
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end() && mGroups.size() > MAX_CACHED_GROUPS / 2; )
|
||||
// LRU: Remove the oldest un-observed group from cache until group size is small enough
|
||||
|
||||
F32 oldest_access = LLFrameTimer::getTotalSeconds();
|
||||
group_map_t::iterator oldest_gi = mGroups.end();
|
||||
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end(); ++gi )
|
||||
{
|
||||
observer_multimap_t::iterator oi = mObservers.find(gi->first);
|
||||
if (oi == mObservers.end())
|
||||
{
|
||||
// not observed
|
||||
LLGroupMgrGroupData* unobserved_groupp = gi->second;
|
||||
delete unobserved_groupp;
|
||||
mGroups.erase(gi++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++gi;
|
||||
if (gi->second
|
||||
&& (gi->second->getAccessTime() < oldest_access))
|
||||
{
|
||||
oldest_access = gi->second->getAccessTime();
|
||||
oldest_gi = gi;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (oldest_gi != mGroups.end())
|
||||
{
|
||||
delete oldest_gi->second;
|
||||
mGroups.erase(oldest_gi);
|
||||
}
|
||||
else
|
||||
{
|
||||
// All groups must be currently open, none to remove.
|
||||
// Just add the new group anyway, but get out of this loop as it
|
||||
// will never drop below max_cached_groups.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mGroups[group_datap->getID()] = group_datap;
|
||||
}
|
||||
|
||||
@@ -1886,6 +1917,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
||||
{
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
group_datap->mMemberVersion.generate();
|
||||
}
|
||||
|
||||
|
||||
@@ -2047,8 +2080,10 @@ void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)
|
||||
group_datap->mMembers[member_id] = data;
|
||||
}
|
||||
|
||||
group_datap->mMemberVersion.generate();
|
||||
|
||||
// Technically, we have this data, but to prevent completely overhauling
|
||||
// this entire system (it would be nice, but I don't have the time),
|
||||
// this entire system (it would be nice, but I don't have the time),
|
||||
// I'm going to be dumb and just call services I most likely don't need
|
||||
// with the thought being that the system might need it to be done.
|
||||
//
|
||||
|
||||
@@ -86,7 +86,7 @@ public:
|
||||
|
||||
BOOL isInRole(const LLUUID& role_id) { return (mRolesList.find(role_id) != mRolesList.end()); }
|
||||
|
||||
protected:
|
||||
private:
|
||||
LLUUID mID;
|
||||
S32 mContribution;
|
||||
U64 mAgentPowers;
|
||||
@@ -233,6 +233,10 @@ public:
|
||||
BOOL isRoleMemberDataComplete() { return mRoleMemberDataComplete; }
|
||||
BOOL isGroupPropertiesDataComplete() { return mGroupPropertiesDataComplete; }
|
||||
|
||||
F32 getAccessTime() const { return mAccessTime; }
|
||||
void setAccessed();
|
||||
|
||||
const LLUUID& getMemberVersion() const { return mMemberVersion; }
|
||||
public:
|
||||
typedef std::map<LLUUID,LLGroupMemberData*> member_list_t;
|
||||
typedef std::map<LLUUID,LLGroupRoleData*> role_list_t;
|
||||
@@ -279,6 +283,10 @@ private:
|
||||
BOOL mGroupPropertiesDataComplete;
|
||||
|
||||
BOOL mPendingRoleMemberRequest;
|
||||
F32 mAccessTime;
|
||||
|
||||
// Generate a new ID every time mMembers
|
||||
LLUUID mMemberVersion;
|
||||
};
|
||||
|
||||
struct LLRoleAction
|
||||
|
||||
@@ -250,8 +250,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
|
||||
std::string("notify_next.png"),
|
||||
std::string("notify_next.png"),
|
||||
LLStringUtil::null,
|
||||
onClickNext,
|
||||
this,
|
||||
boost::bind(&LLGroupNotifyBox::onClickNext, this),
|
||||
LLFontGL::getFontSansSerif());
|
||||
btn->setToolTip(LLTrans::getString("next"));
|
||||
btn->setScaleImage(TRUE);
|
||||
@@ -268,7 +267,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
|
||||
btn_width,
|
||||
BTN_HEIGHT);
|
||||
|
||||
btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, onClickOk, this);
|
||||
btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickOk,this));
|
||||
addChild(btn, -1);
|
||||
setDefaultBtn(btn);
|
||||
|
||||
@@ -280,7 +279,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
|
||||
wide_btn_width,
|
||||
BTN_HEIGHT);
|
||||
|
||||
btn = new LLButton(LLTrans::getString("GroupNotifyGroupNotices"), btn_rect, LLStringUtil::null, onClickGroupInfo, this);
|
||||
btn = new LLButton(LLTrans::getString("GroupNotifyGroupNotices"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickGroupInfo,this));
|
||||
btn->setToolTip(LLTrans::getString("GroupNotifyViewPastNotices"));
|
||||
addChild(btn, -1);
|
||||
|
||||
@@ -302,7 +301,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
|
||||
{
|
||||
btn_lbl = LLTrans::getString("GroupNotifySaveAttachment");
|
||||
}
|
||||
mSaveInventoryBtn = new LLButton(btn_lbl, btn_rect, LLStringUtil::null, onClickSaveInventory, this);
|
||||
mSaveInventoryBtn = new LLButton(btn_lbl, btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this));
|
||||
mSaveInventoryBtn->setVisible(mHasInventory);
|
||||
addChild(mSaveInventoryBtn);
|
||||
}
|
||||
@@ -453,41 +452,29 @@ LLRect LLGroupNotifyBox::getGroupNotifyRect()
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLGroupNotifyBox::onClickOk(void* data)
|
||||
void LLGroupNotifyBox::onClickOk()
|
||||
{
|
||||
LLGroupNotifyBox* self = (LLGroupNotifyBox*)data;
|
||||
if (self) self->close();
|
||||
close();
|
||||
}
|
||||
|
||||
void LLGroupNotifyBox::onClickGroupInfo(void* data)
|
||||
void LLGroupNotifyBox::onClickGroupInfo()
|
||||
{
|
||||
LLGroupNotifyBox* self = (LLGroupNotifyBox*)data;
|
||||
|
||||
if (self)
|
||||
{
|
||||
LLFloaterGroupInfo::showFromUUID(self->mGroupID, "notices_tab");
|
||||
}
|
||||
|
||||
LLFloaterGroupInfo::showFromUUID(mGroupID, "notices_tab");
|
||||
//Leave notice open until explicitly closed
|
||||
}
|
||||
|
||||
void LLGroupNotifyBox::onClickSaveInventory(void* data)
|
||||
void LLGroupNotifyBox::onClickSaveInventory()
|
||||
{
|
||||
LLGroupNotifyBox* self = (LLGroupNotifyBox*)data;
|
||||
mInventoryOffer->forceResponse(IOR_ACCEPT);
|
||||
|
||||
self->mInventoryOffer->forceResponse(IOR_ACCEPT);
|
||||
|
||||
self->mInventoryOffer = NULL;
|
||||
self->mHasInventory = FALSE;
|
||||
mInventoryOffer = NULL;
|
||||
mHasInventory = FALSE;
|
||||
|
||||
// Each item can only be received once, so disable the button.
|
||||
self->mSaveInventoryBtn->setEnabled(FALSE);
|
||||
mSaveInventoryBtn->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLGroupNotifyBox::onClickNext(void* data)
|
||||
void LLGroupNotifyBox::onClickNext()
|
||||
{
|
||||
LLGroupNotifyBox* self = (LLGroupNotifyBox*)data;
|
||||
self->moveToBack();
|
||||
moveToBack();
|
||||
}
|
||||
|
||||
@@ -89,12 +89,12 @@ protected:
|
||||
static LLRect getGroupNotifyRect();
|
||||
|
||||
// internal handler for button being clicked
|
||||
static void onClickOk(void* data);
|
||||
static void onClickGroupInfo(void* data);
|
||||
static void onClickSaveInventory(void* data);
|
||||
void onClickOk();
|
||||
void onClickGroupInfo();
|
||||
void onClickSaveInventory();
|
||||
|
||||
// for "next" button
|
||||
static void onClickNext(void* data);
|
||||
void onClickNext();
|
||||
|
||||
private:
|
||||
// Are we sliding onscreen?
|
||||
|
||||
@@ -1349,12 +1349,12 @@ BOOL LLFloaterIMPanel::postBuild()
|
||||
mInputEditor = getChild<LLLineEditor>("chat_editor");
|
||||
mInputEditor->setFocusReceivedCallback( boost::bind(&LLFloaterIMPanel::onInputEditorFocusReceived, this) );
|
||||
mFocusLostSignal = mInputEditor->setFocusLostCallback( boost::bind(&LLFloaterIMPanel::onInputEditorFocusLost, this) );
|
||||
mInputEditor->setKeystrokeCallback( onInputEditorKeystroke );
|
||||
mInputEditor->setCommitCallback( onCommitChat );
|
||||
mInputEditor->setCallbackUserData(this);
|
||||
mInputEditor->setKeystrokeCallback( boost::bind(&LLFloaterIMPanel::onInputEditorKeystroke, this, _1) );
|
||||
mInputEditor->setCommitCallback( boost::bind(&LLFloaterIMPanel::onSendMsg,this) );
|
||||
mInputEditor->setCommitOnFocusLost( FALSE );
|
||||
mInputEditor->setRevertOnEsc( FALSE );
|
||||
mInputEditor->setReplaceNewlinesWithSpaces( FALSE );
|
||||
mInputEditor->setPassDelete( TRUE );
|
||||
|
||||
if (LLButton* btn = findChild<LLButton>("profile_callee_btn"))
|
||||
{
|
||||
@@ -1371,7 +1371,7 @@ BOOL LLFloaterIMPanel::postBuild()
|
||||
|
||||
childSetAction("start_call_btn", onClickStartCall, this);
|
||||
childSetAction("end_call_btn", onClickEndCall, this);
|
||||
childSetAction("send_btn", onClickSend, this);
|
||||
getChild<LLButton>("send_btn")->setCommitCallback(boost::bind(&LLFloaterIMPanel::onSendMsg,this));
|
||||
if (LLButton* btn = findChild<LLButton>("toggle_active_speakers_btn"))
|
||||
btn->setCommitCallback(boost::bind(&LLFloaterIMPanel::onClickToggleActiveSpeakers, this, _2));
|
||||
|
||||
@@ -1746,7 +1746,7 @@ BOOL LLFloaterIMPanel::handleKeyHere( KEY key, MASK mask )
|
||||
BOOL handled = FALSE;
|
||||
if( KEY_RETURN == key && mask == MASK_NONE)
|
||||
{
|
||||
sendMsg();
|
||||
onSendMsg();
|
||||
handled = TRUE;
|
||||
|
||||
// Close talk panels on hitting return
|
||||
@@ -1951,25 +1951,11 @@ void LLFloaterIMPanel::onClickEndCall(void* userdata)
|
||||
self->getVoiceChannel()->deactivate();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterIMPanel::onClickSend(void* userdata)
|
||||
{
|
||||
LLFloaterIMPanel* self = (LLFloaterIMPanel*)userdata;
|
||||
self->sendMsg();
|
||||
}
|
||||
|
||||
void LLFloaterIMPanel::onClickToggleActiveSpeakers(const LLSD& value)
|
||||
{
|
||||
childSetVisible("active_speakers_panel", !value);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterIMPanel::onCommitChat(LLUICtrl* caller, void* userdata)
|
||||
{
|
||||
LLFloaterIMPanel* self= (LLFloaterIMPanel*) userdata;
|
||||
self->sendMsg();
|
||||
}
|
||||
|
||||
void LLFloaterIMPanel::onInputEditorFocusReceived()
|
||||
{
|
||||
mHistoryEditor->setCursorAndScrollToEnd();
|
||||
@@ -1980,19 +1966,17 @@ void LLFloaterIMPanel::onInputEditorFocusLost()
|
||||
setTyping(FALSE);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterIMPanel::onInputEditorKeystroke(LLLineEditor* caller, void* userdata)
|
||||
void LLFloaterIMPanel::onInputEditorKeystroke(LLLineEditor* caller)
|
||||
{
|
||||
LLFloaterIMPanel* self = (LLFloaterIMPanel*)userdata;
|
||||
std::string text = self->mInputEditor->getText();
|
||||
std::string text = caller->getText();
|
||||
if (!text.empty())
|
||||
{
|
||||
self->setTyping(TRUE);
|
||||
setTyping(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deleting all text counts as stopping typing.
|
||||
self->setTyping(FALSE);
|
||||
setTyping(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2099,7 +2083,7 @@ void deliver_message(const std::string& utf8_text,
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterIMPanel::sendMsg()
|
||||
void LLFloaterIMPanel::onSendMsg()
|
||||
{
|
||||
if (!gAgent.isGodlike()
|
||||
&& (mDialog == IM_NOTHING_SPECIAL)
|
||||
|
||||
@@ -236,8 +236,7 @@ public:
|
||||
void onFocusReceived();
|
||||
void onInputEditorFocusReceived();
|
||||
void onInputEditorFocusLost();
|
||||
static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
|
||||
static void onCommitChat(LLUICtrl* caller, void* userdata);
|
||||
void onInputEditorKeystroke(LLLineEditor* caller);
|
||||
static void onTabClick( void* userdata );
|
||||
|
||||
void onClickProfile();
|
||||
@@ -248,7 +247,6 @@ public:
|
||||
static void onClickClose( void* userdata );
|
||||
static void onClickStartCall( void* userdata );
|
||||
static void onClickEndCall( void* userdata );
|
||||
static void onClickSend( void* userdata );
|
||||
void onClickToggleActiveSpeakers(const LLSD& value);
|
||||
static void* createSpeakersPanel(void* data);
|
||||
|
||||
@@ -297,7 +295,7 @@ private:
|
||||
void init(const std::string& session_label);
|
||||
|
||||
// Called by UI methods.
|
||||
void sendMsg();
|
||||
void onSendMsg();
|
||||
|
||||
// for adding agents via the UI. Return TRUE if possible, do it if
|
||||
BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
|
||||
|
||||
@@ -1062,13 +1062,14 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
|
||||
return;
|
||||
}
|
||||
|
||||
if((object_id == cat_id) || !is_in_map(mCategoryMap, cat_id))
|
||||
cat_map_t::iterator it;
|
||||
if((object_id == cat_id) || (it = mCategoryMap.find(cat_id))==mCategoryMap.end())
|
||||
{
|
||||
llwarns << "Could not move inventory object " << object_id << " to "
|
||||
<< cat_id << llendl;
|
||||
return;
|
||||
}
|
||||
LLViewerInventoryCategory* cat = getCategory(object_id);
|
||||
LLViewerInventoryCategory* cat = it->second;
|
||||
if(cat && (cat->getParentUUID() != cat_id))
|
||||
{
|
||||
cat_array_t* cat_array;
|
||||
|
||||
@@ -201,7 +201,7 @@ BOOL LLInventoryPanel::postBuild()
|
||||
// scroller
|
||||
LLRect scroller_view_rect = getRect();
|
||||
scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
|
||||
mScroller = new LLScrollableContainerView(std::string("Inventory Scroller"),
|
||||
mScroller = new LLScrollContainer(std::string("Inventory Scroller"),
|
||||
scroller_view_rect,
|
||||
mFolderRoot);
|
||||
mScroller->setFollowsAll();
|
||||
|
||||
@@ -57,11 +57,10 @@ class LLInventoryFVBridgeBuilder;
|
||||
class LLMenuBarGL;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLSpinCtrl;
|
||||
class LLScrollableContainerView;
|
||||
class LLScrollContainer;
|
||||
class LLTextBox;
|
||||
class LLIconCtrl;
|
||||
class LLSaveFolderState;
|
||||
class LLSearchEditor;
|
||||
class LLInvPanelComplObserver;
|
||||
|
||||
class LLInventoryPanel : public LLPanel
|
||||
@@ -127,7 +126,7 @@ public:
|
||||
// This method is called when something has changed about the inventory.
|
||||
void modelChanged(U32 mask);
|
||||
LLFolderView* getRootFolder();
|
||||
LLScrollableContainerView* getScrollableContainer() { return mScroller; }
|
||||
LLScrollContainer* getScrollableContainer() { return mScroller; }
|
||||
|
||||
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
|
||||
|
||||
@@ -165,7 +164,7 @@ protected:
|
||||
|
||||
BOOL mAllowMultiSelect;
|
||||
LLFolderView* mFolderRoot;
|
||||
LLScrollableContainerView* mScroller;
|
||||
LLScrollContainer* mScroller;
|
||||
|
||||
/**
|
||||
* Pointer to LLInventoryFVBridgeBuilder.
|
||||
|
||||
@@ -2012,36 +2012,34 @@ LLVector3 LLManipScale::nearestAxis( const LLVector3& v ) const
|
||||
// Note: yes, this is a slow but easy implementation
|
||||
// assumes v is normalized
|
||||
|
||||
F32 coords[][3] =
|
||||
static LLVector3 coords[] =
|
||||
{
|
||||
{ 1.f, 0.f, 0.f },
|
||||
{ 0.f, 1.f, 0.f },
|
||||
{ 0.f, 0.f, 1.f },
|
||||
{-1.f, 0.f, 0.f },
|
||||
{ 0.f,-1.f, 0.f },
|
||||
{ 0.f, 0.f,-1.f }
|
||||
LLVector3( 1.f, 0.f, 0.f ),
|
||||
LLVector3( 0.f, 1.f, 0.f ),
|
||||
LLVector3( 0.f, 0.f, 1.f ),
|
||||
LLVector3(-1.f, 0.f, 0.f ),
|
||||
LLVector3( 0.f,-1.f, 0.f ),
|
||||
LLVector3( 0.f, 0.f,-1.f )
|
||||
};
|
||||
|
||||
F32 cosine[6];
|
||||
cosine[0] = v * LLVector3( coords[0] );
|
||||
cosine[1] = v * LLVector3( coords[1] );
|
||||
cosine[2] = v * LLVector3( coords[2] );
|
||||
cosine[0] = v * coords[0];
|
||||
cosine[1] = v * coords[1];
|
||||
cosine[2] = v * coords[2];
|
||||
cosine[3] = -cosine[0];
|
||||
cosine[4] = -cosine[1];
|
||||
cosine[5] = -cosine[2];
|
||||
|
||||
F32 greatest_cos = cosine[0];
|
||||
S32 greatest_index = 0;
|
||||
for( S32 i=1; i<6; i++ )
|
||||
{
|
||||
if( greatest_cos < cosine[i] )
|
||||
if( cosine[greatest_index] < cosine[i] )
|
||||
{
|
||||
greatest_cos = cosine[i];
|
||||
greatest_index = i;
|
||||
}
|
||||
}
|
||||
|
||||
return LLVector3( coords[greatest_index] );
|
||||
return coords[greatest_index];
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
||||
@@ -63,7 +63,7 @@ const S32 MAX_TEXTURE_DIMENSION = 2048;
|
||||
static LLRegisterWidget<LLMediaCtrl> r("web_browser");
|
||||
|
||||
LLMediaCtrl::LLMediaCtrl( const std::string& name, const LLRect& rect ) :
|
||||
LLUICtrl( name, rect, FALSE, NULL, NULL),
|
||||
LLUICtrl( name, rect, FALSE),
|
||||
LLInstanceTracker<LLMediaCtrl, LLUUID>(LLUUID::generateNewID()),
|
||||
mTextureDepthBytes( 4 ),
|
||||
mWebBrowserImage( 0 ),
|
||||
@@ -718,17 +718,20 @@ void LLMediaCtrl::draw()
|
||||
}
|
||||
if(draw_media)
|
||||
{
|
||||
gGL.pushMatrix();
|
||||
gGL.pushUIMatrix();
|
||||
{
|
||||
if (mIgnoreUIScale)
|
||||
/*if (mIgnoreUIScale)
|
||||
{
|
||||
gGL.pushUIMatrix();
|
||||
gGL.loadUIIdentity();
|
||||
gGL.pushMatrix();
|
||||
gGL.loadIdentity();
|
||||
// font system stores true screen origin, need to scale this by UI scale factor
|
||||
// to get render origin for this view (with unit scale)
|
||||
gGL.translatef(floorf(LLFontGL::sCurOrigin.mX * LLUI::getScaleFactor().mV[VX]),
|
||||
floorf(LLFontGL::sCurOrigin.mY * LLUI::getScaleFactor().mV[VY]),
|
||||
LLFontGL::sCurDepth);
|
||||
}
|
||||
}*/
|
||||
|
||||
// scale texture to fit the space using texture coords
|
||||
gGL.getTexUnit(0)->bind(media_texture);
|
||||
@@ -776,13 +779,13 @@ void LLMediaCtrl::draw()
|
||||
x_offset = (r.getWidth() - width) / 2;
|
||||
y_offset = (r.getHeight() - height) / 2;
|
||||
|
||||
if (mIgnoreUIScale)
|
||||
/*if (mIgnoreUIScale)
|
||||
{
|
||||
x_offset = llround((F32)x_offset * LLUI::getScaleFactor().mV[VX]);
|
||||
y_offset = llround((F32)y_offset * LLUI::getScaleFactor().mV[VY]);
|
||||
width = llround((F32)width * LLUI::getScaleFactor().mV[VX]);
|
||||
height = llround((F32)height * LLUI::getScaleFactor().mV[VY]);
|
||||
}
|
||||
}*/
|
||||
|
||||
// draw the browser
|
||||
gGL.setSceneBlendType(LLRender::BT_REPLACE);
|
||||
@@ -819,8 +822,13 @@ void LLMediaCtrl::draw()
|
||||
}
|
||||
gGL.end();
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
/*if (mIgnoreUIScale)
|
||||
{
|
||||
gGL.popUIMatrix();
|
||||
gGL.popMatrix();
|
||||
}*/
|
||||
}
|
||||
gGL.popMatrix();
|
||||
gGL.popUIMatrix();
|
||||
}
|
||||
// highlight if keyboard focus here. (TODO: this needs some work)
|
||||
if ( mBorder && mBorder->getVisible() )
|
||||
@@ -1370,9 +1378,9 @@ LLView* LLMediaCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
|
||||
web_browser->setCaretColor( colorU.mV[0], colorU.mV[1], colorU.mV[2] );
|
||||
}
|
||||
|
||||
BOOL ignore_ui_scale = web_browser->getIgnoreUIScale();
|
||||
node->getAttributeBOOL("ignore_ui_scale", ignore_ui_scale);
|
||||
web_browser->setIgnoreUIScale((bool)ignore_ui_scale);
|
||||
//BOOL ignore_ui_scale = web_browser->getIgnoreUIScale();
|
||||
//node->getAttributeBOOL("ignore_ui_scale", ignore_ui_scale);
|
||||
//web_browser->setIgnoreUIScale((bool)ignore_ui_scale);
|
||||
|
||||
web_browser->initFromXML(node, parent);
|
||||
|
||||
|
||||
@@ -52,21 +52,11 @@ LLNameEditor::LLNameEditor(const std::string& name, const LLRect& rect,
|
||||
const LLUUID& name_id,
|
||||
BOOL is_group,
|
||||
const LLFontGL* glfont,
|
||||
S32 max_text_length,
|
||||
void (*commit_callback)(LLUICtrl* caller, void* user_data),
|
||||
void (*keystroke_callback)(LLLineEditor* caller, void* user_data),
|
||||
void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data),
|
||||
void* userdata,
|
||||
LLLinePrevalidateFunc prevalidate_func)
|
||||
S32 max_text_length)
|
||||
: LLLineEditor(name, rect,
|
||||
std::string("(retrieving)"),
|
||||
glfont,
|
||||
max_text_length,
|
||||
commit_callback,
|
||||
keystroke_callback,
|
||||
focus_lost_callback,
|
||||
userdata,
|
||||
prevalidate_func),
|
||||
max_text_length),
|
||||
mNameID(name_id)
|
||||
{
|
||||
LLNameEditor::sInstances.insert(this);
|
||||
@@ -153,14 +143,11 @@ LLView* LLNameEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
|
||||
|
||||
LLFontGL* font = LLView::selectFont(node);
|
||||
|
||||
LLUICtrlCallback commit_callback = NULL;
|
||||
|
||||
LLNameEditor* line_editor = new LLNameEditor(name,
|
||||
rect,
|
||||
LLUUID::null, FALSE,
|
||||
font,
|
||||
max_text_length,
|
||||
commit_callback);
|
||||
max_text_length);
|
||||
|
||||
std::string label;
|
||||
if(node->getAttributeString("label", label))
|
||||
|
||||
@@ -50,12 +50,7 @@ public:
|
||||
const LLUUID& name_id = LLUUID::null,
|
||||
BOOL is_group = FALSE,
|
||||
const LLFontGL* glfont = NULL,
|
||||
S32 max_text_length = 254,
|
||||
void (*commit_callback)(LLUICtrl* caller, void* user_data) = NULL,
|
||||
void (*keystroke_callback)(LLLineEditor* caller, void* user_data) = NULL,
|
||||
void (*focus_lost_callback)(LLFocusableElement* caller, void* user_data) = NULL,
|
||||
void* userdata = NULL,
|
||||
LLLinePrevalidateFunc prevalidate_func = NULL);
|
||||
S32 max_text_length = 254);
|
||||
// By default, follows top and left and is mouse-opaque.
|
||||
// If no text, text = name.
|
||||
// If no font, uses default system font.
|
||||
|
||||
@@ -50,14 +50,12 @@ std::set<LLNameListCtrl*> LLNameListCtrl::sInstances;
|
||||
|
||||
LLNameListCtrl::LLNameListCtrl(const std::string& name,
|
||||
const LLRect& rect,
|
||||
LLUICtrlCallback cb,
|
||||
void* userdata,
|
||||
BOOL allow_multiple_selection,
|
||||
BOOL draw_border,
|
||||
bool draw_heading,
|
||||
S32 name_column_index,
|
||||
const std::string& tooltip)
|
||||
: LLScrollListCtrl(name, rect, cb, userdata, allow_multiple_selection,
|
||||
: LLScrollListCtrl(name, rect, NULL, allow_multiple_selection,
|
||||
draw_border,draw_heading),
|
||||
mNameColumnIndex(name_column_index),
|
||||
mAllowCallingCardDrop(FALSE),
|
||||
@@ -339,12 +337,8 @@ LLView* LLNameListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFacto
|
||||
S32 name_column_index = 0;
|
||||
node->getAttributeS32("name_column_index", name_column_index);
|
||||
|
||||
LLUICtrlCallback callback = NULL;
|
||||
|
||||
LLNameListCtrl* name_list = new LLNameListCtrl(name,
|
||||
rect,
|
||||
callback,
|
||||
NULL,
|
||||
multi_select,
|
||||
draw_border,
|
||||
draw_heading,
|
||||
|
||||
@@ -52,8 +52,6 @@ public:
|
||||
|
||||
LLNameListCtrl(const std::string& name,
|
||||
const LLRect& rect,
|
||||
LLUICtrlCallback callback,
|
||||
void* userdata,
|
||||
BOOL allow_multiple_selection,
|
||||
BOOL draw_border = TRUE,
|
||||
bool draw_heading = false,
|
||||
|
||||
@@ -208,6 +208,19 @@ void LLNetMap::draw()
|
||||
|
||||
F32 rotation = 0;
|
||||
|
||||
|
||||
gGL.pushMatrix();
|
||||
gGL.pushUIMatrix();
|
||||
|
||||
LLVector3 offset = gGL.getUITranslation();
|
||||
LLVector3 scale = gGL.getUIScale();
|
||||
|
||||
gGL.loadIdentity();
|
||||
gGL.loadUIIdentity();
|
||||
|
||||
gGL.scalef(scale.mV[0], scale.mV[1], scale.mV[2]);
|
||||
gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]);
|
||||
|
||||
// Prepare a scissor region
|
||||
{
|
||||
LLGLEnable scissor(GL_SCISSOR_TEST);
|
||||
@@ -512,6 +525,9 @@ void LLNetMap::draw()
|
||||
}
|
||||
}
|
||||
|
||||
gGL.popMatrix();
|
||||
gGL.popUIMatrix();
|
||||
|
||||
// Rotation of 0 means that North is up
|
||||
setDirectionPos( getChild<LLTextBox>("e_label"), rotation);
|
||||
setDirectionPos( getChild<LLTextBox>("n_label"), rotation + F_PI_BY_TWO);
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#include "lluiconstants.h"
|
||||
#include "llui.h"
|
||||
#include "llxmlnode.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerdisplay.h"
|
||||
#include "llviewertexturelist.h"
|
||||
@@ -323,8 +322,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
|
||||
std::string("notify_next.png"),
|
||||
std::string("notify_next.png"),
|
||||
LLStringUtil::null,
|
||||
onClickNext,
|
||||
this,
|
||||
boost::bind(&LLNotifyBox::onClickNext,this),
|
||||
sFont);
|
||||
btn->setScaleImage(TRUE);
|
||||
btn->setToolTip(LLTrans::getString("next"));
|
||||
@@ -398,7 +396,6 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
|
||||
// virtual
|
||||
LLNotifyBox::~LLNotifyBox()
|
||||
{
|
||||
std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer());
|
||||
}
|
||||
|
||||
// virtual
|
||||
@@ -435,14 +432,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab
|
||||
btn_width - 2*ignore_pad,
|
||||
btn_height);
|
||||
|
||||
InstanceAndS32* userdata = new InstanceAndS32;
|
||||
userdata->mSelf = this;
|
||||
userdata->mButtonName = is_option ? name : "";
|
||||
|
||||
mBtnCallbackData.push_back(userdata);
|
||||
|
||||
|
||||
btn = new LLButton(name, btn_rect, "", onClickButton, userdata);
|
||||
btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : ""));
|
||||
btn->setLabel(label);
|
||||
btn->setFont(font);
|
||||
|
||||
@@ -794,36 +784,29 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message)
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLNotifyBox::onClickButton(void* data)
|
||||
void LLNotifyBox::onClickButton(const std::string name)
|
||||
{
|
||||
InstanceAndS32* self_and_button = (InstanceAndS32*)data;
|
||||
LLNotifyBox* self = self_and_button->mSelf;
|
||||
std::string button_name = self_and_button->mButtonName;
|
||||
|
||||
LLSD response = self->mNotification->getResponseTemplate();
|
||||
if (!self->mAddedDefaultBtn && !button_name.empty())
|
||||
LLSD response = mNotification->getResponseTemplate();
|
||||
if (!mAddedDefaultBtn && !name.empty())
|
||||
{
|
||||
response[button_name] = true;
|
||||
response[name] = true;
|
||||
}
|
||||
if (self->mUserInputBox)
|
||||
if (mUserInputBox)
|
||||
{
|
||||
response[self->mUserInputBox->getName()] = self->mUserInputBox->getValue();
|
||||
response[mUserInputBox->getName()] = mUserInputBox->getValue();
|
||||
}
|
||||
self->mNotification->respond(response);
|
||||
mNotification->respond(response);
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLNotifyBox::onClickNext(void* data)
|
||||
void LLNotifyBox::onClickNext()
|
||||
{
|
||||
LLNotifyBox* self = static_cast<LLNotifyBox*>(data);
|
||||
self->moveToBack(true);
|
||||
moveToBack(true);
|
||||
}
|
||||
|
||||
|
||||
LLNotifyBoxView::LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows)
|
||||
: LLUICtrl(name,rect,mouse_opaque,NULL,NULL,follows)
|
||||
: LLUICtrl(name,rect,mouse_opaque,NULL,follows)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -90,10 +90,10 @@ protected:
|
||||
static LLRect getNotifyTipRect(const std::string &message);
|
||||
|
||||
// internal handler for button being clicked
|
||||
static void onClickButton(void* data);
|
||||
void onClickButton(const std::string name);
|
||||
|
||||
// for "next" button
|
||||
static void onClickNext(void* data);
|
||||
void onClickNext();
|
||||
|
||||
//static LLNotifyBox* findExistingNotify(LLPointer<LLNotifyBoxTemplate> notify_template, const LLString::format_map_t& args);
|
||||
|
||||
@@ -130,8 +130,6 @@ protected:
|
||||
LLNotifyBox* mSelf;
|
||||
std::string mButtonName;
|
||||
};
|
||||
std::vector<InstanceAndS32*> mBtnCallbackData;
|
||||
|
||||
static S32 sNotifyBoxCount;
|
||||
static const LLFontGL* sFont;
|
||||
static const LLFontGL* sFontSmall;
|
||||
|
||||
@@ -596,13 +596,14 @@ BOOL LLPanelAvatarNotes::postBuild(void)
|
||||
|
||||
BOOL LLPanelAvatarWeb::postBuild(void)
|
||||
{
|
||||
childSetKeystrokeCallback("url_edit", onURLKeystroke, this);
|
||||
childSetCommitCallback("load", onCommitLoad, this);
|
||||
LLLineEditor* url_edit = getChild<LLLineEditor>("url_edit");
|
||||
url_edit->setKeystrokeCallback(boost::bind(&LLPanelAvatarWeb::onURLKeystroke,this,_1));
|
||||
url_edit->setCommitCallback(boost::bind(&LLPanelAvatarWeb::onCommitURL,this,_2));
|
||||
|
||||
getChild<LLLineEditor>("load")->setCommitCallback(boost::bind(&LLPanelAvatarWeb::onCommitLoad,this,_2));
|
||||
|
||||
childSetAction("web_profile_help",onClickWebProfileHelp,this);
|
||||
|
||||
childSetCommitCallback("url_edit",onCommitURL,this);
|
||||
|
||||
childSetControlName("auto_load","AutoLoadWebProfiles");
|
||||
|
||||
mWebBrowser = getChild<LLMediaCtrl>("profile_html");
|
||||
@@ -752,14 +753,9 @@ void LLPanelAvatarWeb::setWebURL(std::string url)
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelAvatarWeb::onCommitURL(LLUICtrl* ctrl, void* data)
|
||||
void LLPanelAvatarWeb::onCommitURL(const LLSD& value)
|
||||
{
|
||||
LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
|
||||
|
||||
if (!self) return;
|
||||
|
||||
self->load( self->childGetText("url_edit") );
|
||||
load(value.asString());
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -783,31 +779,20 @@ void LLPanelAvatarWeb::load(std::string url)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//static
|
||||
void LLPanelAvatarWeb::onURLKeystroke(LLLineEditor* editor, void* data)
|
||||
void LLPanelAvatarWeb::onURLKeystroke(LLLineEditor* editor)
|
||||
{
|
||||
LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
|
||||
if (!self) return;
|
||||
LLSD::String url = editor->getText();
|
||||
self->childSetEnabled("load", url.length() > 0);
|
||||
childSetEnabled("load", url.length() > 0);
|
||||
return;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelAvatarWeb::onCommitLoad(LLUICtrl* ctrl, void* data)
|
||||
void LLPanelAvatarWeb::onCommitLoad(const LLSD& value)
|
||||
{
|
||||
LLPanelAvatarWeb* self = (LLPanelAvatarWeb*)data;
|
||||
|
||||
if (!self) return;
|
||||
|
||||
LLSD::String valstr = ctrl->getValue().asString();
|
||||
LLSD::String urlstr = self->childGetText("url_edit");
|
||||
LLSD::String valstr = value.asString();
|
||||
LLSD::String urlstr = childGetText("url_edit");
|
||||
if (valstr == "") // load url string into browser panel
|
||||
{
|
||||
self->load(urlstr);
|
||||
load(urlstr);
|
||||
}
|
||||
else if (valstr == "open") // open in user's external browser
|
||||
{
|
||||
@@ -818,9 +803,9 @@ void LLPanelAvatarWeb::onCommitLoad(LLUICtrl* ctrl, void* data)
|
||||
}
|
||||
else if (valstr == "home") // reload profile owner's home page
|
||||
{
|
||||
if (!self->mHome.empty())
|
||||
if (!mHome.empty())
|
||||
{
|
||||
self->load(self->mHome);
|
||||
load(mHome);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,9 +162,9 @@ public:
|
||||
void setWebURL(std::string url);
|
||||
|
||||
void load(std::string url);
|
||||
static void onURLKeystroke(LLLineEditor* editor, void* data);
|
||||
static void onCommitLoad(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitURL(LLUICtrl* ctrl, void* data);
|
||||
void onURLKeystroke(LLLineEditor* editor);
|
||||
void onCommitLoad(const LLSD& value);
|
||||
void onCommitURL(const LLSD& value);
|
||||
static void onClickWebProfileHelp(void *);
|
||||
|
||||
// inherited from LLViewerMediaObserver
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#include "message.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llclassifiedflags.h"
|
||||
|
||||
@@ -104,7 +104,7 @@ LLPanelDebug::LLPanelDebug(const std::string& name, const LLRect& rect)
|
||||
TRUE,
|
||||
TRUE,
|
||||
FALSE,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
(F32)gSavedSettings.getS32("DropShadowFloater"),
|
||||
0.f, 10.f, 1.0f,
|
||||
std::string("DropShadowFloater"));
|
||||
@@ -122,7 +122,7 @@ LLPanelDebug::LLPanelDebug(const std::string& name, const LLRect& rect)
|
||||
TRUE,
|
||||
TRUE,
|
||||
FALSE,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
(F32)gSavedSettings.getS32("DropShadowButton"),
|
||||
0.f, 10.f, 1.0f,
|
||||
std::string("DropShadowButton"));
|
||||
@@ -135,7 +135,7 @@ LLPanelDebug::LLPanelDebug(const std::string& name, const LLRect& rect)
|
||||
LLRect(LEFT, cur_y, RIGHT, cur_y - 20),
|
||||
std::string("Left Click Shows Menu Unless Interactive"),
|
||||
font,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
gSavedSettings.getBOOL("LeftClickShowMenu"));
|
||||
check->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP);
|
||||
addChild(check);
|
||||
|
||||
@@ -108,17 +108,19 @@ LLPanelDirBrowser::LLPanelDirBrowser(const std::string& name, LLFloaterDirectory
|
||||
BOOL LLPanelDirBrowser::postBuild()
|
||||
{
|
||||
if (LLUICtrl* ctrl = findChild<LLUICtrl>("results"))
|
||||
ctrl->setCommitCallback(onCommitList, this);
|
||||
{
|
||||
ctrl->setCommitCallback(boost::bind(&LLPanelDirBrowser::onCommitList,this));
|
||||
}
|
||||
|
||||
if (LLButton* btn = findChild<LLButton>("< Prev"))
|
||||
{
|
||||
childSetAction("< Prev", onClickPrev, this);
|
||||
btn->setClickedCallback(boost::bind(&LLPanelDirBrowser::prevPage,this));
|
||||
btn->setVisible(false);
|
||||
}
|
||||
|
||||
if (LLButton* btn = findChild<LLButton>("Next >"))
|
||||
{
|
||||
childSetAction("Next >", onClickNext, this);
|
||||
btn->setClickedCallback(boost::bind(&LLPanelDirBrowser::nextPage,this));
|
||||
btn->setVisible(false);
|
||||
}
|
||||
|
||||
@@ -154,7 +156,7 @@ void LLPanelDirBrowser::draw()
|
||||
childSetFocus("results", TRUE);
|
||||
}
|
||||
// Request specific data from the server
|
||||
onCommitList(NULL, this);
|
||||
onCommitList();
|
||||
}
|
||||
}
|
||||
mDidAutoSelect = TRUE;
|
||||
@@ -233,21 +235,6 @@ void LLPanelDirBrowser::updateResultCount()
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirBrowser::onClickPrev(void* data)
|
||||
{
|
||||
LLPanelDirBrowser* self = (LLPanelDirBrowser*)data;
|
||||
self->prevPage();
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirBrowser::onClickNext(void* data)
|
||||
{
|
||||
LLPanelDirBrowser* self = (LLPanelDirBrowser*)data;
|
||||
self->nextPage();
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLPanelDirBrowser::filterShortWords( const std::string source_string,
|
||||
int shortest_word_length,
|
||||
@@ -339,7 +326,7 @@ void LLPanelDirBrowser::selectByUUID(const LLUUID& id)
|
||||
// Don't bother looking for this in the draw loop.
|
||||
mWantSelectID.setNull();
|
||||
// Make sure UI updates.
|
||||
onCommitList(NULL, this);
|
||||
onCommitList();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -385,18 +372,15 @@ void LLPanelDirBrowser::getSelectedInfo(LLUUID* id, S32 *type)
|
||||
*type = mResultsContents[id_str]["type"];
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
|
||||
void LLPanelDirBrowser::onCommitList()
|
||||
{
|
||||
LLPanelDirBrowser* self = (LLPanelDirBrowser*)data;
|
||||
LLScrollListCtrl* list = self->findChild<LLScrollListCtrl>("results");
|
||||
LLScrollListCtrl* list = findChild<LLScrollListCtrl>("results");
|
||||
if (!list) return;
|
||||
|
||||
// Start with everyone invisible
|
||||
if (self->mFloaterDirectory)
|
||||
if (mFloaterDirectory)
|
||||
{
|
||||
self->mFloaterDirectory->hideAllDetailPanels();
|
||||
mFloaterDirectory->hideAllDetailPanels();
|
||||
}
|
||||
|
||||
if (FALSE == list->getCanSelect())
|
||||
@@ -404,28 +388,28 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
|
||||
return;
|
||||
}
|
||||
|
||||
std::string id_str = self->childGetValue("results").asString();
|
||||
std::string id_str = childGetValue("results").asString();
|
||||
if (id_str.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD item_id = list->getCurrentID();
|
||||
S32 type = self->mResultsContents[id_str]["type"];
|
||||
S32 type = mResultsContents[id_str]["type"];
|
||||
if (type == EVENT_CODE)
|
||||
{
|
||||
// all but events use the UUID above
|
||||
item_id = self->mResultsContents[id_str]["event_id"];
|
||||
item_id = mResultsContents[id_str]["event_id"];
|
||||
}
|
||||
//std::string name = self->mResultsContents[id_str]["name"].asString();
|
||||
self->showDetailPanel(type, item_id);
|
||||
showDetailPanel(type, item_id);
|
||||
|
||||
if (type == FOR_SALE_CODE)
|
||||
{
|
||||
std::string land_type = self->mResultsContents[id_str]["landtype"].asString();
|
||||
if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelPlaceSmallp)
|
||||
std::string land_type = mResultsContents[id_str]["landtype"].asString();
|
||||
if (mFloaterDirectory && mFloaterDirectory->mPanelPlaceSmallp)
|
||||
{
|
||||
self->mFloaterDirectory->mPanelPlaceSmallp->setLandTypeString(land_type);
|
||||
mFloaterDirectory->mPanelPlaceSmallp->setLandTypeString(land_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1247,15 +1231,11 @@ void LLPanelDirBrowser::setupNewSearch()
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
// called from calssifieds, events, groups, land, people, and places
|
||||
void LLPanelDirBrowser::onClickSearchCore(void* userdata)
|
||||
void LLPanelDirBrowser::onClickSearchCore()
|
||||
{
|
||||
LLPanelDirBrowser* self = (LLPanelDirBrowser*)userdata;
|
||||
if (!self) return;
|
||||
|
||||
self->resetSearchStart();
|
||||
self->performQuery();
|
||||
resetSearchStart();
|
||||
performQuery();
|
||||
|
||||
LLFloaterDirectory::sOldSearchCount++;
|
||||
}
|
||||
@@ -1282,18 +1262,17 @@ void LLPanelDirBrowser::sendDirFindQuery(
|
||||
}
|
||||
|
||||
|
||||
void LLPanelDirBrowser::onKeystrokeName(LLLineEditor* line, void* data)
|
||||
void LLPanelDirBrowser::onKeystrokeName(LLLineEditor* line)
|
||||
{
|
||||
LLPanelDirBrowser *self = (LLPanelDirBrowser*)data;
|
||||
if (line->getLength() >= (S32)self->mMinSearchChars)
|
||||
if (line->getLength() >= (S32)mMinSearchChars)
|
||||
{
|
||||
self->setDefaultBtn( "Search" );
|
||||
self->childEnable("Search");
|
||||
setDefaultBtn( "Search" );
|
||||
childEnable("Search");
|
||||
}
|
||||
else
|
||||
{
|
||||
self->setDefaultBtn();
|
||||
self->childDisable("Search");
|
||||
setDefaultBtn();
|
||||
childDisable("Search");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1302,7 +1281,7 @@ void LLPanelDirBrowser::handleVisibilityChange(BOOL new_visibility)
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
onCommitList(NULL, this);
|
||||
onCommitList();
|
||||
}
|
||||
LLPanel::handleVisibilityChange(new_visibility);
|
||||
}
|
||||
|
||||
@@ -87,7 +87,8 @@ public:
|
||||
// default handler for clicking the search button resets the
|
||||
// next/prev state and performs the query.
|
||||
// Expects a pointer to an LLPanelDirBrowser object.
|
||||
static void onClickSearchCore(void* userdata);
|
||||
void onClickSearchCore();
|
||||
void onKeystrokeName(LLLineEditor* line);
|
||||
|
||||
// query_start indicates the first result row to
|
||||
// return, usually 0 or 100 or 200 because the searches
|
||||
@@ -103,11 +104,7 @@ public:
|
||||
|
||||
void showEvent(const U32 event_id);
|
||||
|
||||
// Prev/Next page buttons
|
||||
static void onClickNext(void* data);
|
||||
static void onClickPrev(void* data);
|
||||
|
||||
static void onCommitList(LLUICtrl* ctrl, void* data);
|
||||
void onCommitList();
|
||||
|
||||
static void processDirPeopleReply(LLMessageSystem* msg, void**);
|
||||
static void processDirPlacesReply(LLMessageSystem* msg, void**);
|
||||
@@ -120,15 +117,12 @@ public:
|
||||
|
||||
// Logic to control maturity checkboxes in Classified/Events/Places/'Land for Sale' tabs.
|
||||
void updateMaturityCheckbox();
|
||||
|
||||
protected:
|
||||
void updateResultCount();
|
||||
|
||||
void addClassified(LLCtrlListInterface *list, const LLUUID& classified_id, const std::string& name, const U32 creation_date, const S32 price_for_listing);
|
||||
LLSD createLandSale(const LLUUID& parcel_id, BOOL is_auction, BOOL is_for_sale, const std::string& name, S32 *type);
|
||||
|
||||
static void onKeystrokeName(LLLineEditor* line, void* data);
|
||||
|
||||
// If this is a search for a panel like "people_panel" (and not the "all" panel)
|
||||
// optionally show the "Next" button. Return the actual number of
|
||||
// rows to display.
|
||||
|
||||
@@ -106,15 +106,15 @@ BOOL LLPanelDirClassified::postBuild()
|
||||
}
|
||||
|
||||
// 0 or 3+ character searches allowed, exciting
|
||||
childSetKeystrokeCallback("name", onKeystrokeNameClassified, this);
|
||||
|
||||
childSetAction("Search", onClickSearchCore, this);
|
||||
childSetAction("Browse", onClickSearchCore, this);
|
||||
getChild<LLLineEditor>("name")->setKeystrokeCallback(boost::bind(&LLPanelDirClassified::onKeystrokeNameClassified,this,_1));
|
||||
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
getChild<LLButton>("Browse")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
setDefaultBtn( "Browse" );
|
||||
|
||||
childSetAction("Place an Ad...", onClickCreateNewClassified, this);
|
||||
getChild<LLButton>("Place an Ad...")->setClickedCallback(boost::bind(&LLPanelDirClassified::onClickCreateNewClassified,this));
|
||||
|
||||
childSetAction("Delete", onClickDelete, this);
|
||||
getChild<LLButton>("Delete")->setClickedCallback(boost::bind(&LLPanelDirClassified::onClickDelete,this));
|
||||
childDisable("Delete");
|
||||
childHide("Delete");
|
||||
|
||||
@@ -149,25 +149,21 @@ void LLPanelDirClassified::refresh()
|
||||
updateMaturityCheckbox();
|
||||
}
|
||||
|
||||
//Open Profile to Classifieds tab
|
||||
void LLPanelDirClassified::onClickCreateNewClassified(void *userdata)
|
||||
void LLPanelDirClassified::onClickCreateNewClassified()
|
||||
{
|
||||
LLFloaterAvatarInfo::showFromObject(gAgent.getID(), "Classified");
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirClassified::onClickDelete(void *userdata)
|
||||
void LLPanelDirClassified::onClickDelete()
|
||||
{
|
||||
LLPanelDirClassified *self = (LLPanelDirClassified *)userdata;
|
||||
|
||||
LLUUID classified_id;
|
||||
S32 type;
|
||||
|
||||
self->getSelectedInfo(&classified_id, &type);
|
||||
getSelectedInfo(&classified_id, &type);
|
||||
|
||||
// Clear out the list. Deleting a classified will cause a refresh to be
|
||||
// sent.
|
||||
self->setupNewSearch();
|
||||
setupNewSearch();
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
@@ -177,7 +173,7 @@ void LLPanelDirClassified::onClickDelete(void *userdata)
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addUUIDFast(_PREHASH_ClassifiedID, classified_id);
|
||||
msg->addUUIDFast(_PREHASH_QueryID, self->mSearchID);
|
||||
msg->addUUIDFast(_PREHASH_QueryID, mSearchID);
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
@@ -222,34 +218,32 @@ void LLPanelDirClassified::performQuery()
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
void LLPanelDirClassified::onKeystrokeNameClassified(LLLineEditor* line, void* data)
|
||||
void LLPanelDirClassified::onKeystrokeNameClassified(LLLineEditor* line)
|
||||
{
|
||||
LLPanelDirClassified *self = (LLPanelDirClassified*)data;
|
||||
|
||||
S32 len = line->getLength();
|
||||
if (len == 0
|
||||
|| len >= 3)
|
||||
{
|
||||
// no text searches are cheap, as are longer searches
|
||||
self->setDefaultBtn( "Search" );
|
||||
self->childEnable("Search");
|
||||
setDefaultBtn( "Search" );
|
||||
childEnable("Search");
|
||||
}
|
||||
else
|
||||
{
|
||||
self->setDefaultBtn();
|
||||
self->childDisable("Search");
|
||||
setDefaultBtn();
|
||||
childDisable("Search");
|
||||
}
|
||||
|
||||
// Change the Browse to Search or vice versa
|
||||
if (len > 0)
|
||||
{
|
||||
self->childSetVisible("Search", TRUE);
|
||||
self->childSetVisible("Browse", FALSE);
|
||||
childSetVisible("Search", TRUE);
|
||||
childSetVisible("Browse", FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
self->setDefaultBtn( "Browse" );
|
||||
self->childSetVisible("Search", FALSE);
|
||||
self->childSetVisible("Browse", TRUE);
|
||||
setDefaultBtn( "Browse" );
|
||||
childSetVisible("Search", FALSE);
|
||||
childSetVisible("Browse", TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,15 +59,15 @@ public:
|
||||
|
||||
protected:
|
||||
//static void onClickNewClassified(void* data);
|
||||
static void onClickDelete(void* data);
|
||||
void onClickDelete();
|
||||
|
||||
// onClickNext and onClickPrev are special case searches
|
||||
static void onClickSearch(void *userdata);
|
||||
void onClickSearch();
|
||||
|
||||
static void onKeystrokeNameClassified(LLLineEditor* line, void* data);
|
||||
void onKeystrokeNameClassified(LLLineEditor* line);
|
||||
|
||||
//
|
||||
static void onClickCreateNewClassified(void* data);
|
||||
void onClickCreateNewClassified();
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
@@ -68,21 +68,21 @@ BOOL LLPanelDirEvents::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetCommitCallback("date_mode", onDateModeCallback, this);
|
||||
getChild<LLUICtrl>("date_mode")->setCommitCallback(boost::bind(&LLPanelDirEvents::onDateModeCallback,this));
|
||||
|
||||
childSetAction("<<", onBackBtn, this);
|
||||
childSetAction(">>", onForwardBtn, this);
|
||||
getChild<LLButton>("<<")->setClickedCallback(boost::bind(&LLPanelDirEvents::onBackBtn,this));
|
||||
getChild<LLButton>(">>")->setClickedCallback(boost::bind(&LLPanelDirEvents::onForwardBtn,this));
|
||||
|
||||
childSetAction("Today", onClickToday, this);
|
||||
getChild<LLButton>("Today")->setClickedCallback(boost::bind(&LLPanelDirEvents::onClickToday,this));
|
||||
|
||||
childSetAction("Search", LLPanelDirBrowser::onClickSearchCore, this);
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirEvents::onClickSearchCore,this));
|
||||
setDefaultBtn("Search");
|
||||
|
||||
childSetAction("Delete", onClickDelete, this);
|
||||
getChild<LLButton>("Delete")->setClickedCallback(boost::bind(&LLPanelDirEvents::onClickDelete,this));
|
||||
childDisable("Delete");
|
||||
childHide("Delete");
|
||||
|
||||
onDateModeCallback(NULL, this);
|
||||
onDateModeCallback();
|
||||
|
||||
mCurrentSortColumn = "time";
|
||||
|
||||
@@ -246,63 +246,48 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirEvents::onDateModeCallback(LLUICtrl* ctrl, void *data)
|
||||
void LLPanelDirEvents::onDateModeCallback()
|
||||
{
|
||||
LLPanelDirEvents* self = (LLPanelDirEvents*)data;
|
||||
if (self->childGetValue("date_mode").asString() == "date")
|
||||
if (childGetValue("date_mode").asString() == "date")
|
||||
{
|
||||
self->childEnable("Today");
|
||||
self->childEnable(">>");
|
||||
self->childEnable("<<");
|
||||
childEnable("Today");
|
||||
childEnable(">>");
|
||||
childEnable("<<");
|
||||
}
|
||||
else
|
||||
{
|
||||
self->childDisable("Today");
|
||||
self->childDisable(">>");
|
||||
self->childDisable("<<");
|
||||
childDisable("Today");
|
||||
childDisable(">>");
|
||||
childDisable("<<");
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirEvents::onClickToday(void *userdata)
|
||||
void LLPanelDirEvents::onClickToday()
|
||||
{
|
||||
LLPanelDirEvents *self = (LLPanelDirEvents *)userdata;
|
||||
self->resetSearchStart();
|
||||
self->setDay(0);
|
||||
self->performQuery();
|
||||
resetSearchStart();
|
||||
setDay(0);
|
||||
performQuery();
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirEvents::onBackBtn(void* data)
|
||||
void LLPanelDirEvents::onBackBtn()
|
||||
{
|
||||
LLPanelDirEvents* self = (LLPanelDirEvents*)data;
|
||||
self->resetSearchStart();
|
||||
self->setDay(self->mDay - 1);
|
||||
self->performQuery();
|
||||
resetSearchStart();
|
||||
setDay(mDay - 1);
|
||||
performQuery();
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirEvents::onForwardBtn(void* data)
|
||||
void LLPanelDirEvents::onForwardBtn()
|
||||
{
|
||||
LLPanelDirEvents* self = (LLPanelDirEvents*)data;
|
||||
self->resetSearchStart();
|
||||
self->setDay(self->mDay + 1);
|
||||
self->performQuery();
|
||||
resetSearchStart();
|
||||
setDay(mDay + 1);
|
||||
performQuery();
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirEvents::onClickDelete(void *userdata)
|
||||
void LLPanelDirEvents::onClickDelete()
|
||||
{
|
||||
LLPanelDirEvents *self = (LLPanelDirEvents *)userdata;
|
||||
if (!self) return;
|
||||
|
||||
U32 event_id;
|
||||
event_id = self->getSelectedEventID();
|
||||
event_id = getSelectedEventID();
|
||||
if (!event_id) return;
|
||||
|
||||
self->performQueryOrDelete(event_id);
|
||||
performQueryOrDelete(event_id);
|
||||
}
|
||||
|
||||
@@ -57,12 +57,12 @@ public:
|
||||
void setDay(S32 day);
|
||||
|
||||
protected:
|
||||
static void onDateModeCallback(LLUICtrl* ctrl, void *data);
|
||||
static void onBackBtn(void* data);
|
||||
static void onForwardBtn(void* data);
|
||||
static void onClickToday(void *userdata);
|
||||
static void onClickSearch(void *data);
|
||||
static void onClickDelete(void *data);
|
||||
void onDateModeCallback();
|
||||
void onBackBtn();
|
||||
void onForwardBtn();
|
||||
void onClickToday();
|
||||
void onClickSearch();
|
||||
void onClickDelete();
|
||||
|
||||
protected:
|
||||
BOOL mDoneQuery;
|
||||
|
||||
@@ -107,17 +107,17 @@ BOOL LLPanelDirFind::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetAction("back_btn", onClickBack, this);
|
||||
getChild<LLButton>("back_btn")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickBack,this));
|
||||
if (hasChild("home_btn"))
|
||||
childSetAction("home_btn", onClickHome, this);
|
||||
childSetAction("forward_btn", onClickForward, this);
|
||||
childSetAction("reload_btn", onClickRefresh, this);
|
||||
getChild<LLButton>("home_btn")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickHome,this));
|
||||
getChild<LLButton>("forward_btn")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickForward,this));
|
||||
getChild<LLButton>("reload_btn")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickRefresh,this));
|
||||
if (hasChild("search_editor"))
|
||||
childSetCommitCallback("search_editor", onCommitSearch, this);
|
||||
getChild<LLButton>("search_editor")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickSearch,this));
|
||||
if (hasChild("search_btn"))
|
||||
childSetAction("search_btn", onClickSearch, this);
|
||||
getChild<LLButton>("search_btn")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickSearch,this));
|
||||
if (hasChild("?"))
|
||||
childSetAction("?", onClickHelp, this);
|
||||
getChild<LLButton>("?")->setCommitCallback(boost::bind(&LLPanelDirFind::onClickHelp,this));
|
||||
|
||||
// showcase doesn't have maturity flags -- it's all PG
|
||||
if (hasChild("incmature"))
|
||||
@@ -450,65 +450,47 @@ const std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_matur
|
||||
return url;
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickBack( void* data )
|
||||
void LLPanelDirFind::onClickBack()
|
||||
{
|
||||
LLPanelDirFind* self = ( LLPanelDirFind* )data;
|
||||
if ( self->mWebBrowser )
|
||||
if ( mWebBrowser )
|
||||
{
|
||||
self->mWebBrowser->navigateBack();
|
||||
mWebBrowser->navigateBack();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickHelp( void* data )
|
||||
void LLPanelDirFind::onClickHelp()
|
||||
{
|
||||
LLNotificationsUtil::add("ClickSearchHelpAll");
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickForward( void* data )
|
||||
void LLPanelDirFind::onClickForward()
|
||||
{
|
||||
LLPanelDirFind* self = ( LLPanelDirFind* )data;
|
||||
if ( self->mWebBrowser )
|
||||
if ( mWebBrowser )
|
||||
{
|
||||
self->mWebBrowser->navigateForward();
|
||||
mWebBrowser->navigateForward();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickHome( void* data )
|
||||
void LLPanelDirFind::onClickHome()
|
||||
{
|
||||
LLPanelDirFind* self = ( LLPanelDirFind* )data;
|
||||
if ( self->mWebBrowser )
|
||||
if ( mWebBrowser )
|
||||
{
|
||||
self->mWebBrowser->navigateHome();
|
||||
mWebBrowser->navigateHome();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickRefresh( void* data )
|
||||
void LLPanelDirFind::onClickRefresh()
|
||||
{
|
||||
LLPanelDirFind* self = ( LLPanelDirFind* )data;
|
||||
if ( self->mWebBrowser )
|
||||
if ( mWebBrowser )
|
||||
{
|
||||
self->mWebBrowser->navigateTo(self->mWebBrowser->getCurrentNavUrl());
|
||||
mWebBrowser->navigateTo(mWebBrowser->getCurrentNavUrl());
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onCommitSearch(LLUICtrl*, void* data)
|
||||
void LLPanelDirFind::onClickSearch()
|
||||
{
|
||||
onClickSearch(data);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFind::onClickSearch(void* data)
|
||||
{
|
||||
LLPanelDirFind* self = ( LLPanelDirFind* )data;
|
||||
std::string search_text = self->childGetText("search_editor");
|
||||
self->search(search_text);
|
||||
std::string search_text = childGetText("search_editor");
|
||||
search(search_text);
|
||||
|
||||
LLFloaterDirectory::sNewSearchCount++;
|
||||
}
|
||||
@@ -573,9 +555,9 @@ BOOL LLPanelDirFindAllOld::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
|
||||
getChild<LLLineEditor>("name")->setKeystrokeCallback(boost::bind(&LLPanelDirBrowser::onKeystrokeName,this,_1));
|
||||
|
||||
childSetAction("Search", onClickSearch, this);
|
||||
getChild<LLButton>("Search")->setCommitCallback(boost::bind(&LLPanelDirFindAllOld::onClickSearch,this));
|
||||
childDisable("Search");
|
||||
setDefaultBtn( "Search" );
|
||||
|
||||
@@ -597,33 +579,23 @@ void LLPanelDirFindAllOld::draw()
|
||||
LLPanelDirBrowser::draw();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data)
|
||||
void LLPanelDirFindAllOld::onClickSearch()
|
||||
{
|
||||
LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data;
|
||||
self->setFocus(TRUE);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirFindAllOld::onClickSearch(void *userdata)
|
||||
{
|
||||
LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata;
|
||||
|
||||
if (self->childGetValue("name").asString().length() < self->mMinSearchChars)
|
||||
if (childGetValue("name").asString().length() < mMinSearchChars)
|
||||
{
|
||||
return;
|
||||
};
|
||||
|
||||
BOOL inc_pg = self->childGetValue("incpg").asBoolean();
|
||||
BOOL inc_mature = self->childGetValue("incmature").asBoolean();
|
||||
BOOL inc_adult = self->childGetValue("incadult").asBoolean();
|
||||
BOOL inc_pg = childGetValue("incpg").asBoolean();
|
||||
BOOL inc_mature = childGetValue("incmature").asBoolean();
|
||||
BOOL inc_adult = childGetValue("incadult").asBoolean();
|
||||
if (!(inc_pg || inc_mature || inc_adult))
|
||||
{
|
||||
LLNotificationsUtil::add("NoContentToSearch");
|
||||
return;
|
||||
}
|
||||
|
||||
self->setupNewSearch();
|
||||
setupNewSearch();
|
||||
|
||||
// Figure out scope
|
||||
U32 scope = 0x0;
|
||||
@@ -644,7 +616,7 @@ void LLPanelDirFindAllOld::onClickSearch(void *userdata)
|
||||
scope |= DFQ_INC_ADULT;
|
||||
}
|
||||
|
||||
if (self->hasChild("filter_gaming") && self->childGetValue("filter_gaming").asBoolean())
|
||||
if (hasChild("filter_gaming") && childGetValue("filter_gaming").asBoolean())
|
||||
{
|
||||
scope |= DFQ_FILTER_GAMING;
|
||||
}
|
||||
@@ -652,7 +624,7 @@ void LLPanelDirFindAllOld::onClickSearch(void *userdata)
|
||||
// send the message
|
||||
LLMessageSystem *msg = gMessageSystem;
|
||||
S32 start_row = 0;
|
||||
sendDirFindQuery(msg, self->mSearchID, self->childGetValue("name").asString(), scope, start_row);
|
||||
sendDirFindQuery(msg, mSearchID, childGetValue("name").asString(), scope, start_row);
|
||||
|
||||
// Also look up classified ads. JC 12/2005
|
||||
BOOL filter_auto_renew = FALSE;
|
||||
@@ -662,8 +634,8 @@ void LLPanelDirFindAllOld::onClickSearch(void *userdata)
|
||||
msg->addUUID("AgentID", gAgent.getID());
|
||||
msg->addUUID("SessionID", gAgent.getSessionID());
|
||||
msg->nextBlock("QueryData");
|
||||
msg->addUUID("QueryID", self->mSearchID);
|
||||
msg->addString("QueryText", self->childGetValue("name").asString());
|
||||
msg->addUUID("QueryID", mSearchID);
|
||||
msg->addString("QueryText", childGetValue("name").asString());
|
||||
msg->addU32("QueryFlags", classified_flags);
|
||||
msg->addU32("Category", 0); // all categories
|
||||
msg->addS32("QueryStart", 0);
|
||||
@@ -689,8 +661,8 @@ void LLPanelDirFindAllOld::onClickSearch(void *userdata)
|
||||
msg->addUUID("AgentID", gAgent.getID() );
|
||||
msg->addUUID("SessionID", gAgent.getSessionID());
|
||||
msg->nextBlock("QueryData");
|
||||
msg->addUUID("QueryID", self->mSearchID );
|
||||
msg->addString("QueryText", self->childGetValue("name").asString());
|
||||
msg->addUUID("QueryID", mSearchID );
|
||||
msg->addString("QueryText", childGetValue("name").asString());
|
||||
msg->addU32("QueryFlags", query_flags );
|
||||
msg->addS32("QueryStart", 0 ); // Always get the first 100 when using find ALL
|
||||
msg->addS8("Category", LLParcel::C_ANY);
|
||||
|
||||
@@ -65,13 +65,12 @@ public:
|
||||
const std::string getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web) const;
|
||||
|
||||
private:
|
||||
static void onClickBack( void* data );
|
||||
static void onClickForward( void* data );
|
||||
static void onClickHome( void* data );
|
||||
static void onClickRefresh( void* data );
|
||||
static void onClickSearch( void* data );
|
||||
static void onCommitSearch(LLUICtrl*, void* data);
|
||||
static void onClickHelp( void* data );
|
||||
void onClickBack();
|
||||
void onClickForward();
|
||||
void onClickHome();
|
||||
void onClickRefresh();
|
||||
void onClickSearch();
|
||||
void onClickHelp();
|
||||
|
||||
// inherited from LLViewerMediaObserver
|
||||
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
|
||||
@@ -100,9 +99,7 @@ public:
|
||||
|
||||
/*virtual*/ void draw();
|
||||
|
||||
static void onClickSearch(void *userdata);
|
||||
static void onCommitScope(LLUICtrl* ctrl, void* data);
|
||||
static void onKeystrokeName(LLLineEditor* line, void* data);
|
||||
void onClickSearch();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -55,9 +55,9 @@ BOOL LLPanelDirGroups::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
|
||||
getChild<LLLineEditor>("name")->setKeystrokeCallback(boost::bind(&LLPanelDirBrowser::onKeystrokeName,this,_1));
|
||||
|
||||
childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
childDisable("Search");
|
||||
setDefaultBtn( "Search" );
|
||||
|
||||
|
||||
@@ -90,17 +90,17 @@ BOOL LLPanelDirLand::postBuild()
|
||||
childDisable("incadult");
|
||||
}
|
||||
|
||||
childSetCommitCallback("pricecheck", onCommitPrice, this);
|
||||
childSetCommitCallback("areacheck", onCommitArea, this);
|
||||
getChild<LLUICtrl>("pricecheck")->setCommitCallback(boost::bind(&LLPanelDirLand::onCommitPrice,this,_2));
|
||||
getChild<LLUICtrl>("areacheck")->setCommitCallback(boost::bind(&LLPanelDirLand::onCommitArea, this,_2));
|
||||
|
||||
childSetValue("priceedit", gStatusBar->getBalance());
|
||||
childSetEnabled("priceedit", gSavedSettings.getBOOL("FindLandPrice"));
|
||||
childSetPrevalidate("priceedit", LLLineEditor::prevalidateNonNegativeS32);
|
||||
getChild<LLLineEditor>("priceedit")->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
|
||||
|
||||
childSetEnabled("areaedit", gSavedSettings.getBOOL("FindLandArea"));
|
||||
childSetPrevalidate("areaedit", LLLineEditor::prevalidateNonNegativeS32);
|
||||
getChild<LLLineEditor>("areaedit")->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32);
|
||||
|
||||
childSetAction("Search", onClickSearchCore, this);
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
setDefaultBtn("Search");
|
||||
|
||||
childSetTextArg("pricecheck_symbol", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
|
||||
@@ -111,7 +111,7 @@ BOOL LLPanelDirLand::postBuild()
|
||||
LLScrollListCtrl* results = getChild<LLScrollListCtrl>("results");
|
||||
if (results)
|
||||
{
|
||||
results->setSortChangedCallback(boost::bind(&LLPanelDirLand::onClickSort,this));
|
||||
results->setSortChangedCallback(boost::bind(&LLPanelDirLand::performQuery,this));
|
||||
results->sortByColumn(mCurrentSortColumn,mCurrentSortAscending);
|
||||
|
||||
LLStringUtil::format_map_t args;
|
||||
@@ -143,31 +143,14 @@ void LLPanelDirLand::draw()
|
||||
LLPanelDirBrowser::draw();
|
||||
}
|
||||
|
||||
void LLPanelDirLand::onClickSort(void* data)
|
||||
void LLPanelDirLand::onCommitPrice(const LLSD& value)
|
||||
{
|
||||
LLPanelDirLand* self = (LLPanelDirLand*)data;
|
||||
if (!self) return;
|
||||
self->performQuery();
|
||||
childSetEnabled("priceedit", value.asBoolean());
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirLand::onCommitPrice(LLUICtrl* ctrl, void* data)
|
||||
void LLPanelDirLand::onCommitArea(const LLSD& value)
|
||||
{
|
||||
LLPanelDirLand* self = (LLPanelDirLand*)data;
|
||||
LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl;
|
||||
|
||||
if (!self || !check) return;
|
||||
self->childSetEnabled("priceedit", check->get());
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelDirLand::onCommitArea(LLUICtrl* ctrl, void* data)
|
||||
{
|
||||
LLPanelDirLand* self = (LLPanelDirLand*)data;
|
||||
LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl;
|
||||
|
||||
if (!self || !check) return;
|
||||
self->childSetEnabled("areaedit", check->get());
|
||||
childSetEnabled("areaedit", value.asBoolean());
|
||||
}
|
||||
|
||||
void LLPanelDirLand::performQuery()
|
||||
|
||||
@@ -50,9 +50,8 @@ public:
|
||||
void performQuery();
|
||||
|
||||
protected:
|
||||
static void onClickSort(void* data);
|
||||
static void onCommitPrice(LLUICtrl* ctrl, void* data);
|
||||
static void onCommitArea(LLUICtrl* ctrl, void* data);
|
||||
void onCommitPrice(const LLSD& value);
|
||||
void onCommitArea(const LLSD& value);
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -52,9 +52,9 @@ BOOL LLPanelDirPeople::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
|
||||
getChild<LLLineEditor>("name")->setKeystrokeCallback(boost::bind(&LLPanelDirBrowser::onKeystrokeName,this,_1));
|
||||
|
||||
childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
childDisable("Search");
|
||||
setDefaultBtn( "Search" );
|
||||
|
||||
|
||||
@@ -45,9 +45,6 @@ public:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void performQuery();
|
||||
|
||||
static void onClickSearch(void *userdata);
|
||||
static void onKeystrokeName(LLLineEditor* line, void* data);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -76,9 +76,9 @@ BOOL LLPanelDirPlaces::postBuild()
|
||||
{
|
||||
LLPanelDirBrowser::postBuild();
|
||||
|
||||
childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
|
||||
getChild<LLLineEditor>("name")->setKeystrokeCallback(boost::bind(&LLPanelDirBrowser::onKeystrokeName,this,_1));
|
||||
|
||||
childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
|
||||
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPanelDirBrowser::onClickSearchCore,this));
|
||||
childDisable("Search");
|
||||
|
||||
mCurrentSortColumn = "dwell";
|
||||
|
||||
@@ -193,8 +193,7 @@ BOOL LLPanelDisplay::postBuild()
|
||||
}
|
||||
|
||||
mCtrlAspectRatio = getChild<LLComboBox>( "aspect_ratio");
|
||||
mCtrlAspectRatio->setTextEntryCallback(&LLPanelDisplay::onKeystrokeAspectRatio);
|
||||
mCtrlAspectRatio->setCallbackUserData(this);
|
||||
mCtrlAspectRatio->setTextEntryCallback(boost::bind(&LLPanelDisplay::onKeystrokeAspectRatio,this));
|
||||
mCtrlAspectRatio->setCommitCallback(boost::bind(&LLPanelDisplay::onSelectAspectRatio,this));
|
||||
// add default aspect ratios
|
||||
mCtrlAspectRatio->add(aspect_ratio_text, &mAspectRatio, ADD_TOP);
|
||||
@@ -1031,11 +1030,9 @@ void LLPanelDisplay::onCommitAutoDetectAspect(const LLSD& value)
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelDisplay::onKeystrokeAspectRatio(LLLineEditor* caller, void *user_data)
|
||||
void LLPanelDisplay::onKeystrokeAspectRatio()
|
||||
{
|
||||
LLPanelDisplay* panel = (LLPanelDisplay*)user_data;
|
||||
|
||||
panel->mCtrlAutoDetectAspect->set(FALSE);
|
||||
mCtrlAutoDetectAspect->set(FALSE);
|
||||
}
|
||||
|
||||
void LLPanelDisplay::onSelectAspectRatio()
|
||||
|
||||
@@ -202,7 +202,7 @@ protected:
|
||||
static void onChangeCustom();
|
||||
|
||||
void onCommitAutoDetectAspect(const LLSD& value);
|
||||
static void onKeystrokeAspectRatio(LLLineEditor* caller, void *user_data);
|
||||
void onKeystrokeAspectRatio();
|
||||
void onSelectAspectRatio();
|
||||
void onCommitWindowedMode();
|
||||
static void updateSliderText(LLUICtrl* ctrl, LLTextBox* text_box);
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
struct LLOfferInfo;
|
||||
|
||||
const S32 UPDATE_MEMBERS_PER_FRAME = 500;
|
||||
const F32 UPDATE_MEMBERS_SECONDS_PER_FRAME = 0.005; // 5ms
|
||||
|
||||
// Forward declares
|
||||
class LLPanelGroupTab;
|
||||
|
||||
@@ -568,7 +568,7 @@ void LLPanelGroupGeneral::cancel()
|
||||
// invoked from callbackConfirmMature
|
||||
bool LLPanelGroupGeneral::confirmMatureApply(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotification::getSelectedOption(notification, response);
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
// 0 == Yes
|
||||
// 1 == No
|
||||
// 2 == Cancel
|
||||
@@ -593,7 +593,7 @@ bool LLPanelGroupGeneral::confirmMatureApply(const LLSD& notification, const LLS
|
||||
// static
|
||||
bool LLPanelGroupGeneral::createGroupCallback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotification::getSelectedOption(notification, response);
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
switch(option)
|
||||
{
|
||||
case 0:
|
||||
@@ -684,6 +684,11 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
|
||||
mComboActiveTitle->resetDirty();
|
||||
}
|
||||
|
||||
// After role member data was changed in Roles->Members
|
||||
// need to update role titles. See STORM-918.
|
||||
if (gc == GC_ROLE_MEMBER_DATA)
|
||||
LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID);
|
||||
|
||||
// If this was just a titles update, we are done.
|
||||
if (gc == GC_TITLES) return;
|
||||
|
||||
@@ -867,71 +872,45 @@ void LLPanelGroupGeneral::updateMembers()
|
||||
|
||||
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
|
||||
|
||||
if (!mListVisibleMembers || !gdatap
|
||||
|| !gdatap->isMemberDataComplete())
|
||||
if (!mListVisibleMembers
|
||||
|| !gdatap
|
||||
|| !gdatap->isMemberDataComplete()
|
||||
|| gdatap->mMembers.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static LLTimer all_timer;
|
||||
static LLTimer sd_timer;
|
||||
static LLTimer element_timer;
|
||||
LLTimer update_time;
|
||||
update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME);
|
||||
|
||||
all_timer.reset();
|
||||
S32 i = 0;
|
||||
LLAvatarName av_name;
|
||||
|
||||
for( ; mMemberProgress != gdatap->mMembers.end() && i<UPDATE_MEMBERS_PER_FRAME;
|
||||
++mMemberProgress, ++i)
|
||||
for( ; mMemberProgress != gdatap->mMembers.end() && !update_time.hasExpired();
|
||||
++mMemberProgress)
|
||||
{
|
||||
lldebugs << "Adding " << mMemberProgress->first << ", " << mMemberProgress->second->getTitle() << llendl;
|
||||
LLGroupMemberData* member = mMemberProgress->second;
|
||||
if (!member)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// Owners show up in bold.
|
||||
std::string style = "NORMAL";
|
||||
if ( member->isOwner() )
|
||||
|
||||
if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))
|
||||
{
|
||||
style = "BOLD";
|
||||
addMember(mMemberProgress->second);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
|
||||
LLAvatarNameCache::get(mMemberProgress->first,
|
||||
boost::bind(&LLPanelGroupGeneral::onNameCache,
|
||||
this, gdatap->getMemberVersion(), member, _2));
|
||||
}
|
||||
|
||||
sd_timer.reset();
|
||||
LLSD row;
|
||||
row["id"] = member->getID();
|
||||
|
||||
row["columns"][0]["column"] = "name";
|
||||
row["columns"][0]["font-style"] = style;
|
||||
|
||||
// value is filled in by name list control
|
||||
|
||||
row["columns"][1]["column"] = "title";
|
||||
row["columns"][1]["value"] = member->getTitle();
|
||||
row["columns"][1]["font-style"] = style;
|
||||
|
||||
|
||||
row["columns"][2]["column"] = "online";
|
||||
row["columns"][2]["value"] = member->getOnlineStatus();
|
||||
row["columns"][2]["font-style"] = style;
|
||||
|
||||
|
||||
sSDTime += sd_timer.getElapsedTimeF32();
|
||||
|
||||
element_timer.reset();
|
||||
mListVisibleMembers->addNameItem(row);
|
||||
sElementTime += element_timer.getElapsedTimeF32();
|
||||
}
|
||||
sAllTime += all_timer.getElapsedTimeF32();
|
||||
|
||||
lldebugs << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl;
|
||||
if (mMemberProgress == gdatap->mMembers.end())
|
||||
{
|
||||
lldebugs << " member list completed." << llendl;
|
||||
mListVisibleMembers->setEnabled(TRUE);
|
||||
|
||||
lldebugs << "All Time: " << sAllTime << llendl;
|
||||
lldebugs << "SD Time: " << sSDTime << llendl;
|
||||
lldebugs << "Element Time: " << sElementTime << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -940,6 +919,48 @@ void LLPanelGroupGeneral::updateMembers()
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)
|
||||
{
|
||||
// Owners show up in bold.
|
||||
std::string style = "NORMAL";
|
||||
if ( member->isOwner() )
|
||||
{
|
||||
style = "BOLD";
|
||||
}
|
||||
LLSD row;
|
||||
row["id"] = member->getID();
|
||||
|
||||
row["columns"][0]["column"] = "name";
|
||||
row["columns"][0]["font-style"] = style;
|
||||
row["columns"][0]["font"] = "SANSSERIF_SMALL";
|
||||
row["columns"][1]["column"] = "title";
|
||||
row["columns"][1]["value"] = member->getTitle();
|
||||
row["columns"][1]["font-style"] = style;
|
||||
row["columns"][1]["font"] = "SANSSERIF_SMALL";
|
||||
|
||||
row["columns"][2]["column"] = "online";
|
||||
row["columns"][2]["value"] = member->getOnlineStatus();
|
||||
row["columns"][2]["font-style"] = style;
|
||||
row["columns"][1]["font"] = "SANSSERIF_SMALL";
|
||||
|
||||
mListVisibleMembers->addNameItemRow(row);
|
||||
}
|
||||
|
||||
void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
|
||||
{
|
||||
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
|
||||
|
||||
if (!gdatap
|
||||
|| !gdatap->isMemberDataComplete()
|
||||
|| gdatap->getMemberVersion() != update_id)
|
||||
{
|
||||
// Stale data
|
||||
return;
|
||||
}
|
||||
|
||||
addMember(member);
|
||||
}
|
||||
|
||||
void LLPanelGroupGeneral::updateChanged()
|
||||
{
|
||||
// List all the controls we want to check for changes...
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user