diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 818d65283..e9b7fc35e 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -35,8 +35,8 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 4; -const S32 LL_VERSION_PATCH = 2; -const S32 LL_VERSION_BUILD = 9; +const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Ascent Viewer Release"; diff --git a/indra/newview/ascentfloatercontactgroups.cpp b/indra/newview/ascentfloatercontactgroups.cpp index 5793b6dd7..80f8a2204 100644 --- a/indra/newview/ascentfloatercontactgroups.cpp +++ b/indra/newview/ascentfloatercontactgroups.cpp @@ -21,7 +21,6 @@ #include "llscrolllistctrl.h" //List box for filenames #include "lluictrlfactory.h" //Loads the XUI #include "llresmgr.h" -// project includes #include "llviewercontrol.h" #include "llviewerwindow.h" #include "llsdserialize.h" diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index b657a5c14..1ab30c364 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -59,6 +59,7 @@ #include "llfloaterchat.h" #include "llkeyboard.h" #include "lllineeditor.h" +#include "llcheckboxctrl.h" #include "llnotify.h" #include "llresmgr.h" #include "lltabcontainer.h" @@ -1279,6 +1280,8 @@ BOOL LLFloaterIMPanel::postBuild() if (checkRequirements()) { + mRPMode = false; + mInputEditor = getChild("chat_editor"); mInputEditor->setFocusReceivedCallback( onInputEditorFocusReceived, this ); mInputEditor->setFocusLostCallback( onInputEditorFocusLost, this ); @@ -1293,6 +1296,7 @@ BOOL LLFloaterIMPanel::postBuild() childSetAction("profile_tele_btn", onClickTeleport, this); childSetAction("group_info_btn", onClickGroupInfo, this); childSetAction("history_btn", onClickHistory, this); + childSetCommitCallback("rp_mode", onRPMode, this); childSetAction("start_call_btn", onClickStartCall, this); childSetAction("end_call_btn", onClickEndCall, this); @@ -1792,6 +1796,13 @@ void LLFloaterIMPanel::onClickTeleport( void* userdata ) } } +// static +void LLFloaterIMPanel::onRPMode(LLUICtrl* source, void* user_data) +{ + LLFloaterIMPanel* self = (LLFloaterIMPanel*) user_data; + self->mRPMode = source->getValue().asBoolean(); +} + // static void LLFloaterIMPanel::onClickHistory( void* userdata ) { @@ -2018,7 +2029,7 @@ void LLFloaterIMPanel::sendMsg() if (mInputEditor) mInputEditor->updateHistory(); // Truncate and convert to UTF8 for transport std::string utf8text = wstring_to_utf8str(text); - if (gSavedSettings.getBOOL("AscentAutoCloseOOC") && (utf8text.length() > 1)) + if (gSavedSettings.getBOOL("AscentAutoCloseOOC") && (utf8text.length() > 1) && !mRPMode) { // Chalice - OOC autoclosing patch based on code by Henri Beauchamp int needsClosingType=0; @@ -2062,7 +2073,12 @@ void LLFloaterIMPanel::sendMsg() utf8text.replace(0, 1, "/me "); } } + utf8text = utf8str_truncate(utf8text, MAX_MSG_BUF_SIZE - 1); + + std::string prefix = utf8text.substr(0, 4); + if (prefix != "/me " && prefix != "/me'") + if (mRPMode) utf8text = "[[" + utf8text + "]]"; if ( mSessionInitialized ) { diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index 10799451c..4049ec0e5 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -215,6 +215,7 @@ public: void selectAll(); void selectNone(); void setVisible(BOOL b); + BOOL mRPMode; S32 getNumUnreadMessages() { return mNumUnreadMessages; } @@ -232,6 +233,7 @@ public: static void onClickProfile( void* userdata ); static void onClickHistory( void* userdata ); + static void onRPMode(LLUICtrl* source, void* user_data); static void onClickTeleport( void* userdata ); static void onClickGroupInfo( void* userdata ); static void onClickClose( void* userdata ); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 20657e64d..de97dbf0a 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -101,6 +101,13 @@ #include "hgfloatertexteditor.h" // +// Editing wearables from inventory is an include-hungry feature -.- -SG +#include "llviewerparcelmgr.h" +#include "llfloatertools.h" +#include "lltoolcomp.h" +#include "llviewerjoystick.h" +#include "lltoolmgr.h" + // Helpers // bug in busy count inc/dec right now, logic is complex... do we really need it? void inc_busy_count() @@ -4033,14 +4040,6 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model { LLInventoryItem* item = gInventory.getItem(mUUID); - - - - - - - - if( item ) { gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); @@ -4062,6 +4061,55 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model llwarns << "object not found - ignoring" << llendl; } } + else if ("edit" == action) + { + //if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) + // return; + LLVOAvatar* avatarp = gAgent.getAvatarObject(); + if (!avatarp) + return; + LLViewerObject* objectp = avatarp->getWornAttachment(mUUID); + if (!objectp) + return; + + // [Selective copy/paste from LLObjectEdit::handleEvent()] + LLViewerParcelMgr::getInstance()->deselectLand(); + LLSelectMgr::getInstance()->deselectAll(); + + if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit()) + { + if (objectp->isHUDAttachment() || !gSavedSettings.getBOOL("EditCameraMovement")) + { + // always freeze camera in space, even if camera doesn't move + // so, for example, follow cam scripts can't affect you when in build mode + gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null); + gAgent.setFocusOnAvatar(FALSE, ANIMATE); + } + else + { + gAgent.setFocusOnAvatar(FALSE, ANIMATE); + + // zoom in on object center instead of where we clicked, as we need to see the manipulator handles + gAgent.setFocusGlobal(objectp->getPositionGlobal(), objectp->getID()); + gAgent.cameraZoomIn(0.666f); + gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); + gViewerWindow->moveCursorToCenter(); + } + } + + gFloaterTools->open(); + + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + gFloaterTools->setEditTool( LLToolCompTranslate::getInstance() ); + + LLViewerJoystick::getInstance()->moveObjects(true); + LLViewerJoystick::getInstance()->setNeedsReset(true); + + LLSelectMgr::getInstance()->selectObjectAndFamily(objectp); + + // Could be first use + LLFirstUse::useBuild(); + } else LLItemBridge::performAction(folder, model, action); } @@ -4251,6 +4299,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { items.push_back(std::string("Attach Separator")); items.push_back(std::string("Detach From Yourself")); + items.push_back(std::string("Wearable Edit")); } else // testzone attachpt @@ -5914,4 +5963,4 @@ const LLUUID &LLLinkFolderBridge::getFolderID() const } } return LLUUID::null; -} \ No newline at end of file +} diff --git a/indra/newview/skins/default/xui/en-us/floater_instant_message.xml b/indra/newview/skins/default/xui/en-us/floater_instant_message.xml index 7d8840dc1..2b25a2f74 100644 --- a/indra/newview/skins/default/xui/en-us/floater_instant_message.xml +++ b/indra/newview/skins/default/xui/en-us/floater_instant_message.xml @@ -37,46 +37,16 @@ Text chat is not available for this call. - - - OTR is generating keys. This will happen once for each of your avatars and should take less than 45 seconds. - Your buddy - [NAME] has ended the private conversation, so your message was not sent. You should restart the private conversation, or end the private conversation. - OTR has been deactivated by preferences (edit > preferences > Extras tab > IM tab) - Unable to encrypt your message for some reason; it has not been sent. - Unable to start private conversation. - [NAME] appears offline; OTR will not try to start a private conversation. - [NAME] appears offline; You may "End private conversation" and send your message un-encrypted. - Attempting to start a private conversation with [NAME]. - You have ended the unverified conversation with [NAME]. - You have ended the private conversation with [NAME]. - You have ended the OTR conversation with [NAME]. - [NAME] is attempting to start a private conversation. - [NAME] has ended the unverified conversation. - [NAME] has ended the private conversation. - [NAME] has ended the OTR conversation. - [NAME] is now authenticated. - Private conversation with [NAME] started. - Unverified conversation started. [NAME] has not been authenticated, you should "authenticate buddy," see http://www.cypherpunks.ca/otr/help/3.2.0/authenticate.php - Private conversation ended. - Private conversation with [NAME] resumed. - Unverified conversation resumed. [NAME] has not been authenticated, you should "authenticate buddy," see http://www.cypherpunks.ca/otr/help/3.2.0/authenticate.php - OTR: Not Private - OTR: Unverified - OTR: Private - OTR: Finished - Start private conversation - Refresh private conversation - Restart private conversation - End private conversation - Authenticate buddy -