diff options
Diffstat (limited to 'indra/newview')
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(×tamp), 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())) |