summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2007-01-17 23:02:00 +0000
committerSteven Bennetts <steve@lindenlab.com>2007-01-17 23:02:00 +0000
commit71d28bdbf0baab9302c8f458e3bdbcfc60d656d4 (patch)
tree19f051897838d5a75e5ce1e776bb52a330173171 /indra/newview
parentfc664e93e62645fc6e9659664351e77f3c4b374f (diff)
merge release@56803 release-candidate@56833
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/llfloaterfriends.cpp29
-rw-r--r--indra/newview/llfloatergodtools.cpp2
-rw-r--r--indra/newview/llfloaterinspect.cpp221
-rw-r--r--indra/newview/llfloaterinspect.h47
-rw-r--r--indra/newview/llfloaterregioninfo.cpp6
-rw-r--r--indra/newview/llfloaterreporter.cpp110
-rw-r--r--indra/newview/llfloaterreporter.h6
-rw-r--r--indra/newview/llfloatertelehub.cpp1
-rw-r--r--indra/newview/llfloatertools.cpp37
-rw-r--r--indra/newview/llfloatertools.h9
-rw-r--r--indra/newview/llinventorymodel.cpp15
-rw-r--r--indra/newview/llinventorymodel.h1
-rw-r--r--indra/newview/llpanelpermissions.cpp6
-rw-r--r--indra/newview/llpreviewscript.cpp8
-rw-r--r--indra/newview/llselectmgr.cpp30
-rw-r--r--indra/newview/llselectmgr.h2
-rw-r--r--indra/newview/llstartup.cpp2
-rw-r--r--indra/newview/lltoolcomp.cpp69
-rw-r--r--indra/newview/lltoolcomp.h24
-rw-r--r--indra/newview/lltoolmgr.cpp12
-rw-r--r--indra/newview/llviewermenu.cpp52
-rw-r--r--indra/newview/llviewermessage.cpp31
-rw-r--r--indra/newview/llviewernetwork.cpp4
-rw-r--r--indra/newview/llviewernetwork.h1
-rw-r--r--indra/newview/llviewerregion.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp12
28 files changed, 608 insertions, 137 deletions
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index f3d59db32a..ccb92f9fba 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.13.1.7";
-CFBundleGetInfoString = "Second Life version 1.13.1.7, Copyright 2004-2006 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.13.2.11";
+CFBundleGetInfoString = "Second Life version 1.13.2.11, Copyright 2004-2006 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 8e1570561e..458c5e1b7d 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>1.13.1.7</string>
+ <string>1.13.2.11</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp
index e5aac8b252..8efc833004 100644
--- a/indra/newview/llfloaterfriends.cpp
+++ b/indra/newview/llfloaterfriends.cpp
@@ -142,7 +142,7 @@ void LLFloaterFriends::updateFriends(U32 changed_mask)
{
refreshNames();
}
- else if(LLFriendObserver::POWERS)
+ else if(changed_mask & LLFriendObserver::POWERS)
{
--mNumRightsChanged;
if(mNumRightsChanged > 0)
@@ -255,10 +255,6 @@ void LLFloaterFriends::addFriend(const std::string& name, const LLUUID& agent_id
mFriendsList->addElement(element, ADD_BOTTOM);
}
-void LLFloaterFriends::reloadNames()
-{
-}
-
void LLFloaterFriends::refreshRightsChangeList(U8 state)
{
LLDynamicArray<LLUUID> friends = getSelectedIDs();
@@ -293,7 +289,7 @@ void LLFloaterFriends::refreshRightsChangeList(U8 state)
childSetEnabled("offer_teleport_btn", false);
}
can_change_visibility = true;
- can_change_modify = true;
+ can_change_modify = true;
}
else if (state == 2)
{
@@ -363,13 +359,15 @@ void LLFloaterFriends::refreshRightsChangeList(U8 state)
void LLFloaterFriends::refreshNames()
{
- S32 pos = mFriendsList->getScrollPos();
+ LLDynamicArray<LLUUID> selected_ids = getSelectedIDs();
+ S32 pos = mFriendsList->getScrollPos();
mFriendsList->operateOnAll(LLCtrlListInterface::OP_DELETE);
LLCollectAllBuddies collect;
LLAvatarTracker::instance().applyFunctor(collect);
LLCollectAllBuddies::buddy_map_t::const_iterator it = collect.mOnline.begin();
LLCollectAllBuddies::buddy_map_t::const_iterator end = collect.mOnline.end();
+
for ( ; it != end; ++it)
{
const std::string& name = it->first;
@@ -384,6 +382,7 @@ void LLFloaterFriends::refreshNames()
const LLUUID& agent_id = it->second;
addFriend(name, agent_id);
}
+ mFriendsList->selectMultiple(selected_ids);
mFriendsList->setScrollPos(pos);
}
@@ -396,8 +395,22 @@ void LLFloaterFriends::refreshUI()
if(num_selected > 0)
{
single_selected = TRUE;
- if(num_selected > 1) multiple_selected = TRUE;
+ if(num_selected > 1)
+ {
+ childSetText("friend_name_label", "Multiple friends...");
+ multiple_selected = TRUE;
+ }
+ else
+ {
+ childSetText("friend_name_label", mFriendsList->getFirstSelected()->getColumn(LIST_FRIEND_NAME)->getText() + "...");
+ }
}
+ else
+ {
+ childSetText("friend_name_label", "");
+ }
+
+
//Options that can only be performed with one friend selected
childSetEnabled("profile_btn", single_selected && !multiple_selected);
childSetEnabled("pay_btn", single_selected && !multiple_selected);
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index 7c29460f0e..685cf94430 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -966,6 +966,7 @@ void LLPanelGridTools::flushMapVisibilityCachesConfirm(S32 option, void* data)
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", "refreshmapvisibility");
msg->addUUID("Invoice", LLUUID::null);
@@ -1358,6 +1359,7 @@ void LLPanelRequestTools::sendRequest(const char *request,
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", request);
msg->addUUID("Invoice", LLUUID::null);
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
new file mode 100644
index 0000000000..40132ce375
--- /dev/null
+++ b/indra/newview/llfloaterinspect.cpp
@@ -0,0 +1,221 @@
+#include "llviewerprecompiledheaders.h"
+#include "llfloateravatarinfo.h"
+#include "llfloaterinspect.h"
+#include "llfloatertools.h"
+#include "llcachename.h"
+#include "llscrolllistctrl.h"
+#include "llselectmgr.h"
+#include "lltoolcomp.h"
+#include "lltoolmgr.h"
+#include "llviewercontrol.h"
+#include "llviewerobject.h"
+#include "llvieweruictrlfactory.h"
+
+LLFloaterInspect* LLFloaterInspect::sInstance = NULL;
+
+LLFloaterInspect::LLFloaterInspect(void) :
+ LLFloater("Inspect Object"),
+ mDirty(FALSE)
+{
+ sInstance = this;
+ gUICtrlFactory->buildFloater(this, "floater_inspect.xml");
+}
+
+LLFloaterInspect::~LLFloaterInspect(void)
+{
+ if(!gFloaterTools->getVisible())
+ {
+ if(gToolMgr->getCurrentTool(MASK_NONE) == gToolInspect)
+ {
+ select_tool(gToolNull);
+ }
+ gSelectMgr->deselectAll();
+ // Switch back to basic toolset
+ gCurrentToolset = gBasicToolset;
+ gBasicToolset->selectFirstTool();
+ gToolMgr->useSelectedTool( gBasicToolset );
+ }
+ else
+ {
+ gFloaterTools->setFocus(TRUE);
+ }
+ sInstance = NULL;
+}
+
+BOOL LLFloaterInspect::isVisible()
+{
+ return (!!sInstance);
+}
+
+void LLFloaterInspect::show(void* ignored)
+{
+ if(sInstance)
+ {
+ sInstance->open();
+ }
+ else
+ {
+ LLFloaterInspect* self = new LLFloaterInspect;
+ self->open();
+ }
+ select_tool(gToolInspect);
+}
+
+void LLFloaterInspect::onClickCreatorProfile(void* ctrl)
+{
+ if(sInstance->mObjectList->getAllSelected().size() == 0) return;
+ LLSelectNode* obj = gSelectMgr->getFirstNode();
+ LLUUID obj_id, creator_id;
+ obj_id = sInstance->mObjectList->getFirstSelected()->getUUID();
+ while(obj)
+ {
+ if(obj_id == obj->getObject()->getID())
+ {
+ creator_id = obj->mPermissions->getCreator();
+ break;
+ }
+ obj = gSelectMgr->getNextNode();
+ }
+ if(obj)
+ {
+ LLFloaterAvatarInfo::showFromDirectory(creator_id);
+ }
+}
+
+void LLFloaterInspect::onClickOwnerProfile(void* ctrl)
+{
+ if(sInstance->mObjectList->getAllSelected().size() == 0) return;
+ LLSelectNode* obj = gSelectMgr->getFirstNode();
+ LLUUID obj_id, owner_id;
+ obj_id = sInstance->mObjectList->getFirstSelected()->getUUID();
+ while(obj)
+ {
+ if(obj_id == obj->getObject()->getID())
+ {
+ owner_id = obj->mPermissions->getOwner();
+ break;
+ }
+ obj = gSelectMgr->getNextNode();
+ }
+ if(obj)
+ {
+ LLFloaterAvatarInfo::showFromDirectory(owner_id);
+ }
+}
+
+BOOL LLFloaterInspect::postBuild()
+{
+ mObjectList = LLUICtrlFactory::getScrollListByName(this, "object_list");
+ childSetAction("button owner",onClickOwnerProfile, this);
+ childSetAction("button creator",onClickCreatorProfile, this);
+ childSetCommitCallback("object_list", onSelectObject);
+ refresh();
+ return TRUE;
+}
+
+void LLFloaterInspect::onSelectObject(LLUICtrl* ctrl, void* user_data)
+{
+ if(LLFloaterInspect::getSelectedUUID() != LLUUID::null)
+ {
+ sInstance->childSetEnabled("button owner", true);
+ sInstance->childSetEnabled("button creator", true);
+ }
+}
+
+LLUUID LLFloaterInspect::getSelectedUUID()
+{
+ if(sInstance)
+ {
+ if(sInstance->mObjectList->getAllSelected().size() > 0) return sInstance->mObjectList->getFirstSelected()->getUUID();
+ }
+ return LLUUID::null;
+}
+
+void LLFloaterInspect::refresh()
+{
+ LLUUID creator_id;
+ LLString creator_name;
+ S32 pos = mObjectList->getScrollPos();
+ childSetEnabled("button owner", false);
+ childSetEnabled("button creator", false);
+ LLUUID selected_uuid;
+ S32 selected_index = mObjectList->getFirstSelectedIndex();
+ if(selected_index > -1) selected_uuid = mObjectList->getFirstSelected()->getUUID();
+ mObjectList->operateOnAll(LLScrollListCtrl::OP_DELETE);
+ //List all transient objects, then all linked objects
+ LLSelectNode* obj = gSelectMgr->getFirstNode();
+ LLSD row;
+ while(obj)
+ {
+ char owner_first_name[MAX_STRING], owner_last_name[MAX_STRING];
+ char creator_first_name[MAX_STRING], creator_last_name[MAX_STRING];
+ char time[MAX_STRING];
+ std::ostringstream owner_name, creator_name, date;
+ time_t timestamp = (time_t) (obj->mCreationDate/1000000);
+ LLString::copy(time, ctime(&timestamp), MAX_STRING);
+ time[24] = '\0';
+ date << obj->mCreationDate;
+ gCacheName->getName(obj->mPermissions->getOwner(), owner_first_name, owner_last_name);
+ owner_name << owner_first_name << " " << owner_last_name;
+ gCacheName->getName(obj->mPermissions->getCreator(), creator_first_name, creator_last_name);
+ creator_name << creator_first_name << " " << creator_last_name;
+ row["id"] = obj->getObject()->getID();
+ row["columns"][0]["column"] = "object_name";
+ row["columns"][0]["type"] = "text";
+ // make sure we're either at the top of the link chain
+ // or top of the editable chain, for attachments
+ if(!(obj->getObject()->isRoot() || obj->getObject()->isRootEdit()))
+ {
+ row["columns"][0]["value"] = LLString(" ") + obj->mName;
+ }
+ else
+ {
+ row["columns"][0]["value"] = obj->mName;
+ }
+ row["columns"][1]["column"] = "owner_name";
+ row["columns"][1]["type"] = "text";
+ row["columns"][1]["value"] = owner_name.str().c_str();
+ row["columns"][2]["column"] = "creator_name";
+ row["columns"][2]["type"] = "text";
+ row["columns"][2]["value"] = creator_name.str().c_str();
+ row["columns"][3]["column"] = "creation_date";
+ row["columns"][3]["type"] = "text";
+ row["columns"][3]["value"] = time;
+ mObjectList->addElement(row, ADD_TOP);
+ obj = gSelectMgr->getNextNode();
+ }
+ if(selected_index > -1 && mObjectList->getItemIndex(selected_uuid) == selected_index)
+ {
+ mObjectList->selectNthItem(selected_index);
+ }
+ else
+ {
+ mObjectList->selectNthItem(0);
+ }
+ onSelectObject(this, NULL);
+ mObjectList->setScrollPos(pos);
+}
+
+void LLFloaterInspect::onFocusReceived()
+{
+ select_tool(gToolInspect);
+}
+
+void LLFloaterInspect::dirty()
+{
+ if(sInstance)
+ {
+ sInstance->setDirty();
+ }
+}
+
+void LLFloaterInspect::draw()
+{
+ if (mDirty)
+ {
+ refresh();
+ mDirty = FALSE;
+ }
+
+ LLFloater::draw();
+} \ No newline at end of file
diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h
new file mode 100644
index 0000000000..68c4f729bb
--- /dev/null
+++ b/indra/newview/llfloaterinspect.h
@@ -0,0 +1,47 @@
+/**
+* @file llfloaterfriends.h
+* @author Cube
+* @date 2006-12-16
+* @brief Declaration of class for displaying object attributes
+*
+* Copyright (c) 2005-$CurrentYear$, Linden Research, Inc.
+* $License$
+*/
+
+#ifndef LL_LLFLOATERINSPECT_H
+#define LL_LLFLOATERINSPECT_H
+
+#include "llfloater.h"
+
+//class LLTool;
+class LLScrollListCtrl;
+class LLUICtrl;
+
+class LLFloaterInspect : public LLFloater
+{
+public:
+ virtual ~LLFloaterInspect(void);
+ static void show(void* ignored = NULL);
+ virtual BOOL postBuild();
+ static void dirty();
+ static LLUUID getSelectedUUID();
+ virtual void draw();
+ virtual void refresh();
+ static BOOL isVisible();
+ virtual void onFocusReceived();
+ static void onClickCreatorProfile(void* ctrl);
+ static void onClickOwnerProfile(void* ctrl);
+ static void onSelectObject(LLUICtrl* ctrl, void* user_data);
+ LLScrollListCtrl* mObjectList;
+protected:
+ // protected members
+ LLFloaterInspect();
+ void setDirty() { mDirty = TRUE; }
+ bool mDirty;
+
+private:
+ // static data
+ static LLFloaterInspect* sInstance;
+};
+
+#endif //LL_LLFLOATERINSPECT_H \ No newline at end of file
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 4bd3a4ee49..297d5941f2 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -448,6 +448,7 @@ void LLPanelRegionInfo::sendEstateOwnerMessage(
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", request);
msg->addUUID("Invoice", invoice);
@@ -1788,6 +1789,7 @@ void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", "estateaccessdelta");
@@ -2045,6 +2047,7 @@ void LLPanelEstateInfo::commitEstateInfo()
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", "estatechangeinfo");
@@ -2082,7 +2085,7 @@ void LLPanelEstateInfo::setEstateFlags(U32 flags)
childSetValue("deny_anonymous", LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
childSetValue("deny_identified", LLSD(flags & REGION_FLAGS_DENY_IDENTIFIED ? TRUE : FALSE) );
childSetValue("deny_transacted", LLSD(flags & REGION_FLAGS_DENY_TRANSACTED ? TRUE : FALSE) );
-
+ childSetVisible("abuse_email_text", flags & REGION_FLAGS_ABUSE_EMAIL_TO_ESTATE_OWNER);
}
U32 LLPanelEstateInfo::computeEstateFlags()
@@ -2604,6 +2607,7 @@ void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id)
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", "estatechangecovenantid");
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 3b76aa038b..5dadac22be 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -35,6 +35,7 @@
#include "llscrolllistctrl.h"
#include "llimview.h"
#include "lltextbox.h"
+#include "lldispatcher.h"
#include "llviewertexteditor.h"
#include "llviewerobject.h"
#include "llviewerregion.h"
@@ -51,6 +52,7 @@
#include "llviewermenu.h" // for LLResourceData
#include "llviewerwindow.h"
#include "llviewerimagelist.h"
+#include "llworldmap.h"
#include "llfilepicker.h"
#include "llfloateravatarpicker.h"
#include "lldir.h"
@@ -70,6 +72,13 @@ const U32 INCLUDE_SCREENSHOT = 0x01 << 0;
// there can only be one instance of each reporter type
LLMap< EReportType, LLFloaterReporter* > gReporterInstances;
+// keeps track of where email is going to - global to avoid a pile
+// of static/non-static access outside my control
+namespace {
+ static BOOL gEmailToEstateOwner = FALSE;
+ static BOOL gDialogVisible = FALSE;
+}
+
//-----------------------------------------------------------------------------
// Member functions
//-----------------------------------------------------------------------------
@@ -81,8 +90,9 @@ LLFloaterReporter::LLFloaterReporter(
:
LLFloater(name, rect, title),
mReportType(report_type),
- mObjectID( ),
+ mObjectID(),
mScreenID(),
+ mAbuserID(),
mDeselectOnClose( FALSE ),
mPicking( FALSE),
mPosition(),
@@ -101,7 +111,9 @@ LLFloaterReporter::LLFloaterReporter(
if (regionp)
{
childSetText("sim_field", regionp->getName() );
+ childSetText("abuse_location_edit", regionp->getName() );
}
+
LLButton* pick_btn = LLUICtrlFactory::getButtonByName(this, "pick_btn");
if (pick_btn)
{
@@ -113,6 +125,7 @@ LLFloaterReporter::LLFloaterReporter(
if (report_type != BUG_REPORT)
{
+ // abuser name is selected from a list
LLLineEditor* le = (LLLineEditor*)getCtrlByNameAndType("abuser_name_edit", WIDGET_TYPE_LINE_EDITOR);
le->setEnabled( FALSE );
}
@@ -146,8 +159,40 @@ LLFloaterReporter::LLFloaterReporter(
childSetFocus("summary_edit");
mDefaultSummary = childGetText("details_edit");
+
+ gDialogVisible = TRUE;
+
+ // only request details for abuse reports (not BUG reports)
+ if (report_type != BUG_REPORT)
+ {
+ // send a message and ask for information about this region -
+ // result comes back in processRegionInfo(..)
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("RequestRegionInfo");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ gAgent.sendReliableMessage();
+ };
}
+// static
+void LLFloaterReporter::processRegionInfo(LLMessageSystem* msg)
+{
+ U32 region_flags;
+ msg->getU32("RegionInfo", "RegionFlags", region_flags);
+ gEmailToEstateOwner = ( region_flags & REGION_FLAGS_ABUSE_EMAIL_TO_ESTATE_OWNER );
+
+ if ( gDialogVisible )
+ {
+ if ( gEmailToEstateOwner )
+ {
+ gViewerWindow->alertXml("HelpReportAbuseEmailEO");
+ }
+ else
+ gViewerWindow->alertXml("HelpReportAbuseEmailLL");
+ };
+}
// virtual
LLFloaterReporter::~LLFloaterReporter()
@@ -170,8 +215,28 @@ LLFloaterReporter::~LLFloaterReporter()
{
gSelectMgr->deselectTransient();
}
+
+ gDialogVisible = FALSE;
}
+// virtual
+void LLFloaterReporter::draw()
+{
+ // this is set by a static callback sometime after the dialog is created.
+ // Only disable screenshot for abuse reports to estate owners - bug reports always
+ // allow screenshots to be taken.
+ if ( gEmailToEstateOwner && ( mReportType != BUG_REPORT ) )
+ {
+ childSetValue("screen_check", FALSE );
+ childSetEnabled("screen_check", FALSE );
+ }
+ else
+ {
+ childSetEnabled("screen_check", TRUE );
+ }
+
+ LLFloater::draw();
+}
void LLFloaterReporter::enableControls(BOOL enable)
{
@@ -190,7 +255,6 @@ void LLFloaterReporter::enableControls(BOOL enable)
childSetEnabled("cancel_btn", enable);
}
-
void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
{
// TODO --
@@ -274,6 +338,7 @@ void LLFloaterReporter::onClickSelectAbuser(void *userdata)
gFloaterView->getParentFloater(self)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarID, userdata, FALSE, TRUE ));
}
+// static
void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data)
{
LLFloaterReporter* self = (LLFloaterReporter*) data;
@@ -285,6 +350,8 @@ void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names,
{
self->childSetText("abuser_name_edit", names[0] );
+ self->mAbuserID = ids[0];
+
self->refresh();
};
}
@@ -400,7 +467,7 @@ void LLFloaterReporter::showFromMenu(EReportType report_type)
}
else
{
- gViewerWindow->alertXml("HelpReportAbuse");
+ // popup for abuse reports is triggered elsewhere
}
// grab the user's name
@@ -550,10 +617,31 @@ void LLFloaterReporter::sendReport()
msg->addU8(_PREHASH_Category, category);
msg->addVector3Fast(_PREHASH_Position, mPosition);
msg->addU8Fast(_PREHASH_CheckFlags, (U8) check_flags);
- LLSD screenshot_id = childGetValue("screenshot");
+
+ // only send a screenshot ID if we're asked too and the email is
+ // going to LL - Estate Owners cannot see the screenshot asset
+ LLSD screenshot_id = LLUUID::null;
+ if (childGetValue("screen_check"))
+ {
+ if ( mReportType != BUG_REPORT )
+ {
+ if ( gEmailToEstateOwner == FALSE )
+ {
+ screenshot_id = childGetValue("screenshot");
+ }
+ }
+ else
+ {
+ screenshot_id = childGetValue("screenshot");
+ };
+ };
msg->addUUIDFast(_PREHASH_ScreenshotID, screenshot_id);
msg->addUUIDFast(_PREHASH_ObjectID, mObjectID);
-
+
+ msg->addUUID("AbuserID", mAbuserID );
+ msg->addString("AbuseRegionName", "");
+ msg->addUUID("AbuseRegionID", LLUUID::null);
+
std::ostringstream summary;
if (!gInProductionGrid)
{
@@ -622,7 +710,7 @@ void LLFloaterReporter::sendReport()
if ( mReportType != BUG_REPORT )
{
details << "Abuser name: " << childGetText("abuser_name_edit") << " \n";
- details << " Abuser location: " << childGetText("abuse_location_edit") << " \n";
+ details << "Abuser location: " << childGetText("abuse_location_edit") << " \n";
};
details << childGetValue("details_edit").asString();
@@ -640,16 +728,6 @@ void LLFloaterReporter::sendReport()
gGLManager.mDriverVersionVendorString.c_str());
msg->addString("VersionString", version_string);
- std::list<LLMeanCollisionData*>::iterator it;
- for (it = mMCDList.begin(); it != mMCDList.end(); ++it)
- {
- LLMeanCollisionData *mcd = *it;
- msg->nextBlockFast(_PREHASH_MeanCollision);
- msg->addUUIDFast(_PREHASH_Perp, mcd->mPerp);
- msg->addU32Fast(_PREHASH_Time, mcd->mTime);
- msg->addF32Fast(_PREHASH_Mag, mcd->mMag);
- msg->addU8Fast(_PREHASH_Type, mcd->mType);
- }
msg->sendReliable(regionp->getHost());
close();
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
index a23424f9b4..795ef45e53 100644
--- a/indra/newview/llfloaterreporter.h
+++ b/indra/newview/llfloaterreporter.h
@@ -62,6 +62,8 @@ public:
EReportType = UNKNOWN_REPORT);
/*virtual*/ ~LLFloaterReporter();
+ virtual void draw();
+
// Enables all buttons
static void showFromMenu(EReportType report_type);
@@ -81,6 +83,9 @@ public:
static LLFloaterReporter* createNewAbuseReporter();
static LLFloaterReporter* createNewBugReporter();
+ // static
+ static void processRegionInfo(LLMessageSystem* msg);
+
void setPickedObjectProperties(const char *object_name, const char *owner_name);
void uploadScreenshot();
@@ -96,6 +101,7 @@ private:
EReportType mReportType;
LLUUID mObjectID;
LLUUID mScreenID;
+ LLUUID mAbuserID;
BOOL mDeselectOnClose;
BOOL mPicking;
LLVector3 mPosition;
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp
index f27cf55b3a..9c2fb04f46 100644
--- a/indra/newview/llfloatertelehub.cpp
+++ b/indra/newview/llfloatertelehub.cpp
@@ -211,6 +211,7 @@ void LLFloaterTelehub::onClickRemoveSpawnPoint(void* data)
{
msg->newMessage("EstateOwnerMessage");
}
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("AgentData");
msg->addUUID("AgentID", gAgent.getID());
msg->addUUID("SessionID", gAgent.getSessionID());
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 6f675236b3..11665f484a 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -164,15 +164,15 @@ BOOL LLFloaterTools::postBuild()
LLRect rect;
mBtnFocus = LLUICtrlFactory::getButtonByName(this,"button focus");//btn;
- childSetAction("button focus",select_tool, (void*)gToolCamera);
+ childSetAction("button focus",LLFloaterTools::setEditTool, (void*)gToolCamera);
mBtnMove = LLUICtrlFactory::getButtonByName(this,"button move");
- childSetAction("button move",select_tool, (void*)gToolGrab);
+ childSetAction("button move",LLFloaterTools::setEditTool, (void*)gToolGrab);
mBtnEdit = LLUICtrlFactory::getButtonByName(this,"button edit");
- childSetAction("button edit",select_tool, (void*)gToolTranslate);
+ childSetAction("button edit",LLFloaterTools::setEditTool, (void*)gToolTranslate);
mBtnCreate = LLUICtrlFactory::getButtonByName(this,"button create");
- childSetAction("button create",select_tool, (void*)gToolCreate);
+ childSetAction("button create",LLFloaterTools::setEditTool, (void*)gToolCreate);
mBtnLand = LLUICtrlFactory::getButtonByName(this, "button land" );
- childSetAction("button land",select_tool, (void*)gToolParcel);
+ childSetAction("button land",LLFloaterTools::setEditTool, (void*)gToolParcel);
mTextStatus = LLUICtrlFactory::getTextBoxByName(this,"text status");
mRadioZoom = LLUICtrlFactory::getCheckBoxByName(this,"radio zoom");
mSliderZoom = LLViewerUICtrlFactory::getVolumeSliderByName(this,"slider zoom");
@@ -364,7 +364,8 @@ LLFloaterTools::LLFloaterTools()
mPanelLandInfo(NULL),
mTabLand(NULL),
- mDirty(TRUE)
+ mDirty(TRUE),
+ mLastTool(gToolNull)
{
mAutoFocus = FALSE;
LLCallbackMap::map_t factory_map;
@@ -392,7 +393,6 @@ LLFloaterTools::~LLFloaterTools()
// children automatically deleted
}
-
void LLFloaterTools::setStatusText(const LLString& text)
{
mTextStatus->setText(text);
@@ -852,7 +852,7 @@ void click_popup_dozer_mode(LLUICtrl *, void *user)
{
S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners");
S32 mode = (S32)(intptr_t) user;
- select_tool( gToolLand );
+ gFloaterTools->setEditTool( gToolLand );
gSavedSettings.setS32("RadioLandBrushAction", mode);
gSavedSettings.setBOOL("ShowParcelOwners", show_owners);
}
@@ -877,7 +877,7 @@ void click_apply_to_selection(void* user)
void commit_select_tool(LLUICtrl *ctrl, void *data)
{
S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners");
- select_tool(data);
+ gFloaterTools->setEditTool(data);
gSavedSettings.setBOOL("ShowParcelOwners", show_owners);
}
@@ -929,3 +929,22 @@ void LLFloaterTools::onClickGridOptions(void* data)
// RN: this makes grid options dependent on build tools window
//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
}
+
+void LLFloaterTools::saveLastTool()
+{
+ mLastTool = gToolMgr->getCurrentTool( MASK_NONE );
+}
+
+void LLFloaterTools::setEditTool(void* tool_pointer)
+{
+ select_tool(tool_pointer);
+ if(gFloaterTools && tool_pointer != gToolNull)
+ {
+ gFloaterTools->saveLastTool();
+ }
+}
+
+void LLFloaterTools::onFocusReceived()
+{
+ select_tool(mLastTool);
+} \ No newline at end of file
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index 092a8d7715..c1bb050c2c 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -14,6 +14,7 @@
class LLButton;
class LLTextBox;
+class LLTool;
class LLCheckBoxCtrl;
class LLTabContainer;
class LLPanelPermissions;
@@ -69,9 +70,12 @@ public:
void showPanel(EInfoPanel panel);
void setStatusText(const LLString& text);
-
+ virtual void onFocusReceived();
+ static void setEditTool(void* data);
+ void saveLastTool();
private:
static void setObjectType( void* data );
+
void refresh();
static void onClickGridOptions(void* data);
@@ -152,7 +156,8 @@ public:
LLPanelLandInfo *mPanelLandInfo;
LLTabContainer* mTabLand;
-
+ LLTool* mLastTool;
+
private:
BOOL mDirty;
S32 mSmallHeight;
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index f1c4f0d918..cf9ae97b5f 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2535,23 +2535,24 @@ void LLInventoryModel::processSaveAssetIntoInventory(LLMessageSystem* msg,
LLUUID item_id;
msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id);
- LLUUID new_asset_id;
- msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_NewAssetID, new_asset_id);
-
- lldebugs << "LLInventoryModel::processSaveAssetIntoInventory itemID=" << item_id << llendl;
+ // The viewer ignores the asset id because this message is only
+ // used for attachments/objects, so the asset id is not used in
+ // the viewer anyway.
+ lldebugs << "LLInventoryModel::processSaveAssetIntoInventory itemID="
+ << item_id << llendl;
LLViewerInventoryItem* item = gInventory.getItem( item_id );
if( item )
{
- item->setAssetUUID(new_asset_id);
LLCategoryUpdate up(item->getParentUUID(), 0);
gInventory.accountForUpdate(up);
- gInventory.addChangedMask( LLInventoryObserver::INTERNAL, item_id );
+ gInventory.addChangedMask( LLInventoryObserver::INTERNAL, item_id);
gInventory.notifyObservers();
}
else
{
- llinfos << "LLInventoryModel::processSaveAssetIntoInventory item not found: " << item_id << llendl;
+ llinfos << "LLInventoryModel::processSaveAssetIntoInventory item"
+ " not found: " << item_id << llendl;
}
if(gViewerWindow)
{
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 25f08322be..b8bd559704 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -291,6 +291,7 @@ public:
struct LLInitializedS32
{
LLInitializedS32() : mValue(0) {}
+ LLInitializedS32(S32 value) : mValue(value) {}
S32 mValue;
LLInitializedS32& operator++() { ++mValue; return *this; }
LLInitializedS32& operator--() { --mValue; return *this; }
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 9e23b977d9..d3642838b2 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -137,11 +137,11 @@ void LLPanelPermissions::refresh()
root_selected = FALSE;
}
- BOOL attachment_selected = gSelectMgr->selectionIsAttachment();
-
+ //BOOL attachment_selected = gSelectMgr->selectionIsAttachment();
+ //attachment_selected = false;
LLViewerObject* objectp = NULL;
if(nodep) objectp = nodep->getObject();
- if(!nodep || !objectp || attachment_selected)
+ if(!nodep || !objectp)// || attachment_selected)
{
// ...nothing selected
childSetEnabled("perm_modify",false);
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 175824d866..934b73000b 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -847,7 +847,7 @@ void LLPreviewLSL::loadAsset()
// do the more generic search.
getItem();
}
- if(item && !(item->getAssetUUID().isNull()))
+ if(item)
{
BOOL is_copyable = gAgent.allowOperation(PERM_COPY,
item->getPermissions(), GP_OBJECT_MANIPULATE);
@@ -1153,6 +1153,8 @@ void LLPreviewLSL::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_d
void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type,
void* user_data, S32 status)
{
+ lldebugs << "LLPreviewLSL::onLoadComplete: got uuid " << asset_uuid
+ << llendl;
LLUUID* item_uuid = (LLUUID*)user_data;
LLPreviewLSL* preview = LLPreviewLSL::getInstance(*item_uuid);
if( preview )
@@ -1357,7 +1359,7 @@ void LLLiveLSLEditor::loadAsset(BOOL is_new)
mScriptEd->mEditor->makePristine();
mScriptEd->mEditor->setEnabled(FALSE);
}
- else if(mItem.notNull() && mItem->getAssetUUID().notNull())
+ else if(mItem.notNull())
{
// request the text from the object
LLUUID* user_data = new LLUUID(mItemID ^ mObjectID);
@@ -1435,6 +1437,8 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
LLAssetType::EType type,
void* user_data, S32 status)
{
+ lldebugs << "LLLiveLSLEditor::onLoadComplete: got uuid " << asset_id
+ << llendl;
LLLiveLSLEditor* instance = NULL;
LLUUID* xored_id = (LLUUID*)user_data;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 8f4df36f59..e1a17618cf 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -30,6 +30,7 @@
#include "llagent.h"
#include "llviewerwindow.h"
#include "lldrawable.h"
+#include "llfloaterinspect.h"
#include "llfloaterproperties.h"
#include "llfloaterrate.h"
#include "llfloaterreporter.h"
@@ -97,6 +98,7 @@ F32 LLSelectMgr::sHighlightUAnim = 0.f;
F32 LLSelectMgr::sHighlightVAnim = 0.f;
LLColor4 LLSelectMgr::sSilhouetteParentColor;
LLColor4 LLSelectMgr::sSilhouetteChildColor;
+LLColor4 LLSelectMgr::sHighlightInspectColor;
LLColor4 LLSelectMgr::sHighlightParentColor;
LLColor4 LLSelectMgr::sHighlightChildColor;
LLColor4 LLSelectMgr::sContextSilhouetteColor;
@@ -145,6 +147,7 @@ LLSelectMgr::LLSelectMgr()
sSilhouetteChildColor = gColors.getColor("SilhouetteChildColor");
sHighlightParentColor = gColors.getColor("HighlightParentColor");
sHighlightChildColor = gColors.getColor("HighlightChildColor");
+ sHighlightInspectColor = gColors.getColor("HighlightInspectColor");
sContextSilhouetteColor = gColors.getColor("ContextSilhouetteColor")*0.5f;
sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius");
@@ -2810,7 +2813,7 @@ BOOL LLSelectMgr::selectGetOwner(LLUUID& id, LLString& name)
if(!node->mValid) return FALSE;
LLViewerObject* obj = node->getObject();
if(!obj) return FALSE;
- if(!(obj->isRoot() || obj->isJointChild())) return FALSE;
+ if(!(obj->isRootEdit() || obj->isRoot() || obj->isJointChild())) return FALSE;
BOOL group_owner = FALSE;
id.setNull();
@@ -4660,6 +4663,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
LLUUID owner_id;
LLUUID group_id;
LLUUID last_owner_id;
+ U64 creation_date;
LLUUID extra_id;
U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask;
LLSaleInfo sale_info;
@@ -4671,6 +4675,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_CreatorID, creator_id, i);
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_OwnerID, owner_id, i);
msg->getUUIDFast(_PREHASH_ObjectData, _PREHASH_GroupID, group_id, i);
+ msg->getU64Fast(_PREHASH_ObjectData, _PREHASH_CreationDate, creation_date, i);
msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_BaseMask, base_mask, i);
msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_OwnerMask, owner_mask, i);
msg->getU32Fast(_PREHASH_ObjectData, _PREHASH_GroupMask, group_mask, i);
@@ -4789,6 +4794,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
node->mPermissions->init(creator_id, owner_id,
last_owner_id, group_id);
node->mPermissions->initMasks(base_mask, owner_mask, everyone_mask, group_mask, next_owner_mask);
+ node->mCreationDate = creation_date;
node->mItemID = item_id;
node->mFolderID = folder_id;
node->mFromTaskID = from_task_id;
@@ -5013,22 +5019,8 @@ void LLSelectMgr::updateSilhouettes()
}
}
}
-
- //if (!gFloaterTools || !gFloaterTools->getVisible())
- //{
- // node->renderOneSilhouette(sContextSilhouetteColor);
- //}
- //else if (objectp->isRootEdit())
- //{
- // node->renderOneSilhouette(sSilhouetteParentColor);
- //}
- //else
- //{
- // node->renderOneSilhouette(sSilhouetteChildColor);
- //}
}
}
- //mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
}
if (mRectSelectedObjects.size() > 0)
@@ -5245,6 +5237,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
if (mSelectedObjects.getNumNodes())
{
glPushAttrib(GL_FOG_BIT);
+ LLUUID inspect_item_id = LLFloaterInspect::getSelectedUUID();
for (S32 pass = 0; pass < 2; pass++)
{
for (node = mSelectedObjects.getFirstNode(); node; node = mSelectedObjects.getNextNode() )
@@ -5254,7 +5247,11 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
{
continue;
}
- if (node->isTransient())
+ if(objectp->getID() == inspect_item_id)
+ {
+ node->renderOneSilhouette(sHighlightInspectColor);
+ }
+ else if (node->isTransient())
{
BOOL oldHidden = LLSelectMgr::sRenderHiddenSelections;
LLSelectMgr::sRenderHiddenSelections = FALSE;
@@ -5850,6 +5847,7 @@ void dialog_refresh_all()
}
LLFloaterProperties::dirtyAll();
+ LLFloaterInspect::dirty();
}
S32 get_family_count(LLViewerObject *parent)
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 77039213d4..77c1206b89 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -166,6 +166,7 @@ public:
static LLColor4 sSilhouetteChildColor;
static LLColor4 sHighlightParentColor;
static LLColor4 sHighlightChildColor;
+ static LLColor4 sHighlightInspectColor;
static LLColor4 sContextSilhouetteColor;
public:
LLSelectMgr();
@@ -605,6 +606,7 @@ public:
LLUUID mFromTaskID;
LLString mTouchName;
LLString mSitName;
+ U64 mCreationDate;
std::vector<LLColor4> mSavedColors;
std::vector<LLUUID> mSavedTextures;
std::vector<LLVector3> mTextureScaleRatios;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 74c1d44329..2119bf2d70 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -796,6 +796,7 @@ BOOL idle_startup()
case USERSERVER_DURGA:
case USERSERVER_SOMA:
case USERSERVER_GANGA:
+ case USERSERVER_UMA:
{
const char* host_name = gUserServerDomainName[gUserServerChoice].mName;
sprintf(gUserServerName,"%s", host_name);
@@ -2547,6 +2548,7 @@ void login_show()
LLPanelLogin::addServer( gUserServerDomainName[USERSERVER_DURGA].mLabel, USERSERVER_DURGA );
LLPanelLogin::addServer( gUserServerDomainName[USERSERVER_SHAKTI].mLabel, USERSERVER_SHAKTI );
LLPanelLogin::addServer( gUserServerDomainName[USERSERVER_GANGA].mLabel, USERSERVER_GANGA );
+ LLPanelLogin::addServer( gUserServerDomainName[USERSERVER_UMA].mLabel, USERSERVER_UMA );
LLPanelLogin::addServer( gUserServerDomainName[USERSERVER_SOMA].mLabel, USERSERVER_SOMA );
}
diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp
index f295c66ee1..945a172b1c 100644
--- a/indra/newview/lltoolcomp.cpp
+++ b/indra/newview/lltoolcomp.cpp
@@ -39,6 +39,7 @@ const S32 BUTTON_WIDTH_BIG = 48;
const S32 HPAD = 4;
// Globals
+LLToolCompInspect *gToolInspect = NULL;
LLToolCompTranslate *gToolTranslate = NULL;
LLToolCompScale *gToolStretch = NULL;
LLToolCompRotate *gToolRotate = NULL;
@@ -47,6 +48,7 @@ LLToolCompGun *gToolGun = NULL;
extern LLControlGroup gSavedSettings;
+
//-----------------------------------------------------------------------
// LLToolComposite
@@ -109,6 +111,64 @@ void LLToolComposite::handleSelect()
}
//----------------------------------------------------------------------------
+// LLToolCompInspect
+//----------------------------------------------------------------------------
+
+LLToolCompInspect::LLToolCompInspect()
+: LLToolComposite("Inspect")
+{
+ mSelectRect = new LLToolSelectRect(this);
+ mDefault = mSelectRect;
+}
+
+
+LLToolCompInspect::~LLToolCompInspect()
+{
+ delete mSelectRect;
+ mSelectRect = NULL;
+}
+
+BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ mMouseDown = TRUE;
+ gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, pickCallback);
+ return TRUE;
+}
+
+void LLToolCompInspect::pickCallback(S32 x, S32 y, MASK mask)
+{
+ LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
+
+ if (!gToolInspect->mMouseDown)
+ {
+ // fast click on object, but mouse is already up...just do select
+ gToolInspect->mSelectRect->handleObjectSelection(hit_obj, mask, !gSavedSettings.getBOOL("SelectLinkedSet"), FALSE);
+ return;
+ }
+
+ if( hit_obj )
+ {
+ if (gSelectMgr->getObjectCount())
+ {
+ gEditMenuHandler = gSelectMgr;
+ }
+ gToolInspect->setCurrentTool( gToolInspect->mSelectRect );
+ gToolInspect->mSelectRect->handleMouseDown( x, y, mask );
+
+ }
+ else
+ {
+ gToolInspect->setCurrentTool( gToolInspect->mSelectRect );
+ gToolInspect->mSelectRect->handleMouseDown( x, y, mask);
+ }
+}
+
+BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+ return TRUE;
+}
+
+//----------------------------------------------------------------------------
// LLToolCompTranslate
//----------------------------------------------------------------------------
@@ -202,12 +262,9 @@ BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
gFloaterTools->showPanel(LLFloaterTools::PANEL_CONTENTS);
return TRUE;
}
- else
- {
- // Nothing selected means the first mouse click was probably
- // bad, so try again.
- return FALSE;
- }
+ // Nothing selected means the first mouse click was probably
+ // bad, so try again.
+ return FALSE;
}
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
index cb1ec33f1b..c319904ee8 100644
--- a/indra/newview/lltoolcomp.h
+++ b/indra/newview/lltoolcomp.h
@@ -81,6 +81,22 @@ public:
//-----------------------------------------------------------------------
// LLToolCompTranslate
+class LLToolCompInspect : public LLToolComposite
+{
+public:
+ LLToolCompInspect();
+ virtual ~LLToolCompInspect();
+
+ // Overridden from LLToolComposite
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+};
+
+//-----------------------------------------------------------------------
+// LLToolCompTranslate
+
class LLToolCompTranslate : public LLToolComposite
{
public:
@@ -88,16 +104,15 @@ public:
virtual ~LLToolCompTranslate();
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
virtual void render();
static void pickCallback(S32 x, S32 y, MASK mask);
};
-
//-----------------------------------------------------------------------
// LLToolCompScale
@@ -191,6 +206,7 @@ protected:
LLTool* mNull;
};
+extern LLToolCompInspect *gToolInspect;
extern LLToolCompTranslate *gToolTranslate;
extern LLToolCompScale *gToolStretch;
extern LLToolCompRotate *gToolRotate;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index 99271e18c5..2c69db10c5 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -160,6 +160,12 @@ void LLToolMgr::initTools()
gMouselookToolset->addTool( gToolGun );
//
+ // Inspect tool
+ //
+ gToolInspect = new LLToolCompInspect();
+ gBasicToolset->addTool( gToolInspect );
+
+ //
// Face edit tool
//
// gToolMorph = new LLToolMorph();
@@ -328,6 +334,12 @@ LLTool* LLToolMgr::getCurrentTool(MASK override_mask)
mOverrideTool = NULL;
return mCurrentTool;
}
+ else if (mCurrentTool == gToolInspect)
+ {
+ // ...can't switch out of grab
+ mOverrideTool = NULL;
+ return mCurrentTool;
+ }
else
{
// ...can switch between editing tools
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a305c1cfa4..a899d3d3d2 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -84,6 +84,7 @@
#include "llfloaterhtmlhelp.h"
#include "llfloaterhtmlfind.h"
#include "llfloaterimport.h"
+#include "llfloaterinspect.h"
#include "llfloaterland.h"
#include "llfloaterlandholdings.h"
#include "llfloatermap.h"
@@ -920,31 +921,6 @@ void init_client_menu(LLMenuGL* menu)
menu->createJumpKeys();
}
-void handle_upload_data(void*)
-{
- LLFilePicker& picker = LLFilePicker::instance();
- if(!picker.getOpenFile())
- {
- llwarns << "No file" << llendl;
- return;
- }
- const char* filename = picker.getFirstFile();
- S32 index = strlen(filename);
- char delim = gDirUtilp->getDirDelimiter()[0];
- while(index && filename[index--] != delim);
- index += 2;
- const char* basename = &filename[index];
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("InitiateUpload");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->nextBlock("FileData");
- msg->addString("BaseFilename", basename);
- msg->addString("SourceFilename", filename);
- gAgent.sendReliableMessage();
-}
-
void init_debug_world_menu(LLMenuGL* menu)
{
menu->append(new LLMenuItemCheckGL("Mouse Moves Sun",
@@ -1414,14 +1390,6 @@ void init_server_menu(LLMenuGL* menu)
menu->appendSeparator();
- menu->append(new LLMenuItemCallGL("Upload Data File...",
- &handle_upload_data,
- &enable_god_customer_service,
- NULL));
-
-
- menu->appendSeparator();
-
menu->append(new LLMenuItemCallGL("Save Region State",
&LLPanelRegionTools::onSaveState, &enable_god_customer_service, NULL));
@@ -1801,7 +1769,7 @@ class LLObjectEdit : public view_listener_t
gFloaterTools->open();
gCurrentToolset = gBasicToolset;
- gCurrentToolset->selectTool( gToolTranslate );
+ gFloaterTools->setEditTool( gToolTranslate );
// Could be first use
LLFirstUse::useBuild();
@@ -1809,6 +1777,16 @@ class LLObjectEdit : public view_listener_t
}
};
+class LLObjectInspect : public view_listener_t
+{
+ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
+ {
+ gSelectMgr->convertTransient();
+ LLFloaterInspect::show();
+ return true;
+ }
+};
+
//---------------------------------------------------------------------------
// Land pie menu
@@ -2454,12 +2432,14 @@ void handle_buy_object(LLSaleInfo sale_info)
return;
}
+ gSelectMgr->convertTransient();
LLFloaterBuy::show(sale_info);
}
void handle_buy_contents(LLSaleInfo sale_info)
{
+ gSelectMgr->convertTransient();
LLFloaterBuyContents::show(sale_info);
}
@@ -2575,7 +2555,7 @@ void set_god_level(U8 god_level)
gParcelMgr->notifyObservers();
// Some classifieds change visibility on god mode
- LLFloaterDirectory::requestClassified();
+ LLFloaterDirectory::requestClassifieds();
// God mode changes sim visibility
gWorldMap->reset();
@@ -3409,6 +3389,7 @@ void handle_claim_public_land(void*)
msg->nextBlock("AgentData");
msg->addUUID("AgentID", gAgent.getID());
msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", "claimpublicland");
msg->addUUID("Invoice", LLUUID::null);
@@ -8771,6 +8752,7 @@ void initialize_menu_actions()
(new LLObjectMute())->registerListener(gMenuHolder, "Object.Mute");
(new LLObjectBuy())->registerListener(gMenuHolder, "Object.Buy");
(new LLObjectEdit())->registerListener(gMenuHolder, "Object.Edit");
+ (new LLObjectInspect())->registerListener(gMenuHolder, "Object.Inspect");
(new LLObjectEnableOpen())->registerListener(gMenuHolder, "Object.EnableOpen");
(new LLObjectEnableTouch())->registerListener(gMenuHolder, "Object.EnableTouch");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 994a2a4659..eabc81994f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -206,8 +206,9 @@ void process_logout_reply(LLMessageSystem* msg, void**)
llwarns << "Bogus Logout Reply" << llendl;
}
+ LLInventoryModel::update_map_t parents;
S32 count = msg->getNumberOfBlocksFast( _PREHASH_InventoryData );
- for( S32 i = 0; i < count; i++ )
+ for(S32 i = 0; i < count; ++i)
{
LLUUID item_id;
msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
@@ -218,36 +219,25 @@ void process_logout_reply(LLMessageSystem* msg, void**)
break;
}
-
- // Update our the asset ids of the inventory items we're currently wearing.
- LLUUID new_asset_id;
- msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_NewAssetID, new_asset_id, i);
-
+ // We do not need to track the asset ids, just account for an
+ // updated inventory version.
llinfos << "process_logout_reply itemID=" << item_id << llendl;
LLInventoryItem* item = gInventory.getItem( item_id );
if( item )
{
- item->setAssetUUID(new_asset_id);
-
- gInventory.addChangedMask( LLInventoryObserver::INTERNAL, item_id );
- gInventory.notifyObservers();
+ parents[item->getParentUUID()] = 0;
+ gInventory.addChangedMask(LLInventoryObserver::INTERNAL, item_id);
}
else
{
llinfos << "process_logout_reply item not found: " << item_id << llendl;
}
}
-
- /*
- gLogoutTimer.reset();
- gLogoutMaxTime = LOGOUT_REPLY_TIME;
- gViewerWindow->setProgressString("Logging out...");
-
- if (gNoRender)
+ if(!parents.empty())
{
- // Hack so drones can quit with new logout process
- */
-
+ gInventory.accountForUpdate(parents);
+ gInventory.notifyObservers();
+ }
app_force_quit(NULL);
}
@@ -4950,6 +4940,7 @@ void send_generic_message(const char* method,
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
msg->nextBlock("MethodData");
msg->addString("Method", method);
msg->addUUID("Invoice", invoice);
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index aecc015e0e..93c2c7e3f3 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -46,6 +46,10 @@ LLUserServerData gUserServerDomainName[USERSERVER_COUNT] =
"userserver.ganga.lindenlab.com",
"https://login.ganga.lindenlab.com/cgi-bin/login.cgi",
"http://ganga-secondlife.webdev.lindenlab.com/helpers/" },
+ { "Uma",
+ "userserver.uma.lindenlab.com",
+ "https://login.uma.lindenlab.com/cgi-bin/login.cgi",
+ "http://uma-secondlife.webdev.lindenlab.com/helpers/" },
{ "Local",
"localhost",
"https://login.dmz.lindenlab.com/cgi-bin/login.cgi",
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index acb1b53525..2de06bf941 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -23,6 +23,7 @@ enum EUserServerDomain
USERSERVER_SHAKTI,
USERSERVER_SOMA,
USERSERVER_GANGA,
+ USERSERVER_UMA,
USERSERVER_LOCAL,
USERSERVER_OTHER, // IP address set via -user or other command line option
USERSERVER_COUNT
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index bcbc81ce5c..09cbf494bc 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -27,6 +27,7 @@
#include "lldir.h"
#include "lleventpoll.h"
#include "llfloatergodtools.h"
+#include "llfloaterreporter.h"
#include "llfloaterregioninfo.h"
#include "llhttpnode.h"
#include "llnetmap.h"
@@ -547,6 +548,7 @@ void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
// send it to 'observers'
LLFloaterGodTools::processRegionInfo(msg);
LLFloaterRegionInfo::processRegionInfo(msg);
+ LLFloaterReporter::processRegionInfo(msg);
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 74a239e827..dc00fe7585 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -74,6 +74,7 @@
#include "llfloatercustomize.h"
#include "llfloatereditui.h" // HACK JAMESDEBUG for ui editor
#include "llfloaterland.h"
+#include "llfloaterinspect.h"
#include "llfloatermap.h"
#include "llfloatermute.h"
#include "llfloaternamedesc.h"
@@ -2513,10 +2514,10 @@ BOOL LLViewerWindow::handlePerFrameHover()
}
}
- if (tool != gToolNull && tool != gToolDragAndDrop && !gSavedSettings.getBOOL("FreezeTime"))
+ if (tool != gToolNull && tool != gToolInspect && tool != gToolCamera && tool != gToolDragAndDrop && !gSavedSettings.getBOOL("FreezeTime"))
{
LLMouseHandler *captor = gFocusMgr.getMouseCapture();
- // With the null tool or drag and drop tool, don't muck
+ // With the null, inspect, or drag and drop tool, don't muck
// with visibility.
if (gFloaterTools->isMinimized() ||
@@ -2525,11 +2526,11 @@ BOOL LLViewerWindow::handlePerFrameHover()
&& !mSuppressToolbox // not override in third person
&& gCurrentToolset != gFaceEditToolset // not special mode
&& gCurrentToolset != gMouselookToolset
- && (!captor || captor->isView())) // not dragging
- )
+ && (!captor || captor->isView())) // not dragging
+ )
{
// Force floater tools to be visible (unless minimized)
- if (!gFloaterTools->isMinimized() && !gFloaterTools->getVisible())
+ if (!gFloaterTools->getVisible())
{
gFloaterTools->open();
}
@@ -2675,6 +2676,7 @@ BOOL LLViewerWindow::handlePerFrameHover()
// sync land selection with edit and about land dialogs
if (gParcelMgr
+ && !gMenuHolder->hasVisibleMenu()
&& !LLFloaterLand::floaterVisible()
&& !LLFloaterBuyLand::isOpen()
&& (!gFloaterTools || !gFloaterTools->getVisible()))