summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorCallum Prentice <callum@lindenlab.com>2010-02-12 15:26:08 -0800
committerCallum Prentice <callum@lindenlab.com>2010-02-12 15:26:08 -0800
commitae39812d704a2b92faf213f1626dbe19a34eceb4 (patch)
treec26efa4fb4a033db1d5c65d84fbaade14ec1d756 /indra
parentc0f2f151b226417152adecb507e6b1b7f2a1f8ce (diff)
parent434436ef6b96f74eaf0daf687c6978d5a24d5be7 (diff)
Merge with tip
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/CMakeLists.txt4
-rw-r--r--indra/newview/llagent.cpp4
-rw-r--r--indra/newview/llagentwearables.cpp2
-rw-r--r--indra/newview/llappearancemgr.cpp39
-rw-r--r--indra/newview/llappearancemgr.h3
-rw-r--r--indra/newview/llfloaterevent.cpp324
-rw-r--r--indra/newview/llfloaterevent.h96
-rw-r--r--indra/newview/llfolderviewitem.cpp3
-rw-r--r--indra/newview/llstartup.cpp17
-rw-r--r--indra/newview/lltexturefetch.cpp4
-rw-r--r--indra/newview/llviewerfloaterreg.cpp3
-rw-r--r--indra/newview/llviewerinventory.cpp4
-rw-r--r--indra/newview/llviewertexture.cpp9
-rw-r--r--indra/newview/llvoavatar.cpp11
-rw-r--r--indra/newview/skins/default/textures/textures.xml7
-rw-r--r--indra/newview/skins/default/textures/windows/Volume_Background.pngbin0 -> 589 bytes
-rw-r--r--indra/newview/skins/default/xui/en/floater_event.xml243
-rw-r--r--indra/newview/skins/default/xui/en/panel_volume_pulldown.xml4
18 files changed, 746 insertions, 31 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index cd7c002096..b74530e49a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -161,6 +161,7 @@ set(viewer_SOURCE_FILES
llfloatercustomize.cpp
llfloaterdaycycle.cpp
llfloaterenvsettings.cpp
+ llfloaterevent.cpp
llfloaterfonttest.cpp
llfloatergesture.cpp
llfloatergodtools.cpp
@@ -300,7 +301,6 @@ set(viewer_SOURCE_FILES
llpanelclassified.cpp
llpanelcontents.cpp
llpaneleditwearable.cpp
- llpanelevent.cpp
llpanelface.cpp
llpanelgroup.cpp
llpanelgroupgeneral.cpp
@@ -661,6 +661,7 @@ set(viewer_HEADER_FILES
llfloatercustomize.h
llfloaterdaycycle.h
llfloaterenvsettings.h
+ llfloaterevent.h
llfloaterfonttest.h
llfloatergesture.h
llfloatergodtools.h
@@ -795,7 +796,6 @@ set(viewer_HEADER_FILES
llpanelclassified.h
llpanelcontents.h
llpaneleditwearable.h
- llpanelevent.h
llpanelface.h
llpanelgroup.h
llpanelgroupgeneral.h
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 7929946620..3675be16e9 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -5027,9 +5027,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const
}
}
-BOOL LLAgent::isInGroup(const LLUUID& group_id, BOOL ingnore_God_mod /* FALSE */) const
+BOOL LLAgent::isInGroup(const LLUUID& group_id, BOOL ignore_god_mode /* FALSE */) const
{
- if (!ingnore_God_mod && isGodlike())
+ if (!ignore_god_mode && isGodlike())
return true;
S32 count = mGroups.count();
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index def6e60abd..68ee9cd612 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -2152,6 +2152,8 @@ void LLAgentWearables::updateServer()
void LLAgentWearables::populateMyOutfitsFolder(void)
{
+ llinfos << "starting outfit populate" << llendl;
+
LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch();
// Get the complete information on the items in the inventory and
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 018e9a92a0..eb4a47664b 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -113,6 +113,8 @@ public:
protected:
~LLWearInventoryCategoryCallback()
{
+ llinfos << "done all inventory callbacks" << llendl;
+
// Is the destructor called by ordinary dereference, or because the app's shutting down?
// If the inventory callback manager goes away, we're shutting down, no longer want the callback.
if( LLInventoryCallbackManager::is_instantiated() )
@@ -150,12 +152,15 @@ protected:
void LLOutfitObserver::done()
{
+ llinfos << "done 2nd stage fetch" << llendl;
gInventory.removeObserver(this);
doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this));
}
void LLOutfitObserver::doWearCategory()
{
+ llinfos << "starting" << llendl;
+
// We now have an outfit ready to be copied to agent inventory. Do
// it, and wear that outfit normally.
if(mCopyItems)
@@ -244,6 +249,8 @@ void LLOutfitFetch::done()
// What we do here is get the complete information on the items in
// the library, and set up an observer that will wait for that to
// happen.
+ llinfos << "done first stage fetch" << llendl;
+
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
gInventory.collectDescendents(mCompleteFolders.front(),
@@ -304,6 +311,8 @@ public:
virtual ~LLUpdateAppearanceOnDestroy()
{
+ llinfos << "done update appearance on destroy" << llendl;
+
if (!LLApp::isExiting())
{
LLAppearanceManager::instance().updateAppearanceFromCOF();
@@ -312,6 +321,7 @@ public:
/* virtual */ void fire(const LLUUID& inv_item)
{
+ llinfos << "callback fired" << llendl;
mFireCount++;
}
private:
@@ -708,6 +718,8 @@ void LLAppearanceManager::linkAll(const LLUUID& category,
void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
{
+ llinfos << "starting" << llendl;
+
const LLUUID cof = getCOF();
// Deactivate currently active gestures in the COF, if replacing outfit
@@ -765,6 +777,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
gInventory.notifyObservers();
// Create links to new COF contents.
+ llinfos << "creating LLUpdateAppearanceOnDestroy" << llendl;
LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
linkAll(cof, body_items, link_waiter);
@@ -777,6 +790,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
{
createBaseOutfitLink(category, link_waiter);
}
+ llinfos << "waiting for LLUpdateAppearanceOnDestroy" << llendl;
}
void LLAppearanceManager::updatePanelOutfitName(const std::string& name)
@@ -848,6 +862,8 @@ void LLAppearanceManager::updateAppearanceFromCOF()
{
// update dirty flag to see if the state of the COF matches
// the saved outfit stored as a folder link
+ llinfos << "starting" << llendl;
+
updateIsDirty();
dumpCat(getCOF(),"COF, start");
@@ -978,8 +994,9 @@ void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, b
{
if(!category) return;
- lldebugs << "wearInventoryCategory( " << category->getName()
+ llinfos << "wearInventoryCategory( " << category->getName()
<< " )" << llendl;
+
// What we do here is get the complete information on the items in
// the inventory, and set up an observer that will wait for that to
// happen.
@@ -1008,7 +1025,8 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca
// this up front to avoid having to deal with the case of multiple
// wearables being dirty.
if(!category) return;
- lldebugs << "wearInventoryCategoryOnAvatar( " << category->getName()
+
+ llinfos << "wearInventoryCategoryOnAvatar( " << category->getName()
<< " )" << llendl;
if( gFloaterCustomize )
@@ -1285,6 +1303,23 @@ void LLAppearanceManager::updateIsDirty()
}
}
+void LLAppearanceManager::onFirstFullyVisible()
+{
+ // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
+ // then auto-populate outfits from the library into the My Outfits folder.
+
+ llinfos << "avatar fully visible" << llendl;
+
+ static bool check_populate_my_outfits = true;
+ if (check_populate_my_outfits &&
+ (LLInventoryModel::getIsFirstTimeInViewer2()
+ || gSavedSettings.getBOOL("MyOutfitsAutofill")))
+ {
+ gAgentWearables.populateMyOutfitsFolder();
+ }
+ check_populate_my_outfits = false;
+}
+
//#define DUMP_CAT_VERBOSE
void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 5fdff45735..28b51ee0f6 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -113,6 +113,9 @@ public:
// should only be necessary to do on initial login.
void updateIsDirty();
+ // Called when self avatar is first fully visible.
+ void onFirstFullyVisible();
+
protected:
LLAppearanceManager();
~LLAppearanceManager();
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
new file mode 100644
index 0000000000..64efa10ef9
--- /dev/null
+++ b/indra/newview/llfloaterevent.cpp
@@ -0,0 +1,324 @@
+/**
+ * @file llfloaterevent.cpp
+ * @brief Display for events in the finder
+ *
+ * $LicenseInfo:firstyear=2004&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterevent.h"
+
+#include "message.h"
+#include "llnotificationsutil.h"
+#include "llui.h"
+
+#include "llagent.h"
+#include "llviewerwindow.h"
+#include "llbutton.h"
+#include "llcachename.h"
+#include "llcommandhandler.h" // secondlife:///app/chat/ support
+#include "lleventflags.h"
+#include "lleventnotifier.h"
+#include "llexpandabletextbox.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llfloaterworldmap.h"
+#include "llinventorymodel.h"
+#include "llsecondlifeurls.h"
+#include "llslurl.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lluiconstants.h"
+#include "llviewercontrol.h"
+#include "llweb.h"
+#include "llworldmap.h"
+#include "lluictrlfactory.h"
+#include "lltrans.h"
+
+
+class LLEventHandler : public LLCommandHandler
+{
+public:
+ // requires trusted browser to trigger
+ LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { }
+ bool handle(const LLSD& params, const LLSD& query_map,
+ LLMediaCtrl* web)
+ {
+ if (params.size() < 1)
+ {
+ return false;
+ }
+
+ LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+ if (floater)
+ {
+ floater->setEventID(params[0].asInteger());
+ LLFloaterReg::showTypedInstance<LLFloaterEvent>("event");
+ return true;
+ }
+
+ return false;
+ }
+};
+LLEventHandler gEventHandler;
+
+LLFloaterEvent::LLFloaterEvent(const LLSD& key)
+ : LLFloater(key),
+
+ mEventID(0)
+{
+}
+
+
+LLFloaterEvent::~LLFloaterEvent()
+{
+}
+
+
+BOOL LLFloaterEvent::postBuild()
+{
+ mTBName = getChild<LLTextBox>("event_name");
+
+ mTBCategory = getChild<LLTextBox>("event_category");
+
+ mTBDate = getChild<LLTextBox>("event_date");
+
+ mTBDuration = getChild<LLTextBox>("event_duration");
+
+ mTBDesc = getChild<LLExpandableTextBox>("event_desc");
+ mTBDesc->setEnabled(FALSE);
+
+ mTBRunBy = getChild<LLTextBox>("event_runby");
+ mTBLocation = getChild<LLTextBox>("event_location");
+ mTBCover = getChild<LLTextBox>("event_cover");
+
+ mTeleportBtn = getChild<LLButton>( "teleport_btn");
+ mTeleportBtn->setClickedCallback(onClickTeleport, this);
+
+ mMapBtn = getChild<LLButton>( "map_btn");
+ mMapBtn->setClickedCallback(onClickMap, this);
+
+ mNotifyBtn = getChild<LLButton>( "notify_btn");
+ mNotifyBtn->setClickedCallback(onClickNotify, this);
+
+ mCreateEventBtn = getChild<LLButton>( "create_event_btn");
+ mCreateEventBtn->setClickedCallback(onClickCreateEvent, this);
+
+ mGodDeleteEventBtn = getChild<LLButton>( "god_delete_event_btn");
+ mGodDeleteEventBtn->setClickedCallback(boost::bind(&LLFloaterEvent::onClickDeleteEvent, this));
+
+ return TRUE;
+}
+
+void LLFloaterEvent::setEventID(const U32 event_id)
+{
+ mEventID = event_id;
+ // Should reset all of the panel state here
+ resetInfo();
+
+ if (event_id != 0)
+ {
+ sendEventInfoRequest();
+ }
+}
+
+void LLFloaterEvent::onClickDeleteEvent()
+{
+ LLMessageSystem* msg = gMessageSystem;
+
+ msg->newMessageFast(_PREHASH_EventGodDelete);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+
+ msg->nextBlockFast(_PREHASH_EventData);
+ msg->addU32Fast(_PREHASH_EventID, mEventID);
+
+ gAgent.sendReliableMessage();
+}
+
+void LLFloaterEvent::sendEventInfoRequest()
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ msg->newMessageFast(_PREHASH_EventInfoRequest);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
+ msg->nextBlockFast(_PREHASH_EventData);
+ msg->addU32Fast(_PREHASH_EventID, mEventID);
+ gAgent.sendReliableMessage();
+}
+
+//static
+void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **)
+{
+ // extract the agent id
+ LLUUID agent_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
+
+ LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+
+ if(floater)
+ {
+ floater->mEventInfo.unpack(msg);
+ floater->mTBName->setText(floater->mEventInfo.mName);
+ floater->mTBCategory->setText(floater->mEventInfo.mCategoryStr);
+ floater->mTBDate->setText(floater->mEventInfo.mTimeStr);
+ floater->mTBDesc->setText(floater->mEventInfo.mDesc);
+ floater->mTBRunBy->setText(LLSLURL::buildCommand("agent", floater->mEventInfo.mRunByID, "inspect"));
+
+ floater->mTBDuration->setText(llformat("%d:%.2d", floater->mEventInfo.mDuration / 60, floater->mEventInfo.mDuration % 60));
+
+ if (!floater->mEventInfo.mHasCover)
+ {
+ floater->mTBCover->setText(floater->getString("none"));
+ }
+ else
+ {
+ floater->mTBCover->setText(llformat("%d", floater->mEventInfo.mCover));
+ }
+
+ F32 global_x = (F32)floater->mEventInfo.mPosGlobal.mdV[VX];
+ F32 global_y = (F32)floater->mEventInfo.mPosGlobal.mdV[VY];
+
+ S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
+ S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
+ S32 region_z = llround((F32)floater->mEventInfo.mPosGlobal.mdV[VZ]);
+
+ std::string desc = floater->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z);
+ floater->mTBLocation->setText(desc);
+
+ if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
+ {
+ floater->childSetVisible("event_mature_yes", TRUE);
+ floater->childSetVisible("event_mature_no", FALSE);
+ }
+ else
+ {
+ floater->childSetVisible("event_mature_yes", FALSE);
+ floater->childSetVisible("event_mature_no", TRUE);
+ }
+
+ if (floater->mEventInfo.mUnixTime < time_corrected())
+ {
+ floater->mNotifyBtn->setEnabled(FALSE);
+ }
+ else
+ {
+ floater->mNotifyBtn->setEnabled(TRUE);
+ }
+
+ if (gEventNotifier.hasNotification(floater->mEventInfo.mID))
+ {
+ floater->mNotifyBtn->setLabel(floater->getString("dont_notify"));
+ }
+ else
+ {
+ floater->mNotifyBtn->setLabel(floater->getString("notify"));
+ }
+
+ floater->mMapBtn->setEnabled(TRUE);
+ floater->mTeleportBtn->setEnabled(TRUE);
+ }
+}
+
+
+void LLFloaterEvent::draw()
+{
+ mGodDeleteEventBtn->setVisible(gAgent.isGodlike());
+
+ LLPanel::draw();
+}
+
+void LLFloaterEvent::resetInfo()
+{
+ mTBName->setText(LLStringUtil::null);
+ mTBCategory->setText(LLStringUtil::null);
+ mTBDate->setText(LLStringUtil::null);
+ mTBDesc->setText(LLStringUtil::null);
+ mTBDuration->setText(LLStringUtil::null);
+ mTBCover->setText(LLStringUtil::null);
+ mTBLocation->setText(LLStringUtil::null);
+ mTBRunBy->setText(LLStringUtil::null);
+ mNotifyBtn->setEnabled(FALSE);
+ mMapBtn->setEnabled(FALSE);
+ mTeleportBtn->setEnabled(FALSE);
+}
+
+// static
+void LLFloaterEvent::onClickTeleport(void* data)
+{
+ LLFloaterEvent* self = (LLFloaterEvent*)data;
+ LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
+ if (!self->mEventInfo.mPosGlobal.isExactlyZero()&&worldmap_instance)
+ {
+ gAgent.teleportViaLocation(self->mEventInfo.mPosGlobal);
+ worldmap_instance->trackLocation(self->mEventInfo.mPosGlobal);
+ }
+}
+
+
+// static
+void LLFloaterEvent::onClickMap(void* data)
+{
+ LLFloaterEvent* self = (LLFloaterEvent*)data;
+ LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
+
+ if (!self->mEventInfo.mPosGlobal.isExactlyZero()&&worldmap_instance)
+ {
+ worldmap_instance->trackLocation(self->mEventInfo.mPosGlobal);
+ LLFloaterReg::showInstance("world_map", "center");
+ }
+}
+
+
+// static
+void LLFloaterEvent::onClickCreateEvent(void* data)
+{
+ LLNotificationsUtil::add("PromptGoToEventsPage");//, LLSD(), LLSD(), callbackCreateEventWebPage);
+}
+
+
+// static
+void LLFloaterEvent::onClickNotify(void *data)
+{
+ LLFloaterEvent* self = (LLFloaterEvent*)data;
+
+ if (!gEventNotifier.hasNotification(self->mEventID))
+ {
+ gEventNotifier.add(self->mEventInfo);
+ self->mNotifyBtn->setLabel(self->getString("dont_notify"));
+ }
+ else
+ {
+ gEventNotifier.remove(self->mEventInfo.mID);
+ self->mNotifyBtn->setLabel(self->getString("notify"));
+ }
+}
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
new file mode 100644
index 0000000000..54aaaf6a0f
--- /dev/null
+++ b/indra/newview/llfloaterevent.h
@@ -0,0 +1,96 @@
+/**
+ * @file llfloaterevent.h
+ * @brief Display for events in the finder
+ *
+ * $LicenseInfo:firstyear=2004&license=viewergpl$
+ *
+ * Copyright (c) 2004-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATEREVENT_H
+#define LL_LLFLOATEREVENT_H
+
+#include "llfloater.h"
+#include "lleventinfo.h"
+#include "lluuid.h"
+#include "v3dmath.h"
+
+class LLTextBox;
+class LLTextEditor;
+class LLButton;
+class LLExpandableTextBox;
+class LLMessageSystem;
+
+class LLFloaterEvent : public LLFloater
+{
+public:
+ LLFloaterEvent(const LLSD& key);
+ /*virtual*/ ~LLFloaterEvent();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void draw();
+
+ void setEventID(const U32 event_id);
+ void sendEventInfoRequest();
+
+ static void processEventInfoReply(LLMessageSystem *msg, void **);
+
+ U32 getEventID() { return mEventID; }
+
+protected:
+ void resetInfo();
+
+ static void onClickTeleport(void*);
+ static void onClickMap(void*);
+ //static void onClickLandmark(void*);
+ static void onClickCreateEvent(void*);
+ static void onClickNotify(void*);
+ void onClickDeleteEvent();
+
+// static bool callbackCreateEventWebPage(const LLSD& notification, const LLSD& response);
+
+protected:
+ U32 mEventID;
+ LLEventInfo mEventInfo;
+
+ LLTextBox* mTBName;
+ LLTextBox* mTBCategory;
+ LLTextBox* mTBDate;
+ LLTextBox* mTBDuration;
+ LLExpandableTextBox* mTBDesc;
+
+ LLTextBox* mTBRunBy;
+ LLTextBox* mTBLocation;
+ LLTextBox* mTBCover;
+
+ LLButton* mTeleportBtn;
+ LLButton* mMapBtn;
+ LLButton* mCreateEventBtn;
+ LLButton* mGodDeleteEventBtn;
+ LLButton* mNotifyBtn;
+};
+
+#endif // LL_LLFLOATEREVENT_H
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 3946224c0c..76607e4874 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -1855,10 +1855,9 @@ EInventorySortGroup LLFolderViewFolder::getSortGroup() const
return SG_TRASH_FOLDER;
}
- // Folders that can't be moved are 'system' folders.
if( mListener )
{
- if( !(mListener->isItemMovable()) )
+ if(LLFolderType::lookupIsProtectedType(mListener->getPreferredType()))
{
return SG_SYSTEM_FOLDER;
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index d1b91df6e9..136989166f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -123,7 +123,7 @@
#include "llmutelist.h"
#include "llpanelavatar.h"
#include "llavatarpropertiesprocessor.h"
-#include "llpanelevent.h"
+#include "llfloaterevent.h"
#include "llpanelclassified.h"
#include "llpanelpick.h"
#include "llpanelplace.h"
@@ -1891,17 +1891,6 @@ bool idle_startup()
}
}
- // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
- // then auto-populate outfits from the library into the My Outfits folder.
- static bool check_populate_my_outfits = true;
- if (check_populate_my_outfits &&
- (LLInventoryModel::getIsFirstTimeInViewer2()
- || gSavedSettings.getBOOL("MyOutfitsAutofill")))
- {
- gAgentWearables.populateMyOutfitsFolder();
- }
- check_populate_my_outfits = false;
-
return TRUE;
}
@@ -2484,7 +2473,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply);
msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply);
- msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
+ msg->setHandlerFunc("EventInfoReply", LLFloaterEvent::processEventInfoReply);
msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
// msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
msg->setHandlerFunc("ClassifiedInfoReply", LLAvatarPropertiesProcessor::processClassifiedInfoReply);
@@ -2544,6 +2533,8 @@ bool callback_choose_gender(const LLSD& notification, const LLSD& response)
void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
const std::string& gender_name )
{
+ llinfos << "starting" << llendl;
+
// Not going through the processAgentInitialWearables path, so need to set this here.
LLAppearanceManager::instance().setAttachmentInvLinkEnable(true);
// Initiate creation of COF, since we're also bypassing that.
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6dcf4bc798..6c35464a51 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1515,8 +1515,8 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
unlockQueue() ;
worker->lockWorkMutex();
- worker->mActiveCount++;
- worker->mNeedsAux = needs_aux;
+ worker->mActiveCount++;
+ worker->mNeedsAux = needs_aux;
worker->unlockWorkMutex();
}
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 29114c33c5..eb070fb3ef 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -55,6 +55,7 @@
#include "llfloaterbump.h"
#include "llfloatercamera.h"
#include "llfloaterdaycycle.h"
+#include "llfloaterevent.h"
#include "llfloatersearch.h"
#include "llfloaterenvsettings.h"
#include "llfloaterfonttest.h"
@@ -160,6 +161,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("env_settings", "floater_env_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvSettings>);
LLFloaterReg::add("env_water", "floater_water.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWater>);
LLFloaterReg::add("env_windlight", "floater_windlight_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWindLight>);
+
+ LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
LLFloaterReg::add("font_test", "floater_font_test.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFontTest>);
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 3001992630..b69eaa4853 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -649,6 +649,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
void LLViewerInventoryCategory::determineFolderType()
{
+ /* Do NOT uncomment this code. This is for future 2.1 support of ensembles.
+ llassert(FALSE);
LLFolderType::EType original_type = getPreferredType();
if (LLFolderType::lookupIsProtectedType(original_type))
return;
@@ -692,6 +694,8 @@ void LLViewerInventoryCategory::determineFolderType()
{
changeType(LLFolderType::FT_NONE);
}
+ llassert(FALSE);
+ */
}
void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index b66f58d853..51d99a1d36 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -2250,13 +2250,13 @@ void LLViewerFetchedTexture::destroyRawImage()
if (mRawImage.notNull())
{
- sRawCount--;
- setCachedRawImage() ;
+ sRawCount--;
if(mForceToSaveRawImage)
{
saveRawImage() ;
}
+ setCachedRawImage() ;
}
mRawImage = NULL;
@@ -2346,7 +2346,8 @@ void LLViewerFetchedTexture::setCachedRawImage()
mRawImage->scale(w >> i, h >> i) ;
}
mCachedRawImage = mRawImage ;
- mCachedRawDiscardLevel = mRawDiscardLevel + i ;
+ mRawDiscardLevel += i ;
+ mCachedRawDiscardLevel = mRawDiscardLevel ;
}
}
@@ -2416,7 +2417,7 @@ BOOL LLViewerFetchedTexture::hasSavedRawImage() const
F32 LLViewerFetchedTexture::getElapsedLastReferencedSavedRawImageTime() const
{
- return mLastReferencedSavedRawImageTime - sCurrentTime ;
+ return sCurrentTime - mLastReferencedSavedRawImageTime ;
}
//----------------------------------------------------------------------------------------------
//atlasing
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 698b6be98b..7a6a48d1b3 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2538,6 +2538,17 @@ void LLVOAvatar::idleUpdateLoadingEffect()
// update visibility when avatar is partially loaded
if (updateIsFullyLoaded()) // changed?
{
+ if (isFullyLoaded() && isSelf())
+ {
+ llinfos << "self isFullyLoaded" << llendl;
+
+ static bool first_fully_visible = true;
+ if (first_fully_visible)
+ {
+ first_fully_visible = false;
+ LLAppearanceManager::instance().onFirstFullyVisible();
+ }
+ }
if (isFullyLoaded())
{
deleteParticleSource();
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 18d1779702..0065d824d2 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -633,8 +633,8 @@ with the same filename but different name
<texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
<texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
- <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
- <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="Volume_Background" file_name="windows/Volume_Background.png" preload="false"
+ scale.left="6" scale.top="33" scale.right="63" scale.bottom="10" />
<texture name="VoicePTT_Lvl1" file_name="bottomtray/VoicePTT_Lvl1.png" preload="false" />
<texture name="VoicePTT_Lvl2" file_name="bottomtray/VoicePTT_Lvl2.png" preload="false" />
@@ -642,6 +642,9 @@ with the same filename but different name
<texture name="VoicePTT_Off" file_name="bottomtray/VoicePTT_Off.png" preload="false" />
<texture name="VoicePTT_On" file_name="bottomtray/VoicePTT_On.png" preload="false" />
+ <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+
<texture name="WebBasedMediaBackground" file_name="windows/WebBasedMediaBackground.png" preload="false" />
<texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" />
diff --git a/indra/newview/skins/default/textures/windows/Volume_Background.png b/indra/newview/skins/default/textures/windows/Volume_Background.png
new file mode 100644
index 0000000000..43aaa441f5
--- /dev/null
+++ b/indra/newview/skins/default/textures/windows/Volume_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
new file mode 100644
index 0000000000..9ce0c9c86d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="350"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ width="330">
+ <floater.string
+ name="none">
+ none
+ </floater.string>
+ <floater.string
+ name="notify">
+ Notify
+ </floater.string>
+ <floater.string
+ name="dont_notify">
+ Don&apos;t Notify
+ </floater.string>
+ <layout_stack
+ name="layout"
+ orientation="vertical"
+ follows="all"
+ layout="topleft"
+ left="0"
+ top="0"
+ height="350"
+ width="330"
+ border_size="0">
+ <layout_panel
+ name="profile_stack"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ height="305"
+ width="330">
+ <text
+ follows="top|left|right"
+ font="SansSerifLarge"
+ text_color="white"
+ height="17"
+ layout="topleft"
+ left="10"
+ name="event_name"
+ top="5"
+ use_ellipses="true"
+ width="310">
+ Nameless Event...of Doom! De doom! Doom doom.
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ height="13"
+ text_color="LtGray_50"
+ layout="topleft"
+ left="25"
+ name="event_category"
+ width="300">
+ (no category)
+ </text>
+
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ layout="topleft"
+ left="10"
+ top_pad="7"
+ name="event_runby_label"
+ width="310">
+ Run by:
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ initial_value="(retrieving)"
+ layout="topleft"
+ left="10"
+ link="true"
+ name="event_runby"
+ top_pad="2"
+ use_ellipses="true"
+ width="310" />
+ <text
+ type="string"
+ length="1"
+ left="10"
+ height="17"
+ font="SansSerifMedium"
+ text_color="EmphasisColor"
+ top_pad="5"
+ follows="top|left"
+ layout="topleft"
+ name="event_date"
+ width="310">
+ 10/10/2010
+ </text>
+ <text
+ type="string"
+ height="14"
+ length="1"
+ left="10"
+ follows="top|left"
+ layout="topleft"
+ name="event_duration"
+ width="310">
+ 1 hour
+ </text>
+ <text
+ font="SansSerifMedium"
+ text_color="EmphasisColor"
+ type="string"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="event_cover"
+ visible="true"
+ width="310">
+ Free
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ layout="topleft"
+ left="10"
+ top_pad="5"
+ name="event_location_label">
+ Location:
+ </text>
+ <text
+ type="string"
+ length="1"
+ height="20"
+ left="10"
+ follows="top|left"
+ layout="topleft"
+ name="event_location"
+ use_ellipses="true"
+ value="SampleParcel, Name Long (145, 228, 26)"
+ width="310" />
+ <icon
+ follows="top|left"
+ height="16"
+ image_name="Parcel_PG_Dark"
+ layout="topleft"
+ left="10"
+ name="rating_icon"
+ width="18" />
+ <text
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="12"
+ name="rating_label"
+ top_delta="3"
+ value="Rating:"
+ width="60" />
+ <text
+ follows="left|right|top"
+ height="16"
+ layout="topleft"
+ left_pad="0"
+ name="rating_value"
+ top_delta="0"
+ value="unknown"
+ width="200" />
+ <expandable_text
+ follows="left|top|right"
+ height="106"
+ layout="topleft"
+ left="6"
+ name="event_desc"
+ width="313" />
+ </layout_panel>
+ <layout_panel
+ follows="left|right"
+ height="24"
+ layout="topleft"
+ mouse_opaque="false"
+ name="button_panel"
+ top="0"
+ left="0"
+ user_resize="false">
+ <button
+ follows="left|top"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left="6"
+ name="create_event_btn"
+ picture_style="true"
+ tool_tip="Create Event"
+ width="18" />
+ <button
+ follows="left|top"
+ height="18"
+ image_selected="MinusItem_Press"
+ image_unselected="MinusItem_Off"
+ image_disabled="MinusItem_Disabled"
+ layout="topleft"
+ visible="false"
+ left="6"
+ top_pad="-7"
+ name="god_delete_event_btn"
+ picture_style="true"
+ tool_tip="Delete Event"
+ width="18" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Notify Me"
+ layout="topleft"
+ left_pad="3"
+ top_delta="-12"
+ name="notify_btn"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Teleport"
+ layout="topleft"
+ left_pad="5"
+ name="teleport_btn"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Map"
+ layout="topleft"
+ left_pad="5"
+ name="map_btn"
+ width="85" />
+ </layout_panel>
+ </layout_stack>
+ </floater>
+
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
index 60d4a7e00b..55ab95bfe9 100644
--- a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
+++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
@@ -4,7 +4,7 @@
background_visible="false"
border_visible="false"
border="false"
- chrome="true"
+ chrome="true"
follows="bottom"
height="150"
layout="topleft"
@@ -13,7 +13,7 @@
<!-- floater background image -->
<icon
height="150"
- image_name="Inspector_Background"
+ image_name="Volume_Background"
layout="topleft"
left="0"
name="normal_background"