diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp index d3e97f5c1..0d8dce1eb 100644 --- a/indra/llcommon/llfile.cpp +++ b/indra/llcommon/llfile.cpp @@ -35,6 +35,8 @@ #if LL_WINDOWS #include +#else +#include #endif #include "linden_common.h" diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp index 8ffd4b06d..8e146e035 100644 --- a/indra/llcommon/llprocesslauncher.cpp +++ b/indra/llcommon/llprocesslauncher.cpp @@ -42,6 +42,7 @@ #if LL_DARWIN || LL_LINUX // not required or present on Win32 #include +#include #endif LLProcessLauncher::LLProcessLauncher() diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 017d48a0e..b13eddc4e 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -416,7 +416,7 @@ public: { //we have data mData.erase(data); mElementCount = mData.size(); - notifyRemoval(data); + this->notifyRemoval(data); checkAlive(); return true; } @@ -454,7 +454,7 @@ public: { mData.erase(data); mElementCount = mData.size(); - notifyRemoval(data); + this->notifyRemoval(data); llwarns << "FOUND!" << llendl; checkAlive(); return; @@ -663,7 +663,7 @@ public: //(don't notify listeners of addition) for (U32 i = 0; i < child->getChildCount(); i++) { - addChild(child->getChild(i), TRUE); + this->addChild(child->getChild(i), TRUE); } //destroy child @@ -707,10 +707,10 @@ public: return false; } - if (this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())) + if (this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())) { //we got it, just act like a branch - oct_node* node = getNodeAt(data); + oct_node* node = this->getNodeAt(data); if (node == this) { LLOctreeNode::insert(data); @@ -723,7 +723,7 @@ public: else if (this->getChildCount() == 0) { //first object being added, just wrap it up - while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) + while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup()))) { LLVector4a center, size; center = this->getCenter(); @@ -738,7 +738,7 @@ public: } else { - while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))) + while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup()))) { //the data is outside the root node, we need to grow LLVector4a center(this->getCenter()); @@ -764,7 +764,7 @@ public: //clear our children and add the root copy this->clearChildren(); - addChild(newnode); + this->addChild(newnode); } //insert the data diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp index 219b06ec7..660f59fbe 100644 --- a/indra/llmath/v4color.cpp +++ b/indra/llmath/v4color.cpp @@ -704,9 +704,9 @@ BOOL LLColor4::parseColor(const std::string& buf, LLColor4* color) { color->set(LLColor4::orange6); } - else if ( "clear" == color_name ) + else if ( "clear" == color_name || "transparent" == color_name ) { - color->set(0.f, 0.f, 0.f, 0.f); + color->set(LLColor4::transparent); } else { diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index ccefdb56c..b2f5ce471 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -202,8 +202,8 @@ void LLCurl::Responder::completedHeader(U32 status, const std::string& reason, c } -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLCurl::Responder* p) { ++p->mReferenceCount; @@ -216,7 +216,7 @@ namespace boost delete p; } } -}; +//}; ////////////////////////////////////////////////////////////////////////////// diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index 1609530a3..fa8465bfe 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -378,11 +378,11 @@ private: void cleanupMulti(LLCurl::Multi* multi) ; } ; -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLCurl::Responder* p); void intrusive_ptr_release(LLCurl::Responder* p); -}; +//}; class LLCurlRequest diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h index cbd17b5a3..2def3229f 100644 --- a/indra/llmessage/lliopipe.h +++ b/indra/llmessage/lliopipe.h @@ -55,11 +55,11 @@ void pump_debug(const char *file, S32 line); /** * intrusive pointer support */ -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLIOPipe* p); void intrusive_ptr_release(LLIOPipe* p); -}; +//}; /** * @class LLIOPipe @@ -250,13 +250,13 @@ protected: LLPumpIO* pump) = 0; private: - friend void boost::intrusive_ptr_add_ref(LLIOPipe* p); - friend void boost::intrusive_ptr_release(LLIOPipe* p); + friend void /*boost::*/intrusive_ptr_add_ref(LLIOPipe* p); + friend void /*boost::*/intrusive_ptr_release(LLIOPipe* p); U32 mReferenceCount; }; -namespace boost -{ +//namespace boost +//{ inline void intrusive_ptr_add_ref(LLIOPipe* p) { ++p->mReferenceCount; @@ -268,7 +268,7 @@ namespace boost delete p; } } -}; +//}; #if 0 diff --git a/indra/llmessage/llregionpresenceverifier.cpp b/indra/llmessage/llregionpresenceverifier.cpp index 932cbf375..01d78ed3e 100644 --- a/indra/llmessage/llregionpresenceverifier.cpp +++ b/indra/llmessage/llregionpresenceverifier.cpp @@ -32,8 +32,8 @@ #include "net.h" #include "message.h" -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p) { ++p->mReferenceCount; @@ -46,7 +46,7 @@ namespace boost delete p; } } -}; +//}; LLRegionPresenceVerifier::Response::~Response() { diff --git a/indra/llmessage/llregionpresenceverifier.h b/indra/llmessage/llregionpresenceverifier.h index 5e8251e51..9b45e78b5 100644 --- a/indra/llmessage/llregionpresenceverifier.h +++ b/indra/llmessage/llregionpresenceverifier.h @@ -89,10 +89,10 @@ public: }; }; -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p); void intrusive_ptr_release(LLRegionPresenceVerifier::Response* p); -}; +//}; #endif //LL_LLREGIONPRESENCEVERIFIER_H diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp index 85aef5da0..6e232aa24 100644 --- a/indra/llmessage/net.cpp +++ b/indra/llmessage/net.cpp @@ -36,6 +36,7 @@ #include #include #else + #include #include #include #include diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp index d84fe0a49..de9725e8a 100644 --- a/indra/llmessage/tests/llcurl_stub.cpp +++ b/indra/llmessage/tests/llcurl_stub.cpp @@ -77,8 +77,8 @@ void LLCurl::Responder::result(LLSD const&) { } -namespace boost -{ +//namespace boost +//{ void intrusive_ptr_add_ref(LLCurl::Responder* p) { ++p->mReferenceCount; @@ -91,5 +91,5 @@ namespace boost delete p; } } -}; +//}; diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index ceaa70c3b..0ab73af1d 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -90,6 +90,7 @@ class LLGLFence public: virtual void placeFence() = 0; virtual void wait() = 0; + virtual ~LLGLFence() {} }; //============================================================================ diff --git a/indra/llui/lldelayeduidelete.h b/indra/llui/lldelayeduidelete.h index 043e6972e..131e43424 100644 --- a/indra/llui/lldelayeduidelete.h +++ b/indra/llui/lldelayeduidelete.h @@ -7,6 +7,7 @@ class LLDeleteJob { public: virtual BOOL work(U32& completed); + virtual ~LLDeleteJob() {} }; class LLViewDeleteJob : public LLDeleteJob { diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index af0dc47c1..627f06c80 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -476,7 +476,18 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLUICtrlFactory *fac } else { - panelp->initPanelXML(node, parent, factory); + if(!factory->builtPanel(panelp)) + panelp->initPanelXML(node, parent, factory); + else + { + LLRect new_rect = panelp->getRect(); + // override rectangle with embedding parameters as provided + panelp->createRect(node, new_rect, parent); + panelp->setOrigin(new_rect.mLeft, new_rect.mBottom); + panelp->setShape(new_rect); + // optionally override follows flags from including nodes + panelp->parseFollowsFlags(node); + } } return panelp; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 8f0cc0c64..e4ad47118 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -2372,7 +2372,7 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask ) if (mCanSelect) { // Ignore capslock - mask = mask; + //mask = mask; //Why was this here? if (mask == MASK_NONE) { diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 2ecf6fc36..4472a9a07 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -455,9 +455,11 @@ LLPieMenu *LLUICtrlFactory::buildPieMenu(const std::string &filename, LLView* pa //----------------------------------------------------------------------------- void LLUICtrlFactory::rebuild() { + built_panel_t built_panels = mBuiltPanels; + mBuiltPanels.clear(); built_panel_t::iterator built_panel_it; - for (built_panel_it = mBuiltPanels.begin(); - built_panel_it != mBuiltPanels.end(); + for (built_panel_it = built_panels.begin(); + built_panel_it != built_panels.end(); ++built_panel_it) { std::string filename = built_panel_it->second; diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index c51778917..4dd0cdd73 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -63,6 +63,8 @@ public: void removePanel(LLPanel* panelp) { mBuiltPanels.erase(panelp->getHandle()); } void removeFloater(LLFloater* floaterp) { mBuiltFloaters.erase(floaterp->getHandle()); } + + bool builtPanel(LLPanel* panelp) {return mBuiltPanels.find(panelp->getHandle()) != mBuiltPanels.end();} class LLMenuGL *buildMenu(const std::string &filename, LLView* parentp); class LLPieMenu *buildPieMenu(const std::string &filename, LLView* parentp); diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp index 21cfa66a8..85d41b5d3 100644 --- a/indra/llvfs/llpidlock.cpp +++ b/indra/llvfs/llpidlock.cpp @@ -54,6 +54,7 @@ static bool isProcessAlive(U32 pid) } #else //Everyone Else +#include static U32 getPID() { return getpid(); diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index ab2095776..7285d3c48 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -838,7 +838,7 @@ namespace LLInitParam BaseBlock::addParam(block_descriptor, param_descriptor, name); } - setValue(value); + this->setValue(value); } bool isProvided() const { return Param::anyProvided(); } @@ -926,7 +926,7 @@ namespace LLInitParam void set(value_assignment_t val, bool flag_as_provided = true) { param_value_t::clearValueName(); - setValue(val); + this->setValue(val); setProvided(flag_as_provided); } @@ -1068,7 +1068,7 @@ namespace LLInitParam // assign block contents to this param-that-is-a-block void set(value_assignment_t val, bool flag_as_provided = true) { - setValue(val); + this->setValue(val); param_value_t::clearValueName(); // force revalidation of block // next call to isProvided() will update provision status based on validity @@ -1723,7 +1723,7 @@ namespace LLInitParam Optional& operator =(value_assignment_t val) { - set(val); + this->set(val); return *this; } @@ -1752,7 +1752,7 @@ namespace LLInitParam Mandatory& operator =(value_assignment_t val) { - set(val); + this->set(val); return *this; } diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp index 919fb758c..117c9d1ed 100644 --- a/indra/lscript/lscript_library/lscript_library.cpp +++ b/indra/lscript/lscript_library/lscript_library.cpp @@ -487,10 +487,34 @@ void LLScriptLibrary::init() addFunction(10.f, 0.f, dummy_func, "llSetContentType", NULL, "ki"); addFunction(10.f, 0.f, dummy_func, "llLinkSitTarget", NULL, "ivr"); addFunction(10.f, 0.f, dummy_func, "llAvatarOnLinkSitTarget", "k", "i"); - /* No info on these new functions yet.... - * addFunction(10.f, 0.f, dummy_func, "llSetVelocity", "", ""); - * addFunction(10.f, 0.f, dummy_func, "llSetRotationalVelocity", "", ""); - */ + addFunction(10.f, 0.f, dummy_func, "llGetMassMKS", "f", NULL); + addFunction(10.f, 0.f, dummy_func, "llGetMemoryLimit", "i", NULL); + addFunction(10.f, 0.f, dummy_func, "llGetParcelMusicURL", "s", NULL); + addFunction(10.f, 0.f, dummy_func, "llGetPhysicsMaterial", "l", NULL); + addFunction(10.f, 0.f, dummy_func, "llManageEstateAccess", "i", "ik"); + addFunction(10.f, 0.f, dummy_func, "llSetAngularVelocity", NULL, "vi"); + addFunction(10.f, 0.f, dummy_func, "llSetKeyframedMotion", NULL, "ll"); + addFunction(10.f, 0.f, dummy_func, "llSetPhysicsMaterial", NULL, "iffff"); + addFunction(10.f, 0.f, dummy_func, "llSetRegionPos", "i", "v"); + addFunction(10.f, 0.f, dummy_func, "llSetVelocity", NULL, "vi"); + addFunction(10.f, 0.f, dummy_func, "llTransferLindenDollars", "k", "ki"); + + + //Pathfinder functions. Current state: alpha, thus subject to change. + //This and the preceding line are to be removed in future revisions of this file. + addFunction(10.f, 0.f, dummy_func, "llCreateCharacter", NULL, "l"); + addFunction(10.f, 0.f, dummy_func, "llDeleteCharacter", NULL, NULL); + addFunction(10.f, 0.f, dummy_func, "llEvade", NULL, "kl"); + addFunction(10.f, 0.f, dummy_func, "llExecCharacterCmd", NULL, "il"); + addFunction(10.f, 0.f, dummy_func, "llGetClosestNavPoint", "l", "vl"); + addFunction(10.f, 0.f, dummy_func, "llFleeFrom", NULL, "vfl"); + addFunction(10.f, 0.f, dummy_func, "llNavigateTo", NULL, "vl"); + addFunction(10.f, 0.f, dummy_func, "llPatrolPoints", NULL, "ll"); + addFunction(10.f, 0.f, dummy_func, "llPursue", NULL, "kl"); + addFunction(10.f, 0.f, dummy_func, "llUpdateCharacter", NULL, "l"); + addFunction(10.f, 0.f, dummy_func, "llWanderWithin", NULL, "vfl"); + + // REGARDING OSSL FUNCTIONS // These additions should be posted underneath the llFunctions @@ -624,6 +648,16 @@ void LLScriptLibrary::init() addFunction(10.f, 0.f, dummy_func, "osNpcGetPos", "v", "k"); addFunction(10.f, 0.f, dummy_func, "osNpcStopMoveToTarget", NULL, "k"); + addFunction(10.f, 0.f, dummy_func, "osIsNpc", "i", "k"); + addFunction(10.f, 0.f, dummy_func, "osNpcGetOwner", "k", "k"); + addFunction(10.f, 0.f, dummy_func, "osGetGridCustom", "s", "s"); + addFunction(10.f, 0.f, dummy_func, "osGetGridHomeURI", "s", NULL); + addFunction(10.f, 0.f, dummy_func, "osNpcPlayAnimation", NULL, "ks"); + addFunction(10.f, 0.f, dummy_func, "osNpcSit", NULL, "kki"); + addFunction(10.f, 0.f, dummy_func, "osNpcStand", NULL, "k"); + addFunction(10.f, 0.f, dummy_func, "osNpcStopAnimation", NULL, "ks"); + addFunction(10.f, 0.f, dummy_func, "osSetRot", NULL, "kq"); + } LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), const char *name, const char *ret_type, const char *args, BOOL god_only) diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 455dc9e88..7b38b2a34 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -51,6 +51,8 @@ changed changed( integer change ):Triggered various event change the task:(tes remote_data remote_data(integer event_type, key channel, key message_id, string sender,integer idata, string sdata):Triggered by various XML-RPC calls (event_type will be one of REMOTE_DATA_CHANNEL, REMOTE_DATA_REQUEST, REMOTE_DATA_REPLY) http_response http_response(key request_id, integer status, list metadata, string body):Triggered when task receives a response to one of its llHTTPRequests http_request http_request(key id, string method, string body):Triggered when task receives an http request against a public URL +transaction_result transaction_result(key id, integer success, string data):Triggered when task receives asynchronous data. +path_update path_update(integer type, list reserved):Triggered when the state of a pathfinder character changes. Note; "list reserved" is not currently used # integer constants [word .1, .1, .5] @@ -605,6 +607,121 @@ WL_CLOUD_SCROLL_Y_LOCK Windlight Cloud Scroll Y Lock WL_CLOUD_SCROLL_X_LOCK Windlight Cloud Scroll X Lock WL_DRAW_CLASSIC_CLOUDS Windlight Draw Classic Clouds +# OSSL constants +STATS_TIME_DILATION +STATS_SIM_FPS +STATS_PHYSICS_FPS +STATS_AGENT_UPDATES +STATS_ROOT_AGENTS +STATS_CHILD_AGENTS +STATS_TOTAL_PRIMS +STATS_ACTIVE_PRIMS +STATS_FRAME_MS +STATS_NET_MS +STATS_PHYSICS_MS +STATS_IMAGE_MS +STATS_OTHER_MS +STATS_IN_PACKETS_PER_SECOND +STATS_OUT_PACKETS_PER_SECOND +STATS_UNACKED_BYTES +STATS_AGENT_MS +STATS_PENDING_DOWNLOADS +STATS_PENDING_UPLOADS +STATS_ACTIVE_SCRIPTS +STATS_SCRIPT_LPS + +## Constants for osNpc* functions +NPC +OS_NPC_CREATOR_OWNED +OS_NPC_NOT_OWNED +OS_NPC_SENSE_AS_AGENT +OS_NPC_FLY +OS_NPC_NO_FLY +OS_NPC_LAND_AT_TARGET +OS_NPC_SIT_NOW + +## Missing LSL constants (from http://wiki.secondlife.com/wiki/Category:LSL_Constants) +## Adding now, sorting later +ATTACH_HUD_BOTTOM +ATTACH_HUD_BOTTOM_LEFT +ATTACH_HUD_BOTTOM_RIGHT +ATTACH_HUD_CENTER_1 +ATTACH_HUD_CENTER_2 +ATTACH_HUD_TOP_CENTER +ATTACH_HUD_TOP_LEFT +ATTACH_HUD_TOP_RIGHT +ATTACH_LEFT_PEC +ATTACH_RIGHT_PEC +HTTP_VERBOSE_THROTTLE +OBJECT_PRIM_EQUIVALENCE +PARCEL_MEDIA_COMMAND_LOOP_SET +PRIM_LINK_TARGET +PRIM_OMEGA +PRIM_PHYSICS_MATERIAL +PRIM_PHYSICS_SHAPE_TYPE +PRIM_POS_LOCAL +PRIM_ROT_LOCAL +PROFILE_NONE +PROFILE_SCRIPT_MEMORY +RCERR_CAST_TIME_EXCEEDED +RCERR_SIM_PERF_LOW +RCERR_UNKNOWN +RC_DATA_FLAGS +RC_DETECT_PHANTOM +RC_GET_LINK_NUM +RC_GET_NORMAL +RC_GET_ROOT_KEY +RC_MAX_HITS +RC_REJECT_AGENTS +RC_REJECT_LAND +RC_REJECT_NONPHYSICAL +RC_REJECT_PHYSICAL +RC_REJECT_TYPES +STATUS_BLOCK_GRAB_OBJECT + +#Even more missing constants, thanks to Justin Clark Casey for pointing me into the right direction + +CAMERA_FOCUS_OFFSET_X +CAMERA_FOCUS_OFFSET_Y +CAMERA_FOCUS_OFFSET_Z +CAMERA_FOCUS_X +CAMERA_FOCUS_Y +CAMERA_FOCUS_Z +CAMERA_POSITION_X +CAMERA_POSITION_Y +CAMERA_POSITION_Z +CHANGED_ANIMATION +CHANGED_REGION_RESTART +DATA_SIM_RELEASE +ESTATE_ACCESS_ALLOWED_AGENT_ADD +ESTATE_ACCESS_ALLOWED_AGENT_REMOVE +ESTATE_ACCESS_ALLOWED_GROUP_ADD +ESTATE_ACCESS_ALLOWED_GROUP_REMOVE +ESTATE_ACCESS_BANNED_AGENT_ADD +ESTATE_ACCESS_BANNED_AGENT_REMOVE +LIST_STAT_HARMONIC_MEAN +PARCEL_DETAILS_CLAIMDATE +PERMISSION_CHANGE_JOINTS +PERMISSION_CHANGE_PERMISSIONS +PERMISSION_RELEASE_OWNERSHIP +PERMISSION_REMAP_CONTROLS +VEHICLE_FLAG_LOCK_HOVER_HEIGHT +VEHICLE_FLAG_LOCK_ROTATION +VEHICLE_FLAG_NO_DEFLECTION +VEHICLE_FLAG_NO_X +VEHICLE_FLAG_NO_Y +VEHICLE_FLAG_NO_Z +VEHICLE_RANGE_BLOCK +VEHICLE_ROLL_FRAME +LSL_STATUS_BOUNDS_ERROR +LSL_STATUS_INTERNAL_ERROR +LSL_STATUS_MALFORMED_PARAMS +LSL_STATUS_NOT_FOUND +LSL_STATUS_NOT_SUPPORTED +LSL_STATUS_OK +LSL_STATUS_TYPE_MISMATCH +LSL_STATUS_WHITELIST_FAILED + # string constants [word .1, .3, .5] NULL_KEY Indicates an empty key diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5a877e72a..c6d5b4cc9 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2897,10 +2897,10 @@ 6.0 - CameraOffsetDefault + CameraOffsetRearView Comment - Default camera offset from avatar + Initial camera offset from avatar in Rear View Persist 1 Type @@ -2912,6 +2912,36 @@ 0.75 + CameraOffsetFrontView + + Comment + Initial camera offset from avatar in Front View + Persist + 1 + Type + Vector3 + Value + + 2.2 + 0.0 + 0.0 + + + CameraOffsetGroupView + + Comment + Initial camera offset from avatar in Group View + Persist + 1 + Type + Vector3 + Value + + -1.0 + 0.7 + 0.5 + + CameraOffsetScale Comment @@ -2949,6 +2979,18 @@ Value 1.0 + CameraPreset + + Comment + Preset camera position - view (0 - rear, 1 - front, 2 - group) + Persist + 1 + Type + U32 + Value + 0 + + CameraFocusTransitionTime Comment @@ -5073,6 +5115,17 @@ Value 1 + EnableGestureSoundsSelf + + Comment + Play sounds from your gestures when EnableGestureSounds is false. (Useless otherewise) + Persist + 1 + Type + Boolean + Value + 1 + EnableMouselook Comment @@ -6656,14 +6709,14 @@ Value 0 - FocusOffsetDefault + FocusOffsetRearView Comment - Default focus point offset relative to avatar (x-axis is forward) + Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward) Persist 1 Type - Vector3 + Vector3D Value 1.0 @@ -6671,6 +6724,36 @@ 1.0 + FocusOffsetFrontView + + Comment + Initial focus point offset relative to avatar for the camera preset Front View + Persist + 1 + Type + Vector3D + Value + + 0.0 + 0.0 + 0.0 + + + FocusOffsetGroupView + + Comment + Initial focus point offset relative to avatar for the camera preset Group View + Persist + 1 + Type + Vector3D + Value + + 1.5 + 0.7 + 1.0 + + FocusPosOnLogout Comment diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 2f878c450..34c4d85ac 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -4047,7 +4047,7 @@ void LLAgent::sendAgentSetAppearance() llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl; if(transmitted_params < 218) { - LLNotificationsUtil::add("SGIncompleteAppearence"); + LLNotificationsUtil::add("SGIncompleteAppearance"); } sendReliableMessage(); } diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 8dc34b6ab..44994b59a 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -128,7 +128,7 @@ LLAgentCamera::LLAgentCamera() : mCameraMode( CAMERA_MODE_THIRD_PERSON ), mLastCameraMode( CAMERA_MODE_THIRD_PERSON ), - //mCameraPreset(CAMERA_PRESET_REAR_VIEW), + mCameraPreset(CAMERA_PRESET_REAR_VIEW), mCameraAnimating( FALSE ), mAnimationCameraStartGlobal(), @@ -141,7 +141,6 @@ LLAgentCamera::LLAgentCamera() : mCameraFocusOffset(), mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW), - mCameraOffsetDefault(), mCameraCollidePlane(), mCurrentCameraDistance(2.f), // meters, set in init() @@ -212,8 +211,7 @@ void LLAgentCamera::init() mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild")); - mCameraOffsetDefault = gSavedSettings.getVector3("CameraOffsetDefault");//Legacy - /*mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); + mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView"); mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView"); @@ -221,7 +219,7 @@ void LLAgentCamera::init() mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView"); mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView"); - mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");*/ + mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView"); mCameraCollidePlane.clearVec(); mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); @@ -1681,14 +1679,13 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset() { // ...offset from avatar LLVector3d focus_offset; - focus_offset.setVec(gSavedSettings.getVector3("FocusOffsetDefault")); LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion(); if (isAgentAvatarValid() && gAgentAvatarp->getParent()) { agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation(); } - //focus_offset = convert_from_llsd(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, ""); + focus_offset = convert_from_llsd(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, ""); return focus_offset * agent_rot; } @@ -2023,8 +2020,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) LLVector3 LLAgentCamera::getCameraOffsetInitial() { - //return convert_from_llsd(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, ""); - return mCameraOffsetDefault; + return convert_from_llsd(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, ""); } @@ -2418,15 +2414,17 @@ void LLAgentCamera::changeCameraToCustomizeAvatar() gAgentAvatarp->updateMeshTextures(); } } - // if(!gSavedSettings.getBOOL("AppearanceCameraMovement")) { //hmm mCameraAnimating = FALSE; gAgent.endAnimationUpdateUI(); + return; } - /*LLVector3 agent_at = gAgent.getAtAxis(); + // + + LLVector3 agent_at = gAgent.getAtAxis(); agent_at.mV[VZ] = 0.f; agent_at.normalize(); @@ -2441,11 +2439,13 @@ void LLAgentCamera::changeCameraToCustomizeAvatar() camera_offset *= CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST; LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target); setAnimationDuration(gSavedSettings.getF32("ZoomTime")); - setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());*/ + setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID()); + + } -/*void LLAgentCamera::switchCameraPreset(ECameraPreset preset) +void LLAgentCamera::switchCameraPreset(ECameraPreset preset) { //zoom is supposed to be reset for the front and group views mCameraZoomFraction = 1.f; @@ -2456,7 +2456,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar() mCameraPreset = preset; gSavedSettings.setU32("CameraPreset", mCameraPreset); -}*/ +} // diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 86b2d84fd..663742751 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -46,6 +46,19 @@ enum ECameraMode CAMERA_MODE_FOLLOW }; +/** Camera Presets for CAMERA_MODE_THIRD_PERSON */ +enum ECameraPreset +{ + /** Default preset, what the Third Person Mode actually was */ + CAMERA_PRESET_REAR_VIEW, + + /** "Looking at the Avatar from the front" */ + CAMERA_PRESET_FRONT_VIEW, + + /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */ + CAMERA_PRESET_GROUP_VIEW +}; + //------------------------------------------------------------------------ // LLAgentCamera //------------------------------------------------------------------------ @@ -94,9 +107,28 @@ private: ECameraMode mCameraMode; // Target mode after transition animation is done ECameraMode mLastCameraMode; F32 mUIOffset; + + //-------------------------------------------------------------------- + // Preset + //-------------------------------------------------------------------- +public: + void switchCameraPreset(ECameraPreset preset); +private: /** Determines default camera offset depending on the current camera preset */ LLVector3 getCameraOffsetInitial(); + /** Camera preset in Third Person Mode */ + ECameraPreset mCameraPreset; + + /** Initial camera offsets */ + std::map > mCameraOffsetInitial; + + /** Initial focus offsets */ + std::map > mFocusOffsetInitial; + + //-------------------------------------------------------------------- + // Position + //-------------------------------------------------------------------- public: LLVector3d getCameraPositionGlobal() const; const LLVector3 &getCameraPositionAgent() const; @@ -185,7 +217,6 @@ public: private: LLVector3d mCameraFocusOffset; // Offset from focus point in build mode LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset - LLVector3 mCameraOffsetDefault; BOOL mFocusOnAvatar; LLVector3d mFocusGlobal; LLVector3d mFocusTargetGlobal; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 10871544b..b2f3b32f1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -724,6 +724,8 @@ bool LLAppViewer::init() &LLURLDispatcher::dispatchFromTextEditor, &LLURLDispatcher::dispatchFromTextEditor); + LLToolMgr::getInstance(); // Initialize tool manager if not already instantiated + ///////////////////////////////////////////////// // // Load settings files @@ -1376,12 +1378,6 @@ extern void cleanup_pose_stand(void); bool LLAppViewer::cleanup() { - - //HACK: the selectmgr may hold a ref to gAgentAvatarp, which will defer the actual - // destruction until LLSelectMgr::cleanupGlobals() is called AFTER the UI has been destroyed. - // This presents issue, as ~LLVOAvatarSelf spawns notifications if DebugAvatarRezTime is true, which will - // crash if the UI has been destroyed before then. - LLSelectMgr::getInstance()->remove(gAgentAvatarp, SELECT_ALL_TES, false); //ditch LLVOAvatarSelf instance gAgentAvatarp = NULL; cleanup_pose_stand(); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index f212da907..cd3c7812a 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1791,7 +1791,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, (glow << 24); U32 vec[4]; - vec[0] = vec[1] = vec[2] = vec[3] = glow32; + std::fill_n(vec,4,glow32); src.loadua((F32*) vec); diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 4926453e0..852b439fe 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -75,12 +75,29 @@ const F64 CURRENCY_ESTIMATE_FREQUENCY = 0.5; // esimate is fetched from the server class LLFloaterBuyLandUI -: public LLFloater +: public LLFloater, public LLSingleton { -private: +public: LLFloaterBuyLandUI(); virtual ~LLFloaterBuyLandUI(); + + /*virtual*/ void onClose(bool app_quitting); + // Left padding for maturity rating icon. + static const S32 ICON_PAD = 2; + +private: + class SelectionObserver : public LLParcelObserver + { + public: + SelectionObserver(LLFloaterBuyLandUI* floater) : mFloater(floater) {} + virtual void changed(); + private: + LLFloaterBuyLandUI* mFloater; + }; + +private: + SelectionObserver mParcelSelectionObserver; LLViewerRegion* mRegion; LLParcelSelectionHandle mParcel; bool mIsClaim; @@ -146,11 +163,7 @@ private: LLViewerParcelMgr::ParcelBuyInfo* mParcelBuyInfo; - static LLFloaterBuyLandUI* sInstance; - public: - static LLFloaterBuyLandUI* soleInstance(bool createIfNeeded); - void setForGroup(bool is_for_group); void setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel); @@ -158,10 +171,10 @@ public: void updateParcelInfo(); void updateCovenantInfo(); static void onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data); - void updateCovenantText(const std::string& string, const LLUUID &asset_id); - void updateEstateName(const std::string& name); - void updateLastModified(const std::string& text); - void updateEstateOwnerName(const std::string& name); + void updateFloaterCovenantText(const std::string& string, const LLUUID &asset_id); + void updateFloaterEstateName(const std::string& name); + void updateFloaterLastModified(const std::string& text); + void updateFloaterEstateOwnerName(const std::string& name); void updateWebSiteInfo(); void finishWebSiteInfo(); @@ -170,10 +183,14 @@ public: void sendBuyLand(); void updateNames(); + // Name cache callback + void updateName(const LLUUID& id, + const std::string& name, + bool is_group); void refreshUI(); - void startTransaction(TransactionType type, LLXMLRPCValue params); + void startTransaction(TransactionType type, const LLXMLRPCValue& params); bool checkTransaction(); void tellUserError(const std::string& message, const std::string& uri); @@ -183,31 +200,16 @@ public: void startBuyPreConfirm(); void startBuyPostConfirm(const std::string& password); - static void onClickBuy(void* data); - static void onClickCancel(void* data); - static void onClickErrorWeb(void* data); + void onClickBuy(); + void onClickCancel(); + void onClickErrorWeb(); virtual void draw(); virtual BOOL canClose(); - virtual void onClose(bool app_quitting); - /*virtual*/ void setMinimized(BOOL b); - -private: - class SelectionObserver : public LLParcelObserver - { - public: - virtual void changed(); - }; -}; -static void cacheNameUpdateRefreshesBuyLand(const LLUUID& id, const std::string& full_name, bool is_group) -{ - LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false); - if (ui) - { - ui->updateNames(); - } -} + void onVisibilityChange ( const LLSD& new_visibility ); + +}; // static void LLFloaterBuyLand::buyLand( @@ -219,102 +221,55 @@ void LLFloaterBuyLand::buyLand( return; } - LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(true); - ui->setForGroup(is_for_group); - ui->setParcel(region, parcel); - ui->open(); /*Flawfinder: ignore*/ + LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::getInstance(); + if(ui) + { + ui->setForGroup(is_for_group); + ui->setParcel(region, parcel); + ui->open(); /*Flawfinder: ignore*/ + } } // static void LLFloaterBuyLand::updateCovenantText(const std::string& string, const LLUUID &asset_id) { - LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE); + LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL; if (floater) { - floater->updateCovenantText(string, asset_id); + floater->updateFloaterCovenantText(string, asset_id); } } // static void LLFloaterBuyLand::updateEstateName(const std::string& name) { - LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE); + LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL; if (floater) { - floater->updateEstateName(name); + floater->updateFloaterEstateName(name); } } // static void LLFloaterBuyLand::updateLastModified(const std::string& text) { - LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE); + LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL; if (floater) { - floater->updateLastModified(text); + floater->updateFloaterLastModified(text); } } // static void LLFloaterBuyLand::updateEstateOwnerName(const std::string& name) { - LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE); + LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::instanceExists() ? LLFloaterBuyLandUI::getInstance() : NULL; if (floater) { - floater->updateEstateOwnerName(name); + floater->updateFloaterEstateOwnerName(name); } } -// static -BOOL LLFloaterBuyLand::isOpen() -{ - LLFloaterBuyLandUI* floater = LLFloaterBuyLandUI::soleInstance(FALSE); - if (floater) - { - return floater->getVisible(); - } - return FALSE; -} - -// static -LLFloaterBuyLandUI* LLFloaterBuyLandUI::sInstance = NULL; - -// static -LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded) -{ -#if !LL_RELEASE_FOR_DOWNLOAD - if (createIfNeeded) - { - delete sInstance; - sInstance = NULL; - } -#endif - if (!sInstance && createIfNeeded) - { - sInstance = new LLFloaterBuyLandUI(); - - LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml"); - sInstance->center(); - - static bool observingCacheName = false; - if (!observingCacheName) - { - gCacheName->addObserver(cacheNameUpdateRefreshesBuyLand); - observingCacheName = true; - } - - static SelectionObserver* parcelSelectionObserver = NULL; - if (!parcelSelectionObserver) - { - parcelSelectionObserver = new SelectionObserver; - LLViewerParcelMgr::getInstance()->addObserver(parcelSelectionObserver); - } - } - - return sInstance; -} - - #if LL_WINDOWS // passing 'this' during construction generates a warning. The callee // only uses the pointer to hold a reference to 'this' which is @@ -324,39 +279,45 @@ LLFloaterBuyLandUI* LLFloaterBuyLandUI::soleInstance(bool createIfNeeded) #endif LLFloaterBuyLandUI::LLFloaterBuyLandUI() : LLFloater(std::string("Buy Land")), + mParcelSelectionObserver(this), mParcel(0), mBought(false), mParcelValid(false), mSiteValid(false), mChildren(*this), mCurrency(*this), mTransaction(0), mParcelBuyInfo(0) { + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_land.xml"); + LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver); } LLFloaterBuyLandUI::~LLFloaterBuyLandUI() { + LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver); LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo); - delete mTransaction; - if (sInstance == this) - { - sInstance = NULL; - } + delete mTransaction; +} + +// virtual +void LLFloaterBuyLandUI::onClose(bool app_quitting) +{ + // This object holds onto observer, transactions, and parcel state. + // Despite being single_instance, destroy it to call destructors and clean + // everything up. + setVisible(FALSE); + destroy(); } void LLFloaterBuyLandUI::SelectionObserver::changed() { - LLFloaterBuyLandUI* ui = LLFloaterBuyLandUI::soleInstance(false); - if (ui) + if (LLViewerParcelMgr::getInstance()->selectionEmpty()) { - if (LLViewerParcelMgr::getInstance()->selectionEmpty()) - { - ui->close(); - } - else { - ui->setParcel( - LLViewerParcelMgr::getInstance()->getSelectionRegion(), - LLViewerParcelMgr::getInstance()->getParcelSelection()); - } + mFloater->close(); + } + else + { + mFloater->setParcel(LLViewerParcelMgr::getInstance()->getSelectionRegion(), + LLViewerParcelMgr::getInstance()->getParcelSelection()); } } @@ -531,16 +492,22 @@ void LLFloaterBuyLandUI::updateCovenantInfo() LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); if(!region) return; + U8 sim_access = region->getSimAccess(); + std::string rating = LLViewerRegion::accessToString(sim_access); + LLTextBox* region_name = getChild("region_name_text"); if (region_name) { - region_name->setText(region->getName()); + std::string region_name_txt = region->getName() + " ("+rating +")"; + region_name->setText(region_name_txt); + region_name->setToolTip(region_name->getText()); } LLTextBox* region_type = getChild("region_type_text"); if (region_type) { region_type->setText(region->getLocalizedSimProductName()); + region_type->setToolTip(region->getLocalizedSimProductName()); } LLTextBox* resellable_clause = getChild("resellable_clause"); @@ -574,8 +541,7 @@ void LLFloaterBuyLandUI::updateCovenantInfo() { check->set(false); check->setEnabled(true); - check->setCallbackUserData(this); - check->setCommitCallback(onChangeAgreeCovenant); + check->setCommitCallback(boost::bind(&LLFloaterBuyLandUI::onChangeAgreeCovenant,_1,(void*)this)); } LLTextBox* box = getChild("covenant_text"); @@ -603,51 +569,46 @@ void LLFloaterBuyLandUI::onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data) } } -void LLFloaterBuyLandUI::updateCovenantText(const std::string &string, const LLUUID& asset_id) +void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, const LLUUID& asset_id) { LLViewerTextEditor* editor = getChild("covenant_editor"); - if (editor) + editor->setHandleEditKeysDirectly(FALSE); + editor->setText(string); + + LLCheckBoxCtrl* check = getChild("agree_covenant"); + LLTextBox* box = getChild("covenant_text"); + if (asset_id.isNull()) { - editor->setHandleEditKeysDirectly(FALSE); - editor->setText(string); + check->set(true); + check->setEnabled(false); + refreshUI(); - LLCheckBoxCtrl* check = getChild("agree_covenant"); - LLTextBox* box = getChild("covenant_text"); - if(check && box) - { - if (asset_id.isNull()) - { - check->set(true); - check->setEnabled(false); - refreshUI(); + // remove the line stating that you must agree + box->setVisible(FALSE); + } + else + { + check->setEnabled(true); - // remove the line stating that you must agree - box->setVisible(FALSE); - } - else - { - check->setEnabled(true); - - // remove the line stating that you must agree - box->setVisible(TRUE); - } - } + // remove the line stating that you must agree + box->setVisible(TRUE); } } -void LLFloaterBuyLandUI::updateEstateName(const std::string& name) +void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name) { LLTextBox* box = getChild("estate_name_text"); - if (box) box->setText(name); + box->setText(name); + box->setToolTip(name); } -void LLFloaterBuyLandUI::updateLastModified(const std::string& text) +void LLFloaterBuyLandUI::updateFloaterLastModified(const std::string& text) { LLTextBox* editor = getChild("covenant_timestamp_text"); if (editor) editor->setText(text); } -void LLFloaterBuyLandUI::updateEstateOwnerName(const std::string& name) +void LLFloaterBuyLandUI::updateFloaterEstateOwnerName(const std::string& name) { LLTextBox* box = getChild("estate_owner_text"); if (box) box->setText(name); @@ -743,7 +704,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password) return; } - BOOL remove_contribution = childGetValue("remove_contribution").asBoolean(); + BOOL remove_contribution = getChild("remove_contribution")->getValue().asBoolean(); mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(), gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution); @@ -835,17 +796,34 @@ void LLFloaterBuyLandUI::updateNames() } else if (parcelp->getIsGroupOwned()) { - gCacheName->getGroupName(parcelp->getGroupID(), mParcelSellerName); + mParcelSellerName = "(Loading...)"; + gCacheName->getGroup(parcelp->getGroupID(), + boost::bind(&LLFloaterBuyLandUI::updateName, this, + _1, _2, _3)); } else { - gCacheName->getFullName(parcelp->getOwnerID(), mParcelSellerName); + mParcelSellerName = "(Loading...)"; + gCacheName->get(parcelp->getOwnerID(), false, + boost::bind(&LLFloaterBuyLandUI::updateName, this, + _1, _2, _3)); } } +void LLFloaterBuyLandUI::updateName(const LLUUID& id, + const std::string& name, + bool is_group) +{ + LLParcel* parcelp = mParcel->getParcel(); + if (parcelp + && (is_group ? parcelp->getGroupID() : parcelp->getOwnerID()) == id) + { + // request is current + mParcelSellerName = name; + } +} -void LLFloaterBuyLandUI::startTransaction(TransactionType type, - LLXMLRPCValue params) +void LLFloaterBuyLandUI::startTransaction(TransactionType type, const LLXMLRPCValue& params) { delete mTransaction; mTransaction = NULL; @@ -926,11 +904,14 @@ void LLFloaterBuyLandUI::tellUserError( // virtual BOOL LLFloaterBuyLandUI::postBuild() { + setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2)); mCurrency.prepare(); - childSetAction("buy_btn", onClickBuy, this); - childSetAction("cancel_btn", onClickCancel, this); - childSetAction("error_web", onClickErrorWeb, this); + getChild("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickBuy, this)); + getChild("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickCancel, this)); + getChild("error_web")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickErrorWeb, this)); + + center(); return TRUE; } @@ -996,24 +977,14 @@ BOOL LLFloaterBuyLandUI::canClose() return can_close; } -// virtual -void LLFloaterBuyLandUI::setMinimized(BOOL minimize) +void LLFloaterBuyLandUI::onVisibilityChange ( const LLSD& new_visibility ) { - bool restored = (isMinimized() && !minimize); - LLFloater::setMinimized(minimize); - if (restored) + if (new_visibility.asBoolean()) { refreshUI(); } } -void LLFloaterBuyLandUI::onClose(bool app_quitting) -{ - LLFloater::onClose(app_quitting); - destroy(); -} - - void LLFloaterBuyLandUI::refreshUI() { // section zero: title area @@ -1027,14 +998,14 @@ void LLFloaterBuyLandUI::refreshUI() if (mParcelValid) { - childSetText("info_parcel", mParcelLocation); + getChild("info_parcel")->setValue(mParcelLocation); LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea); string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects); string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); - childSetText("info_size", getString("meters_supports_object", string_args)); + getChild("info_size")->setValue(getString("meters_supports_object", string_args)); F32 cost_per_sqm = 0.0f; if (mParcelActualArea > 0) @@ -1372,26 +1343,20 @@ void LLFloaterBuyLandUI::startBuyPostConfirm(const std::string& password) } -// static -void LLFloaterBuyLandUI::onClickBuy(void* data) +void LLFloaterBuyLandUI::onClickBuy() { - LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data; - self->startBuyPreConfirm(); + startBuyPreConfirm(); } -// static -void LLFloaterBuyLandUI::onClickCancel(void* data) +void LLFloaterBuyLandUI::onClickCancel() { - LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data; - self->close(); + close(); } -// static -void LLFloaterBuyLandUI::onClickErrorWeb(void* data) +void LLFloaterBuyLandUI::onClickErrorWeb() { - LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)data; - LLWeb::loadURLExternal(self->mCannotBuyURI); - self->close(); + LLWeb::loadURLExternal(mCannotBuyURI); + close(); } diff --git a/indra/newview/llfloaterbuyland.h b/indra/newview/llfloaterbuyland.h index 82e59a0bc..0d90130a0 100644 --- a/indra/newview/llfloaterbuyland.h +++ b/indra/newview/llfloaterbuyland.h @@ -33,8 +33,8 @@ #ifndef LL_LLFLOATERBUYLAND_H #define LL_LLFLOATERBUYLAND_H +class LLFloater; class LLViewerRegion; -class LLViewerTextEditor; class LLParcelSelection; class LLFloaterBuyLand @@ -47,7 +47,6 @@ public: static void updateEstateName(const std::string& name); static void updateLastModified(const std::string& text); static void updateEstateOwnerName(const std::string& name); - static BOOL isOpen(); }; #endif diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp index e9ec8c6aa..bca6bd18b 100644 --- a/indra/newview/llfloatercustomize.cpp +++ b/indra/newview/llfloatercustomize.cpp @@ -1154,20 +1154,6 @@ void LLPanelEditWearable::draw() ctrl->set(textureIsInvisible(te)); } } - - for (std::map::iterator iter = mInvisibilityList.begin(); - iter != mInvisibilityList.end(); ++iter) - { - std::string name = iter->first; - ETextureIndex te = (ETextureIndex)iter->second; - childSetVisible(name, is_copyable && is_modifiable && is_complete); - childSetEnabled(name, is_copyable && is_modifiable && is_complete); - LLCheckBoxCtrl* ctrl = getChild(name); - if (ctrl) - { - ctrl->set(textureIsInvisible(te)); - } - } } else { @@ -1318,11 +1304,6 @@ void LLPanelEditWearable::setUIPermissions(U32 perm_mask, BOOL is_complete) { childSetVisible(iter->first, is_copyable && is_modifiable && is_complete); } - for (std::map::iterator iter = mInvisibilityList.begin(); - iter != mInvisibilityList.end(); ++iter) - { - childSetVisible(iter->first, is_copyable && is_modifiable && is_complete); - } } ///////////////////////////////////////////////////////////////////// @@ -1342,15 +1323,9 @@ public: static void onSliderMoved(LLUICtrl* ctrl, void* userdata); static void onSliderMouseUp(LLUICtrl* ctrl, void* userdata); - static void onHintMinMouseDown(void* userdata); - static void onHintMinHeldDown(void* userdata); - static void onHintMaxMouseDown(void* userdata); - static void onHintMaxHeldDown(void* userdata); - static void onHintMinMouseUp(void* userdata); - static void onHintMaxMouseUp(void* userdata); - - void onHintMouseDown( LLVisualParamHint* hint ); - void onHintHeldDown( LLVisualParamHint* hint ); + void onHintMouseUp( bool max ); + void onHintMouseDown( bool max ); + void onHintHeldDown( bool max ); F32 weightToPercent( F32 weight ); F32 percentToWeight( F32 percent ); @@ -1419,15 +1394,15 @@ LLScrollingPanelParam::LLScrollingPanelParam( const std::string& name, childSetValue("min param text", min_name); childSetValue("max param text", max_name); mLess = getChild("less"); - mLess->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMinMouseDown, this) ); - mLess->setMouseUpCallback( boost::bind(LLScrollingPanelParam::onHintMinMouseUp, this) ); - mLess->setHeldDownCallback( boost::bind(LLScrollingPanelParam::onHintMinHeldDown, this) ); + mLess->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMouseDown, this, false) ); + mLess->setMouseUpCallback( boost::bind(&LLScrollingPanelParam::onHintMouseUp, this, false) ); + mLess->setHeldDownCallback( boost::bind(&LLScrollingPanelParam::onHintHeldDown, this, false) ); mLess->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD ); mMore = getChild("more"); - mMore->setMouseDownCallback( boost::bind(LLScrollingPanelParam::onHintMaxMouseDown, this) ); - mMore->setMouseUpCallback( boost::bind(LLScrollingPanelParam::onHintMaxMouseUp, this) ); - mMore->setHeldDownCallback( boost::bind(LLScrollingPanelParam::onHintMaxHeldDown, this) ); + mMore->setMouseDownCallback( boost::bind(&LLScrollingPanelParam::onHintMouseDown, this, true) ); + mMore->setMouseUpCallback( boost::bind(&LLScrollingPanelParam::onHintMouseUp, this, true) ); + mMore->setHeldDownCallback( boost::bind(&LLScrollingPanelParam::onHintHeldDown, this, true) ); mMore->setHeldDownDelay( PARAM_STEP_TIME_THRESHOLD ); } else @@ -1603,23 +1578,9 @@ void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata) LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); } -// static -void LLScrollingPanelParam::onHintMinMouseDown( void* userdata ) -{ - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintMouseDown( self->mHintMin ); -} - -// static -void LLScrollingPanelParam::onHintMaxMouseDown( void* userdata ) -{ - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintMouseDown( self->mHintMax ); -} - - -void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint ) +void LLScrollingPanelParam::onHintMouseDown( bool max ) { + LLVisualParamHint* hint = max ? mHintMax : mHintMin; // morph towards this result F32 current_weight = gAgentAvatarp->getVisualParamWeight( hint->getVisualParam() ); @@ -1630,23 +1591,10 @@ void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint ) mLastHeldTime = 0.f; } } - -// static -void LLScrollingPanelParam::onHintMinHeldDown( void* userdata ) -{ - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintHeldDown( self->mHintMin ); -} - -// static -void LLScrollingPanelParam::onHintMaxHeldDown( void* userdata ) -{ - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintHeldDown( self->mHintMax ); -} -void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint ) +void LLScrollingPanelParam::onHintHeldDown( bool max ) { + LLVisualParamHint* hint = max ? mHintMax : mHintMin; LLViewerVisualParam* param = hint->getVisualParam(); LLWearable* wearable = gAgentWearables.getWearable((LLWearableType::EType)param->getWearableType(),0); // TODO: MULTI-WEARABLE @@ -1691,59 +1639,14 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint ) } } -// static -void LLScrollingPanelParam::onHintMinMouseUp( void* userdata ) +void LLScrollingPanelParam::onHintMouseUp( bool max ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - - F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); + F32 elapsed_time = mMouseDownTimer.getElapsedTimeF32(); LLVOAvatar* avatar = gAgentAvatarp; if (avatar) { - LLVisualParamHint* hint = self->mHintMin; - - if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) - { - LLViewerVisualParam* param = hint->getVisualParam(); - - LLWearable* wearable = gAgentWearables.getWearable((LLWearableType::EType)param->getWearableType(),0); // TODO: MULTI-WEARABLE - if(wearable) - { - // step in direction - F32 current_weight = wearable->getVisualParamWeight( param->getID() ); - F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); - // step a fraction in the negative direction - F32 new_weight = current_weight - (range / 10.f); - F32 new_percent = self->weightToPercent(new_weight); - LLSliderCtrl* slider = self->getChild("param slider"); - if (slider) - { - if (slider->getMinValue() < new_percent - && new_percent < slider->getMaxValue()) - { - wearable->setVisualParamWeight(param->getID(), new_weight, TRUE); - wearable->writeToAvatar(); - slider->setValue( self->weightToPercent( new_weight ) ); - } - } - } - } - } - - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); -} - -void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) -{ - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - - F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); - - LLVOAvatar* avatar = gAgentAvatarp; - if (avatar) - { - LLVisualParamHint* hint = self->mHintMax; + LLVisualParamHint* hint = max ? mHintMax : mHintMin; if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) { @@ -1754,11 +1657,14 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) { // step in direction F32 current_weight = wearable->getVisualParamWeight( param->getID() ); - F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); + F32 range = mHintMax->getVisualParamWeight() - mHintMin->getVisualParamWeight(); + //if min, range should be negative. + if(!max) + range *= -1.f; // step a fraction in the negative direction F32 new_weight = current_weight + (range / 10.f); - F32 new_percent = self->weightToPercent(new_weight); - LLSliderCtrl* slider = self->getChild("param slider"); + F32 new_percent = weightToPercent(new_weight); + LLSliderCtrl* slider = getChild("param slider"); if (slider) { if (slider->getMinValue() < new_percent @@ -1766,14 +1672,14 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) { wearable->setVisualParamWeight(param->getID(), new_weight, TRUE); wearable->writeToAvatar(); - slider->setValue( self->weightToPercent( new_weight ) ); + slider->setValue( weightToPercent( new_weight ) ); } } } } } - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); + LLVisualParamHint::requestHintUpdates( mHintMin, mHintMax ); } diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 913051f61..07fae3df2 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -102,7 +102,6 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] = }; // Local prototypes -void commit_select_tool(LLUICtrl *ctrl, void *data); void commit_select_component(LLUICtrl *ctrl, void *data); void click_show_more(void*); void click_popup_info(void*); @@ -123,6 +122,7 @@ void commit_radio_orbit(LLUICtrl *, void*); void commit_radio_pan(LLUICtrl *, void*); void commit_grid_mode(LLUICtrl *, void*); void commit_slider_zoom(LLUICtrl *, void*); +void commit_select_tool(LLUICtrl *ctrl, void *data); //static @@ -254,15 +254,15 @@ BOOL LLFloaterTools::postBuild() mRadioSpin = getChild("radio spin"); childSetCommitCallback("radio spin",click_popup_grab_spin,NULL); mRadioPosition = getChild("radio position"); - childSetCommitCallback("radio position",commit_select_tool,LLToolCompTranslate::getInstance()); + childSetCommitCallback("radio position",commit_select_tool,NULL); mRadioRotate = getChild("radio rotate"); - childSetCommitCallback("radio rotate",commit_select_tool,LLToolCompRotate::getInstance()); + childSetCommitCallback("radio rotate",commit_select_tool,NULL); mRadioStretch = getChild("radio stretch"); - childSetCommitCallback("radio stretch",commit_select_tool,LLToolCompScale::getInstance()); + childSetCommitCallback("radio stretch",commit_select_tool,NULL); mRadioSelectFace = getChild("radio select face"); - childSetCommitCallback("radio select face",commit_select_tool,LLToolFace::getInstance()); + childSetCommitCallback("radio select face",commit_select_tool,NULL); mRadioAlign = getChild("radio align"); - childSetCommitCallback("radio align",commit_select_tool,QToolAlign::getInstance()); + childSetCommitCallback("radio align",commit_select_tool,NULL); mCheckSelectIndividual = getChild("checkbox edit linked parts"); childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); childSetCommitCallback("checkbox edit linked parts",commit_select_component,this); @@ -307,7 +307,7 @@ BOOL LLFloaterTools::postBuild() mCheckCopyRotates = getChild("checkbox copy rotates"); childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); mRadioSelectLand = getChild("radio select land"); - childSetCommitCallback("radio select land",commit_select_tool, LLToolSelectLand::getInstance()); + childSetCommitCallback("radio select land",commit_select_tool, NULL); mRadioDozerFlatten = getChild("radio flatten"); childSetCommitCallback("radio flatten",click_popup_dozer_mode, (void*)0); mRadioDozerRaise = getChild("radio raise"); @@ -997,7 +997,33 @@ void click_apply_to_selection(void* user) void commit_select_tool(LLUICtrl *ctrl, void *data) { S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners"); - gFloaterTools->setEditTool(data); + + LLCheckBoxCtrl* group = (LLCheckBoxCtrl*)ctrl; + std::string selected = group->getName(); + if (selected == "radio position") + { + LLFloaterTools::setEditTool( LLToolCompTranslate::getInstance() ); + } + else if (selected == "radio rotate") + { + LLFloaterTools::setEditTool( LLToolCompRotate::getInstance() ); + } + else if (selected == "radio stretch") + { + LLFloaterTools::setEditTool( LLToolCompScale::getInstance() ); + } + else if (selected == "radio select face") + { + LLFloaterTools::setEditTool( LLToolFace::getInstance() ); + } + else if (selected == "radio align") + { + LLFloaterTools::setEditTool( QToolAlign::getInstance() ); + } + else if (selected == "radio select land") + { + LLFloaterTools::setEditTool( LLToolSelectLand::getInstance()); + } gSavedSettings.setBOOL("ShowParcelOwners", show_owners); } @@ -1051,7 +1077,8 @@ void LLFloaterTools::onClickGridOptions(void* data) void LLFloaterTools::setEditTool(void* tool_pointer) { - select_tool(tool_pointer); + LLTool *tool = (LLTool *)tool_pointer; + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool ); } void LLFloaterTools::onFocusReceived() diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 305d0649d..c3c883a42 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -178,6 +178,7 @@ class AIFilePicker; class LLInventoryFVBridgeBuilder { public: + LLInventoryFVBridgeBuilder() {} virtual ~LLInventoryFVBridgeBuilder() {} virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, LLAssetType::EType actual_asset_type, @@ -627,6 +628,7 @@ public: class LLRecentInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder { public: + LLRecentInventoryBridgeBuilder(): LLInventoryFVBridgeBuilder() {} // Overrides FolderBridge for Recent Inventory Panel. // It use base functionality for bridges other than FolderBridge. virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index c5d3ee9cd..a1fad9902 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1435,10 +1435,10 @@ bool idle_startup() { case LLUserAuth::E_OK: response = LLUserAuth::getInstance()->getResponse(); - login_response = response["login"]; - reason_response = response["reason"]; - message_response = response["message"]; - message_id = response["message_id"]; + login_response = response["login"].asString(); + reason_response = response["reason"].asString(); + message_response = response["message"].asString(); + message_id = response["message_id"].asString(); if(login_response == "true") { @@ -4293,45 +4293,45 @@ bool process_login_success_response(std::string& password) // Override grid info with anything sent in the login response - std::string tmp = response["gridname"]; + std::string tmp = response["gridname"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setGridName(tmp); - tmp = response["loginuri"]; + tmp = response["loginuri"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginUri(tmp); - tmp = response["welcome"]; + tmp = response["welcome"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp); - tmp = response["loginpage"]; + tmp = response["loginpage"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setLoginPage(tmp); - tmp = response["economy"]; + tmp = response["economy"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp); - tmp = response["helperuri"]; + tmp = response["helperuri"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setHelperUri(tmp); - tmp = response["about"]; + tmp = response["about"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp); - tmp = response["website"]; + tmp = response["website"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setWebSite(tmp); - tmp = response["help"]; + tmp = response["help"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp); - tmp = response["support"]; + tmp = response["support"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSupportUrl(tmp); - tmp = response["register"]; + tmp = response["register"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp); - tmp = response["account"]; + tmp = response["account"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRegisterUrl(tmp); - tmp = response["password"]; + tmp = response["password"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp); - tmp = response["search"]; + tmp = response["search"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp); - tmp = response["currency"]; + tmp = response["currency"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp); - tmp = response["real_currency"]; + tmp = response["real_currency"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp); - tmp = response["directory_fee"]; + tmp = response["directory_fee"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str())); - tmp = response["max_groups"]; + tmp = response["max_groups"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str())); - tmp = response["max-agent-groups"]; + tmp = response["max-agent-groups"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setMaxAgentGroups(atoi(tmp.c_str())); - tmp = response["VoiceConnector"]; + tmp = response["VoiceConnector"].asString(); if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setVoiceConnector(tmp); gHippoGridManager->saveFile(); gHippoLimits->setLimits(); @@ -4351,4 +4351,4 @@ bool process_login_success_response(std::string& password) success = true; } return success; -} \ No newline at end of file +} diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 06431d428..0b8e4c608 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -236,8 +236,8 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 const F32 xyScaleInv = (1.f / xyScale)*(0.2222222222f); F32 vec[3] = { - fmod((F32)(mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f), - fmod((F32)(mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f), + (F32)fmod((mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f), + (F32)fmod((mOriginGlobal.mdV[1] + y)*xyScaleInv, 256.f), 0.f }; F32 rand_val = llclamp(noise2(vec)* 0.75f + 0.5f, 0.f, 1.f); diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index ab55f6988..a524cd098 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -2,31 +2,25 @@ * @file lltextureview.cpp * @brief LLTextureView class implementation * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * 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 + * Copyright (C) 2010, Linden Research, Inc. * - * 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 + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * 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. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -44,16 +38,21 @@ #include "llrender.h" #include "llappviewer.h" -#include "llhoverview.h" #include "llselectmgr.h" #include "lltexlayer.h" #include "lltexturecache.h" #include "lltexturefetch.h" #include "llviewercontrol.h" #include "llviewerobject.h" +#include "llviewertexture.h" #include "llviewertexturelist.h" #include "llvovolume.h" #include "llviewerstats.h" + +// For avatar texture view +#include "llvoavatarself.h" +#include "lltexlayer.h" + extern F32 texmem_lower_bound_scale; LLTextureView *gTextureView = NULL; @@ -61,6 +60,7 @@ LLTextureSizeView *gTextureSizeView = NULL; LLTextureSizeView *gTextureCategoryView = NULL; #define HIGH_PRIORITY 100000000.f + //static std::set LLTextureView::sDebugImages; @@ -381,6 +381,98 @@ LLRect LLTextureBar::getRequiredRect() //////////////////////////////////////////////////////////////////////////// +class LLAvatarTexBar : public LLView +{ +public: + + LLAvatarTexBar(const std::string& name, LLTextureView* texview) + : LLView(name, FALSE), + mTextureView(texview) + { + S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + setRect(LLRect(0,0,100,line_height * 4)); + } + + virtual void draw(); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); + virtual LLRect getRequiredRect(); // Return the height of this object, given the set options. + +private: + LLTextureView* mTextureView; +}; + +void LLAvatarTexBar::draw() +{ + if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) return; + + LLVOAvatarSelf* avatarp = gAgentAvatarp; + if (!avatarp) return; + + const S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + const S32 v_offset = 0; + const S32 l_offset = 3; + + //---------------------------------------------------------------------------- + LLGLSUIDefault gls_ui; + LLColor4 color; + + U32 line_num = 1; + for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin(); + baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); + ++baked_iter) + { + const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first; + const LLTexLayerSet *layerset = avatarp->debugGetLayerSet(baked_index); + if (!layerset) continue; + const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite(); + if (!layerset_buffer) continue; + + LLColor4 text_color = LLColor4::white; + + if (layerset_buffer->uploadNeeded()) + { + text_color = LLColor4::red; + } + if (layerset_buffer->uploadInProgress()) + { + text_color = LLColor4::magenta; + } + std::string text = layerset_buffer->dumpTextureInfo(); + LLFontGL::getFontMonospace()->renderUTF8(text, 0, l_offset, v_offset + line_height*line_num, + text_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT); + line_num++; + } + const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout"); + const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); + + LLColor4 header_color(1.f, 1.f, 1.f, 0.9f); + + const std::string texture_timeout_str = texture_timeout ? llformat("%d",texture_timeout) : "Disabled"; + const std::string override_tex_discard_level_str = override_tex_discard_level ? llformat("%d",override_tex_discard_level) : "Disabled"; + std::string header_text = llformat("[ Timeout('AvatarBakedTextureUploadTimeout'):%s ] [ LOD_Override('TextureDiscardLevel'):%s ]", texture_timeout_str.c_str(), override_tex_discard_level_str.c_str()); + LLFontGL::getFontMonospace()->renderUTF8(header_text, 0, l_offset, v_offset + line_height*line_num, + header_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT); + line_num++; + std::string section_text = "Avatar Textures Information:"; + LLFontGL::getFontMonospace()->renderUTF8(section_text, 0, 0, v_offset + line_height*line_num, + header_color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT); +} + +BOOL LLAvatarTexBar::handleMouseDown(S32 x, S32 y, MASK mask) +{ + return FALSE; +} + +LLRect LLAvatarTexBar::getRequiredRect() +{ + LLRect rect; + rect.mTop = 100; + if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) rect.mTop = 0; + return rect; +} + +//////////////////////////////////////////////////////////////////////////// + class LLGLTexMemBar : public LLView { public: @@ -410,38 +502,39 @@ void LLGLTexMemBar::draw() F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ; F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ; S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + S32 v_offset = 0; F32 total_texture_downloaded = (F32)gTotalTextureBytes / (1024 * 1024); F32 total_object_downloaded = (F32)gTotalObjectBytes / (1024 * 1024); -// U32 cache_max_entries = LLAppViewer::getTextureCache()->getMaxEntries(); - + U32 total_http_requests = LLAppViewer::getTextureFetch()->getTotalNumHTTPRequests() ; //---------------------------------------------------------------------------- LLGLSUIDefault gls_ui; LLColor4 text_color(1.f, 1.f, 1.f, 0.75f); LLColor4 color; - std::string text; - + std::string text = ""; + S32 global_raw_memory; { global_raw_memory = *AIAccess(LLImageRaw::sGlobalRawMemory); } - text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot Tex: %.1f MB Tot Obj: %.1f MB", + text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB FBO: %d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot Tex: %.1f MB Tot Obj: %.1f MB Tot Htp: %d", total_mem, max_total_mem, bound_mem, max_bound_mem, + LLRenderTarget::sBytesAllocated/(1024*1024), global_raw_memory >> 20, discard_bias, - cache_usage, cache_max_usage, total_texture_downloaded, total_object_downloaded); + cache_usage, cache_max_usage, total_texture_downloaded, total_object_downloaded, total_http_requests); //, cache_entries, cache_max_entries - LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, line_height*3, + LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3, text_color, LLFontGL::LEFT, LLFontGL::TOP); //---------------------------------------------------------------------------- #if 0 S32 bar_left = 400; S32 bar_width = 200; - S32 top = line_height*3 - 2; + S32 top = line_height*3 - 2 + v_offset; S32 bottom = top - 6; S32 left = bar_left; S32 right = left + bar_width; @@ -469,7 +562,7 @@ void LLGLTexMemBar::draw() color = (total_mem < llfloor(max_total_mem * texmem_lower_bound_scale)) ? LLColor4::green : (total_mem < max_total_mem) ? LLColor4::yellow : LLColor4::red; color[VALPHA] = .75f; - gGL.diffuseColor4f(color.mV); + gGL.diffuseColor4fv(color.mV); gl_rect_2d(left, top, right, bottom); // red/yellow/green @@ -492,7 +585,7 @@ void LLGLTexMemBar::draw() color = (bound_mem < llfloor(max_bound_mem * texmem_lower_bound_scale)) ? LLColor4::green : (bound_mem < max_bound_mem) ? LLColor4::yellow : LLColor4::red; color[VALPHA] = .75f; - gGL.diffuseColor4f(color.mV); + gGL.diffuseColor4fv(color.mV); gl_rect_2d(left, top, right, bottom); #else @@ -512,7 +605,7 @@ void LLGLTexMemBar::draw() LLAppViewer::getImageDecodeThread()->getPending(), gTextureList.mCreateTextureList.size()); - LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, line_height*2, + LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*2, text_color, LLFontGL::LEFT, LLFontGL::TOP); left += LLFontGL::getFontMonospace()->getWidth(text); @@ -521,40 +614,40 @@ void LLGLTexMemBar::draw() color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color; color[VALPHA] = text_color[VALPHA]; text = llformat("BW:%.0f/%.0f",bandwidth, max_bandwidth); - LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, line_height*2, + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left, v_offset + line_height*2, color, LLFontGL::LEFT, LLFontGL::TOP); S32 dx1 = 0; if (LLAppViewer::getTextureFetch()->mDebugPause) { - LLFontGL::getFontMonospace()->renderUTF8(std::string("!"), 0, title_x1, line_height, + LLFontGL::getFontMonospace()->renderUTF8(std::string("!"), 0, title_x1, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); dx1 += 8; } if (mTextureView->mFreezeView) { - LLFontGL::getFontMonospace()->renderUTF8(std::string("*"), 0, title_x1, line_height, + LLFontGL::getFontMonospace()->renderUTF8(std::string("*"), 0, title_x1, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); dx1 += 8; } if (mTextureView->mOrderFetch) { - LLFontGL::getFontMonospace()->renderUTF8(title_string1b, 0, title_x1+dx1, line_height, + LLFontGL::getFontMonospace()->renderUTF8(title_string1b, 0, title_x1+dx1, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); } else { - LLFontGL::getFontMonospace()->renderUTF8(title_string1a, 0, title_x1+dx1, line_height, + LLFontGL::getFontMonospace()->renderUTF8(title_string1a, 0, title_x1+dx1, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); } - LLFontGL::getFontMonospace()->renderUTF8(title_string2, 0, title_x2, line_height, + LLFontGL::getFontMonospace()->renderUTF8(title_string2, 0, title_x2, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); - LLFontGL::getFontMonospace()->renderUTF8(title_string3, 0, title_x3, line_height, + LLFontGL::getFontMonospace()->renderUTF8(title_string3, 0, title_x3, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); - LLFontGL::getFontMonospace()->renderUTF8(title_string4, 0, title_x4, line_height, + LLFontGL::getFontMonospace()->renderUTF8(title_string4, 0, title_x4, v_offset + line_height, text_color, LLFontGL::LEFT, LLFontGL::TOP); } @@ -566,7 +659,7 @@ BOOL LLGLTexMemBar::handleMouseDown(S32 x, S32 y, MASK mask) LLRect LLGLTexMemBar::getRequiredRect() { LLRect rect; - rect.mTop = 8; + rect.mTop = 50; return rect; } @@ -646,6 +739,7 @@ LLTextureView::LLTextureView(const std::string& name, const LLRect& rect) setDisplayChildren(TRUE); mGLTexMemBar = 0; + mAvatarTexBar = 0; } LLTextureView::~LLTextureView() @@ -653,6 +747,9 @@ LLTextureView::~LLTextureView() // Children all cleaned up by default view destructor. delete mGLTexMemBar; mGLTexMemBar = 0; + + delete mAvatarTexBar; + mAvatarTexBar = 0; } typedef std::pair decode_pair_t; @@ -664,6 +761,15 @@ struct compare_decode_pair } }; +struct KillView +{ + void operator()(LLView* viewp) + { + viewp->getParent()->removeChild(viewp); + viewp->die(); + } +}; + void LLTextureView::draw() { if (!mFreezeView) @@ -671,12 +777,23 @@ void LLTextureView::draw() // LLViewerObject *objectp; // S32 te; - for_each(mTextureBars.begin(), mTextureBars.end(), DeletePointer()); + for_each(mTextureBars.begin(), mTextureBars.end(), KillView()); mTextureBars.clear(); - - delete mGLTexMemBar; - mGLTexMemBar = 0; - + + if (mGLTexMemBar) + { + removeChild(mGLTexMemBar); + mGLTexMemBar->die(); + mGLTexMemBar = 0; + } + + if (mAvatarTexBar) + { + removeChild(mAvatarTexBar); + mAvatarTexBar->die(); + mAvatarTexBar = 0; + } + typedef std::multiset display_list_t; display_list_t display_image_list; @@ -813,6 +930,7 @@ void LLTextureView::draw() static S32 max_count = 50; S32 count = 0; + mNumTextureBars = 0 ; for (display_list_t::iterator iter = display_image_list.begin(); iter != display_image_list.end(); iter++) { @@ -840,6 +958,9 @@ void LLTextureView::draw() mGLTexMemBar = new LLGLTexMemBar("gl texmem bar", this); addChild(mGLTexMemBar); + mAvatarTexBar = new LLAvatarTexBar("gl avatartex bar", this); + addChild(mAvatarTexBar); + reshape(getRect().getWidth(), getRect().getHeight(), TRUE); /* @@ -920,7 +1041,7 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent) } //----------------------------------------------------------------- -LLTextureSizeView::LLTextureSizeView(const std::string& name) : LLView(name, FALSE) +LLTextureSizeView::LLTextureSizeView(const std::string& name) : LLContainerView(name, LLRect()) { setVisible(FALSE) ; diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h index 221e42b7a..9555e26ca 100644 --- a/indra/newview/lltextureview.h +++ b/indra/newview/lltextureview.h @@ -2,31 +2,25 @@ * @file lltextureview.h * @brief LLTextureView class header file * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * 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 + * Copyright (C) 2010, Linden Research, Inc. * - * 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 + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * 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. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -38,11 +32,13 @@ class LLViewerFetchedTexture; class LLTextureBar; class LLGLTexMemBar; +class LLAvatarTexBar; class LLTextureView : public LLContainerView { friend class LLTextureBar; friend class LLGLTexMemBar; + friend class LLAvatarTexBar; public: LLTextureView(const std::string& name, const LLRect& rect); ~LLTextureView(); @@ -71,13 +67,13 @@ private: U32 mNumTextureBars; LLGLTexMemBar* mGLTexMemBar; - + LLAvatarTexBar* mAvatarTexBar; public: static std::set sDebugImages; }; class LLGLTexSizeBar; -class LLTextureSizeView : public LLView +class LLTextureSizeView : public LLContainerView { public: LLTextureSizeView(const std::string& name); diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp index 5678aa236..08a1b26ef 100644 --- a/indra/newview/lltoolbar.cpp +++ b/indra/newview/lltoolbar.cpp @@ -537,7 +537,7 @@ void LLToolBar::onClickDirectory(void*) // static void LLToolBar::onClickBuild(void*) { - toggle_build_mode(); + LLToolMgr::getInstance()->toggleBuildMode(); } diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 0ad252cae..ff4f66e63 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -51,10 +51,18 @@ #include "lltoolselectland.h" #include "lltoolobjpicker.h" #include "lltoolpipette.h" -#include "llviewerparcelmgr.h" #include "llagent.h" #include "llagentcamera.h" #include "llviewercontrol.h" +#include "llmemberlistener.h" +#include "llevent.h" +#include "llviewerjoystick.h" +#include "llviewermenu.h" +#include "llviewerparcelmgr.h" +#include "llfirstuse.h" +#include "llfloatertools.h" + +#include "rlvhandler.h" // Used when app not active to avoid processing hover. @@ -69,6 +77,24 @@ LLToolset* gFaceEditToolset = NULL; ///////////////////////////////////////////////////// // LLToolMgr +class LLViewBuildMode : public LLMemberListener +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + LLToolMgr::getInstance()->toggleBuildMode(); + return true; + } +}; +class LLViewCheckBuildMode : public LLMemberListener +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + bool new_value = LLToolMgr::getInstance()->inEdit(); + gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); + return true; + } +}; + LLToolMgr::LLToolMgr() : mBaseTool(NULL), @@ -88,6 +114,14 @@ LLToolMgr::LLToolMgr() gFaceEditToolset = new LLToolset("FaceEdit"); } +void LLToolMgr::initMenu(std::vector > >& menu_list) +{ + menu_list.push_back(new LLViewBuildMode()); + menu_list.back()->registerListener(gMenuHolder, "View.BuildMode"); + menu_list.push_back(new LLViewCheckBuildMode()); + menu_list.back()->registerListener(gMenuHolder, "View.CheckBuildMode"); +} + void LLToolMgr::initTools() { static BOOL initialized = FALSE; @@ -236,7 +270,7 @@ void LLToolMgr::updateToolStatus() getCurrentTool(); } -BOOL LLToolMgr::inEdit() +bool LLToolMgr::inEdit() { return mBaseTool != LLToolPie::getInstance() && mBaseTool != gToolNull; } @@ -245,6 +279,77 @@ bool LLToolMgr::canEdit() { return LLViewerParcelMgr::getInstance()->allowAgentBuild(); } + +void LLToolMgr::toggleBuildMode() +{ + if (!inBuildMode()) + { + ECameraMode camMode = gAgentCamera.getCameraMode(); + if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode) + { + // pull the user out of mouselook or appearance mode when entering build mode + handle_reset_view(); + } + + if (gSavedSettings.getBOOL("EditCameraMovement")) + { + // camera should be set + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + handle_toggle_flycam(); + } + + if (gAgentCamera.getFocusOnAvatar()) + { + // zoom in if we're looking at the avatar + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); + } + } + +// [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) + bool fRlvCanEdit = (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ)); + if (!fRlvCanEdit) + { + LLObjectSelectionHandle hSel = LLSelectMgr::getInstance()->getSelection(); + RlvSelectIsEditable f; + if ((hSel.notNull()) && ((hSel->getFirstRootNode(&f, TRUE)) != NULL)) + LLSelectMgr::getInstance()->deselectAll(); + } +// [/RLVa:KB] + + setCurrentToolset(gBasicToolset); + getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); + + // Could be first use + LLFirstUse::useBuild(); + + gAgentCamera.resetView(false); + + // avoid spurious avatar movements + LLViewerJoystick::getInstance()->setNeedsReset(); + + } + else + { + if (gSavedSettings.getBOOL("EditCameraMovement")) + { + // just reset the view, will pull us out of edit mode + handle_reset_view(); + } + else + { + // manually disable edit mode, but do not affect the camera + gAgentCamera.resetView(false); + gFloaterTools->close(); + gViewerWindow->showCursor(); + } + // avoid spurious avatar movements pulling out of edit mode + LLViewerJoystick::getInstance()->setNeedsReset(); + } +} bool LLToolMgr::inBuildMode() { // when entering mouselook inEdit() immediately returns true before @@ -408,9 +513,3 @@ void LLToolset::selectPrevTool() selectToolByIndex((S32)mToolList.size()-1); } } - -void select_tool( void *tool_pointer ) -{ - LLTool *tool = (LLTool *)tool_pointer; - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool ); -} diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h index e3fdb129a..31a481b17 100644 --- a/indra/newview/lltoolmgr.h +++ b/indra/newview/lltoolmgr.h @@ -35,8 +35,11 @@ #include "llkeyboard.h" +#include "llmemberlistener.h" + class LLTool; class LLToolset; +class LLView; // Key bindings for common operations const MASK MASK_VERTICAL = MASK_CONTROL; @@ -52,14 +55,17 @@ public: LLToolMgr(); ~LLToolMgr(); + void initMenu(std::vector > >& menu_list); + // Must be called after gSavedSettings set up. void initTools(); LLTool* getCurrentTool(); // returns active tool, taking into account keyboard state LLTool* getBaseTool(); // returns active tool when overrides are deactivated - BOOL inEdit(); + bool inEdit(); bool canEdit(); + void toggleBuildMode(); /* Determines if we are in Build mode or not. */ bool inBuildMode(); @@ -118,10 +124,6 @@ protected: tool_list_t mToolList; }; -// Handy callbacks for switching tools -void select_tool(void *tool); - - // Globals extern LLToolset* gBasicToolset; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 580f05314..9b3a87d0e 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -75,7 +75,7 @@ #include "rlvhandler.h" // [/RLVa:KB] -extern void handle_buy(void*); +extern void handle_buy(); extern BOOL gDebugClicks; @@ -627,7 +627,7 @@ void LLToolPie::selectionPropertiesReceived() switch (click_action) { case CLICK_ACTION_BUY: - handle_buy(NULL); + handle_buy(); break; case CLICK_ACTION_PAY: handle_give_money_dialog(); diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp index bae777c1d..5164daf22 100644 --- a/indra/newview/llviewerjointattachment.cpp +++ b/indra/newview/llviewerjointattachment.cpp @@ -164,6 +164,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) if (isObjectAttached(object)) { llinfos << "(same object re-attached)" << llendl; + LL_INFOS("Attachment") << object->getID() << " ("<getAttachmentPointName()<<") OBJECT re-attached" << llendl; removeObject(object); // Pass through anyway to let setupDrawable() // re-connect object to the joint correctly @@ -178,6 +179,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) if (getAttachedObject(object->getAttachmentItemID())) { llinfos << "(same object re-attached)" << llendl; + LL_INFOS("Attachment") << object->getID() << " ("<getAttachmentPointName()<<") ITEM re-attached" << llendl; object->markDead(); // If this happens to be attached to self, then detach. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index e7265eb8e..15162e938 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -344,7 +344,6 @@ typedef LLMemberListener view_listener_t; // // Local prototypes // -void handle_leave_group(void *); // File Menu void handle_compress_image(void*); @@ -368,37 +367,34 @@ void handle_region_clear_temp_asset_data(void*); BOOL sitting_on_selection(); void near_sit_object(); -void label_sit_or_stand(std::string& label, void*); +//void label_sit_or_stand(std::string& label, void*); // buy and take alias into the same UI positions, so these // declarations handle this mess. BOOL is_selection_buy_not_take(); S32 selection_price(); BOOL enable_take(); void handle_take(); -bool confirm_take(const LLSD& notification, const LLSD& response); -BOOL enable_buy(void*); -void handle_buy(void *); +bool confirm_take(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle selection_handle); + void handle_buy_object(LLSaleInfo sale_info); void handle_buy_contents(LLSaleInfo sale_info); -void label_touch(std::string& label, void*); + +bool for_sale_selection(LLSelectNode* nodep); // Land pie menu void near_sit_down_point(BOOL success, void *); // Avatar pie menu -void handle_follow(void *userdata); void handle_talk_to(void *userdata); // Debug menu -void show_permissions_control(void*); -void toggle_build_options(void* user_data); -void reload_ui(void*); + + void handle_agent_stop_moving(void*); void print_packets_lost(void*); void drop_packet(void*); void velocity_interpolate( void* data ); void toggle_wind_audio(void); -void toggle_water_audio(void); void handle_rebake_textures(void*); BOOL check_admin_override(void*); void handle_admin_override_toggle(void*); @@ -407,14 +403,6 @@ void handle_toggle_hacked_godmode(void*); BOOL check_toggle_hacked_godmode(void*); #endif -void toggle_glow(void *); -BOOL check_glow(void *); - -void toggle_vertex_shaders(void *); -BOOL check_vertex_shaders(void *); - -void toggle_cull_small(void *); - void toggle_show_xui_names(void *); BOOL check_show_xui_names(void *); @@ -568,14 +556,8 @@ void handle_crash(void*); void handle_dump_followcam(void*); void handle_viewer_enable_message_log(void*); void handle_viewer_disable_message_log(void*); -void handle_send_postcard(void*); -void handle_gestures_old(void*); -void handle_focus(void *); + BOOL enable_buy_land(void*); -void handle_move(void*); -void handle_show_inventory(void*); -void handle_activate(void*); -BOOL enable_activate(void*); // Help menu void handle_buy_currency(void*); @@ -687,6 +669,8 @@ void set_underclothes_menu_options() } } +static std::vector > sMenus; + void init_menus() { S32 top = gViewerWindow->getRootView()->getRect().getHeight(); @@ -892,6 +876,7 @@ void init_menus() gMenuHolder->addChild(gLoginMenuBarView); + LLToolMgr::getInstance()->initMenu(sMenus); } @@ -900,8 +885,6 @@ void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub_menu = NULL; - //menu->addChild(new LLMenuItemCallGL("Permissions Control", &show_permissions_control)); - // this is now in the view menu so we don't need it here! { // *TODO: Translate @@ -1544,7 +1527,6 @@ void init_debug_rendering_menu(LLMenuGL* menu) menu->addSeparator(); menu->addChild(new LLMenuItemCheckGL("Axes", menu_toggle_control, NULL, menu_check_control, (void*)"ShowAxes")); - //menu->addChild(new LLMenuItemCheckGL("Cull Small Objects", toggle_cull_small, NULL, menu_check_control, (void*)"RenderCullBySize")); menu->addSeparator(); menu->addChild(new LLMenuItemCheckGL("Hide Selected", menu_toggle_control, NULL, menu_check_control, (void*)"HideSelectedObjects")); @@ -1809,8 +1791,6 @@ void init_server_menu(LLMenuGL* menu) menu->createJumpKeys(); } -static std::vector > sMenus; - //----------------------------------------------------------------------------- // cleanup_menus() //----------------------------------------------------------------------------- @@ -1968,18 +1948,19 @@ class LLObjectEnableTouch : public view_listener_t } }; -void label_touch(std::string& label, void*) -{ - LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); - if (node && node->mValid && !node->mTouchName.empty()) - { - label.assign(node->mTouchName); - } - else - { - label.assign("Touch"); - } -} + +//void label_touch(std::string& label, void*) +//{ +// LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); +// if (node && node->mValid && !node->mTouchName.empty()) +// { +// label.assign(node->mTouchName); +// } +// else +// { +// label.assign("Touch"); +// } +//} bool handle_object_open() { @@ -2028,95 +2009,7 @@ class LLObjectEnableOpen : public view_listener_t }; -class LLViewCheckBuildMode : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - bool new_value = LLToolMgr::getInstance()->inEdit(); - gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); - return true; - } -}; -bool toggle_build_mode() -{ - if (LLToolMgr::getInstance()->inBuildMode()) - { - if (gSavedSettings.getBOOL("EditCameraMovement")) - { - // just reset the view, will pull us out of edit mode - handle_reset_view(); - } - else - { - // manually disable edit mode, but do not affect the camera - gAgentCamera.resetView(false); - gFloaterTools->close(); - gViewerWindow->showCursor(); - } - // avoid spurious avatar movements pulling out of edit mode - LLViewerJoystick::getInstance()->setNeedsReset(); - } - else - { - ECameraMode camMode = gAgentCamera.getCameraMode(); - if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode) - { - // pull the user out of mouselook or appearance mode when entering build mode - handle_reset_view(); - } - - if (gSavedSettings.getBOOL("EditCameraMovement")) - { - // camera should be set - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - handle_toggle_flycam(); - } - - if (gAgentCamera.getFocusOnAvatar()) - { - // zoom in if we're looking at the avatar - gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); - gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); - gAgentCamera.cameraZoomIn(0.666f); - gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); - } - } - -// [RLVa:KB] - Checked: 2009-07-05 (RLVa-1.0.0b) - bool fRlvCanEdit = (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ)); - if (!fRlvCanEdit) - { - LLObjectSelectionHandle hSel = LLSelectMgr::getInstance()->getSelection(); - RlvSelectIsEditable f; - if ((hSel.notNull()) && ((hSel->getFirstRootNode(&f, TRUE)) != NULL)) - LLSelectMgr::getInstance()->deselectAll(); - } -// [/RLVa:KB] - - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); - - // Could be first use - LLFirstUse::useBuild(); - - gAgentCamera.resetView(false); - - // avoid spurious avatar movements - LLViewerJoystick::getInstance()->setNeedsReset(); - - } - return true; -} - -class LLViewBuildMode : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - return toggle_build_mode(); - } -}; class LLViewJoystickFlycam : public view_listener_t @@ -2517,15 +2410,18 @@ BOOL enable_has_attachments(void*) //--------------------------------------------------------------------------- // Avatar pie menu //--------------------------------------------------------------------------- -void handle_follow(void *userdata) -{ - // follow a given avatar by ID - LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); - if (objectp) - { - gAgent.startFollowPilot(objectp->getID()); - } -} +//--------------------------------------------------------------------------- +// Avatar pie menu +//--------------------------------------------------------------------------- +//void handle_follow(void *userdata) +//{ +// // follow a given avatar by ID +// LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); +// if (objectp) +// { +// gAgent.startFollowPilot(objectp->getID()); +// } +//} class LLObjectEnableMute : public view_listener_t { @@ -3415,16 +3311,6 @@ bool callback_leave_group(const LLSD& notification, const LLSD& response) return false; } -void handle_leave_group(void *) -{ - if (gAgent.getGroupID() != LLUUID::null) - { - LLSD args; - args["GROUP"] = gAgent.getGroupName(); - LLNotificationsUtil::add("GroupLeaveConfirmMember", args, LLSD(), callback_leave_group); - } -} - void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm, PermissionBit bit, const char* txt) { LLAggregatePermissions::EValue val = ag_perm.getValue(bit); @@ -3447,32 +3333,35 @@ void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm string.append(buffer); } -BOOL enable_buy(void*) +bool enable_buy_object() { // In order to buy, there must only be 1 purchaseable object in // the selection manger. - if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return FALSE; + if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return false; LLViewerObject* obj = NULL; LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); if(node) { obj = node->getObject(); - if(!obj) return FALSE; + if(!obj) return false; - if(node->mSaleInfo.isForSale() && node->mPermissions->getMaskOwner() & PERM_TRANSFER && - (node->mPermissions->getMaskOwner() & PERM_COPY || node->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY)) + if( for_sale_selection(node) ) { - if(obj->permAnyOwner()) return TRUE; + // *NOTE: Is this needed? This checks to see if anyone owns the + // object, dating back to when we had "public" objects owned by + // no one. JC + if(obj->permAnyOwner()) return true; } } - return FALSE; + return false; } + class LLObjectEnableBuy : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - bool new_value = enable_buy(NULL); + bool new_value = enable_buy_object(); gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); return true; } @@ -4108,15 +3997,6 @@ class LLLandSit : public view_listener_t } }; -void show_permissions_control(void*) -{ - LLFloaterPermissionsMgr* floaterp = LLFloaterPermissionsMgr::show(); - floaterp->mPermissions->addPermissionsData("foo1", LLUUID::null, 0); - floaterp->mPermissions->addPermissionsData("foo2", LLUUID::null, 0); - floaterp->mPermissions->addPermissionsData("foo3", LLUUID::null, 0); -} - - class LLCreateLandmarkCallback : public LLInventoryCallback { public: @@ -4127,11 +4007,6 @@ public: } }; -void reload_ui(void *) -{ - LLUICtrlFactory::getInstance()->rebuild(); -} - class LLWorldFly : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -4278,7 +4153,9 @@ void reset_view_final( BOOL proceed ) return; } + gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); gAgentCamera.resetView(TRUE, TRUE); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); } class LLViewLookAtLastChatter : public view_listener_t @@ -4994,7 +4871,7 @@ void handle_take() LLNotification::Params params("ConfirmObjectTakeLock"); params.payload(payload) - .functor(confirm_take); + .functor(boost::bind(&confirm_take, _1, _2, LLSelectMgr::instance().getSelection())); if(locked_but_takeable_object || !you_own_everything) @@ -5021,7 +4898,7 @@ void handle_take() } } -bool confirm_take(const LLSD& notification, const LLSD& response) +bool confirm_take(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle selection_handle) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if(enable_take() && (option == 0)) @@ -5091,7 +4968,7 @@ class LLToolsBuyOrTake : public view_listener_t if (total_price <= gStatusBar->getBalance() || total_price == 0) { - handle_buy(NULL); + handle_buy(); } else { @@ -5112,7 +4989,7 @@ class LLToolsEnableBuyOrTake : public view_listener_t bool handleEvent(LLPointer event, const LLSD& userdata) { bool is_buy = is_selection_buy_not_take(); - bool new_value = is_buy ? enable_buy(NULL) : enable_take(); + bool new_value = is_buy ? enable_buy_object() : enable_take(); gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); // Update label @@ -5230,7 +5107,7 @@ void handle_buy_currency(void*) // LLFloaterBuyCurrency::buyCurrency(); } -void handle_buy(void*) +void handle_buy() { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; @@ -5252,11 +5129,26 @@ class LLObjectBuy : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - handle_buy(NULL); + handle_buy(); return true; } }; +bool anyone_copy_selection(LLSelectNode* nodep) +{ + bool perm_copy = (bool)(nodep->getObject()->permCopy()); + bool all_copy = (bool)(nodep->mPermissions->getMaskEveryone() & PERM_COPY); + return perm_copy && all_copy; +} + +bool for_sale_selection(LLSelectNode* nodep) +{ + return nodep->mSaleInfo.isForSale() + && nodep->mPermissions->getMaskOwner() & PERM_TRANSFER + && (nodep->mPermissions->getMaskOwner() & PERM_COPY + || nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY); +} + BOOL sitting_on_selection() { LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); @@ -6843,33 +6735,6 @@ class LLShowAgentGroups : public view_listener_t return true; } }; - -void handle_focus(void *) -{ - if (gDisconnected) - { - return; - } - - if (gAgentCamera.getFocusOnAvatar()) - { - // zoom in if we're looking at the avatar - gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); - gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); - gAgentCamera.cameraZoomIn(0.666f); - } - else - { - gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); - } - - gViewerWindow->moveCursorToCenter(); - - // Switch to camera toolset -// LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCamera::getInstance() ); -} - class LLLandEdit : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -6928,26 +6793,6 @@ BOOL enable_buy_land(void*) } -void handle_move(void*) -{ - if (gAgentCamera.getFocusOnAvatar()) - { - // zoom in if we're looking at the avatar - gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); - gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); - - gAgentCamera.cameraZoomIn(0.666f); - } - else - { - gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); - } - - gViewerWindow->moveCursorToCenter(); - - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() ); -} class LLObjectAttachToAvatar : public view_listener_t { @@ -7558,16 +7403,6 @@ class LLAvatarSendIM : public view_listener_t } }; - -void handle_activate(void*) -{ -} - -BOOL enable_activate(void*) -{ - return FALSE; -} - namespace { struct QueueObjects : public LLSelectedObjectFunctor @@ -8302,19 +8137,6 @@ BOOL enable_god_basic(void*) //return gAgent.getGodLevel() > GOD_NOT; } -#if 0 // 1.9.2 -void toggle_vertex_shaders(void *) -{ - BOOL use_shaders = gPipeline.getUseVertexShaders(); - gPipeline.setUseVertexShaders(use_shaders); -} - -BOOL check_vertex_shaders(void *) -{ - return gPipeline.getUseVertexShaders(); -} -#endif - void toggle_show_xui_names(void *) { BOOL showXUINames = gSavedSettings.getBOOL("ShowXUINames"); @@ -8328,15 +8150,6 @@ BOOL check_show_xui_names(void *) return gSavedSettings.getBOOL("ShowXUINames"); } - - -void toggle_cull_small(void *) -{ -// gPipeline.mCullBySize = !gPipeline.mCullBySize; -// -// gSavedSettings.setBOOL("RenderCullBySize", gPipeline.mCullBySize); -} - class LLToolsSelectOnlyMyObjects : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -9254,7 +9067,7 @@ class LLEditTakeOff : public view_listener_t && (gAgentWearables.getWearableCount(type) > 0)) { // MULTI-WEARABLES: assuming user wanted to remove top shirt. - U32 wearable_index = gAgentWearables.getWearableCount(type) - 1; + S32 wearable_index = gAgentWearables.getWearableCount(type) - 1; // [RLVa:KB] - Checked: 2010-06-09 (RLVa-1.2.0g) | Added: RLVa-1.2.0g if ( (rlv_handler_t::isEnabled()) && (gRlvWearableLocks.hasLockedWearable(type)) ) @@ -9424,7 +9237,7 @@ class LLWorldDayCycle : public view_listener_t } }; -static void addMenu(view_listener_t *menu, const std::string& name) +void addMenu(view_listener_t *menu, const std::string& name) { sMenus.push_back(menu); menu->registerListener(gMenuHolder, name); @@ -9494,7 +9307,6 @@ void initialize_menus() // View menu addMenu(new LLViewMouselook(), "View.Mouselook"); - addMenu(new LLViewBuildMode(), "View.BuildMode"); addMenu(new LLViewJoystickFlycam(), "View.JoystickFlycam"); addMenu(new LLViewCommunicate(), "View.Communicate"); addMenu(new LLViewResetView(), "View.ResetView"); @@ -9514,7 +9326,6 @@ void initialize_menus() addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList"); - addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam"); addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips"); addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent"); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 6d98b6c10..5f9c37dd9 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -39,7 +39,7 @@ class LLUICtrl; class LLView; class LLParcelSelection; class LLObjectSelection; - +class LLSelectNode; void pre_init_menus(); void init_menus(); @@ -97,8 +97,17 @@ void exchange_callingcard(const LLUUID& dest_id); void handle_gestures(void*); void handle_sit_down(void*); -bool toggle_build_mode(); void handle_object_build(void*); + +void handle_buy(); +// Can anyone take a free copy of the object? +// *TODO: Move to separate file +bool anyone_copy_selection(LLSelectNode* nodep); + +// Is this selected object for sale? +// *TODO: Move to separate file +bool for_sale_selection(LLSelectNode* nodep); + void handle_save_snapshot(void *); void handle_toggle_flycam(); void handle_fake_away_status(void*); @@ -106,6 +115,7 @@ void handle_fake_away_status(void*); bool handle_sit_or_stand(); bool handle_give_money_dialog(); bool handle_object_open(); +bool enable_buy_object(); bool handle_go_to(); // Export to XML or Collada diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 63a71f5fb..110876bad 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4853,7 +4853,9 @@ void process_sound_trigger(LLMessageSystem *msg, void **) // Don't play sounds from gestures if they are not enabled. if (object_id == owner_id && !gSavedSettings.getBOOL("EnableGestureSounds")) { - return; + // Don't mute own gestures, if they're not muted. + if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf")) + return; } // diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 8a448ea18..5b0a1e364 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -1769,6 +1769,22 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, LLViewerObject *sent_parentp = gObjectList.findObject(parent_uuid); + if(isAttachment()) + { + llassert_always(gAgentID.notNull()); + if(parent_uuid == gAgentID) + { + static std::map state_map; + std::map::iterator it = state_map.find(getID()); + + if(it == state_map.end() || (!it->second && sent_parentp)) + { + it->second = sent_parentp != NULL; + LL_INFOS("Attachment") << getID() << " ("<mDrawable) { + if(isSelf()) + { + LL_INFOS("Attachment") << childp->getID() << " ("<getAttachmentPointName()<<") attached." << llendl; + llassert(std::find(mPendingAttachment.begin(), mPendingAttachment.end(), childp) == mPendingAttachment.end()); + } attachObject(childp); } else { + if(isSelf()) + { + LL_INFOS("Attachment") << childp->getID() << " ("<getAttachmentPointName()<<") pending." << llendl; + } mPendingAttachment.push_back(childp); } } @@ -6890,6 +6901,10 @@ void LLVOAvatar::lazyAttach() { if (mPendingAttachment[i]->mDrawable) { + if(isSelf()) + { + LL_INFOS("Attachment") << mPendingAttachment[i]->getID() << " ("<getAttachmentPointName()<<") done pending. attached." << llendl; + } attachObject(mPendingAttachment[i]); } else diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index 159255078..af5e977b2 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -469,7 +469,7 @@ void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code) case CURLE_SSL_CACERT: case CURLE_SSL_CONNECT_ERROR: message = - "Often this means that your computer\'s clock is set incorrectly.\n" + "Often this means that your computer's clock is set incorrectly.\n" "Please go to Control Panels and make sure the time and date\n" "are set correctly.\n" "\n" diff --git a/indra/newview/skins/default/xui/en-us/floater_about.xml b/indra/newview/skins/default/xui/en-us/floater_about.xml index 9fd019310..0f35260c8 100644 --- a/indra/newview/skins/default/xui/en-us/floater_about.xml +++ b/indra/newview/skins/default/xui/en-us/floater_about.xml @@ -22,7 +22,7 @@ follows="top|left" font="SansSerif" height="343" - bg_readonly_color="Transparent" + bg_readonly_color="transparent" left="1" max_length="65536" name="support_editor" @@ -49,7 +49,7 @@ -Sending incomplete appearence. You may appear to others as a cloud. +Sending incomplete appearance. You may appear to others as a cloud. Your shape, skin, hair or eyes might be defect. (Unnamed) + +float llGetMassMKS() +Returns a float that is the mass (in +Kilograms) of the object that the +script is attached to. + + +integer llGetMemoryLimit() +Get the maximum memory a script can use. + + +string llGetParcelMusicURL() +Returns a string containing the parcel streaming audio URL. +The object owner must also be the land owner. + + +list llGetPhysicsMaterial() +Used to get the physical characteristics of an object. +Returns a list in the form [ float gravity_multiplier, float restitution, float friction, float density ] + + +integer llManageEstateAccess(integer action, key avatar) +Used to add or remove agents from the estate's agent access or ban lists or groups from the estate's group access list. + + +llSetAngularVelocity(vector force, integer local) +Applies rotational velocity to object. + + +llSetKeyframedMotion(list keyframes, list options) +Specify a list of times, positions, and orientations to be followed by an object. The object will be smoothly moved between keyframes by the simulator. + + +llSetPhysicsMaterial(integer material, float gravity, +float restitution, float friction, float density) +Used for setting the physical characteristics of an object. + + +integer llSetRegionPos(vector position) +Tries to move the entire object so that the root prim is within 0.1m of position + + +llSetVelocity(vector force, integer local) +Applies velocity to an object + + +key llTransferLindenDollars(key destination, integer amount) +Transfer amount of L$ money from script owner to destination avatar. + + + + +llCreateCharacter(list options) +Creates a pathfinding entity, known as a "character" from the object containing the script. + + +llDeleteCharacter() +Convert the current linkset back to a standard object, removing all pathfinding properties. + + +llEvade(key target, list options) +Characters will try to hide from their pursuers if there is a good hiding spot along their fleeing path. + + +llExecCharacterCmd(integer command, list options) +Send a command to the pathing system. + + +list llGetClosestNavPoint(vector point, list options) +Finds the closest navpoint and returns a list with a single vector if succesful. Returns empty list when no navpoints found. + + +llFleeFrom(vector source, float distance, list options) +Tells an object to keep away from a defined position in the region or adjacent regions. + + +llNavigateTo(vector pos, list options) +Tells an object to travel to a defined position in the region or adjacent regions. + + +llPatrolPoints(list patrolPoints, list options) +Sets the object patrolling between the points specified in patrolPoints. + + +llPursue(key target, list options) +Causes the object to pursue a target. + + +llUpdateCharacter(list options) +Updates settings for a character. + + +llWanderWithin(vector origin, float dist, list options) +Sets a character to wander about a central spot within a specified radius. + + +integer osIsNpc(key npc) +Returns TRUE if the given key is an NPC, false otherwise. +(OpenSim only.) + + +key osNpcGetOwner(key npc) +Return the owner key of the given NPC. If the NPC is unowned or the input key does not belong to an NPC then it returns NULL_KEY. +(OpenSim only.) + + +string osGetGridCustom(string key) +Reads configuration strings from the [GridInfo] setion in OpenSim.ini. +(OpenSim only.) + + +string osGetGridHomeURI() +Returns the hypergrid URI of the grid where the user logged in. +(OpenSim only.) + + +osNpcPlayAnimation(key npc, string animation) +Get an NPC to play an animation. The animation can either be a key or the name of an animation in the same object as the script. +(OpenSim only.) + + +osNpcSit(key npc, key target, integer options) +Sit an NPC on a prim target. No options have been implemented yet, so always input 0. +(OpenSim only.) + + +osNpcStand(key npc) +Make an NPC stand up. +(OpenSim only.) + + +osNpcStopAnimation(key npc, string animation) +Get an NPC to stop playing an animation. The animation can either be a key or the name of an animation in the same inventory as the script. +(OpenSim only.) + + +osSetRot(key target, quaternion rotation) +Rotates an object or avatar. +(OpenSim only.) + diff --git a/indra/plugins/webkit/linux_volume_catcher.cpp b/indra/plugins/webkit/linux_volume_catcher.cpp index de5ce8dd5..0cb73ca1e 100644 --- a/indra/plugins/webkit/linux_volume_catcher.cpp +++ b/indra/plugins/webkit/linux_volume_catcher.cpp @@ -40,6 +40,9 @@ #include "volume_catcher.h" +#ifndef LL_WINDOWS +#include +#endif extern "C" { #include