From b7ce1a52ee246a4c38c909cd7e8128e259b253f7 Mon Sep 17 00:00:00 2001 From: ruslantproductengine Date: Fri, 28 Aug 2015 19:20:55 +0300 Subject: [PATCH 001/278] MAINT-4483 (Mesh uploader allows Low LODs to have more triangles than High LODs) The fix in fllowing: LLTextureFetch has object LLTextureInfo which is has Recorder object. The recorder object activate (Recorder::handleStart()) self AccumulatorBufferGroup (Recorder::mBuffers into the current (LLTrace::get_thread_recorder()) ThreadRecorder object which created (as I understand) one per thread, and time to time send accumulated data to the master ThreadRecorder. The problem is that LLTextureFetch also can uses from the main thread. I decide add parameter to CTOR LLTextureInfo(bool postponeStartRecoreder) - if it false the recorder start immediatly in LLTextureInfo CTOR body, if true we need to start it manually. Also I add another one LLTextureInfo in LLTextureFetch::mTextureInfoMainThread which is intended for accumulate data from the main thread. The postponed Recorder started/stoped from LLTextureFetch::startThread()/endThread(). --HG-- branch : MAINT-4360 --- indra/newview/lltexturefetch.cpp | 10 ++++++--- indra/newview/lltexturefetch.h | 1 + indra/newview/lltextureinfo.cpp | 38 ++++++++++++++++---------------- indra/newview/lltextureinfo.h | 4 +++- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index fab4203ec3..17b273f316 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2522,7 +2522,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mFetchDebugger(NULL), mFetchSource(LLTextureFetch::FROM_ALL), mOriginFetchSource(LLTextureFetch::FROM_ALL), - mFetcherLocked(FALSE) + mFetcherLocked(FALSE), + mTextureInfoMainThread(false) { mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold"))); @@ -3128,6 +3129,7 @@ void LLTextureFetch::shutDownImageDecodeThread() // Threads: Ttf void LLTextureFetch::startThread() { + mTextureInfo.startRecording(); } // Threads: Ttf @@ -3138,6 +3140,8 @@ void LLTextureFetch::endThread() << ", ResWaits: " << mTotalResourceWaitCount << ", TotalHTTPReq: " << getTotalNumHTTPRequests() << LL_ENDL; + + mTextureInfo.stopRecording(); } // Threads: Ttf @@ -3541,8 +3545,8 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if (log_to_viewer_log || log_to_sim) { U64Microseconds timeNow = LLTimer::getTotalTime(); - mTextureInfo.setRequestSize(id, worker->mFileSize); - mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow); + mTextureInfoMainThread.setRequestSize(id, worker->mFileSize); + mTextureInfoMainThread.setRequestCompleteTimeAndLog(id, timeNow); } } worker->unlockWorkMutex(); // -Mw diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 27779a31e0..a2658ecd85 100755 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -332,6 +332,7 @@ private: F32 mTextureBandwidth; // F32 mMaxBandwidth; // Mfnq LLTextureInfo mTextureInfo; + LLTextureInfo mTextureInfoMainThread; // XXX possible delete U32Bits mHTTPTextureBits; // Mfnq diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp index 59d692b287..fbe308595c 100755 --- a/indra/newview/lltextureinfo.cpp +++ b/indra/newview/lltextureinfo.cpp @@ -36,14 +36,14 @@ static LLTrace::CountStatHandle sTextureDownloadsCompleted("texture_downloa static LLTrace::CountStatHandle sTextureDataDownloaded("texture_data_downloaded", "amount of texture data downloaded"); static LLTrace::CountStatHandle sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures"); -LLTextureInfo::LLTextureInfo() : +LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) : mLogTextureDownloadsToViewerLog(false), mLogTextureDownloadsToSimulator(false), mTextureDownloadProtocol("NONE"), mTextureLogThreshold(LLUnits::Kilobytes::fromValue(100)) { - mTextures.clear(); - mRecording.start(); + if (!postponeStartRecoreder) + mRecording.start(); } void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold) @@ -78,15 +78,7 @@ U32 LLTextureInfo::getTextureInfoMapSize() bool LLTextureInfo::has(const LLUUID& id) { - std::map::iterator iterator = mTextures.find(id); - if (iterator == mTextures.end()) - { - return false; - } - else - { - return true; - } + return mTextures.end() != mTextures.find(id); } void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) @@ -192,15 +184,13 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microsecon LLSD LLTextureInfo::getAverages() { LLSD averagedTextureData; - S32 averageDownloadRate; + S32 averageDownloadRate = 0; U32Milliseconds download_time = mRecording.getSum(sTexureDownloadTime); - if(download_time == (U32Milliseconds)0) + if(download_time != (U32Milliseconds)0) { - averageDownloadRate = 0; - } - else - { - averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); + if (0 != download_time.valueInUnits()) { + averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); + } } averagedTextureData["bits_per_second"] = averageDownloadRate; @@ -212,6 +202,16 @@ LLSD LLTextureInfo::getAverages() return averagedTextureData; } +void LLTextureInfo::startRecording() +{ + mRecording.start(); +} + +void LLTextureInfo::stopRecording() +{ + mRecording.stop(); +} + void LLTextureInfo::resetTextureStatistics() { mRecording.restart(); diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h index 176f2cbb74..03721bdd73 100755 --- a/indra/newview/lltextureinfo.h +++ b/indra/newview/lltextureinfo.h @@ -35,7 +35,7 @@ class LLTextureInfo { public: - LLTextureInfo(); + LLTextureInfo(bool postponeStartRecoreder = true); ~LLTextureInfo(); void setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold); @@ -53,6 +53,8 @@ public: void resetTextureStatistics(); U32 getTextureInfoMapSize(); LLSD getAverages(); + void startRecording(); + void stopRecording(); private: void addRequest(const LLUUID& id); From 13284fa954e4edcca43eaf98f1a5b457264597b8 Mon Sep 17 00:00:00 2001 From: ruslantproductengine Date: Fri, 28 Aug 2015 19:27:09 +0300 Subject: [PATCH 002/278] MAINT-4360 (Setting LogTextureDownloadsToSimulator causes a viewer crash) The fix in fllowing: LLTextureFetch has object LLTextureInfo which is has Recorder object. The recorder object activate (Recorder::handleStart()) self AccumulatorBufferGroup (Recorder::mBuffers into the current (LLTrace::get_thread_recorder()) ThreadRecorder object which created (as I understand) one per thread, and time to time send accumulated data to the master ThreadRecorder. The problem is that LLTextureFetch also can uses from the main thread. I decide add parameter to CTOR LLTextureInfo(bool postponeStartRecoreder) - if it false the recorder start immediatly in LLTextureInfo CTOR body, if true we need to start it manually. Also I add another one LLTextureInfo in LLTextureFetch::mTextureInfoMainThread which is intended for accumulate data from the main thread. The postponed Recorder started/stoped from LLTextureFetch::startThread()/endThread(). --HG-- branch : MAINT-4360 --- indra/newview/lltexturefetch.cpp | 10 +++------ indra/newview/lltexturefetch.h | 1 - indra/newview/lltextureinfo.cpp | 38 ++++++++++++++++---------------- indra/newview/lltextureinfo.h | 4 +--- 4 files changed, 23 insertions(+), 30 deletions(-) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 17b273f316..fab4203ec3 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2522,8 +2522,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mFetchDebugger(NULL), mFetchSource(LLTextureFetch::FROM_ALL), mOriginFetchSource(LLTextureFetch::FROM_ALL), - mFetcherLocked(FALSE), - mTextureInfoMainThread(false) + mFetcherLocked(FALSE) { mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold"))); @@ -3129,7 +3128,6 @@ void LLTextureFetch::shutDownImageDecodeThread() // Threads: Ttf void LLTextureFetch::startThread() { - mTextureInfo.startRecording(); } // Threads: Ttf @@ -3140,8 +3138,6 @@ void LLTextureFetch::endThread() << ", ResWaits: " << mTotalResourceWaitCount << ", TotalHTTPReq: " << getTotalNumHTTPRequests() << LL_ENDL; - - mTextureInfo.stopRecording(); } // Threads: Ttf @@ -3545,8 +3541,8 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if (log_to_viewer_log || log_to_sim) { U64Microseconds timeNow = LLTimer::getTotalTime(); - mTextureInfoMainThread.setRequestSize(id, worker->mFileSize); - mTextureInfoMainThread.setRequestCompleteTimeAndLog(id, timeNow); + mTextureInfo.setRequestSize(id, worker->mFileSize); + mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow); } } worker->unlockWorkMutex(); // -Mw diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index a2658ecd85..27779a31e0 100755 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -332,7 +332,6 @@ private: F32 mTextureBandwidth; // F32 mMaxBandwidth; // Mfnq LLTextureInfo mTextureInfo; - LLTextureInfo mTextureInfoMainThread; // XXX possible delete U32Bits mHTTPTextureBits; // Mfnq diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp index fbe308595c..59d692b287 100755 --- a/indra/newview/lltextureinfo.cpp +++ b/indra/newview/lltextureinfo.cpp @@ -36,14 +36,14 @@ static LLTrace::CountStatHandle sTextureDownloadsCompleted("texture_downloa static LLTrace::CountStatHandle sTextureDataDownloaded("texture_data_downloaded", "amount of texture data downloaded"); static LLTrace::CountStatHandle sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures"); -LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) : +LLTextureInfo::LLTextureInfo() : mLogTextureDownloadsToViewerLog(false), mLogTextureDownloadsToSimulator(false), mTextureDownloadProtocol("NONE"), mTextureLogThreshold(LLUnits::Kilobytes::fromValue(100)) { - if (!postponeStartRecoreder) - mRecording.start(); + mTextures.clear(); + mRecording.start(); } void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold) @@ -78,7 +78,15 @@ U32 LLTextureInfo::getTextureInfoMapSize() bool LLTextureInfo::has(const LLUUID& id) { - return mTextures.end() != mTextures.find(id); + std::map::iterator iterator = mTextures.find(id); + if (iterator == mTextures.end()) + { + return false; + } + else + { + return true; + } } void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) @@ -184,13 +192,15 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microsecon LLSD LLTextureInfo::getAverages() { LLSD averagedTextureData; - S32 averageDownloadRate = 0; + S32 averageDownloadRate; U32Milliseconds download_time = mRecording.getSum(sTexureDownloadTime); - if(download_time != (U32Milliseconds)0) + if(download_time == (U32Milliseconds)0) { - if (0 != download_time.valueInUnits()) { - averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); - } + averageDownloadRate = 0; + } + else + { + averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); } averagedTextureData["bits_per_second"] = averageDownloadRate; @@ -202,16 +212,6 @@ LLSD LLTextureInfo::getAverages() return averagedTextureData; } -void LLTextureInfo::startRecording() -{ - mRecording.start(); -} - -void LLTextureInfo::stopRecording() -{ - mRecording.stop(); -} - void LLTextureInfo::resetTextureStatistics() { mRecording.restart(); diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h index 03721bdd73..176f2cbb74 100755 --- a/indra/newview/lltextureinfo.h +++ b/indra/newview/lltextureinfo.h @@ -35,7 +35,7 @@ class LLTextureInfo { public: - LLTextureInfo(bool postponeStartRecoreder = true); + LLTextureInfo(); ~LLTextureInfo(); void setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold); @@ -53,8 +53,6 @@ public: void resetTextureStatistics(); U32 getTextureInfoMapSize(); LLSD getAverages(); - void startRecording(); - void stopRecording(); private: void addRequest(const LLUUID& id); From 86d124d6c7db94ad07087941fc2118d9b31cafc1 Mon Sep 17 00:00:00 2001 From: ruslantproductengine Date: Sun, 30 Aug 2015 14:19:50 +0300 Subject: [PATCH 003/278] Backed out changeset: f471282aa065 --HG-- branch : MAINT-4360 --- indra/newview/lltexturefetch.cpp | 10 ++++++--- indra/newview/lltexturefetch.h | 1 + indra/newview/lltextureinfo.cpp | 38 ++++++++++++++++---------------- indra/newview/lltextureinfo.h | 4 +++- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index fab4203ec3..17b273f316 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2522,7 +2522,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mFetchDebugger(NULL), mFetchSource(LLTextureFetch::FROM_ALL), mOriginFetchSource(LLTextureFetch::FROM_ALL), - mFetcherLocked(FALSE) + mFetcherLocked(FALSE), + mTextureInfoMainThread(false) { mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold"))); @@ -3128,6 +3129,7 @@ void LLTextureFetch::shutDownImageDecodeThread() // Threads: Ttf void LLTextureFetch::startThread() { + mTextureInfo.startRecording(); } // Threads: Ttf @@ -3138,6 +3140,8 @@ void LLTextureFetch::endThread() << ", ResWaits: " << mTotalResourceWaitCount << ", TotalHTTPReq: " << getTotalNumHTTPRequests() << LL_ENDL; + + mTextureInfo.stopRecording(); } // Threads: Ttf @@ -3541,8 +3545,8 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if (log_to_viewer_log || log_to_sim) { U64Microseconds timeNow = LLTimer::getTotalTime(); - mTextureInfo.setRequestSize(id, worker->mFileSize); - mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow); + mTextureInfoMainThread.setRequestSize(id, worker->mFileSize); + mTextureInfoMainThread.setRequestCompleteTimeAndLog(id, timeNow); } } worker->unlockWorkMutex(); // -Mw diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 27779a31e0..a2658ecd85 100755 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -332,6 +332,7 @@ private: F32 mTextureBandwidth; // F32 mMaxBandwidth; // Mfnq LLTextureInfo mTextureInfo; + LLTextureInfo mTextureInfoMainThread; // XXX possible delete U32Bits mHTTPTextureBits; // Mfnq diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp index 59d692b287..fbe308595c 100755 --- a/indra/newview/lltextureinfo.cpp +++ b/indra/newview/lltextureinfo.cpp @@ -36,14 +36,14 @@ static LLTrace::CountStatHandle sTextureDownloadsCompleted("texture_downloa static LLTrace::CountStatHandle sTextureDataDownloaded("texture_data_downloaded", "amount of texture data downloaded"); static LLTrace::CountStatHandle sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures"); -LLTextureInfo::LLTextureInfo() : +LLTextureInfo::LLTextureInfo(bool postponeStartRecoreder) : mLogTextureDownloadsToViewerLog(false), mLogTextureDownloadsToSimulator(false), mTextureDownloadProtocol("NONE"), mTextureLogThreshold(LLUnits::Kilobytes::fromValue(100)) { - mTextures.clear(); - mRecording.start(); + if (!postponeStartRecoreder) + mRecording.start(); } void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold) @@ -78,15 +78,7 @@ U32 LLTextureInfo::getTextureInfoMapSize() bool LLTextureInfo::has(const LLUUID& id) { - std::map::iterator iterator = mTextures.find(id); - if (iterator == mTextures.end()) - { - return false; - } - else - { - return true; - } + return mTextures.end() != mTextures.find(id); } void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime) @@ -192,15 +184,13 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64Microsecon LLSD LLTextureInfo::getAverages() { LLSD averagedTextureData; - S32 averageDownloadRate; + S32 averageDownloadRate = 0; U32Milliseconds download_time = mRecording.getSum(sTexureDownloadTime); - if(download_time == (U32Milliseconds)0) + if(download_time != (U32Milliseconds)0) { - averageDownloadRate = 0; - } - else - { - averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); + if (0 != download_time.valueInUnits()) { + averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueInUnits() / download_time.valueInUnits(); + } } averagedTextureData["bits_per_second"] = averageDownloadRate; @@ -212,6 +202,16 @@ LLSD LLTextureInfo::getAverages() return averagedTextureData; } +void LLTextureInfo::startRecording() +{ + mRecording.start(); +} + +void LLTextureInfo::stopRecording() +{ + mRecording.stop(); +} + void LLTextureInfo::resetTextureStatistics() { mRecording.restart(); diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h index 176f2cbb74..03721bdd73 100755 --- a/indra/newview/lltextureinfo.h +++ b/indra/newview/lltextureinfo.h @@ -35,7 +35,7 @@ class LLTextureInfo { public: - LLTextureInfo(); + LLTextureInfo(bool postponeStartRecoreder = true); ~LLTextureInfo(); void setUpLogging(bool writeToViewerLog, bool sendToSim, U32Bytes textureLogThreshold); @@ -53,6 +53,8 @@ public: void resetTextureStatistics(); U32 getTextureInfoMapSize(); LLSD getAverages(); + void startRecording(); + void stopRecording(); private: void addRequest(const LLUUID& id); From 6a02f5bbcec2b1a530ceeacb0dc564cfeb7cbc7f Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Fri, 11 Dec 2015 19:58:08 +0200 Subject: [PATCH 006/278] Initial version of Visual Outfit Browser --- indra/llui/llfocusmgr.cpp | 1 - indra/llui/lllayoutstack.cpp | 2 +- indra/newview/CMakeLists.txt | 2 + indra/newview/lloutfitgallery.cpp | 699 ++++++++++ indra/newview/lloutfitgallery.h | 152 ++ indra/newview/lloutfitslist.cpp | 1240 +++++++++++------ indra/newview/lloutfitslist.h | 204 ++- indra/newview/llpaneloutfitsinventory.cpp | 6 + indra/newview/llpaneloutfitsinventory.h | 4 +- indra/newview/lltexturectrl.cpp | 2 + .../skins/default/textures/textures.xml | 1 + .../skins/default/xui/en/floater_snapshot.xml | 4 +- .../skins/default/xui/en/menu_outfit_gear.xml | 16 +- .../default/xui/en/panel_outfit_gallery.xml | 128 ++ .../xui/en/panel_outfit_gallery_item.xml | 49 + .../xui/en/panel_outfits_inventory.xml | 11 + 16 files changed, 2025 insertions(+), 496 deletions(-) create mode 100644 indra/newview/lloutfitgallery.cpp create mode 100644 indra/newview/lloutfitgallery.h create mode 100644 indra/newview/skins/default/xui/en/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/en/panel_outfit_gallery_item.xml diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 547f0bd398..87c50ad465 100755 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -168,7 +168,6 @@ void LLFocusMgr::releaseFocusIfNeeded( LLView* view ) LLUI::removePopup(view); } - void LLFocusMgr::setKeyboardFocus(LLFocusableElement* new_focus, BOOL lock, BOOL keystrokes_only) { // notes if keyboard focus is changed again (by onFocusLost/onFocusReceived) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 69246a2f57..11769760aa 100755 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -283,7 +283,7 @@ void LLLayoutStack::removeChild(LLView* view) if (embedded_panelp) { mPanels.erase(std::find(mPanels.begin(), mPanels.end(), embedded_panelp)); - delete embedded_panelp; + //delete embedded_panelp; updateFractionalSizes(); mNeedsLayout = true; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 536c7740bb..f18d9f04f9 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -414,6 +414,7 @@ set(viewer_SOURCE_FILES llnotificationscripthandler.cpp llnotificationstorage.cpp llnotificationtiphandler.cpp + lloutfitgallery.cpp lloutfitslist.cpp lloutfitobserver.cpp lloutputmonitorctrl.cpp @@ -1024,6 +1025,7 @@ set(viewer_HEADER_FILES llnotificationhandler.h llnotificationmanager.h llnotificationstorage.h + lloutfitgallery.h lloutfitslist.h lloutfitobserver.h lloutputmonitorctrl.h diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp new file mode 100644 index 0000000000..2d8085e128 --- /dev/null +++ b/indra/newview/lloutfitgallery.cpp @@ -0,0 +1,699 @@ +/** + * @file lloutfitgallery.cpp + * @author Pavlo Kryvych + * @brief Visual gallery of agent's outfits for My Appearance side panel + * + * $LicenseInfo:firstyear=2015&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2015, Linden Research, Inc. + * + * 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. + * + * 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. + * + * 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$ + */ + +#include "llviewerprecompiledheaders.h" // must be first include +#include "lloutfitgallery.h" + +#include + +// llcommon +#include "llcommonutils.h" +#include "llvfile.h" + +#include "llappearancemgr.h" +#include "lleconomy.h" +#include "llerror.h" +#include "llfilepicker.h" +#include "llfloaterperms.h" +#include "llinventoryfunctions.h" +#include "llinventorymodel.h" +#include "lllocalbitmaps.h" +#include "llviewermenufile.h" +#include "llwearableitemslist.h" + + +static LLPanelInjector t_outfit_gallery("outfit_gallery"); +static LLOutfitGallery* gOutfitGallery = NULL; + +LLOutfitGallery::LLOutfitGallery() + : LLOutfitListBase(), + mTexturesObserver(NULL) +{ +// mGearMenu = new LLOutfitGalleryGearMenu(this); +} + +BOOL LLOutfitGallery::postBuild() +{ + BOOL rv = LLOutfitListBase::postBuild(); + return rv; +} + +void LLOutfitGallery::onOpen(const LLSD& info) +{ + LLOutfitListBase::onOpen(info); + rebuildGallery(); + loadPhotos(); +} + +#define LAYOUT_STACK_HEIGHT 180 +#define GALLERY_VERTICAL_GAP 10 +#define GALLERY_HORIZONTAL_GAP 10 +#define GALLERY_ITEM_WIDTH 150 +#define GALLERY_ITEM_HEIGHT 175 +#define GALLERY_ITEM_HGAP 16 +#define ITEMS_IN_ROW 3 +#define LAYOUT_STACK_WIDTH 166 * ITEMS_IN_ROW//498 +#define GALLERY_WIDTH 163 * ITEMS_IN_ROW//485//290 + +void LLOutfitGallery::rebuildGallery() +{ + LLView::child_list_t child_list(*getChild("gallery_panel")->getChildList()); + BOOST_FOREACH(LLView* view, child_list) + { + LLLayoutStack* lstack = dynamic_cast(view); + if (lstack != NULL) + { + LLView::child_list_t panel_list(*lstack->getChildList()); + BOOST_FOREACH(LLView* panel, panel_list) + { + //LLLayoutPanel* lpanel = dynamic_cast(panel); + //if (!lpanel) + // continue; + LLView::child_list_t panel_children(*panel->getChildList()); + if (panel_children.size() > 0) + { + //Assume OutfitGalleryItem is the only one child of layout panel + LLView* view_item = panel_children.back(); + LLOutfitGalleryItem* gallery_item = dynamic_cast(view_item); + if (gallery_item != NULL) + panel->removeChild(gallery_item); + } + lstack->removeChild(panel); + //delete panel; + } + getChild("gallery_panel")->removeChild(lstack); + delete lstack; + } + else + { + getChild("gallery_panel")->removeChild(view); + } + } + uuid_vec_t cats; + getCurrentCategories(cats); + int n = cats.size(); + int row_count = (n % ITEMS_IN_ROW) == 0 ? n / ITEMS_IN_ROW : n / ITEMS_IN_ROW + 1; + getChild("gallery_panel")->reshape( + GALLERY_WIDTH, row_count * (LAYOUT_STACK_HEIGHT + GALLERY_VERTICAL_GAP)); + int vgap = 0; + uuid_vec_t::reverse_iterator rit = cats.rbegin(); + for (int i = row_count - 1; i >= 0; i--) + { + LLLayoutStack* stack = buildLayoutStak(0, (row_count - 1 - i) * LAYOUT_STACK_HEIGHT + vgap); + getChild("gallery_panel")->addChild(stack); + int items_in_cur_row = (n % ITEMS_IN_ROW) == 0 ? ITEMS_IN_ROW : (i == row_count - 1 ? n % ITEMS_IN_ROW : ITEMS_IN_ROW); + int hgap = 0; + for (int j = 0; j < items_in_cur_row && rit != cats.rend(); j++) + { + LLLayoutPanel* lpanel = buildLayoutPanel(j * GALLERY_ITEM_WIDTH + hgap); + LLOutfitGalleryItem* item = mOutfitMap[*rit]; + lpanel->addChild(item); + stack->addChild(lpanel); + rit++; + hgap += GALLERY_HORIZONTAL_GAP; + } + vgap += GALLERY_VERTICAL_GAP; + } +} + +LLOutfitGalleryItem* LLOutfitGallery::buildGalleryItem(std::string name) +{ + LLOutfitGalleryItem::Params giparams; + LLOutfitGalleryItem* gitem = LLUICtrlFactory::create(giparams); + LLRect girect = LLRect(0, GALLERY_ITEM_HEIGHT - GALLERY_ITEM_HEIGHT, + GALLERY_ITEM_WIDTH, 0); + //gitem->setRect(girect); + gitem->reshape(GALLERY_ITEM_WIDTH, GALLERY_ITEM_HEIGHT); + gitem->setVisible(true); + gitem->setFollowsLeft(); + gitem->setFollowsTop(); + gitem->setOutfitName(name); + return gitem; +} + +LLLayoutPanel* LLOutfitGallery::buildLayoutPanel(int left) +{ + LLLayoutPanel::Params lpparams; + int top = 0; + LLLayoutPanel* lpanel = LLUICtrlFactory::create(lpparams); + LLRect rect = LLRect(left, top + GALLERY_ITEM_HEIGHT, left + GALLERY_ITEM_WIDTH + GALLERY_ITEM_HGAP, top); + lpanel->setRect(rect); + lpanel->reshape(GALLERY_ITEM_WIDTH + GALLERY_ITEM_HGAP, GALLERY_ITEM_HEIGHT); + lpanel->setVisible(true); + lpanel->setFollowsLeft(); + lpanel->setFollowsTop(); + return lpanel; +} + +LLLayoutStack* LLOutfitGallery::buildLayoutStak(int left, int top) +{ + LLLayoutStack::Params sparams; + LLLayoutStack* stack = LLUICtrlFactory::create(sparams); + LLRect rect = LLRect(left, top + LAYOUT_STACK_HEIGHT, left + LAYOUT_STACK_WIDTH, top); + stack->setRect(rect); + stack->reshape(LAYOUT_STACK_WIDTH, LAYOUT_STACK_HEIGHT); + stack->setVisible(true); + stack->setFollowsLeft(); + stack->setFollowsTop(); + return stack; +} + + +LLOutfitGallery::~LLOutfitGallery() +{ + if (gInventory.containsObserver(mTexturesObserver)) + { + gInventory.removeObserver(mTexturesObserver); + } + delete mTexturesObserver; +} + +void LLOutfitGallery::setFilterSubString(const std::string& string) +{ + //TODO: Implement filtering + + sFilterSubString = string; +} + +void LLOutfitGallery::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) +{ + if (mOutfitMap[base_id]) + { + mOutfitMap[base_id]->setOutfitWorn(true); + } + if (mOutfitMap[prev_id]) + { + mOutfitMap[prev_id]->setOutfitWorn(false); + } +} + +void LLOutfitGallery::onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) +{ +} + +void LLOutfitGallery::getCurrentCategories(uuid_vec_t& vcur) +{ + for (outfit_map_t::const_iterator iter = mOutfitMap.begin(); + iter != mOutfitMap.end(); + iter++) + { + if ((*iter).second != NULL) + { + vcur.push_back((*iter).first); + } + } +} + +void LLOutfitGallery::updateAddedCategory(LLUUID cat_id) +{ + LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); + if (!cat) return; + + std::string name = cat->getName(); + LLOutfitGalleryItem* item = buildGalleryItem(name); + mOutfitMap.insert(LLOutfitGallery::outfit_map_value_t(cat_id, item)); + item->setRightMouseDownCallback(boost::bind(&LLOutfitListBase::outfitRightClickCallBack, this, + _1, _2, _3, cat_id)); + LLWearableItemsList* list = NULL; + item->setFocusReceivedCallback(boost::bind(&LLOutfitListBase::hangeOutfitSelection, this, list, cat_id)); + +} + +void LLOutfitGallery::updateRemovedCategory(LLUUID cat_id) +{ + outfit_map_t::iterator outfits_iter = mOutfitMap.find(cat_id); + if (outfits_iter != mOutfitMap.end()) + { + //const LLUUID& outfit_id = outfits_iter->first; + LLOutfitGalleryItem* item = outfits_iter->second; + + // An outfit is removed from the list. Do the following: + // 2. Remove the outfit from selection. + //deselectOutfit(outfit_id); + + // 3. Remove category UUID to accordion tab mapping. + mOutfitMap.erase(outfits_iter); + + // 4. Remove outfit from gallery. + rebuildGallery(); + + // kill removed item + if (item != NULL) + { + item->die(); + } + } + +} + +void LLOutfitGallery::updateChangedCategoryName(LLViewerInventoryCategory *cat, std::string name) +{ + outfit_map_t::iterator outfit_iter = mOutfitMap.find(cat->getUUID()); + if (outfit_iter != mOutfitMap.end()) + { + // Update name of outfit in gallery + LLOutfitGalleryItem* item = outfit_iter->second; + if (item) + { + item->setOutfitName(name); + } + } +} + +void LLOutfitGallery::onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) +{ + if (mOutfitMenu && cat_id.notNull()) + { + uuid_vec_t selected_uuids; + selected_uuids.push_back(cat_id); + mOutfitMenu->show(ctrl, selected_uuids, x, y); + } +} + +void LLOutfitGallery::onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) +{ + if (mSelectedOutfitUUID == category_id) + return; + if (mOutfitMap[mSelectedOutfitUUID]) + { + mOutfitMap[mSelectedOutfitUUID]->setSelected(FALSE); + } + if (mOutfitMap[category_id]) + { + mOutfitMap[category_id]->setSelected(TRUE); + } +} + +bool LLOutfitGallery::hasItemSelected() +{ + return false; +} + +bool LLOutfitGallery::canWearSelected() +{ + return false; +} + +LLOutfitListGearMenuBase* LLOutfitGallery::createGearMenu() +{ + return new LLOutfitGalleryGearMenu(this); +} + +static LLDefaultChildRegistry::Register r("outfit_gallery_item"); + +LLOutfitGalleryItem::LLOutfitGalleryItem(const Params& p) + : LLPanel(p), + mTexturep(NULL) +{ + buildFromFile("panel_outfit_gallery_item.xml"); +} + +LLOutfitGalleryItem::~LLOutfitGalleryItem() +{ + +} + +BOOL LLOutfitGalleryItem::postBuild() +{ + setDefaultImage(); + + mOutfitNameText = getChild("outfit_name"); + mOutfitWornText = getChild("outfit_worn_text"); + setOutfitWorn(false); + return TRUE; +} + +void LLOutfitGalleryItem::draw() +{ + LLPanel::draw(); + + // In case texture is not set, don't draw it over default image + if (!mTexturep) + { + return; + } + + // Border + LLRect border = getChildView("preview_outfit")->getRect(); + //gl_rect_2d(border, LLColor4::black, FALSE); + + + // Interior + LLRect interior = border; + //interior.stretch(-1); + + // If the floater is focused, don't apply its alpha to the texture (STORM-677). + const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); + if (mTexturep) + { + if (mTexturep->getComponents() == 4) + { + gl_rect_2d_checkerboard(interior, alpha); + } + + gl_draw_scaled_image(interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha); + + // Pump the priority + mTexturep->addTextureStats((F32)(interior.getWidth() * interior.getHeight())); + } +} + +void LLOutfitGalleryItem::setOutfitName(std::string name) +{ + mOutfitNameText->setText(name); +} + +void LLOutfitGalleryItem::setOutfitWorn(bool value) +{ + //LLStringUtil::format_map_t string_args; + //std::string worn_text = getString("worn_text", string_args); + + if (value) + { + mOutfitWornText->setValue("(worn)"); + } + else + { + mOutfitWornText->setValue(""); + } +} + +void LLOutfitGalleryItem::setSelected(bool value) +{ + if (value) + { + mOutfitWornText->setValue("(selected)"); + } + else + { + mOutfitWornText->setValue(""); + } +} + +BOOL LLOutfitGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask) +{ + setFocus(TRUE); + return LLUICtrl::handleMouseDown(x, y, mask); +} + +void LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id) +{ + mTexturep = LLViewerTextureManager::getFetchedTexture(image_asset_id); + mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); +} + +void LLOutfitGalleryItem::setDefaultImage() +{ + /* + LLUUID imageAssetID("e417f443-a199-bac1-86b0-0530e177fb54"); + mTexturep = LLViewerTextureManager::getFetchedTexture(imageAssetID); + mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); + */ + mTexturep = NULL; +} + +LLOutfitGalleryGearMenu::LLOutfitGalleryGearMenu(LLOutfitListBase* olist) + : LLOutfitListGearMenuBase(olist) +{ +} + +void LLOutfitGalleryGearMenu::onUpdateItemsVisibility() +{ + if (!mMenu) return; + mMenu->setItemVisible("expand", FALSE); + mMenu->setItemVisible("collapse", FALSE); + mMenu->setItemVisible("upload_foto", TRUE); + mMenu->setItemVisible("load_assets", TRUE); + LLOutfitListGearMenuBase::onUpdateItemsVisibility(); +} + +void LLOutfitGalleryGearMenu::onUploadFoto() +{ + LLUUID selected_outfit_id = getSelectedOutfitID(); + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery && selected_outfit_id.notNull()) + { + gallery->uploadPhoto(selected_outfit_id); + } + if (selected_outfit_id.notNull()) + { + + } +} + +void LLOutfitGalleryGearMenu::onLoadAssets() +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery != NULL) + { + gallery->loadPhotos(); + } +} + +void LLOutfitGallery::loadPhotos() +{ + //Iterate over inventory + LLUUID textures = gInventory.findCategoryUUIDForType(LLFolderType::EType::FT_TEXTURE); + LLViewerInventoryCategory* category = gInventory.getCategory(textures); + if (!category) + return; + + if (mTexturesObserver == NULL) + { + mTexturesObserver = new LLInventoryCategoriesObserver(); + gInventory.addObserver(mTexturesObserver); + } + + // Start observing changes in "My Outfits" category. + mTexturesObserver->addCategory(textures, + boost::bind(&LLOutfitGallery::refreshTextures, this, textures)); + + category->fetch(); + refreshTextures(textures); +} + +void LLOutfitGallery::refreshTextures(const LLUUID& category_id) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + + // Collect all sub-categories of a given category. + LLIsType is_texture(LLAssetType::AT_TEXTURE); + gInventory.collectDescendentsIf( + category_id, + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_texture); + + //Find textures which contain outfit UUID string in description + LLInventoryModel::item_array_t uploaded_item_array; + BOOST_FOREACH(LLViewerInventoryItem* item, item_array) + { + std::string desc = item->getDescription(); + + LLUUID outfit_id(desc); + + //Check whether description contains correct UUID of outfit + if (outfit_id.isNull()) + continue; + + outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); + if (outfit_it != mOutfitMap.end() && !outfit_it->first.isNull()) + { + uploaded_item_array.push_back(item); + } + } + + uuid_vec_t vadded; + uuid_vec_t vremoved; + + // Create added and removed items vectors. + computeDifferenceOfTextures(uploaded_item_array, vadded, vremoved); + + BOOST_FOREACH(LLUUID item_id, vadded) + { + LLViewerInventoryItem* added_item = gInventory.getItem(item_id); + LLUUID asset_id = added_item->getAssetUUID(); + std::string desc = added_item->getDescription(); + LLUUID outfit_id(desc); + mOutfitMap[outfit_id]->setImageAssetId(asset_id); + mTextureMap[outfit_id] = added_item; + } + + BOOST_FOREACH(LLUUID item_id, vremoved) + { + LLViewerInventoryItem* rm_item = gInventory.getItem(item_id); + std::string desc = rm_item->getDescription(); + LLUUID outfit_id(desc); + mOutfitMap[outfit_id]->setDefaultImage(); + mTextureMap.erase(outfit_id); + } + + /* + LLInventoryModel::item_array_t::const_iterator it = item_array.begin(); + for ( ; it != item_array.end(); it++) + { + LLViewerInventoryItem* item = (*it); + LLUUID asset_id = item->getAssetUUID(); + + std::string desc = item->getDescription(); + + LLUUID outfit_id(desc); + + //Check whether description contains correct UUID of outfit + if (outfit_id.isNull()) + continue; + + outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); + if (outfit_it != mOutfitMap.end() && !outfit_it->first.isNull()) + { + outfit_it->second->setImageAssetId(asset_id); + mTextureMap[outfit_id] = item; + } + + + //LLUUID* item_idp = new LLUUID(); + + //gOutfitGallery = this; + //const BOOL high_priority = TRUE; + //gAssetStorage->getAssetData(asset_id, + // LLAssetType::AT_TEXTURE, + // onLoadComplete, + // (void**)item_idp, + // high_priority); + // + ////mAssetStatus = PREVIEW_ASSET_LOADING; + + } + */ +} + +void LLOutfitGallery::onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status) +{ + LL_WARNS() << "asset_uuid: " << asset_uuid.asString() << LL_ENDL; + + LLUUID* outfit_id = (LLUUID*)user_data; + if (!user_data) + return; + LL_WARNS() << "outfit_id: " << outfit_id->asString() << LL_ENDL; + + outfit_map_t::iterator it = gOutfitGallery->mOutfitMap.find(*outfit_id); + if (it != gOutfitGallery->mOutfitMap.end() && !it->first.isNull()) + { + } +} + +void LLOutfitGallery::uploadPhoto(LLUUID outfit_id) +{ + outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); + if (outfit_it == mOutfitMap.end() || outfit_it->first.isNull()) + { + return; + } + + bool add_successful = false; + LLFilePicker& picker = LLFilePicker::instance(); + if (picker.getOpenFile(LLFilePicker::FFLOAD_IMAGE)) + { + std::string filename = picker.getFirstFile(); + LLLocalBitmap* unit = new LLLocalBitmap(filename); + if (unit->getValid()) + { + add_successful = true; + LLAssetStorage::LLStoreAssetCallback callback = NULL; + S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). + void *nruserdata = NULL; + nruserdata = (void *)&outfit_id; + + LL_WARNS() << "selected_outfit_id: " << outfit_id.asString() << LL_ENDL; + + //LLViewerInventoryItem *outfit = gInventory.getItem(selected_outfit_id); + LLViewerInventoryCategory *outfit_cat = gInventory.getCategory(outfit_id); + if (!outfit_cat) return; + + checkRemovePhoto(outfit_id); + + LLStringUtil::format_map_t foto_string_args; + foto_string_args["OUTFIT_NAME"] = outfit_cat->getName(); + std::string display_name = getString("outfit_foto_string", foto_string_args); + + upload_new_resource(filename, // file + display_name, + outfit_id.asString(), + 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + LLFloaterPerms::getNextOwnerPerms("Uploads"), + LLFloaterPerms::getGroupPerms("Uploads"), + LLFloaterPerms::getEveryonePerms("Uploads"), + display_name, callback, expected_upload_cost, nruserdata); + } + } +} + +bool LLOutfitGallery::checkRemovePhoto(LLUUID outfit_id) +{ + //remove existing photo of outfit from inventory + texture_map_t::iterator texture_it = mTextureMap.find(outfit_id); + if (texture_it != mTextureMap.end()) { + gInventory.removeItem(texture_it->second->getUUID()); + return true; + } + return false; +} + +void LLOutfitGallery::setUploadedPhoto(LLUUID outfit_id, LLUUID asset_id) +{ + +} + +void LLOutfitGallery::computeDifferenceOfTextures( + const LLInventoryModel::item_array_t& vtextures, + uuid_vec_t& vadded, + uuid_vec_t& vremoved) +{ + uuid_vec_t vnew; + // Creating a vector of newly collected sub-categories UUIDs. + for (LLInventoryModel::item_array_t::const_iterator iter = vtextures.begin(); + iter != vtextures.end(); + iter++) + { + vnew.push_back((*iter)->getUUID()); + } + + uuid_vec_t vcur; + // Creating a vector of currently uploaded texture UUIDs. + for (texture_map_t::const_iterator iter = mTextureMap.begin(); + iter != mTextureMap.end(); + iter++) + { + vcur.push_back((*iter).second->getUUID()); + } +// getCurrentCategories(vcur); + + LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved); + +} diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h new file mode 100644 index 0000000000..93b9ba1e3f --- /dev/null +++ b/indra/newview/lloutfitgallery.h @@ -0,0 +1,152 @@ +/** + * @file lloutfitgallery.h + * @author Pavlo Kryvych + * @brief Visual gallery of agent's outfits for My Appearance side panel + * + * $LicenseInfo:firstyear=2015&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2015, Linden Research, Inc. + * + * 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. + * + * 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. + * + * 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$ + */ + +#ifndef LL_LLOUTFITGALLERYCTRL_H +#define LL_LLOUTFITGALLERYCTRL_H + +#include "llextendedstatus.h" +#include "lliconctrl.h" +#include "lllayoutstack.h" +#include "lloutfitslist.h" +#include "llpanelappearancetab.h" +#include "llviewertexture.h" + +#include + +class LLVFS; +class LLOutfitGalleryItem; +class LLOutfitListGearMenuBase; +class LLOutfitGalleryGearMenu; + +class LLOutfitGallery : public LLOutfitListBase +{ +public: + friend class LLOutfitGalleryGearMenu; + LLOutfitGallery(); + virtual ~LLOutfitGallery(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& info); + + /*virtual*/ void setFilterSubString(const std::string& string); + + /*virtual*/ void getCurrentCategories(uuid_vec_t& vcur); + /*virtual*/ void updateAddedCategory(LLUUID cat_id); + /*virtual*/ void updateRemovedCategory(LLUUID cat_id); + /*virtual*/ void updateChangedCategoryName(LLViewerInventoryCategory *cat, std::string name); + + /*virtual*/ bool hasItemSelected(); + /*virtual*/ bool canWearSelected(); + + /*virtual*/ bool getHasExpandableFolders() { return FALSE; } + + void refreshTextures(const LLUUID& category_id); + void computeDifferenceOfTextures(const LLInventoryModel::item_array_t& vtextures, uuid_vec_t& vadded, uuid_vec_t& vremoved); + +protected: + /*virtual*/ void onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id); + /*virtual*/ void onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid); + /*virtual*/ void onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); + /*virtual*/ void onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id); + + /*virtual*/ void onCollapseAllFolders() {} + /*virtual*/ void onExpandAllFolders() {} + /*virtual*/ LLOutfitListGearMenuBase* createGearMenu(); + +private: + void rebuildGallery(); + void loadPhotos(); + void uploadPhoto(LLUUID outfit_id); + bool checkRemovePhoto(LLUUID outfit_id); + void setUploadedPhoto(LLUUID outfit_id, LLUUID asset_id); + + static void onLoadComplete(LLVFS *vfs, + const LLUUID& asset_uuid, + LLAssetType::EType type, + void* user_data, S32 status, LLExtStat ext_status); + + LLOutfitGalleryItem* buildGalleryItem(std::string name); + LLLayoutPanel* buildLayoutPanel(int left); + LLLayoutStack* buildLayoutStak(int left, int top); + + LLView* mView; + std::vector mLayouts; + std::vector mPanels; + std::vector mItems; + + typedef std::map outfit_map_t; + typedef outfit_map_t::value_type outfit_map_value_t; + outfit_map_t mOutfitMap; + typedef std::map texture_map_t; + typedef texture_map_t::value_type texture_map_value_t; + texture_map_t mTextureMap; + + LLInventoryCategoriesObserver* mTexturesObserver; + +}; + +//static LLOutfitGallery* gOutfitGallery; + +class LLOutfitGalleryGearMenu : public LLOutfitListGearMenuBase +{ +public: + friend class LLOutfitGallery; + LLOutfitGalleryGearMenu(LLOutfitListBase* olist); + +protected: + /*virtual*/ void onUpdateItemsVisibility(); + +private: + /*virtual*/ void onUploadFoto(); + /*virtual*/ void onLoadAssets(); +}; + +class LLOutfitGalleryItem : public LLPanel +{ +public: + struct Params : public LLInitParam::Block + {}; + + LLOutfitGalleryItem(const Params& p); + virtual ~LLOutfitGalleryItem(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void draw(); + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + + void setDefaultImage(); + void setImageAssetId(LLUUID asset_id); + void setOutfitName(std::string name); + void setOutfitWorn(bool value); + void setSelected(bool value); +private: + LLPointer mTexturep; + LLTextBox* mOutfitNameText; + LLTextBox* mOutfitWornText; +}; + +#endif // LL_LLOUTFITGALLERYCTRL_H diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 883221382c..736da5d411 100755 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -38,7 +38,7 @@ #include "llfloatersidepanelcontainer.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" -#include "lllistcontextmenu.h" +//#include "lllistcontextmenu.h" #include "llmenubutton.h" #include "llnotificationsutil.h" #include "lloutfitobserver.h" @@ -98,276 +98,22 @@ const outfit_accordion_tab_params& get_accordion_tab_params() } -////////////////////////////////////////////////////////////////////////// - -class LLOutfitListGearMenu -{ -public: - LLOutfitListGearMenu(LLOutfitsList* olist) - : mOutfitList(olist), - mMenu(NULL) - { - llassert_always(mOutfitList); - - LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; - LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; - - registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this)); - registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this)); - registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this)); - registrar.add("Gear.Delete", boost::bind(&LLOutfitsList::removeSelected, mOutfitList)); - registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2)); - registrar.add("Gear.Collapse", boost::bind(&LLOutfitsList::collapse_all_folders, mOutfitList)); - registrar.add("Gear.Expand", boost::bind(&LLOutfitsList::expand_all_folders, mOutfitList)); - - registrar.add("Gear.WearAdd", boost::bind(&LLOutfitListGearMenu::onAdd, this)); - - enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2)); - enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); - - mMenu = LLUICtrlFactory::getInstance()->createFromFile( - "menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - llassert(mMenu); - } - - void updateItemsVisibility() - { - if (!mMenu) return; - - bool have_selection = getSelectedOutfitID().notNull(); - mMenu->setItemVisible("sepatator1", have_selection); - mMenu->setItemVisible("sepatator2", have_selection); - mMenu->arrangeAndClear(); // update menu height - } - - LLToggleableMenu* getMenu() { return mMenu; } - -private: - const LLUUID& getSelectedOutfitID() - { - return mOutfitList->getSelectedOutfitUUID(); - } - - LLViewerInventoryCategory* getSelectedOutfit() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.isNull()) - { - return NULL; - } - - LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id); - return cat; - } - - void onWear() - { - LLViewerInventoryCategory* selected_outfit = getSelectedOutfit(); - if (selected_outfit) - { - LLAppearanceMgr::instance().wearInventoryCategory( - selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE); - } - } - - void onAdd() - { - const LLUUID& selected_id = getSelectedOutfitID(); - - if (selected_id.notNull()) - { - LLAppearanceMgr::getInstance()->addCategoryToCurrentOutfit(selected_id); - } - } - - void onTakeOff() - { - // Take off selected outfit. - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.notNull()) - { - LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); - } - } - - void onRename() - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.notNull()) - { - LLAppearanceMgr::instance().renameOutfit(selected_outfit_id); - } - } - - void onCreate(const LLSD& data) - { - LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); - if (type == LLWearableType::WT_NONE) - { - LL_WARNS() << "Invalid wearable type" << LL_ENDL; - return; - } - - LLAgentWearables::createWearable(type, true); - } - - bool onEnable(LLSD::String param) - { - // Handle the "Wear - Replace Current Outfit" menu option specially - // because LLOutfitList::isActionEnabled() checks whether it's allowed - // to wear selected outfit OR selected items, while we're only - // interested in the outfit (STORM-183). - if ("wear" == param) - { - return LLAppearanceMgr::instance().getCanReplaceCOF(mOutfitList->getSelectedOutfitUUID()); - } - - return mOutfitList->isActionEnabled(param); - } - - bool onVisible(LLSD::String param) - { - const LLUUID& selected_outfit_id = getSelectedOutfitID(); - if (selected_outfit_id.isNull()) // no selection or invalid outfit selected - { - return false; - } - - // *TODO This condition leads to menu item behavior inconsistent with - // "Wear" button behavior and should be modified or removed. - bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id; - - if ("wear" == param) - { - return !is_worn; - } - - return true; - } - - LLOutfitsList* mOutfitList; - LLToggleableMenu* mMenu; -}; - -////////////////////////////////////////////////////////////////////////// - -class LLOutfitContextMenu : public LLListContextMenu -{ -public: - - LLOutfitContextMenu(LLOutfitsList* outfit_list) - : LLListContextMenu(), - mOutfitList(outfit_list) - {} -protected: - /* virtual */ LLContextMenu* createMenu() - { - LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; - LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; - LLUUID selected_id = mUUIDs.front(); - - registrar.add("Outfit.WearReplace", - boost::bind(&LLAppearanceMgr::replaceCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); - registrar.add("Outfit.WearAdd", - boost::bind(&LLAppearanceMgr::addCategoryToCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); - registrar.add("Outfit.TakeOff", - boost::bind(&LLAppearanceMgr::takeOffOutfit, &LLAppearanceMgr::instance(), selected_id)); - registrar.add("Outfit.Edit", boost::bind(editOutfit)); - registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id)); - registrar.add("Outfit.Delete", boost::bind(&LLOutfitsList::removeSelected, mOutfitList)); - - enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2)); - enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2)); - - return createFromFile("menu_outfit_tab.xml"); - } - - bool onEnable(LLSD::String param) - { - LLUUID outfit_cat_id = mUUIDs.back(); - - if ("rename" == param) - { - return get_is_category_renameable(&gInventory, outfit_cat_id); - } - else if ("wear_replace" == param) - { - return LLAppearanceMgr::instance().getCanReplaceCOF(outfit_cat_id); - } - else if ("wear_add" == param) - { - return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id); - } - else if ("take_off" == param) - { - return LLAppearanceMgr::getCanRemoveFromCOF(outfit_cat_id); - } - - return true; - } - - bool onVisible(LLSD::String param) - { - LLUUID outfit_cat_id = mUUIDs.back(); - bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == outfit_cat_id; - - if ("edit" == param) - { - return is_worn; - } - else if ("wear_replace" == param) - { - return !is_worn; - } - else if ("delete" == param) - { - return LLAppearanceMgr::instance().getCanRemoveOutfit(outfit_cat_id); - } - - return true; - } - - static void editOutfit() - { - LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_outfit")); - } - - static void renameOutfit(const LLUUID& outfit_cat_id) - { - LLAppearanceMgr::instance().renameOutfit(outfit_cat_id); - } - -private: - LLOutfitsList* mOutfitList; -}; - -////////////////////////////////////////////////////////////////////////// - static LLPanelInjector t_outfits_list("outfits_list"); LLOutfitsList::LLOutfitsList() - : LLPanelAppearanceTab() - , mAccordion(NULL) + : LLOutfitListBase() + , mAccordion(NULL) , mListCommands(NULL) - , mIsInitialized(false) , mItemSelected(false) { - mCategoriesObserver = new LLInventoryCategoriesObserver(); +// mCategoriesObserver = new LLInventoryCategoriesObserver(); - mGearMenu = new LLOutfitListGearMenu(this); - mOutfitMenu = new LLOutfitContextMenu(this); +// mGearMenu = new LLOutfitListGearMenu(this); } LLOutfitsList::~LLOutfitsList() { - delete mGearMenu; - delete mOutfitMenu; - - if (gInventory.containsObserver(mCategoriesObserver)) - { - gInventory.removeObserver(mCategoriesObserver); - } - delete mCategoriesObserver; +// delete mGearMenu; } BOOL LLOutfitsList::postBuild() @@ -375,54 +121,63 @@ BOOL LLOutfitsList::postBuild() mAccordion = getChild("outfits_accordion"); mAccordion->setComparator(&OUTFIT_TAB_NAME_COMPARATOR); - LLMenuButton* menu_gear_btn = getChild("options_gear_btn"); + //LLMenuButton* menu_gear_btn = getChild("options_gear_btn"); - menu_gear_btn->setMouseDownCallback(boost::bind(&LLOutfitListGearMenu::updateItemsVisibility, mGearMenu)); - menu_gear_btn->setMenu(mGearMenu->getMenu()); + //menu_gear_btn->setMouseDownCallback(boost::bind(&LLOutfitListGearMenu::updateItemsVisibility, mGearMenu)); + //menu_gear_btn->setMenu(mGearMenu->getMenu()); - return TRUE; + return LLOutfitListBase::postBuild(); } //virtual -void LLOutfitsList::onOpen(const LLSD& /*info*/) +void LLOutfitsList::onOpen(const LLSD& info) { - if (!mIsInitialized) - { - // *TODO: I'm not sure is this check necessary but it never match while developing. - if (!gInventory.isInventoryUsable()) - return; + if (!mIsInitialized) + { + const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + // Start observing changes in Current Outfit category. + mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this)); + } - const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); + LLOutfitListBase::onOpen(info); - // *TODO: I'm not sure is this check necessary but it never match while developing. - LLViewerInventoryCategory* category = gInventory.getCategory(outfits); - if (!category) - return; + // if (!mIsInitialized) + //{ + // // *TODO: I'm not sure is this check necessary but it never match while developing. + // if (!gInventory.isInventoryUsable()) + // return; - gInventory.addObserver(mCategoriesObserver); + // const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); - // Start observing changes in "My Outfits" category. - mCategoriesObserver->addCategory(outfits, - boost::bind(&LLOutfitsList::refreshList, this, outfits)); + // // *TODO: I'm not sure is this check necessary but it never match while developing. + // LLViewerInventoryCategory* category = gInventory.getCategory(outfits); + // if (!category) + // return; - const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + // gInventory.addObserver(mCategoriesObserver); - // Start observing changes in Current Outfit category. - mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this)); + // // Start observing changes in "My Outfits" category. + // mCategoriesObserver->addCategory(outfits, + // boost::bind(&LLOutfitsList::refreshList, this, outfits)); - LLOutfitObserver::instance().addBOFChangedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this)); - LLOutfitObserver::instance().addBOFReplacedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this)); + // const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); - // Fetch "My Outfits" contents and refresh the list to display - // initially fetched items. If not all items are fetched now - // the observer will refresh the list as soon as the new items - // arrive. - category->fetch(); - refreshList(outfits); - highlightBaseOutfit(); + // // Start observing changes in Current Outfit category. + // mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this)); - mIsInitialized = true; - } + // LLOutfitObserver::instance().addBOFChangedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this)); + // LLOutfitObserver::instance().addBOFReplacedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this)); + + // // Fetch "My Outfits" contents and refresh the list to display + // // initially fetched items. If not all items are fetched now + // // the observer will refresh the list as soon as the new items + // // arrive. + // category->fetch(); + // refreshList(outfits); + // highlightBaseOutfit(); + + // mIsInitialized = true; + //} LLAccordionCtrlTab* selected_tab = mAccordion->getSelectedTab(); if (!selected_tab) return; @@ -431,6 +186,116 @@ void LLOutfitsList::onOpen(const LLSD& /*info*/) selected_tab->showAndFocusHeader(); } + +void LLOutfitsList::updateAddedCategory(LLUUID cat_id) +{ + LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); + if (!cat) return; + + std::string name = cat->getName(); + + outfit_accordion_tab_params tab_params(get_accordion_tab_params()); + LLAccordionCtrlTab* tab = LLUICtrlFactory::create(tab_params); + if (!tab) return; + LLWearableItemsList* wearable_list = LLUICtrlFactory::create(tab_params.wearable_list); + wearable_list->setShape(tab->getLocalRect()); + tab->addChild(wearable_list); + + tab->setName(name); + tab->setTitle(name); + + // *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated. + tab->setDisplayChildren(false); + mAccordion->addCollapsibleCtrl(tab); + + // Start observing the new outfit category. + LLWearableItemsList* list = tab->getChild("wearable_items_list"); + if (!mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id))) + { + // Remove accordion tab if category could not be added to observer. + mAccordion->removeCollapsibleCtrl(tab); + + // kill removed tab + tab->die(); + return; + } + + // Map the new tab with outfit category UUID. + mOutfitsMap.insert(LLOutfitsList::outfits_map_value_t(cat_id, tab)); + + tab->setRightMouseDownCallback(boost::bind(&LLOutfitListBase::outfitRightClickCallBack, this, + _1, _2, _3, cat_id)); + + // Setting tab focus callback to monitor currently selected outfit. + tab->setFocusReceivedCallback(boost::bind(&LLOutfitListBase::hangeOutfitSelection, this, list, cat_id)); + + // Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875) + tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id)); + + // force showing list items that don't match current filter(EXT-7158) + list->setForceShowingUnmatchedItems(true); + + // Setting list commit callback to monitor currently selected wearable item. + list->setCommitCallback(boost::bind(&LLOutfitsList::onListSelectionChange, this, _1)); + + // Setting list refresh callback to apply filter on list change. + list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onFilteredWearableItemsListRefresh, this, _1)); + + list->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onWearableItemsListRightClick, this, _1, _2, _3)); + + // Fetch the new outfit contents. + cat->fetch(); + + // Refresh the list of outfit items after fetch(). + // Further list updates will be triggered by the category observer. + list->updateList(cat_id); + + // If filter is currently applied we store the initial tab state and + // open it to show matched items if any. + if (!sFilterSubString.empty()) + { + tab->notifyChildren(LLSD().with("action", "store_state")); + tab->setDisplayChildren(true); + + // Setting mForceRefresh flag will make the list refresh its contents + // even if it is not currently visible. This is required to apply the + // filter to the newly added list. + list->setForceRefresh(true); + + list->setFilterSubString(sFilterSubString); + } +} + +void LLOutfitsList::updateRemovedCategory(LLUUID cat_id) +{ + outfits_map_t::iterator outfits_iter = mOutfitsMap.find(cat_id); + if (outfits_iter != mOutfitsMap.end()) + { + const LLUUID& outfit_id = outfits_iter->first; + LLAccordionCtrlTab* tab = outfits_iter->second; + + // An outfit is removed from the list. Do the following: + // 1. Remove outfit category from observer to stop monitoring its changes. + mCategoriesObserver->removeCategory(outfit_id); + + // 2. Remove the outfit from selection. + deselectOutfit(outfit_id); + + // 3. Remove category UUID to accordion tab mapping. + mOutfitsMap.erase(outfits_iter); + + // 4. Remove outfit tab from accordion. + mAccordion->removeCollapsibleCtrl(tab); + + // kill removed tab + if (tab != NULL) + { + tab->die(); + } + } +} + +/* void LLOutfitsList::refreshList(const LLUUID& category_id) { LLInventoryModel::cat_array_t cat_array; @@ -457,111 +322,114 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) ++iter) { const LLUUID cat_id = (*iter); - LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); - if (!cat) continue; + updateAddedCategory(cat_id); + //LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); + //if (!cat) continue; - std::string name = cat->getName(); + //std::string name = cat->getName(); - outfit_accordion_tab_params tab_params(get_accordion_tab_params()); - LLAccordionCtrlTab* tab = LLUICtrlFactory::create(tab_params); - if (!tab) continue; - LLWearableItemsList* wearable_list = LLUICtrlFactory::create(tab_params.wearable_list); - wearable_list->setShape(tab->getLocalRect()); - tab->addChild(wearable_list); + //outfit_accordion_tab_params tab_params(get_accordion_tab_params()); + //LLAccordionCtrlTab* tab = LLUICtrlFactory::create(tab_params); + //if (!tab) continue; + //LLWearableItemsList* wearable_list = LLUICtrlFactory::create(tab_params.wearable_list); + //wearable_list->setShape(tab->getLocalRect()); + //tab->addChild(wearable_list); - tab->setName(name); - tab->setTitle(name); + //tab->setName(name); + //tab->setTitle(name); - // *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated. - tab->setDisplayChildren(false); - mAccordion->addCollapsibleCtrl(tab); + //// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated. + //tab->setDisplayChildren(false); + //mAccordion->addCollapsibleCtrl(tab); - // Start observing the new outfit category. - LLWearableItemsList* list = tab->getChild("wearable_items_list"); - if (!mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id))) - { - // Remove accordion tab if category could not be added to observer. - mAccordion->removeCollapsibleCtrl(tab); + //// Start observing the new outfit category. + //LLWearableItemsList* list = tab->getChild("wearable_items_list"); + //if (!mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id))) + //{ + // // Remove accordion tab if category could not be added to observer. + // mAccordion->removeCollapsibleCtrl(tab); - // kill removed tab - tab->die(); - continue; - } + // // kill removed tab + // tab->die(); + // continue; + //} - // Map the new tab with outfit category UUID. - mOutfitsMap.insert(LLOutfitsList::outfits_map_value_t(cat_id, tab)); + //// Map the new tab with outfit category UUID. + //mOutfitsMap.insert(LLOutfitsList::outfits_map_value_t(cat_id, tab)); - tab->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onAccordionTabRightClick, this, - _1, _2, _3, cat_id)); + //tab->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onAccordionTabRightClick, this, + // _1, _2, _3, cat_id)); - // Setting tab focus callback to monitor currently selected outfit. - tab->setFocusReceivedCallback(boost::bind(&LLOutfitsList::changeOutfitSelection, this, list, cat_id)); + //// Setting tab focus callback to monitor currently selected outfit. + //tab->setFocusReceivedCallback(boost::bind(&LLOutfitsList::changeOutfitSelection, this, list, cat_id)); - // Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875) - tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id)); + //// Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875) + //tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id)); - // force showing list items that don't match current filter(EXT-7158) - list->setForceShowingUnmatchedItems(true); + //// force showing list items that don't match current filter(EXT-7158) + //list->setForceShowingUnmatchedItems(true); - // Setting list commit callback to monitor currently selected wearable item. - list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1)); + //// Setting list commit callback to monitor currently selected wearable item. + //list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1)); - // Setting list refresh callback to apply filter on list change. - list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onFilteredWearableItemsListRefresh, this, _1)); + //// Setting list refresh callback to apply filter on list change. + //list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onFilteredWearableItemsListRefresh, this, _1)); - list->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onWearableItemsListRightClick, this, _1, _2, _3)); + //list->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onWearableItemsListRightClick, this, _1, _2, _3)); - // Fetch the new outfit contents. - cat->fetch(); + //// Fetch the new outfit contents. + //cat->fetch(); - // Refresh the list of outfit items after fetch(). - // Further list updates will be triggered by the category observer. - list->updateList(cat_id); + //// Refresh the list of outfit items after fetch(). + //// Further list updates will be triggered by the category observer. + //list->updateList(cat_id); - // If filter is currently applied we store the initial tab state and - // open it to show matched items if any. - if (!sFilterSubString.empty()) - { - tab->notifyChildren(LLSD().with("action","store_state")); - tab->setDisplayChildren(true); + //// If filter is currently applied we store the initial tab state and + //// open it to show matched items if any. + //if (!sFilterSubString.empty()) + //{ + // tab->notifyChildren(LLSD().with("action","store_state")); + // tab->setDisplayChildren(true); - // Setting mForceRefresh flag will make the list refresh its contents - // even if it is not currently visible. This is required to apply the - // filter to the newly added list. - list->setForceRefresh(true); + // // Setting mForceRefresh flag will make the list refresh its contents + // // even if it is not currently visible. This is required to apply the + // // filter to the newly added list. + // list->setForceRefresh(true); - list->setFilterSubString(sFilterSubString); - } + // list->setFilterSubString(sFilterSubString); + //} } // Handle removed tabs. for (uuid_vec_t::const_iterator iter=vremoved.begin(); iter != vremoved.end(); ++iter) { - outfits_map_t::iterator outfits_iter = mOutfitsMap.find((*iter)); - if (outfits_iter != mOutfitsMap.end()) - { - const LLUUID& outfit_id = outfits_iter->first; - LLAccordionCtrlTab* tab = outfits_iter->second; + const LLUUID cat_id = (*iter); + updateRemovedCategory(cat_id); + //outfits_map_t::iterator outfits_iter = mOutfitsMap.find(cat_id); + //if (outfits_iter != mOutfitsMap.end()) + //{ + // const LLUUID& outfit_id = outfits_iter->first; + // LLAccordionCtrlTab* tab = outfits_iter->second; - // An outfit is removed from the list. Do the following: - // 1. Remove outfit category from observer to stop monitoring its changes. - mCategoriesObserver->removeCategory(outfit_id); + // // An outfit is removed from the list. Do the following: + // // 1. Remove outfit category from observer to stop monitoring its changes. + // mCategoriesObserver->removeCategory(outfit_id); - // 2. Remove the outfit from selection. - deselectOutfit(outfit_id); + // // 2. Remove the outfit from selection. + // deselectOutfit(outfit_id); - // 3. Remove category UUID to accordion tab mapping. - mOutfitsMap.erase(outfits_iter); + // // 3. Remove category UUID to accordion tab mapping. + // mOutfitsMap.erase(outfits_iter); - // 4. Remove outfit tab from accordion. - mAccordion->removeCollapsibleCtrl(tab); + // // 4. Remove outfit tab from accordion. + // mAccordion->removeCollapsibleCtrl(tab); - // kill removed tab - if (tab != NULL) - { - tab->die(); - } - } + // // kill removed tab + // if (tab != NULL) + // { + // tab->die(); + // } + //} } // Get changed items from inventory model and update outfit tabs @@ -571,34 +439,29 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) items_iter != changed_items.end(); ++items_iter) { - updateOutfitTab(*items_iter); + updateChangedCategoryName(*items_iter); } mAccordion->sort(); } +*/ -void LLOutfitsList::highlightBaseOutfit() +//virtual +void LLOutfitsList::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) { - // id of base outfit - LLUUID base_id = LLAppearanceMgr::getInstance()->getBaseOutfitUUID(); - if (base_id != mHighlightedOutfitUUID) - { - if (mOutfitsMap[mHighlightedOutfitUUID]) - { - mOutfitsMap[mHighlightedOutfitUUID]->setTitleFontStyle("NORMAL"); - mOutfitsMap[mHighlightedOutfitUUID]->setTitleColor(LLUIColorTable::instance().getColor("AccordionHeaderTextColor")); - } - - mHighlightedOutfitUUID = base_id; - } - if (mOutfitsMap[base_id]) + if (mOutfitsMap[prev_id]) + { + mOutfitsMap[prev_id]->setTitleFontStyle("NORMAL"); + mOutfitsMap[prev_id]->setTitleColor(LLUIColorTable::instance().getColor("AccordionHeaderTextColor")); + } + if (mOutfitsMap[base_id]) { mOutfitsMap[base_id]->setTitleFontStyle("BOLD"); mOutfitsMap[base_id]->setTitleColor(LLUIColorTable::instance().getColor("SelectedOutfitTextColor")); } } -void LLOutfitsList::onSelectionChange(LLUICtrl* ctrl) +void LLOutfitsList::onListSelectionChange(LLUICtrl* ctrl) { LLWearableItemsList* list = dynamic_cast(ctrl); if (!list) return; @@ -606,10 +469,10 @@ void LLOutfitsList::onSelectionChange(LLUICtrl* ctrl) LLViewerInventoryItem *item = gInventory.getItem(list->getSelectedUUID()); if (!item) return; - changeOutfitSelection(list, item->getParentUUID()); + hangeOutfitSelection(list, item->getParentUUID()); } -void LLOutfitsList::performAction(std::string action) +void LLOutfitListBase::performAction(std::string action) { if (mSelectedOutfitUUID.isNull()) return; @@ -630,23 +493,7 @@ void LLOutfitsList::performAction(std::string action) } } -void LLOutfitsList::removeSelected() -{ - LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLOutfitsList::onOutfitsRemovalConfirmation, this, _1, _2)); -} - -void LLOutfitsList::onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option != 0) return; // canceled - - if (mSelectedOutfitUUID.notNull()) - { - gInventory.removeCategory(mSelectedOutfitUUID); - } -} - -void LLOutfitsList::setSelectedOutfitByUUID(const LLUUID& outfit_uuid) +void LLOutfitsList::onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) { for (outfits_map_t::iterator iter = mOutfitsMap.begin(); iter != mOutfitsMap.end(); @@ -661,7 +508,7 @@ void LLOutfitsList::setSelectedOutfitByUUID(const LLUUID& outfit_uuid) if (!list) continue; tab->setFocus(TRUE); - changeOutfitSelection(list, outfit_uuid); + hangeOutfitSelection(list, outfit_uuid); tab->setDisplayChildren(true); } @@ -677,14 +524,14 @@ void LLOutfitsList::setFilterSubString(const std::string& string) } // virtual -bool LLOutfitsList::isActionEnabled(const LLSD& userdata) +bool LLOutfitListBase::isActionEnabled(const LLSD& userdata) { if (mSelectedOutfitUUID.isNull()) return false; const std::string command_name = userdata.asString(); if (command_name == "delete") { - return !mItemSelected && LLAppearanceMgr::instance().getCanRemoveOutfit(mSelectedOutfitUUID); + return !hasItemSelected() && LLAppearanceMgr::instance().getCanRemoveOutfit(mSelectedOutfitUUID); } if (command_name == "rename") { @@ -745,7 +592,7 @@ void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const } } -void LLOutfitsList::collapse_all_folders() +void LLOutfitsList::onCollapseAllFolders() { for (outfits_map_t::iterator iter = mOutfitsMap.begin(); iter != mOutfitsMap.end(); @@ -759,7 +606,7 @@ void LLOutfitsList::collapse_all_folders() } } -void LLOutfitsList::expand_all_folders() +void LLOutfitsList::onExpandAllFolders() { for (outfits_map_t::iterator iter = mOutfitsMap.begin(); iter != mOutfitsMap.end(); @@ -773,11 +620,6 @@ void LLOutfitsList::expand_all_folders() } } -boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb) -{ - return mSelectionChangeSignal.connect(cb); -} - bool LLOutfitsList::hasItemSelected() { return mItemSelected; @@ -786,6 +628,7 @@ bool LLOutfitsList::hasItemSelected() ////////////////////////////////////////////////////////////////////////// // Private methods ////////////////////////////////////////////////////////////////////////// +/* void LLOutfitsList::computeDifference( const LLInventoryModel::cat_array_t& vcats, uuid_vec_t& vadded, @@ -811,17 +654,13 @@ void LLOutfitsList::computeDifference( LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved); } +*/ -void LLOutfitsList::updateOutfitTab(const LLUUID& category_id) +void LLOutfitsList::updateChangedCategoryName(LLViewerInventoryCategory *cat, std::string name) { - outfits_map_t::iterator outfits_iter = mOutfitsMap.find(category_id); + outfits_map_t::iterator outfits_iter = mOutfitsMap.find(cat->getUUID()); if (outfits_iter != mOutfitsMap.end()) { - LLViewerInventoryCategory *cat = gInventory.getCategory(category_id); - if (!cat) return; - - std::string name = cat->getName(); - // Update tab name with the new category name. LLAccordionCtrlTab* tab = outfits_iter->second; if (tab) @@ -836,10 +675,10 @@ void LLOutfitsList::resetItemSelection(LLWearableItemsList* list, const LLUUID& { list->resetSelection(); mItemSelected = false; - setSelectedOutfitUUID(category_id); + signalSelectionOutfitUUID(category_id); } -void LLOutfitsList::changeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) +void LLOutfitsList::onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) { MASK mask = gKeyboard->currentMask(TRUE); @@ -865,12 +704,6 @@ void LLOutfitsList::changeOutfitSelection(LLWearableItemsList* list, const LLUUI mItemSelected = list && (list->getSelectedItem() != NULL); mSelectedListsMap.insert(wearables_lists_map_value_t(category_id, list)); - setSelectedOutfitUUID(category_id); -} - -void LLOutfitsList::setSelectedOutfitUUID(const LLUUID& category_id) -{ - mSelectionChangeSignal(mSelectedOutfitUUID = category_id); } void LLOutfitsList::deselectOutfit(const LLUUID& category_id) @@ -881,7 +714,7 @@ void LLOutfitsList::deselectOutfit(const LLUUID& category_id) // Reset selection if the outfit is selected. if (category_id == mSelectedOutfitUUID) { - setSelectedOutfitUUID(LLUUID::null); + signalSelectionOutfitUUID(LLUUID::null); } } @@ -890,7 +723,7 @@ void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID // Try restoring outfit selection after filtering. if (mAccordion->getSelectedTab() == tab) { - setSelectedOutfitUUID(category_id); + signalSelectionOutfitUUID(category_id); } } @@ -1036,24 +869,6 @@ bool LLOutfitsList::canWearSelected() return true; } -void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) -{ - LLAccordionCtrlTab* tab = dynamic_cast(ctrl); - if(mOutfitMenu && is_tab_header_clicked(tab, y) && cat_id.notNull()) - { - // Focus tab header to trigger tab selection change. - LLUICtrl* header = tab->findChild("dd_header"); - if (header) - { - header->setFocus(TRUE); - } - - uuid_vec_t selected_uuids; - selected_uuids.push_back(cat_id); - mOutfitMenu->show(ctrl, selected_uuids, x, y); - } -} - void LLOutfitsList::wearSelectedItems() { uuid_vec_t selected_uuids; @@ -1132,6 +947,47 @@ void LLOutfitsList::onCOFChanged() } } +void LLOutfitsList::getCurrentCategories(uuid_vec_t& vcur) +{ + // Creating a vector of currently displayed sub-categories UUIDs. + for (outfits_map_t::const_iterator iter = mOutfitsMap.begin(); + iter != mOutfitsMap.end(); + iter++) + { + vcur.push_back((*iter).first); + } +} + + +void LLOutfitsList::sortOutfits() +{ + mAccordion->sort(); +} + +void LLOutfitsList::onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) +{ + LLAccordionCtrlTab* tab = dynamic_cast(ctrl); + if (mOutfitMenu && is_tab_header_clicked(tab, y) && cat_id.notNull()) + { + // Focus tab header to trigger tab selection change. + LLUICtrl* header = tab->findChild("dd_header"); + if (header) + { + header->setFocus(TRUE); + } + + uuid_vec_t selected_uuids; + selected_uuids.push_back(cat_id); + mOutfitMenu->show(ctrl, selected_uuids, x, y); + } +} + +LLOutfitListGearMenuBase* LLOutfitsList::createGearMenu() +{ + return new LLOutfitListGearMenu(this); +} + + bool is_tab_header_clicked(LLAccordionCtrlTab* tab, S32 y) { if(!tab || !tab->getHeaderVisible()) return false; @@ -1140,4 +996,490 @@ bool is_tab_header_clicked(LLAccordionCtrlTab* tab, S32 y) return y >= header_bottom; } +LLOutfitListBase::LLOutfitListBase() + : LLPanelAppearanceTab() + , mIsInitialized(false) +{ + mCategoriesObserver = new LLInventoryCategoriesObserver(); + mOutfitMenu = new LLOutfitContextMenu(this); + //mGearMenu = createGearMenu(); +} + +LLOutfitListBase::~LLOutfitListBase() +{ + delete mOutfitMenu; + delete mGearMenu; + + if (gInventory.containsObserver(mCategoriesObserver)) + { + gInventory.removeObserver(mCategoriesObserver); + } + delete mCategoriesObserver; +} + +void LLOutfitListBase::onOpen(const LLSD& info) +{ + if (!mIsInitialized) + { + // *TODO: I'm not sure is this check necessary but it never match while developing. + if (!gInventory.isInventoryUsable()) + return; + + const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); + + // *TODO: I'm not sure is this check necessary but it never match while developing. + LLViewerInventoryCategory* category = gInventory.getCategory(outfits); + if (!category) + return; + + gInventory.addObserver(mCategoriesObserver); + + // Start observing changes in "My Outfits" category. + mCategoriesObserver->addCategory(outfits, + boost::bind(&LLOutfitListBase::refreshList, this, outfits)); + + const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + + // Start observing changes in Current Outfit category. + //mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this)); + + LLOutfitObserver::instance().addBOFChangedCallback(boost::bind(&LLOutfitListBase::highlightBaseOutfit, this)); + LLOutfitObserver::instance().addBOFReplacedCallback(boost::bind(&LLOutfitListBase::highlightBaseOutfit, this)); + + // Fetch "My Outfits" contents and refresh the list to display + // initially fetched items. If not all items are fetched now + // the observer will refresh the list as soon as the new items + // arrive. + category->fetch(); + refreshList(outfits); + highlightBaseOutfit(); + + mIsInitialized = true; + } + + //LLAccordionCtrlTab* selected_tab = mAccordion->getSelectedTab(); + //if (!selected_tab) return; + + //// Pass focus to the selected outfit tab. + //selected_tab->showAndFocusHeader(); +} + +void LLOutfitListBase::refreshList(const LLUUID& category_id) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + + // Collect all sub-categories of a given category. + LLIsType is_category(LLAssetType::AT_CATEGORY); + gInventory.collectDescendentsIf( + category_id, + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH, + is_category); + + uuid_vec_t vadded; + uuid_vec_t vremoved; + + // Create added and removed items vectors. + computeDifference(cat_array, vadded, vremoved); + + // Handle added tabs. + for (uuid_vec_t::const_iterator iter = vadded.begin(); + iter != vadded.end(); + ++iter) + { + const LLUUID cat_id = (*iter); + updateAddedCategory(cat_id); + } + + // Handle removed tabs. + for (uuid_vec_t::const_iterator iter = vremoved.begin(); iter != vremoved.end(); ++iter) + { + const LLUUID cat_id = (*iter); + updateRemovedCategory(cat_id); + } + + // Get changed items from inventory model and update outfit tabs + // which might have been renamed. + const LLInventoryModel::changed_items_t& changed_items = gInventory.getChangedIDs(); + for (LLInventoryModel::changed_items_t::const_iterator items_iter = changed_items.begin(); + items_iter != changed_items.end(); + ++items_iter) + { + LLViewerInventoryCategory *cat = gInventory.getCategory(*items_iter); + if (!cat) return; + + std::string name = cat->getName(); + + updateChangedCategoryName(cat, name); + } + + sortOutfits(); +} + +void LLOutfitListBase::computeDifference( + const LLInventoryModel::cat_array_t& vcats, + uuid_vec_t& vadded, + uuid_vec_t& vremoved) +{ + uuid_vec_t vnew; + // Creating a vector of newly collected sub-categories UUIDs. + for (LLInventoryModel::cat_array_t::const_iterator iter = vcats.begin(); + iter != vcats.end(); + iter++) + { + vnew.push_back((*iter)->getUUID()); + } + + uuid_vec_t vcur; + //// Creating a vector of currently displayed sub-categories UUIDs. + //for (outfits_map_t::const_iterator iter = mOutfitsMap.begin(); + // iter != mOutfitsMap.end(); + // iter++) + //{ + // vcur.push_back((*iter).first); + //} + getCurrentCategories(vcur); + + LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved); +} + +void LLOutfitListBase::sortOutfits() +{ +} + +void LLOutfitListBase::highlightBaseOutfit() +{ + // id of base outfit + LLUUID base_id = LLAppearanceMgr::getInstance()->getBaseOutfitUUID(); + if (base_id != mHighlightedOutfitUUID) + { + LLUUID prev_id = mHighlightedOutfitUUID; + mHighlightedOutfitUUID = base_id; + onHighlightBaseOutfit(base_id, prev_id); + } + +} + +void LLOutfitListBase::removeSelected() +{ + LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLOutfitListBase::onOutfitsRemovalConfirmation, this, _1, _2)); +} + +void LLOutfitListBase::onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) return; // canceled + + if (mSelectedOutfitUUID.notNull()) + { + gInventory.removeCategory(mSelectedOutfitUUID); + } +} + +void LLOutfitListBase::setSelectedOutfitByUUID(const LLUUID& outfit_uuid) +{ + onSetSelectedOutfitByUUID(outfit_uuid); +} + +boost::signals2::connection LLOutfitListBase::setSelectionChangeCallback(selection_change_callback_t cb) +{ + return mSelectionChangeSignal.connect(cb); +} + +void LLOutfitListBase::signalSelectionOutfitUUID(const LLUUID& category_id) +{ + mSelectionChangeSignal(category_id); +} + +void LLOutfitListBase::outfitRightClickCallBack(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) +{ + onOutfitRightClick(ctrl, x, y, cat_id); +} + +void LLOutfitListBase::hangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) +{ + onChangeOutfitSelection(list, category_id); + mSelectedOutfitUUID = category_id; + signalSelectionOutfitUUID(category_id); +} + +BOOL LLOutfitListBase::postBuild() +{ + mGearMenu = createGearMenu(); + + LLMenuButton* menu_gear_btn = getChild("options_gear_btn"); + + menu_gear_btn->setMouseDownCallback(boost::bind(&LLOutfitListGearMenuBase::updateItemsVisibility, mGearMenu)); + menu_gear_btn->setMenu(mGearMenu->getMenu()); + return TRUE; +} + +void LLOutfitListBase::collapseAllFolders() +{ + onCollapseAllFolders(); +} + +void LLOutfitListBase::expandAllFolders() +{ + onExpandAllFolders(); +} + +LLContextMenu* LLOutfitContextMenu::createMenu() +{ + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + LLUUID selected_id = mUUIDs.front(); + + registrar.add("Outfit.WearReplace", + boost::bind(&LLAppearanceMgr::replaceCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.WearAdd", + boost::bind(&LLAppearanceMgr::addCategoryToCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.TakeOff", + boost::bind(&LLAppearanceMgr::takeOffOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.Edit", boost::bind(editOutfit)); + registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id)); + registrar.add("Outfit.Delete", boost::bind(&LLOutfitListBase::removeSelected, mOutfitList)); + + enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2)); + enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2)); + + return createFromFile("menu_outfit_tab.xml"); + +} + +bool LLOutfitContextMenu::onEnable(LLSD::String param) +{ + LLUUID outfit_cat_id = mUUIDs.back(); + + if ("rename" == param) + { + return get_is_category_renameable(&gInventory, outfit_cat_id); + } + else if ("wear_replace" == param) + { + return LLAppearanceMgr::instance().getCanReplaceCOF(outfit_cat_id); + } + else if ("wear_add" == param) + { + return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id); + } + else if ("take_off" == param) + { + return LLAppearanceMgr::getCanRemoveFromCOF(outfit_cat_id); + } + + return true; +} + +bool LLOutfitContextMenu::onVisible(LLSD::String param) +{ + LLUUID outfit_cat_id = mUUIDs.back(); + bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == outfit_cat_id; + + if ("edit" == param) + { + return is_worn; + } + else if ("wear_replace" == param) + { + return !is_worn; + } + else if ("delete" == param) + { + return LLAppearanceMgr::instance().getCanRemoveOutfit(outfit_cat_id); + } + + return true; +} + +//static +void LLOutfitContextMenu::editOutfit() +{ + LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_outfit")); +} + +void LLOutfitContextMenu::renameOutfit(const LLUUID& outfit_cat_id) +{ + LLAppearanceMgr::instance().renameOutfit(outfit_cat_id); +} + +LLOutfitListGearMenuBase::LLOutfitListGearMenuBase(LLOutfitListBase* olist) + : mOutfitList(olist), + mMenu(NULL) +{ + llassert_always(mOutfitList); + + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + + registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenuBase::onWear, this)); + registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenuBase::onTakeOff, this)); + registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenuBase::onRename, this)); + registrar.add("Gear.Delete", boost::bind(&LLOutfitListBase::removeSelected, mOutfitList)); + registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenuBase::onCreate, this, _2)); + registrar.add("Gear.Collapse", boost::bind(&LLOutfitListBase::onCollapseAllFolders, mOutfitList)); + registrar.add("Gear.Expand", boost::bind(&LLOutfitListBase::onExpandAllFolders, mOutfitList)); + + registrar.add("Gear.WearAdd", boost::bind(&LLOutfitListGearMenuBase::onAdd, this)); + + registrar.add("Gear.UploadFoto", boost::bind(&LLOutfitListGearMenuBase::onUploadFoto, this)); + registrar.add("Gear.LoadAssets", boost::bind(&LLOutfitListGearMenuBase::onLoadAssets, this)); + + enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenuBase::onEnable, this, _2)); + enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenuBase::onVisible, this, _2)); + + mMenu = LLUICtrlFactory::getInstance()->createFromFile( + "menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + llassert(mMenu); +} + +void LLOutfitListGearMenuBase::updateItemsVisibility() +{ + onUpdateItemsVisibility(); +} + +void LLOutfitListGearMenuBase::onUpdateItemsVisibility() +{ + if (!mMenu) return; + + bool have_selection = getSelectedOutfitID().notNull(); + mMenu->setItemVisible("sepatator1", have_selection); + mMenu->setItemVisible("sepatator2", have_selection); + //mMenu->setItemVisible("expand", mOutfitList->getHasExpandableFolders()); + //mMenu->setItemVisible("collapse", mOutfitList->getHasExpandableFolders()); + mMenu->arrangeAndClear(); // update menu height +} + +LLToggleableMenu* LLOutfitListGearMenuBase::getMenu() +{ + return mMenu; +} +const LLUUID& LLOutfitListGearMenuBase::getSelectedOutfitID() +{ + return mOutfitList->getSelectedOutfitUUID(); +} + +LLViewerInventoryCategory* LLOutfitListGearMenuBase::getSelectedOutfit() +{ + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.isNull()) + { + return NULL; + } + + LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id); + return cat; +} + +void LLOutfitListGearMenuBase::onWear() +{ + LLViewerInventoryCategory* selected_outfit = getSelectedOutfit(); + if (selected_outfit) + { + LLAppearanceMgr::instance().wearInventoryCategory( + selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE); + } +} + +void LLOutfitListGearMenuBase::onAdd() +{ + const LLUUID& selected_id = getSelectedOutfitID(); + + if (selected_id.notNull()) + { + LLAppearanceMgr::getInstance()->addCategoryToCurrentOutfit(selected_id); + } +} + +void LLOutfitListGearMenuBase::onTakeOff() +{ + // Take off selected outfit. + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.notNull()) + { + LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); + } +} + +void LLOutfitListGearMenuBase::onRename() +{ + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.notNull()) + { + LLAppearanceMgr::instance().renameOutfit(selected_outfit_id); + } +} + +void LLOutfitListGearMenuBase::onCreate(const LLSD& data) +{ + LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); + if (type == LLWearableType::WT_NONE) + { + LL_WARNS() << "Invalid wearable type" << LL_ENDL; + return; + } + + LLAgentWearables::createWearable(type, true); +} + +bool LLOutfitListGearMenuBase::onEnable(LLSD::String param) +{ + // Handle the "Wear - Replace Current Outfit" menu option specially + // because LLOutfitList::isActionEnabled() checks whether it's allowed + // to wear selected outfit OR selected items, while we're only + // interested in the outfit (STORM-183). + if ("wear" == param) + { + return LLAppearanceMgr::instance().getCanReplaceCOF(mOutfitList->getSelectedOutfitUUID()); + } + + return mOutfitList->isActionEnabled(param); +} + +bool LLOutfitListGearMenuBase::onVisible(LLSD::String param) +{ + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.isNull()) // no selection or invalid outfit selected + { + return false; + } + + // *TODO This condition leads to menu item behavior inconsistent with + // "Wear" button behavior and should be modified or removed. + bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id; + + if ("wear" == param) + { + return !is_worn; + } + + return true; +} + +void LLOutfitListGearMenuBase::onUploadFoto() +{ + +} + +void LLOutfitListGearMenuBase::onLoadAssets() +{ + +} + +LLOutfitListGearMenu::LLOutfitListGearMenu(LLOutfitListBase* olist) + : LLOutfitListGearMenuBase(olist) +{} + +void LLOutfitListGearMenu::onUpdateItemsVisibility() +{ + if (!mMenu) return; + mMenu->setItemVisible("expand", TRUE); + mMenu->setItemVisible("collapse", TRUE); + mMenu->setItemVisible("upload_foto", FALSE); + mMenu->setItemVisible("load_assets", TRUE); + LLOutfitListGearMenuBase::onUpdateItemsVisibility(); +} + // EOF diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 2e3fb3f488..f4b02991e5 100755 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -32,11 +32,14 @@ // newview #include "llinventorymodel.h" +#include "lllistcontextmenu.h" #include "llpanelappearancetab.h" +#include "lltoggleablemenu.h" +#include "llviewermenu.h" class LLAccordionCtrlTab; class LLInventoryCategoriesObserver; -class LLOutfitListGearMenu; +class LLOutfitListGearMenuBase; class LLWearableItemsList; class LLListContextMenu; @@ -57,6 +60,134 @@ public: /*virtual*/ bool compare(const LLAccordionCtrlTab* tab1, const LLAccordionCtrlTab* tab2) const; }; +class LLOutfitListBase : public LLPanelAppearanceTab +{ +public: + typedef boost::function selection_change_callback_t; + typedef boost::signals2::signal selection_change_signal_t; + + LLOutfitListBase(); + virtual ~LLOutfitListBase(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& info); + + void refreshList(const LLUUID& category_id); + void computeDifference(const LLInventoryModel::cat_array_t& vcats, uuid_vec_t& vadded, uuid_vec_t& vremoved); + // highlights currently worn outfit in list and unhighlights previously worn + void highlightBaseOutfit(); + void hangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id); + + + virtual void getCurrentCategories(uuid_vec_t& vcur) = 0; + virtual void updateAddedCategory(LLUUID cat_id) = 0; + virtual void updateRemovedCategory(LLUUID cat_id) = 0; + virtual void updateChangedCategoryName(LLViewerInventoryCategory *cat, std::string name) = 0; + virtual void sortOutfits(); + + void removeSelected(); + void setSelectedOutfitByUUID(const LLUUID& outfit_uuid); + const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } + boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); + void outfitRightClickCallBack(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); + + virtual bool isActionEnabled(const LLSD& userdata); + virtual void performAction(std::string action); + virtual bool hasItemSelected() = 0; + virtual bool canWearSelected() = 0; + + void signalSelectionOutfitUUID(const LLUUID& category_id); + + void collapseAllFolders(); + virtual void onCollapseAllFolders() = 0; + + void expandAllFolders(); + virtual void onExpandAllFolders() = 0; + + virtual bool getHasExpandableFolders() = 0; + +protected: + virtual LLOutfitListGearMenuBase* createGearMenu() = 0; + virtual void onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) = 0; + virtual void onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) = 0; + virtual void onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) = 0; + void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response); + virtual void onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) = 0; + + bool mIsInitialized; + LLInventoryCategoriesObserver* mCategoriesObserver; + LLUUID mSelectedOutfitUUID; + // id of currently highlited outfit + LLUUID mHighlightedOutfitUUID; + selection_change_signal_t mSelectionChangeSignal; + LLListContextMenu* mOutfitMenu; + LLOutfitListGearMenuBase* mGearMenu; +}; + +////////////////////////////////////////////////////////////////////////// + +class LLOutfitContextMenu : public LLListContextMenu +{ +public: + + LLOutfitContextMenu(LLOutfitListBase* outfit_list) + : LLListContextMenu(), + mOutfitList(outfit_list) + {} +protected: + /* virtual */ LLContextMenu* createMenu(); + + bool onEnable(LLSD::String param); + + bool onVisible(LLSD::String param); + + static void editOutfit(); + + static void renameOutfit(const LLUUID& outfit_cat_id); + +private: + LLOutfitListBase* mOutfitList; +}; + +class LLOutfitListGearMenuBase +{ +public: + LLOutfitListGearMenuBase(LLOutfitListBase* olist); + + void updateItemsVisibility(); + + LLToggleableMenu* getMenu(); + +protected: + virtual void onUpdateItemsVisibility(); + virtual void onUploadFoto(); + virtual void onLoadAssets(); + const LLUUID& getSelectedOutfitID(); + + LLOutfitListBase* mOutfitList; + LLToggleableMenu* mMenu; +private: + + LLViewerInventoryCategory* getSelectedOutfit(); + + void onWear(); + void onAdd(); + void onTakeOff(); + void onRename(); + void onCreate(const LLSD& data); + bool onEnable(LLSD::String param); + bool onVisible(LLSD::String param); +}; + +class LLOutfitListGearMenu : public LLOutfitListGearMenuBase +{ +public: + LLOutfitListGearMenu(LLOutfitListBase* olist); + +protected: + /*virtual*/ void onUpdateItemsVisibility(); +}; + /** * @class LLOutfitsList * @@ -66,11 +197,9 @@ public: * * Starts fetching necessary inventory content on first opening. */ -class LLOutfitsList : public LLPanelAppearanceTab +class LLOutfitsList : public LLOutfitListBase { public: - typedef boost::function selection_change_callback_t; - typedef boost::signals2::signal selection_change_signal_t; LLOutfitsList(); virtual ~LLOutfitsList(); @@ -79,74 +208,72 @@ public: /*virtual*/ void onOpen(const LLSD& info); - void refreshList(const LLUUID& category_id); + + //virtual void refreshList(const LLUUID& category_id); + + /*virtual*/ void updateAddedCategory(LLUUID cat_id); + /*virtual*/ void updateRemovedCategory(LLUUID cat_id); // highlits currently worn outfit tab text and unhighlights previously worn - void highlightBaseOutfit(); + /*virtual*/ void onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id); - void performAction(std::string action); + //void performAction(std::string action); - void removeSelected(); - - void setSelectedOutfitByUUID(const LLUUID& outfit_uuid); /*virtual*/ void setFilterSubString(const std::string& string); - /*virtual*/ bool isActionEnabled(const LLSD& userdata); - - const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } - /*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; - boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); - - // Collects selected items from all selected lists and wears them(if possible- adds, else replaces) + // Collects selected items from all selected lists and wears them(if possible- adds, else replaces) void wearSelectedItems(); /** * Returns true if there is a selection inside currently selected outfit */ - bool hasItemSelected(); + /*virtual*/ bool hasItemSelected(); /** Collapses all outfit accordions. */ - void collapse_all_folders(); + /*virtual*/ void onCollapseAllFolders(); /** Expands all outfit accordions. */ - void expand_all_folders(); + void onExpandAllFolders(); + /*virtual*/ bool getHasExpandableFolders() { return TRUE; } + +protected: + LLOutfitListGearMenuBase* createGearMenu(); private: - void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response); - /** * Wrapper for LLCommonUtils::computeDifference. @see LLCommonUtils::computeDifference */ - void computeDifference(const LLInventoryModel::cat_array_t& vcats, uuid_vec_t& vadded, uuid_vec_t& vremoved); + //void computeDifference(const LLInventoryModel::cat_array_t& vcats, uuid_vec_t& vadded, uuid_vec_t& vremoved); + + void getCurrentCategories(uuid_vec_t& vcur); /** * Updates tab displaying outfit identified by category_id. */ - void updateOutfitTab(const LLUUID& category_id); + /*virtual*/ void updateChangedCategoryName(LLViewerInventoryCategory *cat, std::string name); + + /*virtual*/ void sortOutfits(); + + /*virtual*/ void onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid); /** * Resets previous selection and stores newly selected list and outfit id. */ - void changeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id); + /*virtual*/ void onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id); /** *Resets items selection inside outfit */ void resetItemSelection(LLWearableItemsList* list, const LLUUID& category_id); - /** - * Saves newly selected outfit ID. - */ - void setSelectedOutfitUUID(const LLUUID& category_id); - /** * Removes the outfit from selection. */ @@ -182,15 +309,16 @@ private: */ bool canWearSelected(); - void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y); void onCOFChanged(); - void onSelectionChange(LLUICtrl* ctrl); + void onListSelectionChange(LLUICtrl* ctrl); + + /*virtual*/ void onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); static void onOutfitRename(const LLSD& notification, const LLSD& response); - LLInventoryCategoriesObserver* mCategoriesObserver; + //LLInventoryCategoriesObserver* mCategoriesObserver; LLAccordionCtrl* mAccordion; LLPanel* mListCommands; @@ -199,11 +327,6 @@ private: typedef wearables_lists_map_t::value_type wearables_lists_map_value_t; wearables_lists_map_t mSelectedListsMap; - LLUUID mSelectedOutfitUUID; - // id of currently highlited outfit - LLUUID mHighlightedOutfitUUID; - selection_change_signal_t mSelectionChangeSignal; - typedef std::map outfits_map_t; typedef outfits_map_t::value_type outfits_map_value_t; outfits_map_t mOutfitsMap; @@ -212,10 +335,9 @@ private: // Used to monitor COF changes for updating items worn state. See EXT-8636. uuid_vec_t mCOFLinkedItems; - LLOutfitListGearMenu* mGearMenu; - LLListContextMenu* mOutfitMenu; + //LLOutfitListGearMenu* mGearMenu; - bool mIsInitialized; + //bool mIsInitialized; /** * True if there is a selection inside currently selected outfit */ diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 1e1f59055f..eb88abb2bf 100755 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -37,6 +37,7 @@ #include "llagentwearables.h" #include "llappearancemgr.h" #include "lloutfitobserver.h" +#include "lloutfitgallery.h" #include "lloutfitslist.h" #include "llpanelwearing.h" #include "llsaveoutfitcombobtn.h" @@ -44,6 +45,7 @@ #include "llviewerfoldertype.h" static const std::string OUTFITS_TAB_NAME = "outfitslist_tab"; +static const std::string OUTFIT_GALLERY_TAB_NAME = "outfit_gallery_tab"; static const std::string COF_TAB_NAME = "cof_tab"; static LLPanelInjector t_inventory("panel_outfits_inventory"); @@ -268,12 +270,16 @@ bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) void LLPanelOutfitsInventory::initTabPanels() { + //TODO: Add LLOutfitGallery change callback mCurrentOutfitPanel = findChild(COF_TAB_NAME); mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); mMyOutfitsPanel = findChild(OUTFITS_TAB_NAME); mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); + mOutfitGalleryPanel = findChild(OUTFIT_GALLERY_TAB_NAME); + mOutfitGalleryPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); + mAppearanceTabs = getChild("appearance_tabs"); mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this)); } diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index a7917b457c..8c873df038 100755 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -30,8 +30,9 @@ #include "llpanel.h" +class LLOutfitGallery; class LLOutfitsList; -class LLOutfitListGearMenu; +class LLOutfitListGearMenuBase; class LLPanelAppearanceTab; class LLPanelWearing; class LLMenuGL; @@ -76,6 +77,7 @@ protected: private: LLPanelAppearanceTab* mActivePanel; LLOutfitsList* mMyOutfitsPanel; + LLOutfitGallery* mOutfitGalleryPanel; LLPanelWearing* mCurrentOutfitPanel; // tab panels // diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 980810835e..1e9d0f912f 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -71,6 +71,7 @@ #include "llradiogroup.h" #include "llfloaterreg.h" #include "lllocalbitmaps.h" +#include "llerror.h" static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f; static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f; @@ -573,6 +574,7 @@ void LLFloaterTexturePicker::draw() mTexturep = NULL; if(mImageAssetID.notNull()) { + LL_WARNS() << "mImageAssetID: " << mImageAssetID << LL_ENDL; mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID); mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); } diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a5f2ce1f84..56def93ffe 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -804,4 +804,5 @@ with the same filename but different name + diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 76adaad57c..420aced6a2 100755 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -406,7 +406,7 @@ width="400" height="400" follows="top|left"/> - + left_delta="0"/>--> + + + + + + - + + + + Foto of "[OUTFIT_NAME]" outfit + + + + + + + + + + + + + \ No newline at end of file From b2fd39781833cf00c09d70704f13a8fa58428292 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 4 May 2016 11:31:00 +0300 Subject: [PATCH 053/278] MAINT-6220 enable searching of the friend list with the classic username of the avatar. --- indra/llmessage/llavatarname.cpp | 23 +++++++++++++++---- indra/llmessage/llavatarname.h | 4 ++-- indra/llui/lltextutil.cpp | 20 ++++++++++++++++ indra/llui/lltextutil.h | 6 +++++ indra/newview/app_settings/settings.xml | 22 ++++++++++++++++++ indra/newview/llavatarlist.cpp | 17 ++++++++++---- indra/newview/llavatarlist.h | 4 ++++ indra/newview/llavatarlistitem.cpp | 22 +++++++++++++++--- indra/newview/llavatarlistitem.h | 4 ++++ indra/newview/llpanelpeople.cpp | 21 +++++++++++++++++ .../xui/en/menu_people_friends_view.xml | 8 +++++++ .../xui/en/menu_people_nearby_view.xml | 8 +++++++ 12 files changed, 146 insertions(+), 13 deletions(-) diff --git a/indra/llmessage/llavatarname.cpp b/indra/llmessage/llavatarname.cpp index d12f157910..d2115ee499 100644 --- a/indra/llmessage/llavatarname.cpp +++ b/indra/llmessage/llavatarname.cpp @@ -166,7 +166,7 @@ void LLAvatarName::setExpires(F64 expires) mExpires = LLFrameTimer::getTotalSeconds() + expires; } -std::string LLAvatarName::getCompleteName() const +std::string LLAvatarName::getCompleteName(bool use_parentheses) const { std::string name; if (sUseDisplayNames) @@ -182,7 +182,14 @@ std::string LLAvatarName::getCompleteName() const name = mDisplayName; if(sUseUsernames) { - name += " (" + mUsername + ")"; + if(use_parentheses) + { + name += " (" + mUsername + ")"; + } + else + { + name += " [ " + mUsername + " ]"; + } } } } @@ -220,7 +227,7 @@ std::string LLAvatarName::getDisplayName() const } } -std::string LLAvatarName::getUserName() const +std::string LLAvatarName::getUserName(bool lowercase) const { std::string name; if (mLegacyLastName.empty() || (mLegacyLastName == "Resident")) @@ -238,7 +245,15 @@ std::string LLAvatarName::getUserName() const } else { - name = mLegacyFirstName + " " + mLegacyLastName; + if(lowercase) + { + name = mLegacyFirstName + "." + mLegacyLastName; + LLStringUtil::toLower(name); + } + else + { + name = mLegacyFirstName + " " + mLegacyLastName; + } } return name; } diff --git a/indra/llmessage/llavatarname.h b/indra/llmessage/llavatarname.h index 1cb3ae421f..192f43f07c 100644 --- a/indra/llmessage/llavatarname.h +++ b/indra/llmessage/llavatarname.h @@ -65,7 +65,7 @@ public: // For normal names, returns "James Linden (james.linden)" // When display names are disabled returns just "James Linden" - std::string getCompleteName() const; + std::string getCompleteName(bool use_parentheses = true) const; // Returns "James Linden" or "bobsmith123 Resident" for backwards // compatibility with systems like voice and muting @@ -80,7 +80,7 @@ public: // Returns "James Linden" or "bobsmith123 Resident" // Used where we explicitely prefer or need a non UTF-8 legacy (ASCII) name // Also used for backwards compatibility with systems like voice and muting - std::string getUserName() const; + std::string getUserName(bool lowercase = false) const; // Returns "james.linden" or the legacy name for very old names std::string getAccountName() const { return mUsername; } diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp index fff04b34f2..f6b2ee1dc0 100755 --- a/indra/llui/lltextutil.cpp +++ b/indra/llui/lltextutil.cpp @@ -56,6 +56,26 @@ void LLTextUtil::textboxSetHighlightedVal(LLTextBox *txtbox, const LLStyle::Para txtbox->appendText(text.substr(hl_begin + hl_len), false, normal_style); } +void LLTextUtil::textboxSetGreyedVal(LLTextBox *txtbox, const LLStyle::Params& normal_style, const std::string& text, const std::string& greyed) +{ + static LLUIColor sGreyedTextColor = LLUIColorTable::instance().getColor("Gray", LLColor4::grey); + + size_t greyed_begin = 0, greyed_len = greyed.size(); + + if (greyed_len == 0 || (greyed_begin = text.find(greyed)) == std::string::npos) + { + txtbox->setText(text, normal_style); + return; + } + + LLStyle::Params greyed_style = normal_style; + greyed_style.color = sGreyedTextColor; + txtbox->setText(LLStringUtil::null); // clear text + txtbox->appendText(text.substr(0, greyed_begin), false, normal_style); + txtbox->appendText(text.substr(greyed_begin, greyed_len), false, greyed_style); + txtbox->appendText(text.substr(greyed_begin + greyed_len), false, normal_style); +} + const std::string& LLTextUtil::formatPhoneNumber(const std::string& phone_str) { static const std::string PHONE_SEPARATOR = LLUI::sSettingGroups["config"]->getString("AvalinePhoneSeparator"); diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h index 1be81ffd62..a9c143e445 100755 --- a/indra/llui/lltextutil.h +++ b/indra/llui/lltextutil.h @@ -52,6 +52,12 @@ namespace LLTextUtil const std::string& text, const std::string& hl); + void textboxSetGreyedVal( + LLTextBox *txtbox, + const LLStyle::Params& normal_style, + const std::string& text, + const std::string& greyed); + /** * Formats passed phone number to be more human readable. * diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 15f6fe5649..de5caad7fa 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11062,6 +11062,28 @@ Value 1 + FriendsListHideUsernames + + Comment + Show both Display name and Username in Friend list + Persist + 1 + Type + Boolean + Value + 0 + + NearbyListHideUsernames + + Comment + Show both Display name and Username in Nearby list + Persist + 1 + Type + Boolean + Value + 0 + NearbyListShowMap Comment diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 8846d1317d..513f25e301 100755 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -140,6 +140,7 @@ LLAvatarList::LLAvatarList(const Params& p) , mShowProfileBtn(p.show_profile_btn) , mShowSpeakingIndicator(p.show_speaking_indicator) , mShowPermissions(p.show_permissions_granted) +, mShowCompleteName(false) { setCommitOnSelectionChange(true); @@ -174,6 +175,11 @@ void LLAvatarList::setShowIcons(std::string param_name) mShowIcons = gSavedSettings.getBOOL(mIconParamName); } +std::string LLAvatarList::getAvatarName(LLAvatarName av_name) +{ + return mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName(); +} + // virtual void LLAvatarList::draw() { @@ -279,7 +285,7 @@ void LLAvatarList::refresh() LLAvatarName av_name; have_names &= LLAvatarNameCache::get(buddy_id, &av_name); - if (!have_filter || findInsensitive(av_name.getDisplayName(), mNameFilter)) + if (!have_filter || findInsensitive(getAvatarName(av_name), mNameFilter)) { if (nadded >= ADD_LIMIT) { @@ -297,7 +303,7 @@ void LLAvatarList::refresh() } else { - std::string display_name = av_name.getDisplayName(); + std::string display_name = getAvatarName(av_name); addNewItem(buddy_id, display_name.empty() ? waiting_str : display_name, LLAvatarTracker::instance().isBuddyOnline(buddy_id)); @@ -327,7 +333,7 @@ void LLAvatarList::refresh() const LLUUID& buddy_id = it->asUUID(); LLAvatarName av_name; have_names &= LLAvatarNameCache::get(buddy_id, &av_name); - if (!findInsensitive(av_name.getDisplayName(), mNameFilter)) + if (!findInsensitive(getAvatarName(av_name), mNameFilter)) { removeItemByUUID(buddy_id); modified = true; @@ -381,6 +387,7 @@ void LLAvatarList::updateAvatarNames() for( std::vector::const_iterator it = items.begin(); it != items.end(); it++) { LLAvatarListItem* item = static_cast(*it); + item->setShowCompleteName(mShowCompleteName); item->updateAvatarName(); } mNeedUpdateNames = false; @@ -400,7 +407,7 @@ bool LLAvatarList::filterHasMatches() // If name has not been loaded yet we consider it as a match. // When the name will be loaded the filter will be applied again(in refresh()). - if (have_name && !findInsensitive(av_name.getDisplayName(), mNameFilter)) + if (have_name && !findInsensitive(getAvatarName(av_name), mNameFilter)) { continue; } @@ -434,6 +441,7 @@ S32 LLAvatarList::notifyParent(const LLSD& info) void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) { LLAvatarListItem* item = new LLAvatarListItem(); + item->setShowCompleteName(mShowCompleteName); // This sets the name as a side effect item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus); item->setOnline(mIgnoreOnlineStatus ? true : is_online); @@ -445,6 +453,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is item->showSpeakingIndicator(mShowSpeakingIndicator); item->setShowPermissions(mShowPermissions); + item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4)); addItem(item, id, pos); diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 3542577ae3..1a672c279b 100755 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -83,6 +83,7 @@ public: void setShowIcons(std::string param_name); bool getIconsVisible() const { return mShowIcons; } const std::string getIconParamName() const{return mIconParamName;} + std::string getAvatarName(LLAvatarName av_name); virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); @@ -100,6 +101,8 @@ public: void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name); void handleDisplayNamesOptionChanged(); + void setShowCompleteName(bool show) { mShowCompleteName = show;}; + protected: void refresh(); @@ -126,6 +129,7 @@ private: bool mShowProfileBtn; bool mShowSpeakingIndicator; bool mShowPermissions; + bool mShowCompleteName; LLTimer* mLITUpdateTimer; // last interaction time update timer std::string mIconParamName; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 3e6c817dd6..af3fac91bc 100755 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -77,8 +77,10 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) mShowInfoBtn(true), mShowProfileBtn(true), mShowPermissions(false), + mShowCompleteName(false), mHovered(false), - mAvatarNameCacheConnection() + mAvatarNameCacheConnection(), + mGreyOutUsername("") { if (not_from_ui_factory) { @@ -399,14 +401,28 @@ void LLAvatarListItem::updateAvatarName() void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight) { - LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight); + if(mShowCompleteName && highlight.empty()) + { + LLTextUtil::textboxSetGreyedVal(mAvatarName, mAvatarNameStyle, name, mGreyOutUsername); + } + else + { + LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight); + } } void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name) { mAvatarNameCacheConnection.disconnect(); - setAvatarName(av_name.getDisplayName()); + mGreyOutUsername = ""; + std::string name_string = mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName(); + if(av_name.getCompleteName() != av_name.getUserName()) + { + mGreyOutUsername = "[ " + av_name.getUserName(true) + " ]"; + LLStringUtil::toLower(mGreyOutUsername); + } + setAvatarName(name_string); setAvatarToolTip(av_name.getUserName()); //requesting the list to resort diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 7ef35a746e..36d18114aa 100755 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -106,6 +106,7 @@ public: void setShowPermissions(bool show) { mShowPermissions = show; }; void showLastInteractionTime(bool show); void setAvatarIconVisible(bool visible); + void setShowCompleteName(bool show) { mShowCompleteName = show;}; const LLUUID& getAvatarId() const; std::string getAvatarName() const; @@ -218,6 +219,9 @@ private: /// true when the mouse pointer is hovering over this item bool mHovered; + bool mShowCompleteName; + std::string mGreyOutUsername; + void fetchAvatarName(); boost::signals2::connection mAvatarNameCacheConnection; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 73b928f014..bc177abc57 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -611,9 +611,11 @@ BOOL LLPanelPeople::postBuild() mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); mOnlineFriendList->showPermissions("FriendsListShowPermissions"); + mOnlineFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); mAllFriendList->setNoItemsCommentText(getString("no_friends")); mAllFriendList->setShowIcons("FriendsListShowIcons"); mAllFriendList->showPermissions("FriendsListShowPermissions"); + mAllFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); LLPanel* nearby_tab = getChild(NEARBY_TAB_NAME); nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2)); @@ -622,6 +624,7 @@ BOOL LLPanelPeople::postBuild() mNearbyList->setNoItemsMsg(getString("no_one_near")); mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near")); mNearbyList->setShowIcons("NearbyListShowIcons"); + mNearbyList->setShowCompleteName(!gSavedSettings.getBOOL("NearbyListHideUsernames")); mMiniMap = (LLNetMap*)getChildView("Net Map",true); mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ? getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg")); @@ -1342,6 +1345,16 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata) mAllFriendList->showPermissions(show_permissions); mOnlineFriendList->showPermissions(show_permissions); } + else if (chosen_item == "view_usernames") + { + bool hide_usernames = !gSavedSettings.getBOOL("FriendsListHideUsernames"); + gSavedSettings.setBOOL("FriendsListHideUsernames", hide_usernames); + + mAllFriendList->setShowCompleteName(!hide_usernames); + mAllFriendList->handleDisplayNamesOptionChanged(); + mOnlineFriendList->setShowCompleteName(!hide_usernames); + mOnlineFriendList->handleDisplayNamesOptionChanged(); + } } void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata) @@ -1374,6 +1387,14 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata) { setSortOrder(mNearbyList, E_SORT_BY_DISTANCE); } + else if (chosen_item == "view_usernames") + { + bool hide_usernames = !gSavedSettings.getBOOL("NearbyListHideUsernames"); + gSavedSettings.setBOOL("NearbyListHideUsernames", hide_usernames); + + mNearbyList->setShowCompleteName(!hide_usernames); + mNearbyList->handleDisplayNamesOptionChanged(); + } } bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata) diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml index 8790fde7c5..b5a4b87acd 100755 --- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml +++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml @@ -40,6 +40,14 @@ function="CheckControl" parameter="FriendsListShowPermissions" /> + + + + + + + + From eae82c8e4794e2d8374dd8d70547b00c5ac4f300 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 4 May 2016 14:59:22 +0300 Subject: [PATCH 054/278] MAINT-1513 FIXED Label of new folder doesn't disappear while closing Inventory by hot hey --- indra/llui/llfolderview.h | 3 ++- indra/newview/llpanelmaininventory.cpp | 9 +++++++++ indra/newview/llpanelmaininventory.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h index 114dd7bd2f..b5deefd653 100755 --- a/indra/llui/llfolderview.h +++ b/indra/llui/llfolderview.h @@ -242,6 +242,8 @@ public: bool useLabelSuffix() { return mUseLabelSuffix; } virtual void updateMenu(); + void finishRenamingItem( void ); + // Note: We may eventually have to move that method up the hierarchy to LLFolderViewItem. LLHandle getHandle() const { return getDerivedHandle(); } @@ -255,7 +257,6 @@ protected: void commitRename( const LLSD& data ); void onRenamerLost(); - void finishRenamingItem( void ); void closeRenamer( void ); bool selectFirstItem(); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 973e1f7705..c779ba5cdd 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1152,6 +1152,15 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) } } +void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility ) +{ + if(!new_visibility) + { + mMenuAdd->setVisible(FALSE); + getActivePanel()->getRootFolder()->finishRenamingItem(); + } +} + bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata) { LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 21f0ca0cae..290e2e5f47 100755 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -72,6 +72,7 @@ public: std::string& tooltip_msg); /*virtual*/ void changed(U32); /*virtual*/ void draw(); + /*virtual*/ void onVisibilityChange ( BOOL new_visibility ); LLInventoryPanel* getPanel() { return mActivePanel; } LLInventoryPanel* getActivePanel() { return mActivePanel; } From 0a73840dd8e350cd936b681c0cc5131905eb3b09 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 5 May 2016 16:30:41 +0300 Subject: [PATCH 055/278] MAINT-6381 Right click on Outfit Folder behavior --- indra/newview/lloutfitgallery.cpp | 103 +++++++++++++++++- indra/newview/lloutfitgallery.h | 27 +++++ .../xui/en/panel_outfit_gallery_item.xml | 3 +- 3 files changed, 130 insertions(+), 3 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index b351be8de9..a36728e6ac 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -44,6 +44,7 @@ #include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "lllocalbitmaps.h" +#include "llnotificationsutil.h" #include "lltexturectrl.h" #include "llviewermenufile.h" #include "llwearableitemslist.h" @@ -98,6 +99,7 @@ BOOL LLOutfitGallery::postBuild() BOOL rv = LLOutfitListBase::postBuild(); mScrollPanel = getChild("gallery_scroll_panel"); mGalleryPanel = getChild("gallery_panel"); + mOutfitGalleryMenu = new LLOutfitGalleryContextMenu(this); return rv; } @@ -352,6 +354,8 @@ void LLOutfitGallery::moveRowPanel(LLPanel* stack, int left, int bottom) LLOutfitGallery::~LLOutfitGallery() { + delete mOutfitGalleryMenu; + if (gInventory.containsObserver(mTexturesObserver)) { gInventory.removeObserver(mTexturesObserver); @@ -486,7 +490,7 @@ void LLOutfitGallery::onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLU { uuid_vec_t selected_uuids; selected_uuids.push_back(cat_id); - mOutfitMenu->show(ctrl, selected_uuids, x, y); + mOutfitGalleryMenu->show(ctrl, selected_uuids, x, y); } } @@ -604,6 +608,12 @@ BOOL LLOutfitGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask) return LLUICtrl::handleMouseDown(x, y, mask); } +BOOL LLOutfitGalleryItem::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + setFocus(TRUE); + return LLUICtrl::handleRightMouseDown(x, y, mask); +} + void LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id) { mImageAssetId = image_asset_id; @@ -626,6 +636,97 @@ void LLOutfitGalleryItem::setDefaultImage() mDefaultImage = true; } +LLContextMenu* LLOutfitGalleryContextMenu::createMenu() +{ + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + LLUUID selected_id = mUUIDs.front(); + + registrar.add("Outfit.WearReplace", + boost::bind(&LLAppearanceMgr::replaceCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.WearAdd", + boost::bind(&LLAppearanceMgr::addCategoryToCurrentOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.TakeOff", + boost::bind(&LLAppearanceMgr::takeOffOutfit, &LLAppearanceMgr::instance(), selected_id)); + registrar.add("Outfit.Edit", boost::bind(editOutfit)); + registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id)); + registrar.add("Outfit.Delete", boost::bind(&LLOutfitGalleryContextMenu::onRemoveOutfit, this, selected_id)); + registrar.add("Outfit.Create", boost::bind(&LLOutfitGalleryContextMenu::onCreate, this, _2)); + registrar.add("Outfit.UploadPhoto", boost::bind(&LLOutfitGalleryContextMenu::onUploadPhoto, this, selected_id)); + registrar.add("Outfit.SelectPhoto", boost::bind(&LLOutfitGalleryContextMenu::onSelectPhoto, this, selected_id)); + registrar.add("Outfit.TakeSnapshot", boost::bind(&LLOutfitGalleryContextMenu::onTakeSnapshot, this, selected_id)); + + enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitGalleryContextMenu::onEnable, this, _2)); + enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitGalleryContextMenu::onVisible, this, _2)); + + return createFromFile("menu_gallery_outfit_tab.xml"); +} + +void LLOutfitGalleryContextMenu::onUploadPhoto(const LLUUID& outfit_cat_id) +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery && outfit_cat_id.notNull()) + { + gallery->uploadPhoto(outfit_cat_id); + } +} + +void LLOutfitGalleryContextMenu::onSelectPhoto(const LLUUID& outfit_cat_id) +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery && outfit_cat_id.notNull()) + { + gallery->onSelectPhoto(outfit_cat_id); + } +} + +void LLOutfitGalleryContextMenu::onTakeSnapshot(const LLUUID& outfit_cat_id) +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery && outfit_cat_id.notNull()) + { + gallery->onTakeSnapshot(outfit_cat_id); + } +} + +void LLOutfitGalleryContextMenu::onRemoveOutfit(const LLUUID& outfit_cat_id) +{ + LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLOutfitGalleryContextMenu::onOutfitsRemovalConfirmation, this, _1, _2, outfit_cat_id)); +} + +void LLOutfitGalleryContextMenu::onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response, const LLUUID& outfit_cat_id) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) return; // canceled + + if (outfit_cat_id.notNull()) + { + gInventory.removeCategory(outfit_cat_id); + } +} + +void LLOutfitGalleryContextMenu::onCreate(const LLSD& data) +{ + LLWearableType::EType type = LLWearableType::typeNameToType(data.asString()); + if (type == LLWearableType::WT_NONE) + { + LL_WARNS() << "Invalid wearable type" << LL_ENDL; + return; + } + + LLAgentWearables::createWearable(type, true); +} + +bool LLOutfitGalleryContextMenu::onEnable(LLSD::String param) +{ + return LLOutfitContextMenu::onEnable(param); +} + +bool LLOutfitGalleryContextMenu::onVisible(LLSD::String param) +{ + return LLOutfitContextMenu::onVisible(param); +} + LLOutfitGalleryGearMenu::LLOutfitGalleryGearMenu(LLOutfitListBase* olist) : LLOutfitListGearMenuBase(olist) { diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index dbf891142d..b8c7d66406 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -43,6 +43,7 @@ class LLOutfitGallery; class LLOutfitGalleryItem; class LLOutfitListGearMenuBase; class LLOutfitGalleryGearMenu; +class LLOutfitGalleryContextMenu; class LLUpdateGalleryOnPhotoLinked : public LLInventoryCallback { @@ -57,6 +58,7 @@ class LLOutfitGallery : public LLOutfitListBase { public: friend class LLOutfitGalleryGearMenu; + friend class LLOutfitGalleryContextMenu; friend class LLUpdateGalleryOnPhotoLinked; struct Params @@ -169,6 +171,8 @@ private: int mGalleryWidth; int mRowPanWidthFactor; int mGalleryWidthFactor; + + LLListContextMenu* mOutfitGalleryMenu; LLHandle mFloaterHandle; @@ -183,6 +187,28 @@ private: LLInventoryCategoriesObserver* mTexturesObserver; LLInventoryCategoriesObserver* mOutfitsObserver; }; +class LLOutfitGalleryContextMenu : public LLOutfitContextMenu +{ +public: + + friend class LLOutfitGallery; + LLOutfitGalleryContextMenu(LLOutfitListBase* outfit_list) + : LLOutfitContextMenu(outfit_list), + mOutfitList(outfit_list){} +protected: + /* virtual */ LLContextMenu* createMenu(); + bool onEnable(LLSD::String param); + bool onVisible(LLSD::String param); + void onUploadPhoto(const LLUUID& outfit_cat_id); + void onSelectPhoto(const LLUUID& outfit_cat_id); + void onTakeSnapshot(const LLUUID& outfit_cat_id); + void onCreate(const LLSD& data); + void onRemoveOutfit(const LLUUID& outfit_cat_id); + void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response, const LLUUID& outfit_cat_id); +private: + LLOutfitListBase* mOutfitList; +}; + class LLOutfitGalleryGearMenu : public LLOutfitListGearMenuBase { @@ -210,6 +236,7 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void draw(); /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); void setDefaultImage(); void setImageAssetId(LLUUID asset_id); diff --git a/indra/newview/skins/default/xui/en/panel_outfit_gallery_item.xml b/indra/newview/skins/default/xui/en/panel_outfit_gallery_item.xml index eede209e91..77c546c6e7 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_gallery_item.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_gallery_item.xml @@ -3,8 +3,7 @@ background_visible="false" background_opaque="false" bg_alpha_color="FrogGreen" - bg_opaque_color="FrogGreen" - border_color="Red" + bg_opaque_color="FrogGreen" border="false" bevel_style="none" follows="left|top" From bdeeb6451fcfaabb826a6a8babe9f580643bc873 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 5 May 2016 16:32:12 +0300 Subject: [PATCH 056/278] MAINT-6381 Right click on Outfit Folder behavior --- .../xui/en/menu_gallery_outfit_tab.xml | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100755 indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml diff --git a/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml new file mode 100755 index 0000000000..b9e29788dc --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8b3f4ec5f58c1488ac7b3403a1a510a4977cebf6 Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Thu, 5 May 2016 19:43:02 +0300 Subject: [PATCH 057/278] MAINT-6226 Incorporate a customized Snapshot feature to Outfit Browser flow Removed odd controls like custom resolution spinners etc --- indra/newview/llfloateroutfitsnapshot.cpp | 380 +----------------- indra/newview/llfloateroutfitsnapshot.h | 6 - indra/newview/llpanelsnapshot.cpp | 33 +- indra/newview/llpanelsnapshot.h | 2 +- indra/newview/llpanelsnapshotinventory.cpp | 50 +-- .../xui/en/floater_outfit_snapshot.xml | 63 --- .../en/panel_outfit_snapshot_inventory.xml | 52 +-- 7 files changed, 57 insertions(+), 529 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index 8fa54e7f94..cea0e48aa6 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -105,20 +105,13 @@ public: static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); static void onImageQualityChange(LLFloaterOutfitSnapshot* view, S32 quality_val); static void onImageFormatChange(LLFloaterOutfitSnapshot* view); - static void applyCustomResolution(LLFloaterOutfitSnapshot* view, S32 w, S32 h); static void onSnapshotUploadFinished(bool status); static void onSendingPostcardFinished(bool status); static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); - static void setImageSizeSpinnersValues(LLFloaterOutfitSnapshot *view, S32 width, S32 height) ; - static void updateSpinners(LLFloaterOutfitSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed); static LLPanelSnapshot* getActivePanel(LLFloaterOutfitSnapshot* floater, bool ok_if_not_found = true); static LLPanelSnapshot::ESnapshotType getActiveSnapshotType(LLFloaterOutfitSnapshot* floater); static LLFloaterOutfitSnapshot::ESnapshotFormat getImageFormat(LLFloaterOutfitSnapshot* floater); - static LLSpinCtrl* getWidthSpinner(LLFloaterOutfitSnapshot* floater); - static LLSpinCtrl* getHeightSpinner(LLFloaterOutfitSnapshot* floater); - static void enableAspectRatioCheckbox(LLFloaterOutfitSnapshot* floater, BOOL enable); - static void setAspectRatioCheckboxValue(LLFloaterOutfitSnapshot* floater, BOOL checked); static LLSnapshotLivePreview* getPreviewView(LLFloaterOutfitSnapshot *floater); static void setResolution(LLFloaterOutfitSnapshot* floater, const std::string& comboname); @@ -130,9 +123,7 @@ public: private: static LLViewerWindow::ESnapshotType getLayerType(LLFloaterOutfitSnapshot* floater); - static void comboSetCustom(LLFloaterOutfitSnapshot *floater, const std::string& comboname); static void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE); - static void checkAspectRatio(LLFloaterOutfitSnapshot *view, S32 index) ; static void setWorking(LLFloaterOutfitSnapshot* floater, bool working); static void setFinished(LLFloaterOutfitSnapshot* floater, bool finished, bool ok = true, const std::string& msg = LLStringUtil::null); @@ -165,79 +156,15 @@ LLPanelSnapshot* LLFloaterOutfitSnapshot::Impl::getActivePanel(LLFloaterOutfitSn // static LLPanelSnapshot::ESnapshotType LLFloaterOutfitSnapshot::Impl::getActiveSnapshotType(LLFloaterOutfitSnapshot* floater) { - //LLSnapshotLivePreview::ESnapshotType type = LLSnapshotLivePreview::SNAPSHOT_WEB; - //std::string name; - LLPanelSnapshot* spanel = getActivePanel(floater); - - //if (spanel) - //{ - // name = spanel->getName(); - //} - - //if (name == "panel_snapshot_postcard") - //{ - // type = LLSnapshotLivePreview::SNAPSHOT_POSTCARD; - //} - //else if (name == "panel_snapshot_inventory") - //{ - // type = LLSnapshotLivePreview::SNAPSHOT_TEXTURE; - //} - //else if (name == "panel_snapshot_local") - //{ - // type = LLSnapshotLivePreview::SNAPSHOT_LOCAL; - //} - - //return type; - if (spanel) - { - return spanel->getSnapshotType(); - } - return LLPanelSnapshot::SNAPSHOT_WEB; + return LLPanelSnapshot::SNAPSHOT_TEXTURE; } // static LLFloaterOutfitSnapshot::ESnapshotFormat LLFloaterOutfitSnapshot::Impl::getImageFormat(LLFloaterOutfitSnapshot* floater) { - //LLPanelSnapshot* active_panel = getActivePanel(floater); - // FIXME: if the default is not PNG, profile uploads may fail. - //return active_panel ? active_panel->getImageFormat() : LLFloaterOutfitSnapshot::SNAPSHOT_FORMAT_PNG; return LLFloaterOutfitSnapshot::SNAPSHOT_FORMAT_PNG; } -// static -LLSpinCtrl* LLFloaterOutfitSnapshot::Impl::getWidthSpinner(LLFloaterOutfitSnapshot* floater) -{ - LLPanelSnapshot* active_panel = getActivePanel(floater); - return active_panel ? active_panel->getWidthSpinner() : floater->getChild("snapshot_width"); -} - -// static -LLSpinCtrl* LLFloaterOutfitSnapshot::Impl::getHeightSpinner(LLFloaterOutfitSnapshot* floater) -{ - LLPanelSnapshot* active_panel = getActivePanel(floater); - return active_panel ? active_panel->getHeightSpinner() : floater->getChild("snapshot_height"); -} - -// static -void LLFloaterOutfitSnapshot::Impl::enableAspectRatioCheckbox(LLFloaterOutfitSnapshot* floater, BOOL enable) -{ - LLPanelSnapshot* active_panel = getActivePanel(floater); - if (active_panel) - { - active_panel->enableAspectRatioCheckbox(enable); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::setAspectRatioCheckboxValue(LLFloaterOutfitSnapshot* floater, BOOL checked) -{ - LLPanelSnapshot* active_panel = getActivePanel(floater); - if (active_panel) - { - active_panel->getChild(active_panel->getAspectRatioCBName())->setValue(checked); - } -} - // static LLSnapshotLivePreview* LLFloaterOutfitSnapshot::Impl::getPreviewView(LLFloaterOutfitSnapshot *floater) { @@ -248,14 +175,7 @@ LLSnapshotLivePreview* LLFloaterOutfitSnapshot::Impl::getPreviewView(LLFloaterOu // static LLViewerWindow::ESnapshotType LLFloaterOutfitSnapshot::Impl::getLayerType(LLFloaterOutfitSnapshot* floater) { - LLViewerWindow::ESnapshotType type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - LLSD value = floater->getChild("layer_types")->getValue(); - const std::string id = value.asString(); - if (id == "colors") - type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - else if (id == "depth") - type = LLViewerWindow::SNAPSHOT_TYPE_DEPTH; - return type; + return LLViewerWindow::SNAPSHOT_TYPE_COLOR; } // static @@ -375,67 +295,9 @@ void LLFloaterOutfitSnapshot::Impl::updateControls(LLFloaterOutfitSnapshot* floa { LLPanelSnapshot::ESnapshotType shot_type = getActiveSnapshotType(floater); LLFloaterSnapshotBase::ESnapshotFormat shot_format = (LLFloaterSnapshotBase::ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); - LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); - - floater->getChild("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat")); - floater->getChildView("layer_types")->setEnabled(shot_type == LLPanelSnapshot::SNAPSHOT_LOCAL); - - LLPanelSnapshot* active_panel = getActivePanel(floater); - if (active_panel) - { - LLSpinCtrl* width_ctrl = getWidthSpinner(floater); - LLSpinCtrl* height_ctrl = getHeightSpinner(floater); - - // Initialize spinners. - if (width_ctrl->getValue().asInteger() == 0) - { - S32 w = gViewerWindow->getWindowWidthRaw(); - LL_DEBUGS() << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << LL_ENDL; - width_ctrl->setValue(w); - if (getActiveSnapshotType(floater) == LLPanelSnapshot::SNAPSHOT_TEXTURE) - { - width_ctrl->setIncrement(w >> 1); - } - } - if (height_ctrl->getValue().asInteger() == 0) - { - S32 h = gViewerWindow->getWindowHeightRaw(); - LL_DEBUGS() << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << LL_ENDL; - height_ctrl->setValue(h); - if (getActiveSnapshotType(floater) == LLPanelSnapshot::SNAPSHOT_TEXTURE) - { - height_ctrl->setIncrement(h >> 1); - } - } - - // Clamp snapshot resolution to window size when showing UI or HUD in snapshot. - if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) - { - S32 width = gViewerWindow->getWindowWidthRaw(); - S32 height = gViewerWindow->getWindowHeightRaw(); - - width_ctrl->setMaxValue(width); - - height_ctrl->setMaxValue(height); - - if (width_ctrl->getValue().asInteger() > width) - { - width_ctrl->forceSetValue(width); - } - if (height_ctrl->getValue().asInteger() > height) - { - height_ctrl->forceSetValue(height); - } - } - else - { - width_ctrl->setMaxValue(6016); - height_ctrl->setMaxValue(6016); - } - } + LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); LLSnapshotLivePreview* previewp = getPreviewView(floater); - BOOL got_bytes = previewp && previewp->getDataSize() > 0; BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); // *TODO: Separate maximum size for Web images from postcards @@ -458,36 +320,9 @@ void LLFloaterOutfitSnapshot::Impl::updateControls(LLFloaterOutfitSnapshot* floa } floater->getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); - floater->getChild("file_size_label")->setColor( - shot_type == LLPanelSnapshot::SNAPSHOT_POSTCARD - && got_bytes - && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); + floater->getChild("file_size_label")->setColor(LLUIColorTable::instance().getColor( "LabelTextColor" )); - // Update the width and height spinners based on the corresponding resolution combos. (?) - switch(shot_type) - { - case LLPanelSnapshot::SNAPSHOT_WEB: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - floater->getChild("layer_types")->setValue("colors"); - setResolution(floater, "profile_size_combo"); - break; - case LLPanelSnapshot::SNAPSHOT_POSTCARD: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - floater->getChild("layer_types")->setValue("colors"); - setResolution(floater, "postcard_size_combo"); - break; - case LLPanelSnapshot::SNAPSHOT_TEXTURE: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - floater->getChild("layer_types")->setValue("colors"); - setResolution(floater, "texture_size_combo"); - break; - case LLPanelSnapshot::SNAPSHOT_LOCAL: - setResolution(floater, "local_size_combo"); - break; - default: - break; - } - setAspectRatioCheckboxValue(floater, !floater->impl.mAspectRatioCheckOff && gSavedSettings.getBOOL("KeepAspectForSnapshot")); + setResolution(floater, "texture_size_combo"); if (previewp) { @@ -641,32 +476,6 @@ void LLFloaterOutfitSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data) // static void LLFloaterOutfitSnapshot::Impl::applyKeepAspectCheck(LLFloaterOutfitSnapshot* view, BOOL checked) { - gSavedSettings.setBOOL("KeepAspectForSnapshot", checked); - - if (view) - { - LLPanelSnapshot* active_panel = getActivePanel(view); - if (checked && active_panel) - { - LLComboBox* combo = view->getChild(active_panel->getImageSizeComboName()); - combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index - } - - LLSnapshotLivePreview* previewp = getPreviewView(view) ; - if(previewp) - { - previewp->mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; - - S32 w, h ; - previewp->getSize(w, h) ; - updateSpinners(view, previewp, w, h, TRUE); // may change w and h - - LL_DEBUGS() << "updating thumbnail" << LL_ENDL; - previewp->setSize(w, h) ; - previewp->updateSnapshot(TRUE); - checkAutoSnapshot(previewp, TRUE); - } - } } // static @@ -691,44 +500,6 @@ void LLFloaterOutfitSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* da updateLayout(view); } -// static -void LLFloaterOutfitSnapshot::Impl::checkAspectRatio(LLFloaterOutfitSnapshot *view, S32 index) -{ - LLSnapshotLivePreview *previewp = getPreviewView(view) ; - - // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here - if(LLPanelSnapshot::SNAPSHOT_TEXTURE == getActiveSnapshotType(view)) - { - previewp->mKeepAspectRatio = FALSE ; - return ; - } - - BOOL keep_aspect = FALSE, enable_cb = FALSE; - - if (0 == index) // current window size - { - enable_cb = FALSE; - keep_aspect = TRUE; - } - else if (-1 == index) // custom - { - enable_cb = TRUE; - keep_aspect = gSavedSettings.getBOOL("KeepAspectForSnapshot"); - } - else // predefined resolution - { - enable_cb = FALSE; - keep_aspect = FALSE; - } - - view->impl.mAspectRatioCheckOff = !enable_cb; - - if (previewp) - { - previewp->mKeepAspectRatio = keep_aspect; - } -} - // Show/hide upload progress indicators. // static void LLFloaterOutfitSnapshot::Impl::setWorking(LLFloaterOutfitSnapshot* floater, bool working) @@ -807,78 +578,22 @@ void LLFloaterOutfitSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, width = llmin(width, gViewerWindow->getWindowWidthRaw()); height = llmin(height, gViewerWindow->getWindowHeightRaw()); } + - if (width == 0 || height == 0) - { - // take resolution from current window size - LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; - previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); - } - else if (width == -1 || height == -1) - { - // load last custom value - S32 new_width = 0, new_height = 0; - LLPanelSnapshot* spanel = getActivePanel(view); - if (spanel) - { - LL_DEBUGS() << "Loading typed res from panel " << spanel->getName() << LL_ENDL; - new_width = spanel->getTypedPreviewWidth(); - new_height = spanel->getTypedPreviewHeight(); + llassert(width > 0 && height > 0); - // Limit custom size for inventory snapshots to 512x512 px. - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) - { - new_width = llmin(new_width, MAX_TEXTURE_SIZE); - new_height = llmin(new_height, MAX_TEXTURE_SIZE); - } - } - else - { - LL_DEBUGS() << "No custom res chosen, setting preview res from window: " - << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; - new_width = gViewerWindow->getWindowWidthRaw(); - new_height = gViewerWindow->getWindowHeightRaw(); - } - - llassert(new_width > 0 && new_height > 0); - previewp->setSize(new_width, new_height); - } - else - { - // use the resolution from the selected pre-canned drop-down choice - LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; - previewp->setSize(width, height); - } - - checkAspectRatio(view, width) ; - - previewp->getSize(width, height); - - // We use the height spinner here because we come here via the aspect ratio - // checkbox as well and we want height always changing to width by default. - // If we use the width spinner we would change width according to height by - // default, that is not what we want. - updateSpinners(view, previewp, width, height, !getHeightSpinner(view)->isDirty()); // may change width and height + // use the resolution from the selected pre-canned drop-down choice + LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; + previewp->setSize(width, height); - if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height) - { - getWidthSpinner(view)->setValue(width); - getHeightSpinner(view)->setValue(height); - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) - { - getWidthSpinner(view)->setIncrement(width >> 1); - getHeightSpinner(view)->setIncrement(height >> 1); - } - } - if(original_width != width || original_height != height) { - previewp->setSize(width, height); + //previewp->setSize(width, height); // hide old preview as the aspect ratio could be wrong checkAutoSnapshot(previewp, FALSE); LL_DEBUGS() << "updating thumbnail" << LL_ENDL; - getPreviewView(view)->updateSnapshot(TRUE); + previewp->updateSnapshot(TRUE); if(do_update) { LL_DEBUGS() << "Will update controls" << LL_ENDL; @@ -928,15 +643,6 @@ void LLFloaterOutfitSnapshot::Impl::onImageFormatChange(LLFloaterOutfitSnapshot* } } -// Sets the named size combo to "custom" mode. -// static -void LLFloaterOutfitSnapshot::Impl::comboSetCustom(LLFloaterOutfitSnapshot* floater, const std::string& comboname) -{ - LLComboBox* combo = floater->getChild(comboname); - combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index - checkAspectRatio(floater, -1); // -1 means custom -} - // Update supplied width and height according to the constrain proportions flag; limit them by max_val. //static BOOL LLFloaterOutfitSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value) @@ -983,58 +689,6 @@ BOOL LLFloaterOutfitSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previe return (w != width || h != height) ; } -//static -void LLFloaterOutfitSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterOutfitSnapshot *view, S32 width, S32 height) -{ - getWidthSpinner(view)->forceSetValue(width); - getHeightSpinner(view)->forceSetValue(height); - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) - { - getWidthSpinner(view)->setIncrement(width >> 1); - getHeightSpinner(view)->setIncrement(height >> 1); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::updateSpinners(LLFloaterOutfitSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed) -{ - getWidthSpinner(view)->resetDirty(); - getHeightSpinner(view)->resetDirty(); - if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize())) - { - setImageSizeSpinnersValues(view, width, height); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::applyCustomResolution(LLFloaterOutfitSnapshot* view, S32 w, S32 h) -{ - LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL; - if (!view) return; - - LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp) - { - S32 curw,curh; - previewp->getSize(curw, curh); - - if (w != curw || h != curh) - { - //if to upload a snapshot, process spinner input in a special way. - previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; - - previewp->setSize(w,h); - checkAutoSnapshot(previewp, FALSE); - comboSetCustom(view, "profile_size_combo"); - comboSetCustom(view, "postcard_size_combo"); - comboSetCustom(view, "texture_size_combo"); - comboSetCustom(view, "local_size_combo"); - LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL; - previewp->updateSnapshot(TRUE); - } - } -} - // static void LLFloaterOutfitSnapshot::Impl::onSnapshotUploadFinished(bool status) { @@ -1096,12 +750,6 @@ BOOL LLFloaterOutfitSnapshot::postBuild() childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this); getChild("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); - impl.setAspectRatioCheckboxValue(this, gSavedSettings.getBOOL("KeepAspectForSnapshot")); - - childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this); - getChild("layer_types")->setValue("colors"); - getChildView("layer_types")->setEnabled(FALSE); - getChild("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame")); childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); @@ -1261,7 +909,7 @@ S32 LLFloaterOutfitSnapshot::notify(const LLSD& info) impl.updateResolution(getChild(combo_name), this); return 1; } - + /* if (info.has("custom-res-change")) { LLSD res = info["custom-res-change"]; @@ -1274,7 +922,7 @@ S32 LLFloaterOutfitSnapshot::notify(const LLSD& info) impl.applyKeepAspectCheck(this, info["keep-aspect-change"].asBoolean()); return 1; } - + */ if (info.has("image-quality-change")) { impl.onImageQualityChange(this, info["image-quality-change"].asInteger()); diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 176a9520c2..9982676bea 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -38,12 +38,6 @@ class LLFloaterOutfitSnapshot : public LLFloaterSnapshotBase LOG_CLASS(LLFloaterOutfitSnapshot); public: - //typedef enum e_snapshot_format - //{ - // SNAPSHOT_FORMAT_PNG, - // SNAPSHOT_FORMAT_JPEG, - // SNAPSHOT_FORMAT_BMP - //} ESnapshotFormat; LLFloaterOutfitSnapshot(const LLSD& key); virtual ~LLFloaterOutfitSnapshot(); diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp index ca62f2bdf5..284f7aad3f 100755 --- a/indra/newview/llpanelsnapshot.cpp +++ b/indra/newview/llpanelsnapshot.cpp @@ -54,10 +54,18 @@ S32 power_of_two(S32 sz, S32 upper) BOOL LLPanelSnapshot::postBuild() { getChild(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onResolutionComboCommit, this, _1)); - getChild(getWidthSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this)); - getChild(getHeightSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this)); - getChild(getAspectRatioCBName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onKeepAspectRatioCommit, this, _1)); - + if (!getWidthSpinnerName().empty()) + { + getChild(getWidthSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this)); + } + if (!getHeightSpinnerName().empty()) + { + getChild(getHeightSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this)); + } + if (!getAspectRatioCBName().empty()) + { + getChild(getAspectRatioCBName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onKeepAspectRatioCommit, this, _1)); + } updateControls(LLSD()); return TRUE; } @@ -92,27 +100,32 @@ void LLPanelSnapshot::enableControls(BOOL enable) LLSpinCtrl* LLPanelSnapshot::getWidthSpinner() { + llassert(!getWidthSpinnerName().empty()); return getChild(getWidthSpinnerName()); } LLSpinCtrl* LLPanelSnapshot::getHeightSpinner() { + llassert(!getHeightSpinnerName().empty()); return getChild(getHeightSpinnerName()); } S32 LLPanelSnapshot::getTypedPreviewWidth() const { + llassert(!getWidthSpinnerName().empty()); return getChild(getWidthSpinnerName())->getValue().asInteger(); } S32 LLPanelSnapshot::getTypedPreviewHeight() const { - return getChild(getHeightSpinnerName())->getValue().asInteger(); + llassert(!getHeightSpinnerName().empty()); + return getChild(getHeightSpinnerName())->getValue().asInteger(); } void LLPanelSnapshot::enableAspectRatioCheckbox(BOOL enable) { - getChild(getAspectRatioCBName())->setEnabled(enable); + llassert(!getAspectRatioCBName().empty()); + getChild(getAspectRatioCBName())->setEnabled(enable); } LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer() @@ -177,9 +190,11 @@ void LLPanelSnapshot::cancel() void LLPanelSnapshot::onCustomResolutionCommit() { LLSD info; - LLSpinCtrl *widthSpinner = getChild(getWidthSpinnerName()); - LLSpinCtrl *heightSpinner = getChild(getHeightSpinnerName()); - //TODO: Refactoring - move this code into some virtual method of LLPanelSnapshotInventory + std::string widthSpinnerName = getWidthSpinnerName(); + std::string heightSpinnerName = getHeightSpinnerName(); + llassert(!widthSpinnerName.empty() && !heightSpinnerName.empty()); + LLSpinCtrl *widthSpinner = getChild(widthSpinnerName); + LLSpinCtrl *heightSpinner = getChild(heightSpinnerName); if (getName() == "panel_snapshot_inventory") { S32 width = widthSpinner->getValue().asInteger(); diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h index d64ef3b75a..3868020cdf 100755 --- a/indra/newview/llpanelsnapshot.h +++ b/indra/newview/llpanelsnapshot.h @@ -68,7 +68,7 @@ protected: LLSideTrayPanelContainer* getParentContainer(); void updateImageQualityLevel(); void goBack(); ///< Switch to the default (Snapshot Options) panel - void cancel(); + virtual void cancel(); // common UI callbacks void onCustomResolutionCommit(); diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp index 013a564908..057e046e30 100755 --- a/indra/newview/llpanelsnapshotinventory.cpp +++ b/indra/newview/llpanelsnapshotinventory.cpp @@ -47,19 +47,6 @@ class LLPanelSnapshotInventoryBase public: LLPanelSnapshotInventoryBase(); -// -// /*virtual*/ BOOL postBuild(); -// /*virtual*/ void onOpen(const LLSD& key); -// -// void onResolutionCommit(LLUICtrl* ctrl); -// -//private: -// /*virtual*/ std::string getWidthSpinnerName() const { return "inventory_snapshot_width"; } -// /*virtual*/ std::string getHeightSpinnerName() const { return "inventory_snapshot_height"; } -// /*virtual*/ std::string getAspectRatioCBName() const { return "inventory_keep_aspect_check"; } -// /*virtual*/ std::string getImageSizeComboName() const { return "texture_size_combo"; } -// /*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; } -// /*virtual*/ void updateControls(const LLSD& info); protected: virtual void onSend() = 0; @@ -99,18 +86,17 @@ public: LLPanelOutfitSnapshotInventory(); /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); - - void onResolutionCommit(LLUICtrl* ctrl); - - private: - /*virtual*/ std::string getWidthSpinnerName() const { return "inventory_snapshot_width"; } - /*virtual*/ std::string getHeightSpinnerName() const { return "inventory_snapshot_height"; } - /*virtual*/ std::string getAspectRatioCBName() const { return "inventory_keep_aspect_check"; } - /*virtual*/ std::string getImageSizeComboName() const { return "texture_size_combo"; } - /*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; } - /*virtual*/ void updateControls(const LLSD& info); + +private: + /*virtual*/ std::string getWidthSpinnerName() const { return ""; } + /*virtual*/ std::string getHeightSpinnerName() const { return ""; } + /*virtual*/ std::string getAspectRatioCBName() const { return ""; } + /*virtual*/ std::string getImageSizeComboName() const { return "texture_size_combo"; } + /*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; } + /*virtual*/ void updateControls(const LLSD& info); /*virtual*/ void onSend(); + /*virtual*/ void cancel(); }; static LLPanelInjector panel_class1("llpanelsnapshotinventory"); @@ -172,16 +158,12 @@ void LLPanelSnapshotInventory::onSend() LLPanelOutfitSnapshotInventory::LLPanelOutfitSnapshotInventory() { mCommitCallbackRegistrar.add("Inventory.SaveOutfitPhoto", boost::bind(&LLPanelOutfitSnapshotInventory::onSend, this)); - mCommitCallbackRegistrar.add("Inventory.Cancel", boost::bind(&LLPanelOutfitSnapshotInventory::cancel, this)); + mCommitCallbackRegistrar.add("Inventory.SaveOutfitCancel", boost::bind(&LLPanelOutfitSnapshotInventory::cancel, this)); } // virtual BOOL LLPanelOutfitSnapshotInventory::postBuild() { - getChild(getWidthSpinnerName())->setAllowEdit(FALSE); - getChild(getHeightSpinnerName())->setAllowEdit(FALSE); - - getChild(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelOutfitSnapshotInventory::onResolutionCommit, this, _1)); return LLPanelSnapshot::postBuild(); } @@ -199,15 +181,13 @@ void LLPanelOutfitSnapshotInventory::updateControls(const LLSD& info) getChild("save_btn")->setEnabled(have_snapshot); } -void LLPanelOutfitSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl) -{ - BOOL current_window_selected = (getChild(getImageSizeComboName())->getCurrentIndex() == 3); - getChild(getWidthSpinnerName())->setVisible(!current_window_selected); - getChild(getHeightSpinnerName())->setVisible(!current_window_selected); -} - void LLPanelOutfitSnapshotInventory::onSend() { LLFloaterOutfitSnapshot::saveTexture(); LLFloaterOutfitSnapshot::postSave(); } + +void LLPanelOutfitSnapshotInventory::cancel() +{ + getParentByType()->closeFloater(); +} diff --git a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml index 7b88b07ca6..34f02e535f 100644 --- a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml @@ -156,23 +156,6 @@ width="100"> Capture: - - - - - - - - - - - - - Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats. + Uploading an image to your inventory costs L$[UPLOAD_COST]. + + + + + + + + + - media_plugin_cef + media_plugin_libvlc @@ -207,7 +207,7 @@ movie - media_plugin_cef + media_plugin_libvlc @@ -449,7 +449,7 @@ movie - media_plugin_cef + media_plugin_libvlc @@ -460,10 +460,21 @@ movie - media_plugin_cef + media_plugin_libvlc - + + + + movie + + + media_plugin_libvlc + + + @@ -471,7 +482,7 @@ movie - media_plugin_cef + media_plugin_libvlc @@ -482,7 +493,7 @@ movie - media_plugin_cef + media_plugin_libvlc From 54bbf95f26c7412a0febb9279981c820d2a45c3d Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 11 May 2016 18:33:50 +0300 Subject: [PATCH 072/278] MAINT-5635 PSYS_SRC_MAX_AGE breaks when replacing a particle system without it --- indra/newview/llviewerpartsource.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp index 7efa821bbf..814060f4f2 100755 --- a/indra/newview/llviewerpartsource.cpp +++ b/indra/newview/llviewerpartsource.cpp @@ -441,10 +441,20 @@ LLPointer LLViewerPartSourceScript::unpackPSS(LLViewer return NULL; } + F32 prev_max_age = pssp->mPartSysData.mMaxAge; + F32 prev_start_age = pssp->mPartSysData.mStartAge; if (!pssp->mPartSysData.unpackBlock(block_num)) { return NULL; } + else if (pssp->mPartSysData.mMaxAge + && (prev_max_age != pssp->mPartSysData.mMaxAge || prev_start_age != pssp->mPartSysData.mStartAge)) + { + // reusing existing pss, so reset time to allow particles to start again + pssp->mLastUpdateTime = 0.f; + pssp->mLastPartTime = 0.f; + } + if (pssp->mPartSysData.mTargetUUID.notNull()) { LLViewerObject *target_objp = gObjectList.findObject(pssp->mPartSysData.mTargetUUID); From 5048402da82417f653060ef04cfc36bb67f8cd2f Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Thu, 12 May 2016 17:46:20 +0300 Subject: [PATCH 073/278] MAINT-5786 FIXED Redundant sibling index suffix on uploaded mesh object names. --- indra/llprimitive/lldaeloader.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index 720986a411..00bde8dbc3 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -2235,7 +2235,11 @@ std::string LLDAELoader::getElementLabel(daeElement *element) // retrieve index to distinguish items inside same parent size_t ind = 0; parent->getChildren().find(element, ind); - index_string = "_" + boost::lexical_cast(ind); + + if (ind > 0) + { + index_string = "_" + boost::lexical_cast(ind); + } // if parent has a name or ID, use it std::string name = parent->getAttribute("name"); From 87ca1fc3d9ec4650147882f7b8cd85c38c983066 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 13 May 2016 13:33:14 +0300 Subject: [PATCH 074/278] MAINT-6400 Make the region "Object Bonus" setting safer --- indra/newview/llfloaterregioninfo.cpp | 52 ++++++++++++++++++- indra/newview/llfloaterregioninfo.h | 7 +++ .../skins/default/xui/en/notifications.xml | 13 +++++ 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 4eacd728c3..843dbbf25e 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -412,6 +412,11 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) panel->getChild("object_bonus_spin")->setValue(LLSD(object_bonus_factor) ); panel->getChild("access_combo")->setValue(LLSD(sim_access) ); + LLPanelRegionGeneralInfo* panel_general = LLFloaterRegionInfo::getPanelGeneral(); + if (panel) + { + panel_general->setObjBonusFactor(object_bonus_factor); + } // detect teen grid for maturity @@ -464,6 +469,16 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant() return panel; } +// static +LLPanelRegionGeneralInfo* LLFloaterRegionInfo::getPanelGeneral() +{ + LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance("region_info"); + if (!floater) return NULL; + LLTabContainer* tab = floater->getChild("region_panels"); + LLPanelRegionGeneralInfo* panel = (LLPanelRegionGeneralInfo*)tab->getChild("General"); + return panel; +} + // static LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain() { @@ -717,7 +732,42 @@ BOOL LLPanelRegionGeneralInfo::postBuild() childSetAction("im_btn", onClickMessage, this); // childSetAction("manage_telehub_btn", onClickManageTelehub, this); - return LLPanelRegionInfo::postBuild(); + LLUICtrl* apply_btn = findChild("apply_btn"); + if (apply_btn) + { + apply_btn->setCommitCallback(boost::bind(&LLPanelRegionGeneralInfo::onBtnSet, this)); + } + + refresh(); + return TRUE; +} + +void LLPanelRegionGeneralInfo::onBtnSet() +{ + if(mObjBonusFactor == getChild("object_bonus_spin")->getValue().asReal()) + { + if (sendUpdate()) + { + disableButton("apply_btn"); + } + } + else + { + LLNotificationsUtil::add("ChangeObjectBonusFactor", LLSD(), LLSD(), boost::bind(&LLPanelRegionGeneralInfo::onChangeObjectBonus, this, _1, _2)); + } +} + +bool LLPanelRegionGeneralInfo::onChangeObjectBonus(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + if (sendUpdate()) + { + disableButton("apply_btn"); + } + } + return false; } void LLPanelRegionGeneralInfo::onClickKick() diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 46f2b42137..dbb0ad05e9 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -95,6 +95,7 @@ public: static LLPanelEstateCovenant* getPanelCovenant(); static LLPanelRegionTerrainInfo* getPanelRegionTerrain(); static LLPanelRegionExperiences* getPanelExperiences(); + static LLPanelRegionGeneralInfo* getPanelGeneral(); // from LLPanel virtual void refresh(); @@ -183,6 +184,9 @@ public: // LLPanel virtual BOOL postBuild(); + void onBtnSet(); + void setObjBonusFactor(F32 object_bonus_factor) {mObjBonusFactor = object_bonus_factor;} + protected: virtual BOOL sendUpdate(); void onClickKick(); @@ -191,6 +195,9 @@ protected: bool onKickAllCommit(const LLSD& notification, const LLSD& response); static void onClickMessage(void* userdata); bool onMessageCommit(const LLSD& notification, const LLSD& response); + bool onChangeObjectBonus(const LLSD& notification, const LLSD& response); + + F32 mObjBonusFactor; }; diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 589c05de99..f9059627db 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3542,6 +3542,19 @@ Teleport all Residents in this region home? yestext="OK"/> + + Lowering the object bonus after builds have been established in a region may cause objects to be returned or deleted. Are you sure you want to change object bonus? + confirm + + + Date: Fri, 13 May 2016 14:16:46 +0300 Subject: [PATCH 075/278] MAINT-6408 FIXED viewer should allow password field entry greater than 16 bytes --- indra/newview/skins/default/xui/en/panel_login.xml | 2 +- indra/newview/skins/default/xui/en/panel_login_first.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 183ae2e824..ae8e78a9d6 100755 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -67,7 +67,7 @@ follows="left|top" height="32" left_pad="-11" - max_length_bytes="16" + max_length_bytes="64" text_pad_left="8" name="password_edit" label="Password" diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index d1416ece82..dc6e27a1ee 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -124,7 +124,7 @@ width="200" height="32" left="220" - max_length_bytes="16" + max_length_bytes="64" name="password_edit" label="Password" text_pad_left="8" From 6d4d58738c8f1703d4e821308f749a3ae577268c Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 13 May 2016 18:17:29 +0300 Subject: [PATCH 076/278] MAINT-6395 Visual outfit browser snapshot window needs image size fixes --- indra/newview/llfloateroutfitsnapshot.cpp | 191 ++---------------- indra/newview/llfloateroutfitsnapshot.h | 2 - .../en/panel_outfit_snapshot_inventory.xml | 22 -- 3 files changed, 12 insertions(+), 203 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index 66bb4df4ba..6d641613ff 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -57,6 +57,9 @@ LLOutfitSnapshotFloaterView* gOutfitSnapshotFloaterView = NULL; const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; +const S32 OUTFIT_SNAPSHOT_WIDTH = 256; +const S32 OUTFIT_SNAPSHOT_HEIGHT = 256; + static LLDefaultChildRegistry::Register r("snapshot_outfit_floater_view"); @@ -96,22 +99,17 @@ public: //static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data); static void onClickUICheck(LLUICtrl *ctrl, void* data); static void onClickHUDCheck(LLUICtrl *ctrl, void* data); - static void applyKeepAspectCheck(LLFloaterOutfitSnapshot* view, BOOL checked); - static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE); + static void updateResolution(void* data); static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data); static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); - static void onImageQualityChange(LLFloaterOutfitSnapshot* view, S32 quality_val); - static void onImageFormatChange(LLFloaterOutfitSnapshot* view); static void onSnapshotUploadFinished(bool status); static void onSendingPostcardFinished(bool status); - static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); static LLPanelSnapshot* getActivePanel(LLFloaterOutfitSnapshot* floater, bool ok_if_not_found = true); static LLPanelSnapshot::ESnapshotType getActiveSnapshotType(LLFloaterOutfitSnapshot* floater); static LLFloaterOutfitSnapshot::ESnapshotFormat getImageFormat(LLFloaterOutfitSnapshot* floater); static LLSnapshotLivePreview* getPreviewView(LLFloaterOutfitSnapshot *floater); - static void setResolution(LLFloaterOutfitSnapshot* floater, const std::string& comboname); static void updateControls(LLFloaterOutfitSnapshot* floater); static void updateLayout(LLFloaterOutfitSnapshot* floater); static void setStatus(EStatus status, bool ok = true, const std::string& msg = LLStringUtil::null); @@ -175,14 +173,6 @@ LLViewerWindow::ESnapshotType LLFloaterOutfitSnapshot::Impl::getLayerType(LLFloa return LLViewerWindow::SNAPSHOT_TYPE_COLOR; } -// static -void LLFloaterOutfitSnapshot::Impl::setResolution(LLFloaterOutfitSnapshot* floater, const std::string& comboname) -{ - LLComboBox* combo = floater->getChild(comboname); - combo->setVisible(TRUE); - updateResolution(combo, floater, FALSE); // to sync spinners with combo -} - //static void LLFloaterOutfitSnapshot::Impl::updateLayout(LLFloaterOutfitSnapshot* floaterp) { @@ -319,7 +309,7 @@ void LLFloaterOutfitSnapshot::Impl::updateControls(LLFloaterOutfitSnapshot* floa floater->getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); floater->getChild("file_size_label")->setColor(LLUIColorTable::instance().getColor( "LabelTextColor" )); - setResolution(floater, "texture_size_combo"); + updateResolution(floater); if (previewp) { @@ -470,11 +460,6 @@ void LLFloaterOutfitSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data) } } -// static -void LLFloaterOutfitSnapshot::Impl::applyKeepAspectCheck(LLFloaterOutfitSnapshot* view, BOOL checked) -{ -} - // static void LLFloaterOutfitSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) { @@ -545,27 +530,21 @@ void LLFloaterOutfitSnapshot::Impl::setFinished(LLFloaterOutfitSnapshot* floater // Apply a new resolution selected from the given combobox. // static -void LLFloaterOutfitSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update) +void LLFloaterOutfitSnapshot::Impl::updateResolution(void* data) { - LLComboBox* combobox = (LLComboBox*)ctrl; LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (!view || !combobox) + if (!view) { - llassert(view && combobox); + llassert(view); return; } - - std::string sdstring = combobox->getSelectedValue(); - LLSD sdres; - std::stringstream sstream(sdstring); - LLSDSerialize::fromNotation(sdres, sstream, sdstring.size()); - S32 width = sdres[0]; - S32 height = sdres[1]; + S32 width = OUTFIT_SNAPSHOT_WIDTH; + S32 height = OUTFIT_SNAPSHOT_HEIGHT; LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp && combobox->getCurrentIndex() >= 0) + if (previewp) { S32 original_width = 0 , original_height = 0 ; previewp->getSize(original_width, original_height) ; @@ -591,11 +570,6 @@ void LLFloaterOutfitSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, checkAutoSnapshot(previewp, FALSE); LL_DEBUGS() << "updating thumbnail" << LL_ENDL; previewp->updateSnapshot(TRUE); - if(do_update) - { - LL_DEBUGS() << "Will update controls" << LL_ENDL; - updateControls(view); - } } } } @@ -618,74 +592,6 @@ void LLFloaterOutfitSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data } } -// static -void LLFloaterOutfitSnapshot::Impl::onImageQualityChange(LLFloaterOutfitSnapshot* view, S32 quality_val) -{ - LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp) - { - previewp->setSnapshotQuality(quality_val); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onImageFormatChange(LLFloaterOutfitSnapshot* view) -{ - if (view) - { - gSavedSettings.setS32("SnapshotFormat", getImageFormat(view)); - LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL; - getPreviewView(view)->updateSnapshot(TRUE); - updateControls(view); - } -} - -// Update supplied width and height according to the constrain proportions flag; limit them by max_val. -//static -BOOL LLFloaterOutfitSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value) -{ - S32 w = width ; - S32 h = height ; - - if(previewp && previewp->mKeepAspectRatio) - { - if(gViewerWindow->getWindowWidthRaw() < 1 || gViewerWindow->getWindowHeightRaw() < 1) - { - return FALSE ; - } - - //aspect ratio of the current window - F32 aspect_ratio = (F32)gViewerWindow->getWindowWidthRaw() / gViewerWindow->getWindowHeightRaw() ; - - //change another value proportionally - if(isWidthChanged) - { - height = ll_round(width / aspect_ratio) ; - } - else - { - width = ll_round(height * aspect_ratio) ; - } - - //bound w/h by the max_value - if(width > max_value || height > max_value) - { - if(width > height) - { - width = max_value ; - height = (S32)(width / aspect_ratio) ; - } - else - { - height = max_value ; - width = (S32)(height * aspect_ratio) ; - } - } - } - - return (w != width || h != height) ; -} - // static void LLFloaterOutfitSnapshot::Impl::onSnapshotUploadFinished(bool status) { @@ -784,19 +690,12 @@ BOOL LLFloaterOutfitSnapshot::postBuild() gFloaterView->removeChild(this); gSnapshotFloaterView->addChild(this); - // Pre-select "Current Window" resolution. - getChild("profile_size_combo")->selectNthItem(0); - getChild("postcard_size_combo")->selectNthItem(0); - getChild("texture_size_combo")->selectNthItem(0); - getChild("local_size_combo")->selectNthItem(8); - getChild("local_format_combo")->selectNthItem(0); - impl.mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); impl.updateControls(this); impl.updateLayout(this); - + previewp->mKeepAspectRatio = FALSE; previewp->setThumbnailPlaceholderRect(getThumbnailPlaceholderRect()); return TRUE; @@ -899,39 +798,6 @@ void LLFloaterOutfitSnapshot::onClose(bool app_quitting) // virtual S32 LLFloaterOutfitSnapshot::notify(const LLSD& info) { - // A child panel wants to change snapshot resolution. - if (info.has("combo-res-change")) - { - std::string combo_name = info["combo-res-change"]["control-name"].asString(); - impl.updateResolution(getChild(combo_name), this); - return 1; - } - /* - if (info.has("custom-res-change")) - { - LLSD res = info["custom-res-change"]; - impl.applyCustomResolution(this, res["w"].asInteger(), res["h"].asInteger()); - return 1; - } - - if (info.has("keep-aspect-change")) - { - impl.applyKeepAspectCheck(this, info["keep-aspect-change"].asBoolean()); - return 1; - } - */ - if (info.has("image-quality-change")) - { - impl.onImageQualityChange(this, info["image-quality-change"].asInteger()); - return 1; - } - - if (info.has("image-format-change")) - { - impl.onImageFormatChange(this); - return 1; - } - if (info.has("set-ready")) { impl.setStatus(Impl::STATUS_READY); @@ -1046,27 +912,6 @@ void LLFloaterOutfitSnapshot::saveTexture() instance->closeFloater(); } -// static -BOOL LLFloaterOutfitSnapshot::saveLocal() -{ - LL_DEBUGS() << "saveLocal" << LL_ENDL; - // FIXME: duplicated code - LLFloaterOutfitSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return FALSE; - } - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); - if (!previewp) - { - llassert(previewp != NULL); - return FALSE; - } - - return previewp->saveLocal(); -} - // static void LLFloaterOutfitSnapshot::postSave() { @@ -1140,18 +985,6 @@ const LLVector3d& LLFloaterOutfitSnapshot::getPosTakenGlobal() return previewp->getPosTakenGlobal(); } -// static -void LLFloaterOutfitSnapshot::setAgentEmail(const std::string& email) -{ - LLFloaterOutfitSnapshot* instance = findInstance(); - if (instance) - { - LLSideTrayPanelContainer* panel_container = instance->getChild("panel_container"); - LLPanel* postcard_panel = panel_container->getPanelByName("panel_snapshot_postcard"); - postcard_panel->notify(LLSD().with("agent-email", email)); - } -} - ///---------------------------------------------------------------------------- /// Class LLSnapshotFloaterView ///---------------------------------------------------------------------------- diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 9982676bea..9a7b30ebd8 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -54,12 +54,10 @@ public: static LLFloaterOutfitSnapshot* getInstance(); static LLFloaterOutfitSnapshot* findInstance(); static void saveTexture(); - static BOOL saveLocal(); static void postSave(); static void postPanelSwitch(); static LLPointer getImageData(); static const LLVector3d& getPosTakenGlobal(); - static void setAgentEmail(const std::string& email); static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } diff --git a/indra/newview/skins/default/xui/en/panel_outfit_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfit_snapshot_inventory.xml index 7261d429ba..800faabc2a 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_snapshot_inventory.xml @@ -38,28 +38,6 @@ right="-5" top_pad="5" /> - - - - - Date: Fri, 13 May 2016 18:47:23 +0300 Subject: [PATCH 077/278] Add invert texture coordinates for media textures. --- indra/llrender/llglslshader.cpp | 22 +++++++++ indra/llrender/llglslshader.h | 1 + indra/llrender/llrender.cpp | 8 ++++ indra/llrender/llrender.h | 1 + indra/llrender/llshadermgr.cpp | 1 + indra/llrender/llshadermgr.h | 3 +- .../shaders/class1/deferred/diffuseV.glsl | 11 +++++ .../shaders/class1/deferred/fullbrightV.glsl | 11 +++++ .../shaders/class1/objects/fullbrightV.glsl | 13 ++++++ .../shaders/class1/objects/simpleV.glsl | 12 ++++- indra/newview/lldrawpool.cpp | 45 +++++++++++++++++++ 11 files changed, 126 insertions(+), 2 deletions(-) diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 52b8de8365..8790b1ed7d 100755 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -1278,6 +1278,28 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c } } +void LLGLSLShader::uniform1b(U32 index, GLboolean x) +{ + if (mProgramObject > 0) + { + if (mUniform.size() <= index) + { + UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL; + return; + } + + if (mUniform[index] >= 0) + { + std::map::iterator iter = mValue.find(mUniform[index]); + if (iter == mValue.end() || iter->second.mV[0] != x) + { + glUniform1iARB(mUniform[index], x); + mValue[mUniform[index]] = LLVector4(x, 0.f, 0.f, 0.f); + } + } + } +} + GLint LLGLSLShader::getUniformLocation(const LLStaticHashedString& uniform) { GLint ret = -1; diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 0746e8760a..8663a5a5ff 100755 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -125,6 +125,7 @@ public: void uniform3fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); void uniform4fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); void uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat *v); + void uniform1b(U32 index, GLboolean b); void setMinimumAlpha(F32 minimum); diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 69420dd0bb..b5ed67f66a 100755 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1466,6 +1466,14 @@ U32 LLRender::getMatrixMode() return mMatrixMode; } +void LLRender::setInverseTexCoordByY(bool v) +{ + LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; + if (shader) + { + shader->uniform1b(LLShaderMgr::INVERSE_TEX_Y, v); + } +} void LLRender::loadIdentity() { diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index a67fb8da52..4c3547f8e4 100755 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -355,6 +355,7 @@ public: void multMatrix(const GLfloat* m); void matrixMode(U32 mode); U32 getMatrixMode(); + void setInverseTexCoordByY(bool v); const glh::matrix4f& getModelviewMatrix(); const glh::matrix4f& getProjectionMatrix(); diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index b2be3cc3b6..79e0b3da28 100755 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -1206,6 +1206,7 @@ void LLShaderMgr::initAttribsAndUniforms() mReservedUniforms.push_back("origin"); mReservedUniforms.push_back("display_gamma"); + mReservedUniforms.push_back("invert_tex_y"); llassert(mReservedUniforms.size() == END_RESERVED_UNIFORMS); std::set dupe_check; diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h index 394b38f832..50b7c8b9d9 100755 --- a/indra/llrender/llshadermgr.h +++ b/indra/llrender/llshadermgr.h @@ -215,7 +215,8 @@ public: TERRAIN_ALPHARAMP, SHINY_ORIGIN, -DISPLAY_GAMMA, + DISPLAY_GAMMA, + INVERSE_TEX_Y, END_RESERVED_UNIFORMS } eGLSLReservedUniforms; diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index 3c026796c8..7e83389f6e 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -26,6 +26,13 @@ uniform mat3 normal_matrix; uniform mat4 texture_matrix0; uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( + 1, 0, 0, 0, + 0,-1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 +); ATTRIBUTE vec3 position; ATTRIBUTE vec4 diffuse_color; @@ -44,6 +51,10 @@ void main() //transform vertex gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; + if(invert_tex_y) + { + vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; + } passTextureIndex(); vary_normal = normalize(normal_matrix * normal); diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 8e899e3e0f..2595712882 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -26,6 +26,13 @@ uniform mat4 texture_matrix0; uniform mat4 modelview_matrix; uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( + 1, 0, 0, 0, + 0,-1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 +); ATTRIBUTE vec3 position; @@ -62,6 +69,10 @@ void main() #endif vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; + if(invert_tex_y) + { + vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; + } calcAtmospherics(pos.xyz); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl index fc20d3270e..a8efcd9857 100755 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl @@ -26,6 +26,14 @@ uniform mat4 texture_matrix0; uniform mat4 modelview_matrix; uniform mat4 modelview_projection_matrix; + +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( + 1, 0, 0, 0, + 0,-1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 +); ATTRIBUTE vec3 position; void passTextureIndex(); @@ -49,6 +57,11 @@ void main() vec4 pos = (modelview_matrix * vert); gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; + + if(invert_tex_y) + { + vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; + } calcAtmospherics(pos.xyz); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl index 37a20383e2..c744dc1397 100755 --- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl @@ -27,6 +27,13 @@ uniform mat3 normal_matrix; uniform mat4 texture_matrix0; uniform mat4 modelview_matrix; uniform mat4 modelview_projection_matrix; +uniform bool invert_tex_y = false; +const mat4 invTexM = mat4( + 1, 0, 0, 0, + 0,-1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 +); ATTRIBUTE vec3 position; void passTextureIndex(); @@ -51,7 +58,10 @@ void main() gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); vary_texcoord0 = (texture_matrix0 * vec4(texcoord0, 0, 1)).xy; - + if(invert_tex_y) + { + vary_texcoord0 = vec2(invTexM * vec4(vary_texcoord0,0,1)).xy; + } vec3 norm = normalize(normal_matrix * normal); diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index f74164aea6..a6cf917cbd 100755 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -473,6 +473,10 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba if (params.mTextureList[i].notNull()) { gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE); + if (LLViewerTexture::MEDIA_TEXTURE == params.mTextureList[i]->getType()) + { + gGL.setInverseTexCoordByY(true); + } } } } @@ -482,13 +486,54 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba { params.mTexture->addTextureStats(params.mVSize); gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ; + + if (!gPipeline.mVertexShadersEnabled) + { + if (LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType() && !params.mTextureMatrix) + { + static const float fIdntInvY[] = { + 1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; + + gGL.getTexUnit(0)->activate(); + gGL.matrixMode(LLRender::MM_TEXTURE); + gGL.loadMatrix((GLfloat*)fIdntInvY); + gPipeline.mTextureMatrixOps++; + + tex_setup = true; + } + } + else + { + gGL.setInverseTexCoordByY(LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType()); + } + if (params.mTextureMatrix) { tex_setup = true; gGL.getTexUnit(0)->activate(); gGL.matrixMode(LLRender::MM_TEXTURE); gGL.loadMatrix((GLfloat*) params.mTextureMatrix->mMatrix); + + if (LLViewerTexture::MEDIA_TEXTURE == params.mTexture->getType() && !gPipeline.mVertexShadersEnabled) + { + static const float fIdntInvY[] = { + 1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; + + gGL.multMatrix(fIdntInvY); + gPipeline.mMatrixOpCount++; + } + gPipeline.mTextureMatrixOps++; + + tex_setup = true; } } else From b756b47d08d028a40d0a49b11755d31f47efe46d Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Fri, 13 May 2016 19:42:27 +0300 Subject: [PATCH 078/278] MAINT-6383 SLT timestamp in "About second life" floater --- indra/newview/llappviewer.cpp | 6 ++++++ indra/newview/llstartup.cpp | 8 +++++--- indra/newview/skins/default/xui/en/strings.xml | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 45306dcff4..b6ba200d0d 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3440,6 +3440,12 @@ std::string LLAppViewer::getViewerInfoString() const { support << '\n' << LLTrans::getString("AboutTraffic", args); } + + // SLT timestamp + LLSD substitution; + substitution["datetime"] = (S32)time(NULL);//(S32)time_corrected(); + support << "\n" << LLTrans::getString("AboutTime", substitution); + return support.str(); } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 88fbd233b8..723b4992bb 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -687,6 +687,11 @@ bool idle_startup() gRememberPassword = gSavedSettings.getBOOL("RememberPassword"); show_connect_box = TRUE; } + + //setup map of datetime strings to codes and slt & local time offset from utc + // *TODO: Does this need to be here? + LLStringOps::setupDatetimeInfo(false); + // Go to the next startup state LLStartUp::setStartupState( STATE_BROWSER_INIT ); return FALSE; @@ -1139,9 +1144,6 @@ bool idle_startup() LLNotificationsUtil::add("ErrorMessage", args, LLSD(), login_alert_done); } } - //setup map of datetime strings to codes and slt & local time offset from utc - // *TODO: Does this need to be here? - LLStringOps::setupDatetimeInfo (false); transition_back_to_login_panel(emsg.str()); show_connect_box = true; } diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index ff98d2f109..1e498024f1 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -54,6 +54,7 @@ LLCEFLib/CEF Version: [LLCEFLIB_VERSION] Voice Server Version: [VOICE_VERSION] Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + [month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt] Error fetching server release notes URL. From f0e9566b90183081daef4ff8b534093fbcf73e6d Mon Sep 17 00:00:00 2001 From: callum_linden Date: Fri, 13 May 2016 13:09:12 -0700 Subject: [PATCH 079/278] pull in unflipped version of LLCEFLib --- autobuild.xml | 10 +++++----- indra/media_plugins/cef/media_plugin_cef.cpp | 2 +- indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 14 +++++++++++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 6c29d5cb18..3468adb9fe 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1484,11 +1484,11 @@ archive hash - 29a1f64df46094eda0d681821a98d17e + 7db18237c7ac2f49a9d17a4c5ca7b23e hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/Darwin/installer/llceflib-1.5.3.311349-darwin-311349.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/315268/arch/Darwin/installer/llceflib-1.5.3.315268-darwin-315268.tar.bz2 name darwin @@ -1498,18 +1498,18 @@ archive hash - 827b7c339a2cd401d9d23f9ee02cb83f + 0dc2c50d785dfd5ff7098d262ed29499 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/CYGWIN/installer/llceflib-1.5.3.311349-windows-311349.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/315268/arch/CYGWIN/installer/llceflib-1.5.3.315268-windows-315268.tar.bz2 name windows version - 1.5.3.311349 + 1.5.3.315268 llphysicsextensions_source diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 8d9d1dd975..d61bd680df 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -488,7 +488,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string) message.setValueU32("internalformat", GL_RGB); message.setValueU32("format", GL_BGRA); message.setValueU32("type", GL_UNSIGNED_BYTE); - message.setValueBoolean("coords_opengl", true); + message.setValueBoolean("coords_opengl", false); sendMessage(message); } else if (message_name == "set_user_data_path") diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 08716e1a1c..920c32f1f7 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -56,6 +56,7 @@ class MediaPluginLibVLC : void resetVLC(); static void* lock(void* data, void** p_pixels); + static void unlock(void* data, void* id, void* const* raw_pixels); static void display(void* data, void* id); libvlc_instance_t* gLibVLC; @@ -109,6 +110,14 @@ void* MediaPluginLibVLC::lock(void* data, void** p_pixels) return NULL; } +///////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginLibVLC::unlock(void* data, void* id, void* const* raw_pixels) +{ + // nothing to do here for the moment. + // we can modify the raw_pixels here if we want to. +} + //////////////////////////////////////////////////////////////////////////////// // void MediaPluginLibVLC::display(void* data, void* id) @@ -188,7 +197,7 @@ void MediaPluginLibVLC::playMedia() gVLCCallbackContext.texture_pixels = mPixels; gVLCCallbackContext.mp = gLibVLCMediaPlayer; - libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, NULL, display, &gVLCCallbackContext); + libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, unlock, display, &gVLCCallbackContext); libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", mWidth, mHeight, mWidth * 4); libvlc_media_player_play(gLibVLCMediaPlayer); } @@ -281,7 +290,6 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string ) { if(message_name == "init") { - mDepth = 4; LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); message.setValueS32("default_width", 1024); message.setValueS32("default_height", 1024); @@ -289,7 +297,7 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string ) message.setValueU32("internalformat", GL_RGB); message.setValueU32("format", GL_BGRA_EXT); message.setValueU32("type", GL_UNSIGNED_BYTE); - message.setValueBoolean("coords_opengl", true); + message.setValueBoolean("coords_opengl", false); sendMessage(message); } else if(message_name == "size_change") From 50f311fa75cd680d1f05f0bf767791fba6f0578c Mon Sep 17 00:00:00 2001 From: callum_linden Date: Fri, 13 May 2016 14:46:01 -0700 Subject: [PATCH 080/278] Pull in vlclib binary autobuild package --- autobuild.xml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/autobuild.xml b/autobuild.xml index 3468adb9fe..548f16f04b 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -2135,6 +2135,34 @@ version 0.8.0.1 + vlc-bin + + copyright + Copyright (C) 1998-2016 VLC authors and VideoLAN + license + GPL2 + license_file + LICENSES/vlc.txt + name + vlc-bin + platforms + + windows + + archive + + hash + 3bdbb86adc2119a0b7bb17a54372dcd2 + url + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-vlc-bin/rev/315283/arch/CYGWIN/installer/vlc_bin-2.2.3.315283-windows-315283.tar.bz2 + + name + windows + + + version + 2.2.3.315283 + xmlrpc-epi copyright From 09e68a49535a15f89b2c28e523a81fed1770ee61 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Fri, 13 May 2016 16:43:18 -0700 Subject: [PATCH 081/278] Additional set of changes to use vlc-bin package --- indra/cmake/LibVLCPlugin.cmake | 6 ++++++ indra/media_plugins/libvlc/CMakeLists.txt | 3 ++- indra/newview/viewer_manifest.py | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake index 286a8d8d1b..0d2c46bac0 100644 --- a/indra/cmake/LibVLCPlugin.cmake +++ b/indra/cmake/LibVLCPlugin.cmake @@ -6,11 +6,17 @@ if (USESYSTEMLIBS) set(LIBVLCPLUGIN OFF CACHE BOOL "LIBVLCPLUGIN support for the llplugin/llmedia test apps.") else (USESYSTEMLIBS) + use_prebuilt_binary(vlc-bin) set(LIBVLCPLUGIN ON CACHE BOOL "LIBVLCPLUGIN support for the llplugin/llmedia test apps.") + set(VLC_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/vlc) endif (USESYSTEMLIBS) if (WINDOWS) + set(VLC_PLUGIN_LIBRARIES + libvlc.lib + libvlccore.lib + ) elseif (DARWIN) elseif (LINUX) endif (WINDOWS) diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt index 1b6adaa290..535d29125b 100644 --- a/indra/media_plugins/libvlc/CMakeLists.txt +++ b/indra/media_plugins/libvlc/CMakeLists.txt @@ -24,6 +24,7 @@ include_directories( ${LLIMAGE_INCLUDE_DIRS} ${LLRENDER_INCLUDE_DIRS} ${LLWINDOW_INCLUDE_DIRS} + ${VLC_INCLUDE_DIR} ) include_directories(SYSTEM ${LLCOMMON_SYSTEM_INCLUDE_DIRS} @@ -53,7 +54,7 @@ target_link_libraries(media_plugin_libvlc ${LLPLUGIN_LIBRARIES} ${MEDIA_PLUGIN_BASE_LIBRARIES} ${LLCOMMON_LIBRARIES} - ${LIBVLC_PLUGIN_LIBRARIES} + ${VLC_PLUGIN_LIBRARIES} ${PLUGIN_API_WINDOWS_LIBRARIES} ) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 9302dd8e03..e7f517518b 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -547,6 +547,12 @@ class Windows_i686_Manifest(ViewerManifest): self.path("zh-TW.pak") self.end_prefix() + if self.prefix(src=os.path.join(os.pardir, 'packages', 'bin', 'release'), dst="llplugin"): + self.path("libvlc.dll") + self.path("libvlccore.dll") + self.path("plugins/") + self.end_prefix() + # pull in the crash logger and updater from other projects # tag:"crash-logger" here as a cue to the exporter self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], From e3afb1fdbadd3d6cdae7c261e7a975f3bf9faa89 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 16 May 2016 17:50:09 +0300 Subject: [PATCH 082/278] MAINT-5935 server timestamp --- indra/newview/llstartup.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 723b4992bb..a2c8e7772e 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3312,6 +3312,13 @@ bool process_login_success_response() { time_t now = time(NULL); gUTCOffset = (server_utc_time - now); + + // Print server timestamp + LLSD substitution; + substitution["datetime"] = (S32)server_utc_time; + std::string timeStr = "[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second, datetime, slt]"; + LLStringUtil::format(timeStr, substitution); + LL_INFOS("AppInit") << "Server SLT timestamp: " << timeStr << ". Server-viewer time offset before correction: " << gUTCOffset << "s" << LL_ENDL; } } From 50ab1e57ec21f2009013b3bc061047887cdd07d5 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Mon, 16 May 2016 10:58:39 -0700 Subject: [PATCH 083/278] Added support for some transport controls (pause/play/stop) and setting media volume level. --- .../libvlc/media_plugin_libvlc.cpp | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 920c32f1f7..92bfc15113 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -198,7 +198,7 @@ void MediaPluginLibVLC::playMedia() gVLCCallbackContext.mp = gLibVLCMediaPlayer; libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, unlock, display, &gVLCCallbackContext); - libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", mWidth, mHeight, mWidth * 4); + libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", mWidth, mHeight, mWidth * mDepth); libvlc_media_player_play(gLibVLCMediaPlayer); } @@ -338,6 +338,45 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string ) playMedia(); } } + else + if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + { + if (message_name == "stop") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_stop(gLibVLCMediaPlayer); + } + } + else if (message_name == "start") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_play(gLibVLCMediaPlayer); + } + } + else if (message_name == "pause") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_pause(gLibVLCMediaPlayer); + } + } + else if (message_name == "seek") + { + } + else if (message_name == "set_loop") + { + } + else if (message_name == "set_volume") + { + if (gLibVLCMediaPlayer) + { + F64 volume = message_in.getValueReal("volume"); + libvlc_audio_set_volume(gLibVLCMediaPlayer, (int)(volume * 100)); + } + } + } } } From 58e9a5919952cbd0a5b2112bf5c72db09c4750ec Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Mon, 16 May 2016 14:49:40 -0700 Subject: [PATCH 084/278] fix for maint-6413: add channel to summary.json --- indra/newview/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index bb745bcb43..5b39f622a6 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1310,9 +1310,10 @@ source_group("CMake Rules" FILES ViewerInstall.cmake) # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild # the summary.json file is created for the benefit of the TeamCity builds, where # it is used to provide descriptive information to the build results page +# channel added to summary.json for programmatic access to that by VMP SL-321 add_custom_target(generate_viewer_version ALL COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt - COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"}' > ${CMAKE_BINARY_DIR}/summary.json + COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel":"${VIEWER_CHANNEL}"}' > ${CMAKE_BINARY_DIR}/summary.json COMMENT Generating viewer_version.txt for manifest processing ) From 191c2aec49491c74a6ce9b23a813dc89d63f2c6a Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 18 May 2016 13:15:01 +0300 Subject: [PATCH 085/278] MAINT-6377 Nearby chat toasts cover the conversation floater. --- .../newview/llfloaterimnearbychathandler.cpp | 25 ++++++++++++++++--- indra/newview/llfloaterimsessiontab.cpp | 6 +++++ indra/newview/llfloaterimsessiontab.h | 2 ++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp index 1f85c5ac1b..9fd731ed56 100755 --- a/indra/newview/llfloaterimnearbychathandler.cpp +++ b/indra/newview/llfloaterimnearbychathandler.cpp @@ -601,12 +601,31 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg, toast_msg = chat_msg.mText; } + bool chat_overlaps = false; + if(nearby_chat->getChatHistory()) + { + LLRect chat_rect = nearby_chat->getChatHistory()->calcScreenRect(); + for (std::list::const_iterator child_iter = gFloaterView->getChildList()->begin(); + child_iter != gFloaterView->getChildList()->end(); ++child_iter) + { + LLView *view = *child_iter; + const LLRect& rect = view->getRect(); + if(view->isInVisibleChain() && (rect.overlaps(chat_rect))) + { + if(!nearby_chat->getChatHistory()->hasAncestor(view)) + { + chat_overlaps = true; + } + break; + } + } + } //Don't show nearby toast, if conversation is visible and selected if ((nearby_chat->hasFocus()) || (LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized()) || - ((im_box->getSelectedSession().isNull() && - ((LLFloater::isVisible(im_box) && !im_box->isMinimized() && im_box->isFrontmost()) - || (LLFloater::isVisible(nearby_chat) && !nearby_chat->isMinimized() && nearby_chat->isFrontmost()))))) + ((im_box->getSelectedSession().isNull() && !chat_overlaps && + ((LLFloater::isVisible(im_box) && !nearby_chat->isTornOff() && !im_box->isMinimized()) + || (LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized()))))) { if(nearby_chat->isMessagePaneExpanded()) { diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 357b635594..2cd94c592a 100755 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -1094,6 +1094,12 @@ void LLFloaterIMSessionTab::saveCollapsedState() gSavedPerAccountSettings.setBOOL("NearbyChatIsNotCollapsed", isMessagePaneExpanded()); } } + +LLView* LLFloaterIMSessionTab::getChatHistory() +{ + return mChatHistory; +} + BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask ) { BOOL handled = FALSE; diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h index e7b05a584b..1b4922fd73 100755 --- a/indra/newview/llfloaterimsessiontab.h +++ b/indra/newview/llfloaterimsessiontab.h @@ -103,6 +103,8 @@ public: void restoreFloater(); void saveCollapsedState(); + LLView* getChatHistory(); + protected: // callback for click on any items of the visual states menu From e795fee86448970881066af95de7eac8e4847d14 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 17 May 2016 17:05:59 +0300 Subject: [PATCH 086/278] MAINT-6409 texture_list xml file should be in cache. --- indra/newview/llviewertexturelist.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 5cfd04b4c1..766164ebf8 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -182,7 +182,7 @@ void LLViewerTextureList::doPreloadImages() static std::string get_texture_list_name() { - return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml"); + return gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "texture_list_" + gSavedSettings.getString("LoginLocation") + "." + gDirUtilp->getUserName() + ".xml"); } void LLViewerTextureList::doPrefetchImages() @@ -287,7 +287,7 @@ void LLViewerTextureList::shutdown() break; } - if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty()) + if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "").empty()) { std::string filename = get_texture_list_name(); llofstream file; From a382dcfb8dbc26fa7e73647bf996e9d166bfce6d Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 17 May 2016 10:52:59 -0700 Subject: [PATCH 087/278] maint-6413: use file write as printf inserts escape chars --- indra/newview/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 5b39f622a6..34e1565707 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1310,13 +1310,14 @@ source_group("CMake Rules" FILES ViewerInstall.cmake) # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild # the summary.json file is created for the benefit of the TeamCity builds, where # it is used to provide descriptive information to the build results page -# channel added to summary.json for programmatic access to that by VMP SL-321 add_custom_target(generate_viewer_version ALL COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt - COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel":"${VIEWER_CHANNEL}"}' > ${CMAKE_BINARY_DIR}/summary.json COMMENT Generating viewer_version.txt for manifest processing ) +#Channel added for VMP programmatic access. MAINT-6413/SL-321 +file(WRITE ${CMAKE_BINARY_DIR}/summary.json '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel","${VIEWER_CHANNEL}"}') + set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp PROPERTIES From e8773a72cb63f693b00100de4e02ab073f531b4f Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 17 May 2016 16:05:37 -0700 Subject: [PATCH 088/278] maint-6413: use configure_file instead of write(file ...) --- indra/newview/CMakeLists.txt | 20 +++++++++++--------- indra/newview/summary.json.in | 5 +++++ 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 indra/newview/summary.json.in diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 34e1565707..c49321e906 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1307,16 +1307,10 @@ set(viewer_HEADER_FILES source_group("CMake Rules" FILES ViewerInstall.cmake) -# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild -# the summary.json file is created for the benefit of the TeamCity builds, where -# it is used to provide descriptive information to the build results page -add_custom_target(generate_viewer_version ALL - COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt - COMMENT Generating viewer_version.txt for manifest processing - ) - #Channel added for VMP programmatic access. MAINT-6413/SL-321 -file(WRITE ${CMAKE_BINARY_DIR}/summary.json '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel","${VIEWER_CHANNEL}"}') +set(SUMMARY_VERSION "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") +set(SUMMARY_CHANNEL "${VIEWER_CHANNEL}") +configure_file(summary.json.in ${CMAKE_BINARY_DIR}/summary.json @ONLY) set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp @@ -1325,6 +1319,14 @@ set_source_files_properties( COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake ) +# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild +# the summary.json file is created for the benefit of the TeamCity builds, where +# it is used to provide descriptive information to the build results page +add_custom_target(generate_viewer_version ALL + COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt + COMMENT Generating viewer_version.txt for manifest processing + ) + if (DARWIN) LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp) LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm) diff --git a/indra/newview/summary.json.in b/indra/newview/summary.json.in new file mode 100644 index 0000000000..e33cc2b7e7 --- /dev/null +++ b/indra/newview/summary.json.in @@ -0,0 +1,5 @@ +{ +"Type":"viewer", +"Version":"@SUMMARY_VERSION@", +"Channel":"@SUMMARY_CHANNEL@" +} From 5bee6f1e5e5ec9d25283ecf1815b57e5921f2c47 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 18 May 2016 15:02:15 +0300 Subject: [PATCH 089/278] MAINT-6421 Inappropriate menu items are presented in gear menu when no outfit is selected in Visual Outfit Browser --- indra/newview/lloutfitgallery.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index a36728e6ac..e6c41b612f 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -735,11 +735,12 @@ LLOutfitGalleryGearMenu::LLOutfitGalleryGearMenu(LLOutfitListBase* olist) void LLOutfitGalleryGearMenu::onUpdateItemsVisibility() { if (!mMenu) return; + bool have_selection = getSelectedOutfitID().notNull(); mMenu->setItemVisible("expand", FALSE); mMenu->setItemVisible("collapse", FALSE); - mMenu->setItemVisible("upload_photo", TRUE); - mMenu->setItemVisible("select_photo", TRUE); - mMenu->setItemVisible("take_snapshot", TRUE); + mMenu->setItemVisible("upload_photo", have_selection); + mMenu->setItemVisible("select_photo", have_selection); + mMenu->setItemVisible("take_snapshot", have_selection); LLOutfitListGearMenuBase::onUpdateItemsVisibility(); } From d3de134da047460c68ffd7cc732e592049a1e83d Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 18 May 2016 17:17:32 +0300 Subject: [PATCH 090/278] MAINT-6409 invisiprims should be preloaded --- indra/llcommon/indra_constants.cpp | 4 ++++ indra/llcommon/indra_constants.h | 4 ++++ indra/newview/lldrawpoolterrain.cpp | 17 ++--------------- indra/newview/llviewertexturelist.cpp | 17 +++++++++++++++-- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/indra/llcommon/indra_constants.cpp b/indra/llcommon/indra_constants.cpp index f3989ee1d0..b45e3df1d8 100755 --- a/indra/llcommon/indra_constants.cpp +++ b/indra/llcommon/indra_constants.cpp @@ -60,6 +60,10 @@ const LLUUID IMG_SMOKE_POOF ("1e63e323-5fe0-452e-92f8-b98bd0f764e3"); // On d const LLUUID IMG_BIG_EXPLOSION_1 ("5e47a0dc-97bf-44e0-8b40-de06718cee9d"); // On dataserver const LLUUID IMG_BIG_EXPLOSION_2 ("9c8eca51-53d5-42a7-bb58-cef070395db8"); // On dataserver +const LLUUID IMG_ALPHA_GRAD ("e97cf410-8e61-7005-ec06-629eba4cd1fb"); // VIEWER +const LLUUID IMG_ALPHA_GRAD_2D ("38b86f85-2575-52a9-a531-23108d8da837"); // VIEWER +const LLUUID IMG_TRANSPARENT ("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"); // VIEWER + const LLUUID IMG_BLOOM1 ("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef"); // VIEWER const LLUUID TERRAIN_DIRT_DETAIL ("0bc58228-74a0-7e83-89bc-5c23464bcec5"); // VIEWER const LLUUID TERRAIN_GRASS_DETAIL ("63338ede-0037-c4fd-855b-015d77112fc8"); // VIEWER diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index 02f063f5e8..fda84aa5a8 100755 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -197,6 +197,10 @@ LL_COMMON_API extern const LLUUID IMG_SMOKE_POOF; LL_COMMON_API extern const LLUUID IMG_BIG_EXPLOSION_1; LL_COMMON_API extern const LLUUID IMG_BIG_EXPLOSION_2; +LL_COMMON_API extern const LLUUID IMG_ALPHA_GRAD; +LL_COMMON_API extern const LLUUID IMG_ALPHA_GRAD_2D; +LL_COMMON_API extern const LLUUID IMG_TRANSPARENT; + LL_COMMON_API extern const LLUUID IMG_BLOOM1; LL_COMMON_API extern const LLUUID TERRAIN_DIRT_DETAIL; LL_COMMON_API extern const LLUUID TERRAIN_GRASS_DETAIL; diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 33675bd261..b716a76543 100755 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -62,28 +62,15 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : LLFacePool(POOL_TERRAIN), mTexturep(texturep) { - U32 format = GL_ALPHA8; - U32 int_format = GL_ALPHA; - // Hack! sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); - mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", - FTT_LOCAL_FILE, - TRUE, LLGLTexture::BOOST_UI, - LLViewerTexture::FETCHED_TEXTURE, - format, int_format, - LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); + mAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD); //gGL.getTexUnit(0)->bind(mAlphaRampImagep.get()); mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); - m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", - FTT_LOCAL_FILE, - TRUE, LLGLTexture::BOOST_UI, - LLViewerTexture::FETCHED_TEXTURE, - format, int_format, - LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); + m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD_2D); //gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get()); m2DAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 766164ebf8..5150fc9ade 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -171,13 +171,26 @@ void LLViewerTextureList::doPreloadImages() mImagePreloads.insert(image); } image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, - 0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903")); + 0, 0, IMG_TRANSPARENT); if (image) { image->setAddressMode(LLTexUnit::TAM_WRAP); mImagePreloads.insert(image); } - + image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, + GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD); + if (image) + { + image->setAddressMode(LLTexUnit::TAM_CLAMP); + mImagePreloads.insert(image); + } + image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, + GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD_2D); + if (image) + { + image->setAddressMode(LLTexUnit::TAM_CLAMP); + mImagePreloads.insert(image); + } } static std::string get_texture_list_name() From 213bcf6bb30f9e2d4eb8bb6cbd200c94bae29b6f Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Thu, 19 May 2016 11:47:23 -0700 Subject: [PATCH 091/278] MAIN-6403: If a version mismatch occurs when requesting the COF, request a new appearance update from the simhost to update the viewer COF version. --- indra/newview/llappearancemgr.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index cc676550ab..6c510f13c8 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -60,6 +60,8 @@ #include "llcoros.h" #include "lleventcoro.h" +#include "llavatarpropertiesprocessor.h" + #if LL_MSVC // disable boost::lexical_cast warning #pragma warning (disable:4702) @@ -68,7 +70,7 @@ namespace { const S32 BAKE_RETRY_MAX_COUNT = 5; - const F32 BAKE_RETRY_TIMEOUT = 2.0F; + const F32 BAKE_RETRY_TIMEOUT = 4.0F; } // *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model. @@ -3493,10 +3495,15 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro() // on multiple machines. if (result.has("expected")) { - S32 expectedCofVersion = result["expected"].asInteger(); LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL; + // Force an update texture request for ourself. The message will return + // through the UDP and be handled in LLVOAvatar::processAvatarAppearance + // this should ensure that we receive a new canonical COF from the sim + // host. Hopefully it will return before the timeout. + LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(gAgent.getID()); + bRetry = true; // Wait for a 1/2 second before trying again. Just to keep from asking too quickly. if (++retryCount > BAKE_RETRY_MAX_COUNT) From 602c9bc04ab5c611bcac51c0c33d5ad34d06a16f Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 20 May 2016 02:12:26 +0300 Subject: [PATCH 092/278] MAINT-6317 Restored the fix after a conflict resolution --- indra/newview/llviewertexturelist.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 93650ddb1a..d7080051da 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -191,6 +191,13 @@ void LLViewerTextureList::doPreloadImages() image->setAddressMode(LLTexUnit::TAM_CLAMP); mImagePreloads.insert(image); } + + LLPointer img_blak_square_tex(new LLImageRaw(2, 2, 3)); + memset(img_blak_square_tex->getData(), 0, img_blak_square_tex->getDataSize()); + LLPointer img_blak_square(new LLViewerFetchedTexture(img_blak_square_tex, FTT_DEFAULT, FALSE)); + gBlackSquareID = img_blak_square->getID(); + img_blak_square->setUnremovable(TRUE); + addImage(img_blak_square, TEX_LIST_STANDARD); } static std::string get_texture_list_name() From 61a5c943ba33494e3d2ee60296e56932c7aa362a Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 22 May 2016 20:32:27 +0200 Subject: [PATCH 093/278] MAINT-6432 Fix defaults for RenderAvatarMaxComplexity The 'all' section must be set to the value for high end machines as the minimum of high-end and recommended setting will be applied --- doc/contributions.txt | 1 + indra/newview/featuretable.txt | 2 +- indra/newview/featuretable_linux.txt | 2 +- indra/newview/featuretable_mac.txt | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 9b31e5032a..8fe04e2ff2 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -190,6 +190,7 @@ Ansariel Hiller STORM-2094 MAINT-5756 MAINT-4677 + MAINT-6432 Aralara Rajal Arare Chantilly CHUIBUG-191 diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index be8ea2bab9..e99b94f150 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -32,7 +32,7 @@ RenderAvatarCloth 1 1 RenderAvatarLODFactor 1 1.0 RenderAvatarPhysicsLODFactor 1 1.0 RenderAvatarMaxNonImpostors 1 16 -RenderAvatarMaxComplexity 1 80000 +RenderAvatarMaxComplexity 1 350000 RenderAvatarVP 1 1 RenderAutoMuteSurfaceAreaLimit 1 1000.0 RenderCubeMap 1 1 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index ca6c00951d..801a622e93 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -32,7 +32,7 @@ RenderAvatarCloth 1 1 RenderAvatarLODFactor 1 1.0 RenderAvatarPhysicsLODFactor 1 1.0 RenderAvatarMaxNonImpostors 1 16 -RenderAvatarMaxComplexity 1 80000 +RenderAvatarMaxComplexity 1 350000 RenderAvatarVP 1 1 RenderAutoMuteSurfaceAreaLimit 1 1000.0 RenderCubeMap 1 1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index ea69b088f9..1f891ee4d7 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -32,7 +32,7 @@ RenderAvatarCloth 1 1 RenderAvatarLODFactor 1 1.0 RenderAvatarPhysicsLODFactor 1 1.0 RenderAvatarMaxNonImpostors 1 16 -RenderAvatarMaxComplexity 1 80000 +RenderAvatarMaxComplexity 1 350000 RenderAvatarVP 1 1 RenderAutoMuteSurfaceAreaLimit 1 1000.0 RenderCubeMap 1 1 From 8edfdc617df6e282570521a9076d077699e632e5 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Mon, 23 May 2016 02:23:03 +0300 Subject: [PATCH 094/278] MAINT-6424 Disable the delete button for empty graphics presets list Fixed related notifications after improper merge as well --- indra/newview/llfloaterdeleteprefpreset.cpp | 2 ++ indra/newview/skins/default/xui/en/notifications.xml | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index 7dedbbf984..c0888db3bc 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -53,6 +53,8 @@ BOOL LLFloaterDeletePrefPreset::postBuild() getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this)); LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this)); + onPresetsListChange(); // ensure that delete button is disabled when the list is empty + return TRUE; } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7eaeb6bd07..dfde38bc5f 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8314,8 +8314,18 @@ Appearance has been saved to XML to [PATH] Failed to save appearance to XML. + + + +Error saving preset [NAME]. + + + Error deleting preset [NAME]. From addbfaf1c774011f3e55a1106f0b83153b7b8568 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 23 May 2016 17:07:48 +0300 Subject: [PATCH 095/278] MAINT-6431 Trash button is not functional in in Visual Outfit Browser --- indra/newview/llpaneloutfitsinventory.cpp | 7 +++++++ indra/newview/llpaneloutfitsinventory.h | 1 + 2 files changed, 8 insertions(+) diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index eb88abb2bf..c0c1adddf3 100755 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -236,6 +236,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands = getChild("bottom_panel"); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); mMyOutfitsPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); + mOutfitGalleryPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onGalleryTrashButtonClick, this)); } void LLPanelOutfitsInventory::updateListCommands() @@ -247,6 +248,7 @@ void LLPanelOutfitsInventory::updateListCommands() LLButton* wear_btn = mListCommands->getChild("wear_btn"); mMyOutfitsPanel->childSetEnabled("trash_btn", trash_enabled); + mOutfitGalleryPanel->childSetEnabled("trash_btn", trash_enabled); wear_btn->setEnabled(wear_enabled); wear_btn->setVisible(wear_visible); mSaveComboBtn->setMenuItemEnabled("save_outfit", make_outfit_enabled); @@ -258,6 +260,11 @@ void LLPanelOutfitsInventory::onTrashButtonClick() mMyOutfitsPanel->removeSelected(); } +void LLPanelOutfitsInventory::onGalleryTrashButtonClick() +{ + mOutfitGalleryPanel->removeSelected(); +} + bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) { return mActivePanel && mActivePanel->isActionEnabled(userdata); diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 8c873df038..efb9524a21 100755 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -91,6 +91,7 @@ protected: void onWearButtonClick(); void showGearMenu(); void onTrashButtonClick(); + void onGalleryTrashButtonClick(); bool isActionEnabled(const LLSD& userdata); void setWearablesLoading(bool val); void onWearablesLoaded(); From 8c458778717666c7be7c6e0f0b19f28deb54b50f Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Mon, 23 May 2016 12:05:53 -0700 Subject: [PATCH 096/278] backout 354345 --- indra/newview/CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c49321e906..334a21a12e 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1307,10 +1307,9 @@ set(viewer_HEADER_FILES source_group("CMake Rules" FILES ViewerInstall.cmake) -#Channel added for VMP programmatic access. MAINT-6413/SL-321 -set(SUMMARY_VERSION "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") -set(SUMMARY_CHANNEL "${VIEWER_CHANNEL}") -configure_file(summary.json.in ${CMAKE_BINARY_DIR}/summary.json @ONLY) +# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild +# the summary.json file is created for the benefit of the TeamCity builds, where +# it is used to provide descriptive information to the build results page set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp From 9c28c06f1da98ba42d4d5546a2b2cdb7b042c13e Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Mon, 23 May 2016 12:08:59 -0700 Subject: [PATCH 097/278] backout 354346 / e63c00cf654a and 354347 / e4bfe3ee05a6 --- indra/newview/CMakeLists.txt | 13 +++++-------- indra/newview/summary.json.in | 5 ----- 2 files changed, 5 insertions(+), 13 deletions(-) delete mode 100644 indra/newview/summary.json.in diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 334a21a12e..4412b06d38 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1310,6 +1310,11 @@ source_group("CMake Rules" FILES ViewerInstall.cmake) # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild # the summary.json file is created for the benefit of the TeamCity builds, where # it is used to provide descriptive information to the build results page +add_custom_target(generate_viewer_version ALL + COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt + COMMENT Generating viewer_version.txt for manifest processing + ) + set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp @@ -1318,14 +1323,6 @@ set_source_files_properties( COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake ) -# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild -# the summary.json file is created for the benefit of the TeamCity builds, where -# it is used to provide descriptive information to the build results page -add_custom_target(generate_viewer_version ALL - COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt - COMMENT Generating viewer_version.txt for manifest processing - ) - if (DARWIN) LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp) LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm) diff --git a/indra/newview/summary.json.in b/indra/newview/summary.json.in deleted file mode 100644 index e33cc2b7e7..0000000000 --- a/indra/newview/summary.json.in +++ /dev/null @@ -1,5 +0,0 @@ -{ -"Type":"viewer", -"Version":"@SUMMARY_VERSION@", -"Channel":"@SUMMARY_CHANNEL@" -} From 999a949b52b50d5330c717fde19af3931e256f11 Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Mon, 23 May 2016 13:49:26 -0700 Subject: [PATCH 098/278] debug version args --- indra/newview/CMakeLists.txt | 9 +-------- indra/newview/viewer_manifest.py | 3 +++ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 4412b06d38..6734f62137 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1307,14 +1307,7 @@ set(viewer_HEADER_FILES source_group("CMake Rules" FILES ViewerInstall.cmake) -# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild -# the summary.json file is created for the benefit of the TeamCity builds, where -# it is used to provide descriptive information to the build results page -add_custom_target(generate_viewer_version ALL - COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt - COMMENT Generating viewer_version.txt for manifest processing - ) - +#summary.json creation moved to viewer_manifest.py MAINT-6413 set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 1c77cf805e..6365de0024 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -122,6 +122,9 @@ class ViewerManifest(LLManifest): settings_install['CmdLineGridChoice']['Value'] = self.grid() print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid() + #COYOT: channel: self.channel_with_pkg_suffix() + print "COYOT: version %s" % '.'.join(self.args['version']) + # put_in_file(src=) need not be an actual pathname; it # only needs to be non-empty self.put_in_file(llsd.format_pretty_xml(settings_install), From c7413e51b6286a003d6629108d2757b5ff973c2b Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Mon, 23 May 2016 14:40:43 -0700 Subject: [PATCH 099/278] MAINT-6403: in the case of a version mismatch between the viewer's local accounting and the AIS reported. Override with the AIS version. simplify the appearance update code to account for new versioning. Fix spelling of descendant --- indra/newview/llaisapi.cpp | 18 ++++++--- indra/newview/llappearancemgr.h | 2 + indra/newview/llavatarrendernotifier.cpp | 7 ++-- indra/newview/llvoavatar.cpp | 47 ++++++++++++++++++++---- 4 files changed, 58 insertions(+), 16 deletions(-) diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 3e3d5c7456..98a2bb436c 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -838,11 +838,11 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories) void AISUpdate::doUpdate() { - // Do version/descendent accounting. + // Do version/descendant accounting. for (std::map::const_iterator catit = mCatDescendentDeltas.begin(); catit != mCatDescendentDeltas.end(); ++catit) { - LL_DEBUGS("Inventory") << "descendent accounting for " << catit->first << LL_ENDL; + LL_DEBUGS("Inventory") << "descendant accounting for " << catit->first << LL_ENDL; const LLUUID cat_id(catit->first); // Don't account for update if we just created this category. @@ -859,13 +859,13 @@ void AISUpdate::doUpdate() continue; } - // If we have a known descendent count, set that now. + // If we have a known descendant count, set that now. LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); if (cat) { S32 descendent_delta = catit->second; S32 old_count = cat->getDescendentCount(); - LL_DEBUGS("Inventory") << "Updating descendent count for " + LL_DEBUGS("Inventory") << "Updating descendant count for " << cat->getName() << " " << cat_id << " with delta " << descendent_delta << " from " << old_count << " to " << (old_count+descendent_delta) << LL_ENDL; @@ -896,7 +896,7 @@ void AISUpdate::doUpdate() LLUUID category_id(update_it->first); LLPointer new_category = update_it->second; // Since this is a copy of the category *before* the accounting update, above, - // we need to transfer back the updated version/descendent count. + // we need to transfer back the updated version/descendant count. LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID()); if (!curr_cat) { @@ -961,7 +961,13 @@ void AISUpdate::doUpdate() { LL_WARNS() << "Possible version mismatch for category " << cat->getName() << ", viewer version " << cat->getVersion() - << " server version " << version << LL_ENDL; + << " AIS version " << version << " !!!Adjusting local version!!!" << LL_ENDL; + + // the AIS version should be considered the true version. Adjust + // our local category model to reflect this version number. Otherwise + // it becomes possible to get stuck with the viewer being out of + // sync with the inventory system. + cat->setVersion(version); } } diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index bf181cb4ad..f401df0949 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -36,6 +36,8 @@ #include "llviewerinventory.h" #include "llcorehttputil.h" +#define APPEARANCEBAKE_AS_IN_AIS_QUEUE 1 + class LLWearableHoldingPattern; class LLInventoryCallback; class LLOutfitUnLockTimer; diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index a13e142e16..e2ffdec874 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -63,7 +63,7 @@ mLatestAgentComplexity(0), mLatestOverLimitPct(0.0f), mShowOverLimitAgents(false), mNotifyOutfitLoading(false), -mLastCofVersion(-1), +mLastCofVersion(LLViewerInventoryCategory::VERSION_UNKNOWN), mLastOutfitRezStatus(-1), mLastSkeletonSerialNum(-1) { @@ -207,8 +207,9 @@ void LLAvatarRenderNotifier::updateNotificationState() mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum; } else if (mLastCofVersion >= 0 - && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion - || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum)) +// && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion // RIDER: Check this! + && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion() + || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum)) { // version mismatch in comparison to previous outfit - outfit changed mNotifyOutfitLoading = true; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b9dd43f061..2a91d47868 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7313,7 +7313,6 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32 //----------------------------------------------------------------------------- void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) { - static S32 largestSelfCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN); LL_DEBUGS("Avatar") << "starts" << LL_ENDL; bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"); @@ -7348,6 +7347,36 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) return; } + S32 thisAppearanceVersion(contents.mCOFVersion); + if (isSelf()) + { // In the past this was considered to be the canonical COF version, + // that is no longer the case. The canonical version is maintained + // by the AIS code and should match the COF version there. Even so, + // we must prevent rolling this one backwards backwards or processing + // stale versions. + + S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion()); + + LL_INFOS("Avatar") << "handling self appearance message #" << thisAppearanceVersion << + " (highest seen #" << mLastUpdateReceivedCOFVersion << + ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL; + + if (mLastUpdateReceivedCOFVersion >= thisAppearanceVersion) + { + LL_WARNS("Avatar") << "Stale appearance received #" << thisAppearanceVersion << + " attempt to roll back from #" << mLastUpdateReceivedCOFVersion << + "... dropping." << LL_ENDL; + return; + } + if (isEditingAppearance()) + { + LL_DEBUGS("Avatar") << "Editing appearance. Dropping appearance update." << LL_ENDL; + return; + } + + } + +#if 0 S32 this_update_cof_version = contents.mCOFVersion; S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; @@ -7385,6 +7414,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL; return; } +#endif // SUNSHINE CLEANUP - is this case OK now? S32 num_params = contents.mParamWeights.size(); @@ -7399,13 +7429,16 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } // No backsies zone - if we get here, the message should be valid and usable, will be processed. - LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL; + LL_INFOS("Avatar") << "Processing appearance message version " << thisAppearanceVersion << LL_ENDL; - // Note: - // RequestAgentUpdateAppearanceResponder::onRequestRequested() - // assumes that cof version is only updated with server-bake - // appearance messages. - mLastUpdateReceivedCOFVersion = this_update_cof_version; + if (isSelf()) + { + // Note: + // RequestAgentUpdateAppearanceResponder::onRequestRequested() + // assumes that cof version is only updated with server-bake + // appearance messages. + mLastUpdateReceivedCOFVersion = thisAppearanceVersion; + } if (applyParsedTEMessage(contents.mTEContents) > 0 && isChanged(TEXTURE)) { From ce760e80c492d1c3e13306a1d06aa734b4d829a9 Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 24 May 2016 11:43:57 -0700 Subject: [PATCH 100/278] MAINT-6413: write summary.json from viewer_manifest.py, remove facility from cmake --- indra/newview/CMakeLists.txt | 5 +++++ indra/newview/viewer_manifest.py | 15 ++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 6734f62137..64b7ff34f6 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1308,6 +1308,11 @@ set(viewer_HEADER_FILES source_group("CMake Rules" FILES ViewerInstall.cmake) #summary.json creation moved to viewer_manifest.py MAINT-6413 +# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild +add_custom_target(generate_viewer_version ALL + COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt + COMMENT Generating viewer_version.txt for manifest processing + ) set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 6365de0024..f3d89bb866 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -30,6 +30,7 @@ import sys import os.path import shutil import errno +import json import re import tarfile import time @@ -122,9 +123,6 @@ class ViewerManifest(LLManifest): settings_install['CmdLineGridChoice']['Value'] = self.grid() print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid() - #COYOT: channel: self.channel_with_pkg_suffix() - print "COYOT: version %s" % '.'.join(self.args['version']) - # put_in_file(src=) need not be an actual pathname; it # only needs to be non-empty self.put_in_file(llsd.format_pretty_xml(settings_install), @@ -184,9 +182,16 @@ class ViewerManifest(LLManifest): self.path("*.tga") self.end_prefix("local_assets") - # Files in the newview/ directory + # File in the newview/ directory self.path("gpu_table.txt") - # The summary.json file gets left in the build directory by newview/CMakeLists.txt. + + #summary.json. Standard with exception handling is fine. If we can't open a new file for writing, we have worse problems + summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()} + with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle: + json.dump(summary_dict,summary_handle) + + #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the + #return code for free. if not self.path2basename(os.pardir, "summary.json"): print "No summary.json file" From 6f4d9a232175202f79ecd1c1a2df30805de4e2d8 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 25 May 2016 03:29:53 +0300 Subject: [PATCH 101/278] MAINT-6424 Reverted disabling of the "Delete preset" button --- indra/newview/llfloaterdeleteprefpreset.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index c0888db3bc..7dedbbf984 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -53,8 +53,6 @@ BOOL LLFloaterDeletePrefPreset::postBuild() getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this)); LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this)); - onPresetsListChange(); // ensure that delete button is disabled when the list is empty - return TRUE; } From 110c0658b7272a09f09fa3d8b024062bf2cc4dce Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 25 May 2016 03:47:23 +0300 Subject: [PATCH 102/278] MAINT-6413 Buildfix --- indra/newview/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e80b428f80..dce0ea73cd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1319,7 +1319,6 @@ source_group("CMake Rules" FILES ViewerInstall.cmake) # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt" "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n") - "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n") set_source_files_properties( llversioninfo.cpp tests/llversioninfo_test.cpp From fb598cd380b38714abed554b8feacabfc55b2aaa Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 25 May 2016 12:39:27 +0300 Subject: [PATCH 103/278] MAINT-2583 Minimized floaters cannot brought back to foreground anymore --- indra/llui/llfloater.cpp | 14 ++++++++++---- indra/llui/llfloater.h | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 8a2e6a0bc0..5ea9f5b6cc 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1575,6 +1575,7 @@ BOOL LLFloater::handleMouseDown(S32 x, S32 y, MASK mask) if(offerClickToButton(x, y, mask, BUTTON_TEAR_OFF)) return TRUE; if(offerClickToButton(x, y, mask, BUTTON_DOCK)) return TRUE; + setFrontmost(TRUE, FALSE); // Otherwise pass to drag handle for movement return mDragHandle->handleMouseDown(x, y, mask); } @@ -1649,7 +1650,7 @@ void LLFloater::setVisibleAndFrontmost(BOOL take_focus,const LLSD& key) } } -void LLFloater::setFrontmost(BOOL take_focus) +void LLFloater::setFrontmost(BOOL take_focus, BOOL restore) { LLMultiFloater* hostp = getHost(); if (hostp) @@ -1665,7 +1666,7 @@ void LLFloater::setFrontmost(BOOL take_focus) LLFloaterView * parent = dynamic_cast( getParent() ); if (parent) { - parent->bringToFront(this, take_focus); + parent->bringToFront(this, take_focus, restore); } // Make sure to set the appropriate transparency type (STORM-732). @@ -2394,7 +2395,7 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF } -void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus) +void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus, BOOL restore) { if (!child) return; @@ -2478,7 +2479,12 @@ void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus) { sendChildToFront(child); } - child->setMinimized(FALSE); + + if(restore) + { + child->setMinimized(FALSE); + } + if (give_focus && !gFocusMgr.childHasKeyboardFocus(child)) { child->setFocus(TRUE); diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index ef7c6180d2..165f67499b 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -310,7 +310,7 @@ public: /*virtual*/ void setVisible(BOOL visible); // do not override /*virtual*/ void onVisibilityChange ( BOOL new_visibility ); // do not override - void setFrontmost(BOOL take_focus = TRUE); + void setFrontmost(BOOL take_focus = TRUE, BOOL restore = TRUE); virtual void setVisibleAndFrontmost(BOOL take_focus=TRUE, const LLSD& key = LLSD()); // Defaults to false. @@ -547,7 +547,7 @@ public: void setCycleMode(BOOL mode) { mFocusCycleMode = mode; } BOOL getCycleMode() const { return mFocusCycleMode; } - void bringToFront( LLFloater* child, BOOL give_focus = TRUE ); + void bringToFront( LLFloater* child, BOOL give_focus = TRUE, BOOL restore = TRUE ); void highlightFocusedFloater(); void unhighlightFocusedFloater(); void focusFrontFloater(); From 67f8d57927f845cfb35783a1678c0e3d2ad51b61 Mon Sep 17 00:00:00 2001 From: ruslantproductengine Date: Tue, 24 May 2016 15:17:41 +0300 Subject: [PATCH 104/278] MAINT-6216 avatars are sometimes invisible BUG-10330 Sitting avatars are sometimes invisible --- indra/newview/llvoavatar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 672d153e51..cdc7e20c2c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -8145,6 +8145,7 @@ U32 LLVOAvatar::getPartitionType() const //static void LLVOAvatar::updateImpostors() { + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; LLCharacter::sAllowInstancesChange = FALSE; for (std::vector::iterator iter = LLCharacter::sInstances.begin(); From 26b1c020c8a8d240144dadae1285c14213cb1232 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Tue, 24 May 2016 13:03:36 -0700 Subject: [PATCH 105/278] MAINT-6403: Updated a couple comments and dropped a couple warning levels back down to DEBUG. --- indra/newview/llaisapi.cpp | 5 ++- indra/newview/llappearancemgr.cpp | 17 +------- indra/newview/llappearancemgr.h | 6 --- indra/newview/llavatarrendernotifier.cpp | 1 - indra/newview/llvoavatar.cpp | 51 +++--------------------- 5 files changed, 11 insertions(+), 69 deletions(-) diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 98a2bb436c..648212177b 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -966,7 +966,10 @@ void AISUpdate::doUpdate() // the AIS version should be considered the true version. Adjust // our local category model to reflect this version number. Otherwise // it becomes possible to get stuck with the viewer being out of - // sync with the inventory system. + // sync with the inventory system. Under normal circumstances + // inventory COF is maintained on the viewer through calls to + // LLInventoryModel::accountForUpdate when a changing operation + // is performed. This occasionally gets out of sync however. cat->setVersion(version); } } diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 6c510f13c8..a1d9786321 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -70,7 +70,7 @@ namespace { const S32 BAKE_RETRY_MAX_COUNT = 5; - const F32 BAKE_RETRY_TIMEOUT = 4.0F; + const F32 BAKE_RETRY_TIMEOUT = 2.0F; } // *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model. @@ -3361,15 +3361,9 @@ void LLAppearanceMgr::requestServerAppearanceUpdate() { if (!mOutstandingAppearanceBakeRequest) { -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE mRerequestAppearanceBake = false; LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1); LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc); -#else - LLCoros::instance().launch("serverAppearanceUpdateCoro", - boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this)); - -#endif } else { @@ -3377,17 +3371,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate() } } -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter) -#else -void LLAppearanceMgr::serverAppearanceUpdateCoro() -#endif { -#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE - LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter( - new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID)); -#endif - mRerequestAppearanceBake = false; if (!gAgent.getRegion()) { diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index f401df0949..7069da7352 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -36,8 +36,6 @@ #include "llviewerinventory.h" #include "llcorehttputil.h" -#define APPEARANCEBAKE_AS_IN_AIS_QUEUE 1 - class LLWearableHoldingPattern; class LLInventoryCallback; class LLOutfitUnLockTimer; @@ -230,11 +228,7 @@ public: private: -#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter); -#else - void serverAppearanceUpdateCoro(); -#endif static void debugAppearanceUpdateCOF(const LLSD& content); diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index e2ffdec874..24934fdb73 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -207,7 +207,6 @@ void LLAvatarRenderNotifier::updateNotificationState() mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum; } else if (mLastCofVersion >= 0 -// && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion // RIDER: Check this! && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion() || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum)) { diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 2a91d47868..672d153e51 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7357,7 +7357,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion()); - LL_INFOS("Avatar") << "handling self appearance message #" << thisAppearanceVersion << + LL_DEBUGS("Avatar") << "handling self appearance message #" << thisAppearanceVersion << " (highest seen #" << mLastUpdateReceivedCOFVersion << ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL; @@ -7376,46 +7376,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } -#if 0 - S32 this_update_cof_version = contents.mCOFVersion; - S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion; - - if( isSelf() ) - { - LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version - << " last_update_request_cof_version " << last_update_request_cof_version - << " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL; - - if (largestSelfCOFSeen > this_update_cof_version) - { - LL_WARNS("Avatar") << "Already processed appearance for COF version " << - largestSelfCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL; - return; - } - largestSelfCOFSeen = this_update_cof_version; - - } - else - { - LL_DEBUGS("Avatar") << "appearance message received" << LL_ENDL; - } - - // Check for stale update. - if (isSelf() - && (this_update_cof_version < last_update_request_cof_version)) - { - LL_WARNS() << "Stale appearance update, wanted version " << last_update_request_cof_version - << ", got " << this_update_cof_version << LL_ENDL; - return; - } - - if (isSelf() && isEditingAppearance()) - { - LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL; - return; - } -#endif - // SUNSHINE CLEANUP - is this case OK now? S32 num_params = contents.mParamWeights.size(); if (num_params <= 1) @@ -7434,9 +7394,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) if (isSelf()) { // Note: - // RequestAgentUpdateAppearanceResponder::onRequestRequested() - // assumes that cof version is only updated with server-bake - // appearance messages. + // locally the COF is maintained via LLInventoryModel::accountForUpdate + // which is called from various places. This should match the simhost's + // idea of what the COF version is. AIS however maintains its own version + // of the COF that should be considered canonical. mLastUpdateReceivedCOFVersion = thisAppearanceVersion; } @@ -7561,7 +7522,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) // Got an update for some other avatar // Ignore updates for self, because we have a more authoritative value in the preferences. setHoverOffset(contents.mHoverOffset); - LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL; + LL_DEBUGS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL; } if (!contents.mHoverOffsetWasSet && !isSelf()) From 5b49f5c56e0178d1f2f655ee678a9bea58edd5d5 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 25 May 2016 18:52:57 +0300 Subject: [PATCH 106/278] MAINT-6440 FIXED Inappropriate outfit is worn after clicking Wear button in Visual Outfit Browser --- indra/newview/lloutfitgallery.cpp | 5 +++ indra/newview/lloutfitgallery.h | 2 + indra/newview/llpaneloutfitsinventory.cpp | 50 +++++++++++++++++------ indra/newview/llpaneloutfitsinventory.h | 3 +- 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index e6c41b612f..f29fc53dea 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -508,6 +508,11 @@ void LLOutfitGallery::onChangeOutfitSelection(LLWearableItemsList* list, const L } } +void LLOutfitGallery::wearSelectedOutfit() +{ + LLAppearanceMgr::instance().replaceCurrentOutfit(getSelectedOutfitUUID()); +} + bool LLOutfitGallery::hasItemSelected() { return false; diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index b8c7d66406..a22e86df83 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -89,6 +89,8 @@ public: void onSelectPhoto(LLUUID selected_outfit_id); void onTakeSnapshot(LLUUID selected_outfit_id); + void wearSelectedOutfit(); + /*virtual*/ void setFilterSubString(const std::string& string); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index c0c1adddf3..3f700496a9 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -167,14 +167,22 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string) void LLPanelOutfitsInventory::onWearButtonClick() { - if (mMyOutfitsPanel->hasItemSelected()) + if(isOutfitsListPanelActive()) { - mMyOutfitsPanel->wearSelectedItems(); + if (mMyOutfitsPanel->hasItemSelected()) + { + mMyOutfitsPanel->wearSelectedItems(); + } + else + { + mMyOutfitsPanel->performAction("replaceoutfit"); + } } - else + else if(isOutfitsGalleryPanelActive()) { - mMyOutfitsPanel->performAction("replaceoutfit"); + mOutfitGalleryPanel->wearSelectedOutfit(); } + } bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response) @@ -236,7 +244,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands = getChild("bottom_panel"); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); mMyOutfitsPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); - mOutfitGalleryPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onGalleryTrashButtonClick, this)); + mOutfitGalleryPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); } void LLPanelOutfitsInventory::updateListCommands() @@ -252,17 +260,19 @@ void LLPanelOutfitsInventory::updateListCommands() wear_btn->setEnabled(wear_enabled); wear_btn->setVisible(wear_visible); mSaveComboBtn->setMenuItemEnabled("save_outfit", make_outfit_enabled); - wear_btn->setToolTip(getString(mMyOutfitsPanel->hasItemSelected() ? "wear_items_tooltip" : "wear_outfit_tooltip")); + wear_btn->setToolTip(getString((!isOutfitsGalleryPanelActive() && mMyOutfitsPanel->hasItemSelected()) ? "wear_items_tooltip" : "wear_outfit_tooltip")); } void LLPanelOutfitsInventory::onTrashButtonClick() { - mMyOutfitsPanel->removeSelected(); -} - -void LLPanelOutfitsInventory::onGalleryTrashButtonClick() -{ - mOutfitGalleryPanel->removeSelected(); + if(isOutfitsListPanelActive()) + { + mMyOutfitsPanel->removeSelected(); + } + else if(isOutfitsGalleryPanelActive()) + { + mOutfitGalleryPanel->removeSelected(); + } } bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) @@ -309,6 +319,22 @@ bool LLPanelOutfitsInventory::isCOFPanelActive() const return mActivePanel->getName() == COF_TAB_NAME; } +bool LLPanelOutfitsInventory::isOutfitsListPanelActive() const +{ + if (!mActivePanel) return false; + + return mActivePanel->getName() == OUTFITS_TAB_NAME; +} + +bool LLPanelOutfitsInventory::isOutfitsGalleryPanelActive() const +{ + if (!mActivePanel) return false; + + return mActivePanel->getName() == OUTFIT_GALLERY_TAB_NAME; +} + + + void LLPanelOutfitsInventory::setWearablesLoading(bool val) { updateVerbs(); diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index efb9524a21..6a0ea04fa6 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -73,6 +73,8 @@ protected: void initTabPanels(); void onTabChange(); bool isCOFPanelActive() const; + bool isOutfitsListPanelActive() const; + bool isOutfitsGalleryPanelActive() const; private: LLPanelAppearanceTab* mActivePanel; @@ -91,7 +93,6 @@ protected: void onWearButtonClick(); void showGearMenu(); void onTrashButtonClick(); - void onGalleryTrashButtonClick(); bool isActionEnabled(const LLSD& userdata); void setWearablesLoading(bool val); void onWearablesLoaded(); From 70a38880faca24a9ed0a67606ef6bfd278ccd624 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Thu, 26 May 2016 12:50:54 -0700 Subject: [PATCH 107/278] Put back QuickTime plugin code for OS X only (untested - moving code to OS X dev) --- indra/cmake/CMakeLists.txt | 1 + indra/cmake/QuickTimePlugin.cmake | 48 +++++++++++++++++++ indra/media_plugins/CMakeLists.txt | 6 ++- indra/newview/llappviewer.cpp | 17 ++++--- .../skins/default/xui/en/mime_types_mac.xml | 32 ++++++------- 5 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 indra/cmake/QuickTimePlugin.cmake diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt index 6620dfa3cb..13a31cbce7 100644 --- a/indra/cmake/CMakeLists.txt +++ b/indra/cmake/CMakeLists.txt @@ -90,6 +90,7 @@ set(cmake_SOURCE_FILES Prebuilt.cmake PulseAudio.cmake Python.cmake + QuickTimePlugin.cmake TemplateCheck.cmake Tut.cmake UI.cmake diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake new file mode 100644 index 0000000000..c08e153ee3 --- /dev/null +++ b/indra/cmake/QuickTimePlugin.cmake @@ -0,0 +1,48 @@ +# -*- cmake -*- + +if(INSTALL_PROPRIETARY) + include(Prebuilt) + if (WINDOWS) + use_prebuilt_binary(quicktime) + endif (WINDOWS) +endif(INSTALL_PROPRIETARY) + +if (DARWIN) + include(CMakeFindFrameworks) + find_library(QUICKTIME_LIBRARY QuickTime) +elseif (WINDOWS) + set(QUICKTIME_SDK_DIR "$ENV{PROGRAMFILES}/QuickTime SDK" + CACHE PATH "Location of the QuickTime SDK.") + + find_library(DEBUG_QUICKTIME_LIBRARY qtmlclient.lib + PATHS + ${ARCH_PREBUILT_DIRS_DEBUG} + "${QUICKTIME_SDK_DIR}\\libraries" + ) + + find_library(RELEASE_QUICKTIME_LIBRARY qtmlclient.lib + PATHS + ${ARCH_PREBUILT_DIRS_RELEASE} + "${QUICKTIME_SDK_DIR}\\libraries" + ) + + if (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY) + set(QUICKTIME_LIBRARY + optimized ${RELEASE_QUICKTIME_LIBRARY} + debug ${DEBUG_QUICKTIME_LIBRARY} + ) + + endif (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY) + + include_directories( + ${LIBS_PREBUILT_DIR}/include/quicktime + "${QUICKTIME_SDK_DIR}\\CIncludes" + ) +endif (DARWIN) + +mark_as_advanced(QUICKTIME_LIBRARY) + +if (QUICKTIME_LIBRARY) + set(QUICKTIME ON CACHE BOOL "Build with QuickTime streaming media support.") +endif (QUICKTIME_LIBRARY) + diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt index 7ef29b9027..6652bd021f 100644 --- a/indra/media_plugins/CMakeLists.txt +++ b/indra/media_plugins/CMakeLists.txt @@ -6,11 +6,13 @@ if (LINUX) add_subdirectory(gstreamer010) endif (LINUX) -if (WINDOWS OR DARWIN) +if (DARWIN) + add_subdirectory(quicktime) add_subdirectory(cef) -endif (WINDOWS OR DARWIN) +endif (DARWIN) if (WINDOWS) + add_subdirectory(cef) add_subdirectory(winmmshim) add_subdirectory(libvlc) endif (WINDOWS) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 7529254466..c2c2364c96 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -124,8 +124,10 @@ #include "llcoros.h" #if !LL_LINUX #include "cef/llceflib.h" +#if LL_WINDOWS #include "vlc/libvlc_version.h" -#endif +#endif // LL_WINDOWS +#endif // LL_LINUX // Third party library includes #include @@ -3339,7 +3341,14 @@ LLSD LLAppViewer::getViewerInfo() const info["VOICE_VERSION"] = LLTrans::getString("NotConnected"); } -#if !LL_LINUX +#if LL_LINUX + info["LLCEFLIB_VERSION"] = LLCEFLIB_VERSION; +#else + info["LLCEFLIB_VERSION"] = "Undefined"; + +#endif + +#if LL_WINDOWS std::ostringstream ver_codec; ver_codec << LIBVLC_VERSION_MAJOR; ver_codec << "."; @@ -3347,11 +3356,7 @@ LLSD LLAppViewer::getViewerInfo() const ver_codec << "."; ver_codec << LIBVLC_VERSION_REVISION; info["LIBVLC_VERSION"] = ver_codec.str(); - - info["LLCEFLIB_VERSION"] = LLCEFLIB_VERSION; #else - info["LLCEFLIB_VERSION"] = "Undefined"; - info["LIBVLC_VERSION"] = "Undefined"; #endif diff --git a/indra/newview/skins/default/xui/en/mime_types_mac.xml b/indra/newview/skins/default/xui/en/mime_types_mac.xml index e20b621cce..f71c24b2e4 100644 --- a/indra/newview/skins/default/xui/en/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/en/mime_types_mac.xml @@ -130,7 +130,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -141,7 +141,7 @@ none - media_plugin_cef + media_plugin_quicktime @@ -163,7 +163,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -174,7 +174,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -196,7 +196,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -218,7 +218,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -295,7 +295,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -306,7 +306,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -317,7 +317,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -328,7 +328,7 @@ audio - media_plugin_cef + media_plugin_quicktime @@ -438,7 +438,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -449,7 +449,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -460,7 +460,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -471,7 +471,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -482,7 +482,7 @@ movie - media_plugin_cef + media_plugin_quicktime @@ -493,7 +493,7 @@ movie - media_plugin_cef + media_plugin_quicktime From 08b8e053f49cd2cce2f3e8c6f2d4f01b04fc8fc0 Mon Sep 17 00:00:00 2001 From: Callum Prentice Date: Thu, 26 May 2016 13:50:24 -0700 Subject: [PATCH 108/278] Fix typo in platform test for CEF version --- indra/newview/llappviewer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c2c2364c96..c8153cabda 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3341,7 +3341,7 @@ LLSD LLAppViewer::getViewerInfo() const info["VOICE_VERSION"] = LLTrans::getString("NotConnected"); } -#if LL_LINUX +#if !LL_LINUX info["LLCEFLIB_VERSION"] = LLCEFLIB_VERSION; #else info["LLCEFLIB_VERSION"] = "Undefined"; From 8c85ec13d59e3074a1ec5559d3156d3a02d1c419 Mon Sep 17 00:00:00 2001 From: Callum Prentice Date: Thu, 26 May 2016 13:51:22 -0700 Subject: [PATCH 109/278] Put back QuickTime plugin code for OS X until a LibVLC version is created --- indra/media_plugins/quicktime/CMakeLists.txt | 94 ++ .../quicktime/media_plugin_quicktime.cpp | 1082 +++++++++++++++++ 2 files changed, 1176 insertions(+) create mode 100755 indra/media_plugins/quicktime/CMakeLists.txt create mode 100755 indra/media_plugins/quicktime/media_plugin_quicktime.cpp diff --git a/indra/media_plugins/quicktime/CMakeLists.txt b/indra/media_plugins/quicktime/CMakeLists.txt new file mode 100755 index 0000000000..58391007ff --- /dev/null +++ b/indra/media_plugins/quicktime/CMakeLists.txt @@ -0,0 +1,94 @@ +# -*- cmake -*- + +project(media_plugin_quicktime) + +include(00-Common) +include(LLCommon) +include(LLImage) +include(LLPlugin) +include(LLMath) +include(LLRender) +include(LLWindow) +include(Linking) +include(PluginAPI) +include(MediaPluginBase) +include(OpenGL) +include(QuickTimePlugin) + +include_directories( + ${LLPLUGIN_INCLUDE_DIRS} + ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS} + ${LLCOMMON_INCLUDE_DIRS} + ${LLMATH_INCLUDE_DIRS} + ${LLIMAGE_INCLUDE_DIRS} + ${LLRENDER_INCLUDE_DIRS} + ${LLWINDOW_INCLUDE_DIRS} +) +include_directories(SYSTEM + ${LLCOMMON_SYSTEM_INCLUDE_DIRS} + ) + +if (DARWIN) + include(CMakeFindFrameworks) + find_library(CARBON_LIBRARY Carbon) +endif (DARWIN) + + +### media_plugin_quicktime + +set(media_plugin_quicktime_SOURCE_FILES + media_plugin_quicktime.cpp + ) + +add_library(media_plugin_quicktime + SHARED + ${media_plugin_quicktime_SOURCE_FILES} +) + +target_link_libraries(media_plugin_quicktime + ${LLPLUGIN_LIBRARIES} + ${MEDIA_PLUGIN_BASE_LIBRARIES} + ${LLCOMMON_LIBRARIES} + ${QUICKTIME_LIBRARY} + ${PLUGIN_API_WINDOWS_LIBRARIES} +) + +add_dependencies(media_plugin_quicktime + ${LLPLUGIN_LIBRARIES} + ${MEDIA_PLUGIN_BASE_LIBRARIES} + ${LLCOMMON_LIBRARIES} +) + +if (WINDOWS) + set_target_properties( + media_plugin_quicktime + PROPERTIES + LINK_FLAGS "/MANIFEST:NO" + ) +endif (WINDOWS) + +if (QUICKTIME) + + add_definitions(-DLL_QUICKTIME_ENABLED=1) + + if (DARWIN) + # Don't prepend 'lib' to the executable name, and don't embed a full path in the library's install name + set_target_properties( + media_plugin_quicktime + PROPERTIES + PREFIX "" + BUILD_WITH_INSTALL_RPATH 1 + INSTALL_NAME_DIR "@executable_path" + LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" + ) + +# We use a bunch of deprecated system APIs. + set_source_files_properties( + media_plugin_quicktime.cpp PROPERTIES + COMPILE_FLAGS -Wno-deprecated-declarations + ) + find_library(CARBON_LIBRARY Carbon) + target_link_libraries(media_plugin_quicktime ${CARBON_LIBRARY}) + endif (DARWIN) +endif (QUICKTIME) + diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp new file mode 100755 index 0000000000..ff1ed8bfbc --- /dev/null +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -0,0 +1,1082 @@ +/** + * @file media_plugin_quicktime.cpp + * @brief QuickTime plugin for LLMedia API plugin system + * + * @cond + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * 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. + * + * 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. + * + * 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$ + * @endcond + */ + +#include "linden_common.h" + +#include "llgl.h" + +#include "llplugininstance.h" +#include "llpluginmessage.h" +#include "llpluginmessageclasses.h" +#include "media_plugin_base.h" + +#if LL_QUICKTIME_ENABLED + +#if defined(LL_DARWIN) +#include +#elif defined(LL_WINDOWS) +#include "llwin32headers.h" +#include "MacTypes.h" +#include "QTML.h" +#include "Movies.h" +#include "QDoffscreen.h" +#include "FixMath.h" +#include "QTLoadLibraryUtils.h" +#endif + + + +// TODO: Make sure that the only symbol exported from this library is LLPluginInitEntryPoint +//////////////////////////////////////////////////////////////////////////////// +// +class MediaPluginQuickTime : public MediaPluginBase +{ +public: + MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data); + ~MediaPluginQuickTime(); + + /* virtual */ void receiveMessage(const char *message_string); + +private: + + int mNaturalWidth; + int mNaturalHeight; + Movie mMovieHandle; + GWorldPtr mGWorldHandle; + ComponentInstance mMovieController; + int mCurVolume; + bool mMediaSizeChanging; + bool mIsLooping; + std::string mMovieTitle; + bool mReceivedTitle; + const int mMinWidth; + const int mMaxWidth; + const int mMinHeight; + const int mMaxHeight; + F64 mPlayRate; + std::string mNavigateURL; + + enum ECommand { + COMMAND_NONE, + COMMAND_STOP, + COMMAND_PLAY, + COMMAND_FAST_FORWARD, + COMMAND_FAST_REWIND, + COMMAND_PAUSE, + COMMAND_SEEK, + }; + ECommand mCommand; + + // Override this to add current time and duration to the message + /*virtual*/ void setDirty(int left, int top, int right, int bottom) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "updated"); + + message.setValueS32("left", left); + message.setValueS32("top", top); + message.setValueS32("right", right); + message.setValueS32("bottom", bottom); + + if(mMovieHandle) + { + message.setValueReal("current_time", getCurrentTime()); + message.setValueReal("duration", getDuration()); + message.setValueReal("current_rate", Fix2X(GetMovieRate(mMovieHandle))); + } + + sendMessage(message); + } + + + static Rect rectFromSize(int width, int height) + { + Rect result; + + + result.left = 0; + result.top = 0; + result.right = width; + result.bottom = height; + + return result; + } + + Fixed getPlayRate(void) + { + Fixed result; + if(mPlayRate == 0.0f) + { + // Default to the movie's preferred rate + result = GetMoviePreferredRate(mMovieHandle); + if(result == 0) + { + // Don't return a 0 play rate, ever. + std::cerr << "Movie's preferred rate is 0, forcing to 1.0." << std::endl; + result = X2Fix(1.0f); + } + } + else + { + result = X2Fix(mPlayRate); + } + + return result; + } + + void load( const std::string url ) + { + + if ( url.empty() ) + return; + + // Stop and unload any existing movie before starting another one. + unload(); + + setStatus(STATUS_LOADING); + + //In case std::string::c_str() makes a copy of the url data, + //make sure there is memory to hold it before allocating memory for handle. + //if fails, NewHandleClear(...) should return NULL. + const char* url_string = url.c_str() ; + Handle handle = NewHandleClear( ( Size )( url.length() + 1 ) ); + + if ( NULL == handle || noErr != MemError() || NULL == *handle ) + { + setStatus(STATUS_ERROR); + return; + } + + BlockMove( url_string, *handle, ( Size )( url.length() + 1 ) ); + + OSErr err = NewMovieFromDataRef( &mMovieHandle, newMovieActive | newMovieDontInteractWithUser | newMovieAsyncOK | newMovieIdleImportOK, nil, handle, URLDataHandlerSubType ); + DisposeHandle( handle ); + if ( noErr != err ) + { + setStatus(STATUS_ERROR); + return; + }; + + mNavigateURL = url; + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin"); + message.setValue("uri", mNavigateURL); + sendMessage(message); + + // do pre-roll actions (typically fired for streaming movies but not always) + PrePrerollMovie( mMovieHandle, 0, getPlayRate(), moviePrePrerollCompleteCallback, ( void * )this ); + + Rect movie_rect = rectFromSize(mWidth, mHeight); + + // make a new movie controller + mMovieController = NewMovieController( mMovieHandle, &movie_rect, mcNotVisible | mcTopLeftMovie ); + + // movie controller + MCSetActionFilterWithRefCon( mMovieController, mcActionFilterCallBack, ( long )this ); + + SetMoviePlayHints( mMovieHandle, hintsAllowDynamicResize, hintsAllowDynamicResize ); + + // function that gets called when a frame is drawn + SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, movieDrawingCompleteCallback, ( long )this ); + + setStatus(STATUS_LOADED); + + sizeChanged(); + }; + + bool unload() + { + // new movie and have to get title again + mReceivedTitle = false; + + if ( mMovieHandle ) + { + StopMovie( mMovieHandle ); + if ( mMovieController ) + { + MCMovieChanged( mMovieController, mMovieHandle ); + }; + }; + + if ( mMovieController ) + { + MCSetActionFilterWithRefCon( mMovieController, NULL, (long)this ); + DisposeMovieController( mMovieController ); + mMovieController = NULL; + }; + + if ( mMovieHandle ) + { + SetMovieDrawingCompleteProc( mMovieHandle, movieDrawingCallWhenChanged, nil, ( long )this ); + DisposeMovie( mMovieHandle ); + mMovieHandle = NULL; + }; + + mGWorldHandle = NULL; + + setStatus(STATUS_NONE); + + return true; + } + + bool navigateTo( const std::string url ) + { + unload(); + load( url ); + + return true; + }; + + bool sizeChanged() + { + if ( ! mMovieHandle ) + return false; + + // Check to see whether the movie's natural size has updated + { + int width, height; + getMovieNaturalSize(&width, &height); + if((width != 0) && (height != 0) && ((width != mNaturalWidth) || (height != mNaturalHeight))) + { + mNaturalWidth = width; + mNaturalHeight = height; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_request"); + message.setValue("name", mTextureSegmentName); + message.setValueS32("width", width); + message.setValueS32("height", height); + sendMessage(message); + //std::cerr << "<--- Sending size change request to application with name: " << mTextureSegmentName << " - size is " << width << " x " << height << std::endl; + } + } + + + // sanitize destination size + Rect dest_rect = rectFromSize(mWidth, mHeight); + + // media depth won't change + int depth_bits = mDepth * 8; + long rowbytes = mDepth * mTextureWidth; + + if(mPixels != NULL) + { + // We have pixels. Set up a GWorld pointing at the texture. + OSErr result = QTNewGWorldFromPtr( &mGWorldHandle, depth_bits, &dest_rect, NULL, NULL, 0, (Ptr)mPixels, rowbytes); + if ( noErr != result ) + { + // TODO: unrecoverable?? throw exception? return something? + return false; + } + } + else + { + // We don't have pixels. Create a fake GWorld we can point the movie at when it's not safe to render normally. + Rect tempRect = rectFromSize(1, 1); + OSErr result = QTNewGWorld( &mGWorldHandle, depth_bits, &tempRect, NULL, NULL, 0); + if ( noErr != result ) + { + // TODO: unrecoverable?? throw exception? return something? + return false; + } + } + + SetMovieGWorld( mMovieHandle, mGWorldHandle, NULL ); + + // Set up the movie display matrix + { + // scale movie to fit rect and invert vertically to match opengl image format + MatrixRecord transform; + SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix + double scaleX = (double) mWidth / mNaturalWidth; + double scaleY = -1.0 * (double) mHeight / mNaturalHeight; + double centerX = mWidth / 2.0; + double centerY = mHeight / 2.0; + ScaleMatrix( &transform, X2Fix( scaleX ), X2Fix( scaleY ), X2Fix( centerX ), X2Fix( centerY ) ); + SetMovieMatrix( mMovieHandle, &transform ); + } + + // update movie controller + if ( mMovieController ) + { + MCSetControllerPort( mMovieController, mGWorldHandle ); + MCPositionController( mMovieController, &dest_rect, &dest_rect, + mcTopLeftMovie | mcPositionDontInvalidate ); + MCMovieChanged( mMovieController, mMovieHandle ); + } + + + // Emit event with size change so the calling app knows about it too + // TODO: + //LLMediaEvent event( this ); + //mEventEmitter.update( &LLMediaObserver::onMediaSizeChange, event ); + + return true; + } + static Boolean mcActionFilterCallBack( MovieController mc, short action, void *params, long ref ) + { + Boolean result = false; + + MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref; + + switch( action ) + { + // handle window resizing + case mcActionControllerSizeChanged: + // Ensure that the movie draws correctly at the new size + self->sizeChanged(); + break; + + // Block any movie controller actions that open URLs. + case mcActionLinkToURL: + case mcActionGetNextURL: + case mcActionLinkToURLExtended: + // Prevent the movie controller from handling the message + result = true; + break; + + default: + break; + }; + + return result; + }; + + static OSErr movieDrawingCompleteCallback( Movie call_back_movie, long ref ) + { + MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref; + + // IMPORTANT: typically, a consumer who is observing this event will set a flag + // when this event is fired then render later. Be aware that the media stream + // can change during this period - dimensions, depth, format etc. + //LLMediaEvent event( self ); +// self->updateQuickTime(); + // TODO ^^^ + + + if ( self->mWidth > 0 && self->mHeight > 0 ) + self->setDirty( 0, 0, self->mWidth, self->mHeight ); + + return noErr; + }; + + static void moviePrePrerollCompleteCallback( Movie movie, OSErr preroll_err, void *ref ) + { + MediaPluginQuickTime* self = ( MediaPluginQuickTime* )ref; + + // TODO: + //LLMediaEvent event( self ); + //self->mEventEmitter.update( &LLMediaObserver::onMediaPreroll, event ); + + // Send a "navigate complete" event. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete"); + message.setValue("uri", self->mNavigateURL); + message.setValueS32("result_code", 200); + message.setValue("result_string", "OK"); + self->sendMessage(message); + }; + + + void rewind() + { + GoToBeginningOfMovie( mMovieHandle ); + MCMovieChanged( mMovieController, mMovieHandle ); + }; + + bool processState() + { + if ( mCommand == COMMAND_PLAY ) + { + if ( mStatus == STATUS_LOADED || mStatus == STATUS_PAUSED || mStatus == STATUS_PLAYING || mStatus == STATUS_DONE ) + { + long state = GetMovieLoadState( mMovieHandle ); + + if ( state >= kMovieLoadStatePlaythroughOK ) + { + // if the movie is at the end (generally because it reached it naturally) + // and we play is requested, jump back to the start of the movie. + // note: this is different from having loop flag set. + if ( IsMovieDone( mMovieHandle ) ) + { + Fixed rate = X2Fix( 0.0 ); + MCDoAction( mMovieController, mcActionPlay, (void*)rate ); + rewind(); + }; + + MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() ); + MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume ); + setStatus(STATUS_PLAYING); + mCommand = COMMAND_NONE; + }; + }; + } + else + if ( mCommand == COMMAND_STOP ) + { + if ( mStatus == STATUS_PLAYING || mStatus == STATUS_PAUSED || mStatus == STATUS_DONE ) + { + if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK ) + { + Fixed rate = X2Fix( 0.0 ); + MCDoAction( mMovieController, mcActionPlay, (void*)rate ); + rewind(); + + setStatus(STATUS_LOADED); + mCommand = COMMAND_NONE; + }; + }; + } + else + if ( mCommand == COMMAND_PAUSE ) + { + if ( mStatus == STATUS_PLAYING ) + { + if ( GetMovieLoadState( mMovieHandle ) >= kMovieLoadStatePlaythroughOK ) + { + Fixed rate = X2Fix( 0.0 ); + MCDoAction( mMovieController, mcActionPlay, (void*)rate ); + setStatus(STATUS_PAUSED); + mCommand = COMMAND_NONE; + }; + }; + }; + + return true; + }; + + void play(F64 rate) + { + mPlayRate = rate; + mCommand = COMMAND_PLAY; + }; + + void stop() + { + mCommand = COMMAND_STOP; + }; + + void pause() + { + mCommand = COMMAND_PAUSE; + }; + + void getMovieNaturalSize(int *movie_width, int *movie_height) + { + Rect rect; + + GetMovieNaturalBoundsRect( mMovieHandle, &rect ); + + int width = ( rect.right - rect.left ); + int height = ( rect.bottom - rect.top ); + + // make sure width and height fall in valid range + if ( width < mMinWidth ) + width = mMinWidth; + + if ( width > mMaxWidth ) + width = mMaxWidth; + + if ( height < mMinHeight ) + height = mMinHeight; + + if ( height > mMaxHeight ) + height = mMaxHeight; + + // return the new rect + *movie_width = width; + *movie_height = height; + } + + void updateQuickTime(int milliseconds) + { + if ( ! mMovieHandle ) + return; + + if ( ! mMovieController ) + return; + + // this wasn't required in 1.xx viewer but we have to manually + // work the Windows message pump now + #if defined( LL_WINDOWS ) + MSG msg; + while ( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) + { + GetMessage( &msg, NULL, 0, 0 ); + TranslateMessage( &msg ); + DispatchMessage( &msg ); + }; + #endif + + MCIdle( mMovieController ); + + if ( ! mGWorldHandle ) + return; + + if ( mMediaSizeChanging ) + return; + + // update state machine + processState(); + + // see if title arrived and if so, update member variable with contents + checkTitle(); + + // QT call to see if we are at the end - can't do with controller + if ( IsMovieDone( mMovieHandle ) ) + { + // special code for looping - need to rewind at the end of the movie + if ( mIsLooping ) + { + // go back to start + rewind(); + + if ( mMovieController ) + { + // kick off new play + MCDoAction( mMovieController, mcActionPrerollAndPlay, (void*)getPlayRate() ); + + // set the volume + MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume ); + }; + } + else + { + if(mStatus == STATUS_PLAYING) + { + setStatus(STATUS_DONE); + } + } + } + + }; + + void seek( F64 time ) + { + if ( mMovieController ) + { + TimeRecord when; + when.scale = GetMovieTimeScale( mMovieHandle ); + when.base = 0; + + // 'time' is in (floating point) seconds. The timebase time will be in 'units', where + // there are 'scale' units per second. + SInt64 raw_time = ( SInt64 )( time * (double)( when.scale ) ); + + when.value.hi = ( SInt32 )( raw_time >> 32 ); + when.value.lo = ( SInt32 )( ( raw_time & 0x00000000FFFFFFFF ) ); + + MCDoAction( mMovieController, mcActionGoToTime, &when ); + }; + }; + + F64 getLoadedDuration() + { + TimeValue duration; + if(GetMaxLoadedTimeInMovie( mMovieHandle, &duration ) != noErr) + { + // If GetMaxLoadedTimeInMovie returns an error, return the full duration of the movie. + duration = GetMovieDuration( mMovieHandle ); + } + TimeValue scale = GetMovieTimeScale( mMovieHandle ); + + return (F64)duration / (F64)scale; + }; + + F64 getDuration() + { + TimeValue duration = GetMovieDuration( mMovieHandle ); + TimeValue scale = GetMovieTimeScale( mMovieHandle ); + + return (F64)duration / (F64)scale; + }; + + F64 getCurrentTime() + { + TimeValue curr_time = GetMovieTime( mMovieHandle, 0 ); + TimeValue scale = GetMovieTimeScale( mMovieHandle ); + + return (F64)curr_time / (F64)scale; + }; + + void setVolume( F64 volume ) + { + mCurVolume = (short)(volume * ( double ) 0x100 ); + + if ( mMovieController ) + { + MCDoAction( mMovieController, mcActionSetVolume, (void*)mCurVolume ); + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void update(int milliseconds = 0) + { + updateQuickTime(milliseconds); + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void mouseDown( int x, int y ) + { + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void mouseUp( int x, int y ) + { + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void mouseMove( int x, int y ) + { + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void keyPress( unsigned char key ) + { + }; + + //////////////////////////////////////////////////////////////////////////////// + // Grab movie title into mMovieTitle - should be called repeatedly + // until it returns true since movie title takes a while to become + // available. + const bool getMovieTitle() + { + // grab meta data from movie + QTMetaDataRef media_data_ref; + OSErr result = QTCopyMovieMetaData( mMovieHandle, &media_data_ref ); + if ( noErr != result ) + return false; + + // look up "Display Name" in meta data + OSType meta_data_key = kQTMetaDataCommonKeyDisplayName; + QTMetaDataItem item = kQTMetaDataItemUninitialized; + result = (OSErr)QTMetaDataGetNextItem( media_data_ref, kQTMetaDataStorageFormatWildcard, + 0, kQTMetaDataKeyFormatCommon, + (const UInt8 *)&meta_data_key, + sizeof( meta_data_key ), &item ); + if ( noErr != result ) + return false; + + // find the size of the title + ByteCount size; + result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size ); + if ( noErr != result || size <= 0 /*|| size > 1024 FIXME: arbitrary limit */ ) + return false; + + // allocate some space and grab it + UInt8* item_data = new UInt8[ size + 1 ]; + memset( item_data, 0, ( size + 1 ) * sizeof( UInt8 ) ); + result = (OSErr)QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL ); + if ( noErr != result ) + { + delete [] item_data; + return false; + }; + + // save it + if ( strlen( (char*)item_data ) ) + mMovieTitle = std::string( (char* )item_data ); + else + mMovieTitle = ""; + + // clean up + delete [] item_data; + + return true; + }; + + // called regularly to see if title changed + void checkTitle() + { + // we did already receive title so keep checking + if ( ! mReceivedTitle ) + { + // grab title from movie meta data + if ( getMovieTitle() ) + { + // pass back to host application + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text"); + message.setValue("name", mMovieTitle ); + sendMessage( message ); + + // stop looking once we find a title for this movie. + // TODO: this may to be reset if movie title changes + // during playback but this is okay for now + mReceivedTitle = true; + }; + }; + }; +}; + +MediaPluginQuickTime::MediaPluginQuickTime( + LLPluginInstance::sendMessageFunction host_send_func, + void *host_user_data ) : + MediaPluginBase(host_send_func, host_user_data), + mMinWidth( 0 ), + mMaxWidth( 2048 ), + mMinHeight( 0 ), + mMaxHeight( 2048 ) +{ +// std::cerr << "MediaPluginQuickTime constructor" << std::endl; + + mNaturalWidth = -1; + mNaturalHeight = -1; + mMovieHandle = 0; + mGWorldHandle = 0; + mMovieController = 0; + mCurVolume = 0x99; + mMediaSizeChanging = false; + mIsLooping = false; + mMovieTitle = std::string(); + mReceivedTitle = false; + mCommand = COMMAND_NONE; + mPlayRate = 0.0f; + mStatus = STATUS_NONE; +} + +MediaPluginQuickTime::~MediaPluginQuickTime() +{ +// std::cerr << "MediaPluginQuickTime destructor" << std::endl; + + ExitMovies(); + +#ifdef LL_WINDOWS + TerminateQTML(); +// std::cerr << "QuickTime closing down" << std::endl; +#endif +} + + +void MediaPluginQuickTime::receiveMessage(const char *message_string) +{ +// std::cerr << "MediaPluginQuickTime::receiveMessage: received message: \"" << message_string << "\"" << std::endl; + LLPluginMessage message_in; + + if(message_in.parse(message_string) >= 0) + { + std::string message_class = message_in.getClass(); + std::string message_name = message_in.getName(); + if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE) + { + if(message_name == "init") + { + LLPluginMessage message("base", "init_response"); + LLSD versions = LLSD::emptyMap(); + versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; + versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; + // Normally a plugin would only specify one of these two subclasses, but this is a demo... + versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME] = LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME_VERSION; + message.setValueLLSD("versions", versions); + + #ifdef LL_WINDOWS + + // QuickTime 7.6.4 has an issue (that was not present in 7.6.2) with initializing QuickTime + // according to this article: http://lists.apple.com/archives/QuickTime-API/2009/Sep/msg00097.html + // The solution presented there appears to work. + QTLoadLibrary("qtcf.dll"); + + // main initialization for QuickTime - only required on Windows + OSErr result = InitializeQTML( 0L ); + if ( result != noErr ) + { + //TODO: If no QT on Windows, this fails - respond accordingly. + } + else + { + //std::cerr << "QuickTime initialized" << std::endl; + }; + #endif + + // required for both Windows and Mac + EnterMovies(); + + std::string plugin_version = "QuickTime media plugin, QuickTime version "; + + long version = 0; + Gestalt( gestaltQuickTimeVersion, &version ); + std::ostringstream codec( "" ); + codec << std::hex << version << std::dec; + plugin_version += codec.str(); + message.setValue("plugin_version", plugin_version); + sendMessage(message); + } + else if(message_name == "idle") + { + // no response is necessary here. + F64 time = message_in.getValueReal("time"); + + // Convert time to milliseconds for update() + update((int)(time * 1000.0f)); + } + else if(message_name == "cleanup") + { + // TODO: clean up here + } + else if(message_name == "shm_added") + { + SharedSegmentInfo info; + info.mAddress = message_in.getValuePointer("address"); + info.mSize = (size_t)message_in.getValueS32("size"); + std::string name = message_in.getValue("name"); +// std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory added, name: " << name +// << ", size: " << info.mSize +// << ", address: " << info.mAddress +// << std::endl; + + mSharedSegments.insert(SharedSegmentMap::value_type(name, info)); + + } + else if(message_name == "shm_remove") + { + std::string name = message_in.getValue("name"); + +// std::cerr << "MediaPluginQuickTime::receiveMessage: shared memory remove, name = " << name << std::endl; + + SharedSegmentMap::iterator iter = mSharedSegments.find(name); + if(iter != mSharedSegments.end()) + { + if(mPixels == iter->second.mAddress) + { + // This is the currently active pixel buffer. Make sure we stop drawing to it. + mPixels = NULL; + mTextureSegmentName.clear(); + + // Make sure the movie GWorld is no longer pointed at the shared segment. + sizeChanged(); + } + mSharedSegments.erase(iter); + } + else + { +// std::cerr << "MediaPluginQuickTime::receiveMessage: unknown shared memory region!" << std::endl; + } + + // Send the response so it can be cleaned up. + LLPluginMessage message("base", "shm_remove_response"); + message.setValue("name", name); + sendMessage(message); + } + else + { +// std::cerr << "MediaPluginQuickTime::receiveMessage: unknown base message: " << message_name << std::endl; + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) + { + if(message_name == "init") + { + // This is the media init message -- all necessary data for initialization should have been received. + + // Plugin gets to decide the texture parameters to use. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); + #if defined(LL_WINDOWS) + // Values for Windows + mDepth = 3; + message.setValueU32("format", GL_RGB); + message.setValueU32("type", GL_UNSIGNED_BYTE); + + // We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even. + // Padding to a multiple of 3*32 guarantees it'll divide out properly. + message.setValueU32("padding", 32 * 3); + #else + // Values for Mac + mDepth = 4; + message.setValueU32("format", GL_BGRA_EXT); + #ifdef __BIG_ENDIAN__ + message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV ); + #else + message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8); + #endif + + // Pad texture width to a multiple of 32 bytes, to line up with cache lines. + message.setValueU32("padding", 32); + #endif + message.setValueS32("depth", mDepth); + message.setValueU32("internalformat", GL_RGB); + message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. + message.setValueBoolean("allow_downsample", true); + sendMessage(message); + } + else if(message_name == "size_change") + { + std::string name = message_in.getValue("name"); + S32 width = message_in.getValueS32("width"); + S32 height = message_in.getValueS32("height"); + S32 texture_width = message_in.getValueS32("texture_width"); + S32 texture_height = message_in.getValueS32("texture_height"); + + //std::cerr << "---->Got size change instruction from application with name: " << name << " - size is " << width << " x " << height << std::endl; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response"); + message.setValue("name", name); + message.setValueS32("width", width); + message.setValueS32("height", height); + message.setValueS32("texture_width", texture_width); + message.setValueS32("texture_height", texture_height); + sendMessage(message); + + if(!name.empty()) + { + // Find the shared memory region with this name + SharedSegmentMap::iterator iter = mSharedSegments.find(name); + if(iter != mSharedSegments.end()) + { +// std::cerr << "%%% Got size change, new size is " << width << " by " << height << std::endl; +// std::cerr << "%%%% texture size is " << texture_width << " by " << texture_height << std::endl; + + mPixels = (unsigned char*)iter->second.mAddress; + mTextureSegmentName = name; + mWidth = width; + mHeight = height; + + mTextureWidth = texture_width; + mTextureHeight = texture_height; + + mMediaSizeChanging = false; + + sizeChanged(); + + update(); + }; + }; + } + else if(message_name == "load_uri") + { + std::string uri = message_in.getValue("uri"); + load( uri ); + sendStatus(); + } + else if(message_name == "mouse_event") + { + std::string event = message_in.getValue("event"); + S32 x = message_in.getValueS32("x"); + S32 y = message_in.getValueS32("y"); + + if(event == "down") + { + mouseDown(x, y); + } + else if(event == "up") + { + mouseUp(x, y); + } + else if(event == "move") + { + mouseMove(x, y); + }; + }; + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + { + if(message_name == "stop") + { + stop(); + } + else if(message_name == "start") + { + F64 rate = 0.0; + if(message_in.hasValue("rate")) + { + rate = message_in.getValueReal("rate"); + } + play(rate); + } + else if(message_name == "pause") + { + pause(); + } + else if(message_name == "seek") + { + F64 time = message_in.getValueReal("time"); + seek(time); + } + else if(message_name == "set_loop") + { + bool loop = message_in.getValueBoolean("loop"); + mIsLooping = loop; + } + else if(message_name == "set_volume") + { + F64 volume = message_in.getValueReal("volume"); + setVolume(volume); + } + } + else + { +// std::cerr << "MediaPluginQuickTime::receiveMessage: unknown message class: " << message_class << std::endl; + }; + }; +} + +int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data) +{ + MediaPluginQuickTime *self = new MediaPluginQuickTime(host_send_func, host_user_data); + *plugin_send_func = MediaPluginQuickTime::staticReceiveMessage; + *plugin_user_data = (void*)self; + + return 0; +} + +#else // LL_QUICKTIME_ENABLED + +// Stubbed-out class with constructor/destructor (necessary or windows linker +// will just think its dead code and optimize it all out) +class MediaPluginQuickTime : public MediaPluginBase +{ +public: + MediaPluginQuickTime(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data); + ~MediaPluginQuickTime(); + /* virtual */ void receiveMessage(const char *message_string); +}; + +MediaPluginQuickTime::MediaPluginQuickTime( + LLPluginInstance::sendMessageFunction host_send_func, + void *host_user_data ) : + MediaPluginBase(host_send_func, host_user_data) +{ + // no-op +} + +MediaPluginQuickTime::~MediaPluginQuickTime() +{ + // no-op +} + +void MediaPluginQuickTime::receiveMessage(const char *message_string) +{ + // no-op +} + +// We're building without quicktime enabled. Just refuse to initialize. +int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data) +{ + return -1; +} + +#endif // LL_QUICKTIME_ENABLED From ccfb18948df97bbb671fdd925b9d7a84e6345339 Mon Sep 17 00:00:00 2001 From: Nicky Date: Fri, 27 May 2016 00:27:10 +0200 Subject: [PATCH 110/278] - Make popup appear on the right screen coordinates (this was broken after the flipy switch) - Make sure the popup stays until it is dismissed (no need to hold the mouse button to scroll through eg a listbox) [This needs a CEF change.) --- indra/media_plugins/cef/media_plugin_cef.cpp | 58 ++++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index d61bd680df..84fe83408f 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -100,6 +100,12 @@ private: LLCEFLib* mLLCEFLib; VolumeCatcher mVolumeCatcher; + + U8 *mPopupBuffer; + U32 mPopupW; + U32 mPopupH; + U32 mPopupX; + U32 mPopupY; }; //////////////////////////////////////////////////////////////////////////////// @@ -127,12 +133,19 @@ MediaPluginBase(host_send_func, host_user_data) mCookiePath = ""; mPickedFile = ""; mLLCEFLib = new LLCEFLib(); + + mPopupBuffer = NULL; + mPopupW = 0; + mPopupH = 0; + mPopupX = 0; + mPopupY = 0; } //////////////////////////////////////////////////////////////////////////////// // MediaPluginCEF::~MediaPluginCEF() { + delete[] mPopupBuffer; } //////////////////////////////////////////////////////////////////////////////// @@ -155,20 +168,28 @@ void MediaPluginCEF::postDebugMessage(const std::string& msg) // void MediaPluginCEF::onPageChangedCallback(unsigned char* pixels, int x, int y, int width, int height, bool is_popup) { - if (mPixels && pixels) + if( is_popup ) + { + delete mPopupBuffer; + mPopupBuffer = NULL; + mPopupH = 0; + mPopupW = 0; + mPopupX = 0; + mPopupY = 0; + } + + if( mPixels && pixels ) { if (is_popup) { - for (int line = 0; line < height; ++line) + if( width > 0 && height> 0 ) { - int inverted_y = mHeight - y - height; - int src = line * width * mDepth; - int dst = (inverted_y + line) * mWidth * mDepth + x * mDepth; - - if (dst + width * mDepth < mWidth * mHeight * mDepth) - { - memcpy(mPixels + dst, pixels + src, width * mDepth); - } + mPopupBuffer = new U8[ width * height * mDepth ]; + memcpy( mPopupBuffer, pixels, width * height * mDepth ); + mPopupH = height; + mPopupW = width; + mPopupX = x; + mPopupY = y; } } else @@ -177,6 +198,23 @@ void MediaPluginCEF::onPageChangedCallback(unsigned char* pixels, int x, int y, { memcpy(mPixels, pixels, mWidth * mHeight * mDepth); } + if( mPopupBuffer && mPopupH && mPopupW ) + { + U32 bufferSize = mWidth * mHeight * mDepth; + U32 popupStride = mPopupW * mDepth; + U32 bufferStride = mWidth * mDepth; + int dstY = mPopupY; + + int src = 0; + int dst = dstY * mWidth * mDepth + mPopupX * mDepth; + + for( int line = 0; dst + popupStride < bufferSize && line < mPopupH; ++line ) + { + memcpy( mPixels + dst, mPopupBuffer + src, popupStride ); + src += popupStride; + dst += bufferStride; + } + } } setDirty(0, 0, mWidth, mHeight); From 0d5edb03a226a62bb416ddca250e4f1f789f56fd Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 27 May 2016 03:34:37 +0300 Subject: [PATCH 111/278] MAINT-6435 Deafult preset should set the same settings as the "Reset to recommended settings" button --- indra/newview/llfeaturemanager.cpp | 59 ++++++++++++++++++++++++++++++ indra/newview/llfeaturemanager.h | 4 +- indra/newview/llpresetsmanager.cpp | 55 ++++++++++++++++++---------- indra/newview/llpresetsmanager.h | 2 +- 4 files changed, 98 insertions(+), 22 deletions(-) diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 7f1c981a3c..d4ba230feb 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -809,3 +809,62 @@ void LLFeatureManager::applyBaseMasks() maskFeatures("safe"); } } + +LLSD LLFeatureManager::getRecommendedSettingsMap() +{ + // Create the map and fill it with the hardware recommended settings. + // It's needed to create an initial Default graphics preset (MAINT-6435). + // The process is similar to the one LLFeatureManager::applyRecommendedSettings() does. + + LLSD map(LLSD::emptyMap()); + + loadGPUClass(); + U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5)); + LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL; + + applyBaseMasks(); + std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low"); + + maskFeatures(features); + + LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading + map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level; + map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();; + map["RenderQualityPerformance"]["Persist"] = 1; + map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); + + + + for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt) + { + LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first); + if (ctrl == NULL) + { + LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL; + continue; + } + + if (ctrl->isType(TYPE_BOOLEAN)) + { + map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first); + } + else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32)) + { + map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first); + } + else if (ctrl->isType(TYPE_F32)) + { + map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first); + } + else + { + LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL; + continue; + } + map[mIt->first]["Comment"] = ctrl->getComment();; + map[mIt->first]["Persist"] = 1; + map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); + } + + return map; +} diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 12ea691b49..c3d87cea0b 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -157,7 +157,9 @@ public: // load the dynamic GPU/feature table from a website void fetchHTTPTables(); - + + LLSD getRecommendedSettingsMap(); + protected: bool loadGPUClass(); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index d95546f11d..9957039f72 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -38,6 +38,7 @@ #include "llviewercontrol.h" #include "llfloaterpreference.h" #include "llfloaterreg.h" +#include "llfeaturemanager.h" LLPresetsManager::LLPresetsManager() { @@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault() LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL; // Write current graphic settings as the default - savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); + savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true); } else { @@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam presets = mPresetNames; } -bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name) +bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault) { if (LLTrans::getString(PRESETS_DEFAULT) == name) { @@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n if(PRESETS_GRAPHIC == subdirectory) { - gSavedSettings.setString("PresetGraphicActive", name); - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance) + if (instance && !createDefault) { + gSavedSettings.setString("PresetGraphicActive", name); instance->getControlNames(name_list); LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL; name_list.push_back("PresetGraphicActive"); @@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL; } - if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list + if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list + || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings { // make an empty llsd LLSD paramsData(LLSD::emptyMap()); - for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) + if (createDefault) { - std::string ctrl_name = *it; - LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); - std::string comment = ctrl->getComment(); - std::string type = LLControlGroup::typeEnumToString(ctrl->type()); - LLSD value = ctrl->getValue(); + paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); + if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) + { + // use the recommended setting as an initial one (MAINT-6435) + gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger()); + } + } + else + { + for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) + { + std::string ctrl_name = *it; + LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); + std::string comment = ctrl->getComment(); + std::string type = LLControlGroup::typeEnumToString(ctrl->type()); + LLSD value = ctrl->getValue(); - paramsData[ctrl_name]["Comment"] = comment; - paramsData[ctrl_name]["Persist"] = 1; - paramsData[ctrl_name]["Type"] = type; - paramsData[ctrl_name]["Value"] = value; + paramsData[ctrl_name]["Comment"] = comment; + paramsData[ctrl_name]["Persist"] = 1; + paramsData[ctrl_name]["Type"] = type; + paramsData[ctrl_name]["Value"] = value; + } } std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); @@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; - gSavedSettings.setString("PresetGraphicActive", name); - - // signal interested parties - triggerChangeSignal(); + if (!createDefault) + { + gSavedSettings.setString("PresetGraphicActive", name); + // signal interested parties + triggerChangeSignal(); + } } else { diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index ac4f0c010c..21f9885f27 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -56,7 +56,7 @@ public: static std::string getPresetsDir(const std::string& subdirectory); void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option); void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); - bool savePreset(const std::string& subdirectory, std::string name); + bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false); void loadPreset(const std::string& subdirectory, std::string name); bool deletePreset(const std::string& subdirectory, std::string name); From 282956e7688169e539059385962cbd6a295255f6 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Fri, 27 May 2016 16:53:16 -0700 Subject: [PATCH 112/278] Some simple tidy up and added a proper URL for video test button in web content floater --- .../media_plugins/libvlc/media_plugin_libvlc.cpp | 14 +++----------- .../default/textures/icons/Video_URL_Off.png | Bin 0 -> 282 bytes indra/newview/skins/default/textures/textures.xml | 5 ++++- 3 files changed, 7 insertions(+), 12 deletions(-) create mode 100644 indra/newview/skins/default/textures/icons/Video_URL_Off.png diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 92bfc15113..43d4e95243 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -173,26 +173,18 @@ void MediaPluginLibVLC::playMedia() gLibVLCMedia = libvlc_media_new_location(gLibVLC, mURL.c_str()); if (!gLibVLCMedia) { - printf("libvlc_media_new_location failed\n"); - } - else - { - printf("libvlc_media_new_location ok\n"); + gLibVLCMediaPlayer = 0; + return; } gLibVLCMediaPlayer = libvlc_media_player_new_from_media(gLibVLCMedia); if (!gLibVLCMediaPlayer) { - printf("libvlc_media_player_new_from_media failed\n"); - } - else - { - printf("libvlc_media_player_new_from_media ok...\n"); + return; } libvlc_media_release(gLibVLCMedia); - gVLCCallbackContext.parent = this; gVLCCallbackContext.texture_pixels = mPixels; gVLCCallbackContext.mp = gLibVLCMediaPlayer; diff --git a/indra/newview/skins/default/textures/icons/Video_URL_Off.png b/indra/newview/skins/default/textures/icons/Video_URL_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..40e5df7d81372cf23f9e924e6f2dc9241a48f0f8 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAQ1FbW zi(`n!#JQ6Wu3}c?aW!7>z$u`qNnwYCIHP&ir~m)29i8$i&Yk=1-A>C{!c6z7*P1dY zB;8;UWOT@WyO&+i(IxqegtM7svP7~#pi4sd7VZuX!K+a-E5nbR*&3!)#dIx-;lpP9*?boCP_bw~R@0{8B!b(r(-KF<@=PZ|AdA?C=>73&IO!29Twdd_$ d=3oEKSn;q}ch`aPjX-}fc)I$ztaD0e0ss}VZJ+=E literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 72037a84b3..01e8c16937 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -676,7 +676,10 @@ with the same filename but different name - + + + + From 2b9927863ff6826bc448379e2f829b1de5e6c3fb Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 30 May 2016 15:03:40 +0300 Subject: [PATCH 113/278] MAINT-6444 Outfits filter doesn't work in Outfit gallery --- indra/newview/lloutfitgallery.cpp | 42 ++++++++++++++++++++++++++++--- indra/newview/lloutfitgallery.h | 7 ++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index f29fc53dea..6a8256d41c 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -152,6 +152,11 @@ void LLOutfitGallery::reArrangeRows(S32 row_diff) { removeFromGalleryLast(*it); } + for (std::vector::const_reverse_iterator it = mHiddenItems.rbegin(); it != mHiddenItems.rend(); ++it) + { + buf_items.push_back(*it); + } + mHiddenItems.clear(); mItemsInRow+= row_diff; updateGalleryWidth(); @@ -159,7 +164,9 @@ void LLOutfitGallery::reArrangeRows(S32 row_diff) for (std::vector::const_iterator it = buf_items.begin(); it != buf_items.end(); ++it) { - addToGallery(*it); + (*it)->setHidden(false); + applyFilter(*it,sFilterSubString); + addToGallery(*it); } } @@ -214,6 +221,11 @@ LLPanel* LLOutfitGallery::addToRow(LLPanel* row_stack, LLOutfitGalleryItem* item void LLOutfitGallery::addToGallery(LLOutfitGalleryItem* item) { + if(item->isHidden()) + { + mHiddenItems.push_back(item); + return; + } mItemsAddedCount++; mItemIndexMap[item] = mItemsAddedCount - 1; int n = mItemsAddedCount; @@ -241,6 +253,11 @@ void LLOutfitGallery::addToGallery(LLOutfitGalleryItem* item) void LLOutfitGallery::removeFromGalleryLast(LLOutfitGalleryItem* item) { + if(item->isHidden()) + { + mHiddenItems.pop_back(); + return; + } int n_prev = mItemsAddedCount; int n = mItemsAddedCount - 1; int row_count = (n % mItemsInRow) == 0 ? n / mItemsInRow : n / mItemsInRow + 1; @@ -264,6 +281,11 @@ void LLOutfitGallery::removeFromGalleryLast(LLOutfitGalleryItem* item) void LLOutfitGallery::removeFromGalleryMiddle(LLOutfitGalleryItem* item) { + if(item->isHidden()) + { + mHiddenItems.erase(std::remove(mHiddenItems.begin(), mHiddenItems.end(), item), mHiddenItems.end()); + return; + } int n = mItemIndexMap[item]; mItemIndexMap.erase(item); std::vector saved; @@ -371,9 +393,8 @@ LLOutfitGallery::~LLOutfitGallery() void LLOutfitGallery::setFilterSubString(const std::string& string) { - //TODO: Implement filtering - sFilterSubString = string; + reArrangeRows(); } void LLOutfitGallery::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) @@ -388,6 +409,20 @@ void LLOutfitGallery::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id) } } +void LLOutfitGallery::applyFilter(LLOutfitGalleryItem* item, const std::string& filter_substring) +{ + if (!item) return; + + std::string outfit_name = item->getItemName(); + LLStringUtil::toUpper(outfit_name); + + std::string cur_filter = filter_substring; + LLStringUtil::toUpper(cur_filter); + + bool hidden = (std::string::npos == outfit_name.find(cur_filter)); + item->setHidden(hidden); +} + void LLOutfitGallery::onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) { } @@ -555,6 +590,7 @@ BOOL LLOutfitGalleryItem::postBuild() mFotoBgPanel = getChild("foto_bg_panel"); mTextBgPanel = getChild("text_bg_panel"); setOutfitWorn(false); + mHidden = false; return TRUE; } diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index a22e86df83..b3e699e0e7 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -120,6 +120,8 @@ protected: /*virtual*/ void onExpandAllFolders() {} /*virtual*/ LLOutfitListGearMenuBase* createGearMenu(); + void applyFilter(LLOutfitGalleryItem* item, const std::string& filter_substring); + private: void loadPhotos(); void uploadPhoto(LLUUID outfit_id); @@ -153,6 +155,7 @@ private: std::vector mRowPanels; std::vector mItemPanels; std::vector mItems; + std::vector mHiddenItems; LLScrollContainer* mScrollPanel; LLPanel* mGalleryPanel; LLPanel* mLastRowPanel; @@ -250,6 +253,9 @@ public: std::string getItemName() {return mOutfitName;} bool mIsDefaultImage() {return mDefaultImage;} + bool isHidden() {return mHidden;} + void setHidden(bool hidden) {mHidden = hidden;} + struct compareGalleryItem { bool operator()(LLOutfitGalleryItem* a, LLOutfitGalleryItem* b) @@ -275,6 +281,7 @@ private: bool mSelected; bool mWorn; bool mDefaultImage; + bool mHidden; std::string mOutfitName; }; From f282c31f0107f05ae9e943d2fdda516cdaf3f3fa Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 31 May 2016 16:56:45 +0300 Subject: [PATCH 114/278] MAINT-2129 One more Block button --- indra/newview/llinspectremoteobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp index a12ec390af..b64df2bd47 100644 --- a/indra/newview/llinspectremoteobject.cpp +++ b/indra/newview/llinspectremoteobject.cpp @@ -181,7 +181,7 @@ void LLInspectRemoteObject::update() getChild("map_btn")->setEnabled(! mSLurl.empty()); // disable the Block button if we don't have the object ID (will this ever happen?) - getChild("block_btn")->setEnabled(! mObjectID.isNull()); + getChild("block_btn")->setEnabled(!mObjectID.isNull() && !LLMuteList::getInstance()->isMuted(mObjectID)); } ////////////////////////////////////////////////////////////////////////////// From d1b7deda45f778e0fcfb92f38f9f5694ab285d1c Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Tue, 31 May 2016 18:04:05 +0300 Subject: [PATCH 115/278] MAINT-6452 No message is displayed when there is no outfits in Gallery --- indra/newview/lloutfitgallery.cpp | 18 ++++++++++++++ indra/newview/lloutfitgallery.h | 3 +++ .../default/xui/en/panel_outfit_gallery.xml | 24 +++++++++++++++++-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index 6a8256d41c..7bd9c0bd94 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -99,6 +99,7 @@ BOOL LLOutfitGallery::postBuild() BOOL rv = LLOutfitListBase::postBuild(); mScrollPanel = getChild("gallery_scroll_panel"); mGalleryPanel = getChild("gallery_panel"); + mMessageTextBox = getChild("no_outfits_txt"); mOutfitGalleryMenu = new LLOutfitGalleryContextMenu(this); return rv; } @@ -168,6 +169,7 @@ void LLOutfitGallery::reArrangeRows(S32 row_diff) applyFilter(*it,sFilterSubString); addToGallery(*it); } + updateMessageVisibility(); } void LLOutfitGallery::updateGalleryWidth() @@ -558,6 +560,22 @@ bool LLOutfitGallery::canWearSelected() return false; } +void LLOutfitGallery::updateMessageVisibility() +{ + if(mItems.empty()) + { + mMessageTextBox->setVisible(TRUE); + mScrollPanel->setVisible(FALSE); + std::string message = sFilterSubString.empty()? getString("no_outfits_msg") : getString("no_matched_outfits_msg"); + mMessageTextBox->setValue(message); + } + else + { + mScrollPanel->setVisible(TRUE); + mMessageTextBox->setVisible(FALSE); + } +} + LLOutfitListGearMenuBase* LLOutfitGallery::createGearMenu() { return new LLOutfitGalleryGearMenu(this); diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index b3e699e0e7..ad3f2a7129 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -104,6 +104,8 @@ public: /*virtual*/ bool getHasExpandableFolders() { return FALSE; } + void updateMessageVisibility(); + void refreshTextures(const LLUUID& category_id); void refreshOutfit(const LLUUID& category_id); @@ -161,6 +163,7 @@ private: LLPanel* mLastRowPanel; LLUUID mOutfitLinkPending; LLUUID mOutfitRenamePending; + LLTextBox* mMessageTextBox; bool mGalleryCreated; int mRowCount; int mItemsAddedCount; diff --git a/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml b/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml index c06c6a86c3..9a547f615d 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml @@ -13,6 +13,26 @@ Photo of "[OUTFIT_NAME]" outfit + + You don't have any outfits yet. Try [secondlife:///app/search/all/ Search] + + + Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]. + + + Searching... + - - + + Date: Tue, 31 May 2016 09:41:37 -0700 Subject: [PATCH 116/278] Remove local flip (as part of resize) in QuickTime plugin for OSX --- indra/media_plugins/quicktime/media_plugin_quicktime.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index ff1ed8bfbc..011fd4e051 100755 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -311,7 +311,9 @@ private: MatrixRecord transform; SetIdentityMatrix( &transform ); // transforms are additive so start from identify matrix double scaleX = (double) mWidth / mNaturalWidth; - double scaleY = -1.0 * (double) mHeight / mNaturalHeight; + + // 2016-05-31 CP remove local flip (via -1.0) since texture coods for media on a prim are now flipped for VLC/CEF + double scaleY = 1.0 * (double) mHeight / mNaturalHeight; double centerX = mWidth / 2.0; double centerY = mHeight / 2.0; ScaleMatrix( &transform, X2Fix( scaleX ), X2Fix( scaleY ), X2Fix( centerX ), X2Fix( centerY ) ); From 69174fcc58e0a2e67a417c2e0060d9f36a0ba238 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Tue, 31 May 2016 14:51:40 -0700 Subject: [PATCH 117/278] Fix windows line endings --- .../libvlc/media_plugin_libvlc.cpp | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 43d4e95243..3852d10c44 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -330,45 +330,45 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string ) playMedia(); } } - else - if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) - { - if (message_name == "stop") - { - if (gLibVLCMediaPlayer) - { - libvlc_media_player_stop(gLibVLCMediaPlayer); - } - } - else if (message_name == "start") - { - if (gLibVLCMediaPlayer) - { - libvlc_media_player_play(gLibVLCMediaPlayer); - } - } - else if (message_name == "pause") - { - if (gLibVLCMediaPlayer) - { - libvlc_media_player_pause(gLibVLCMediaPlayer); - } - } - else if (message_name == "seek") - { - } - else if (message_name == "set_loop") - { - } - else if (message_name == "set_volume") - { - if (gLibVLCMediaPlayer) - { - F64 volume = message_in.getValueReal("volume"); - libvlc_audio_set_volume(gLibVLCMediaPlayer, (int)(volume * 100)); - } - } - } + else + if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + { + if (message_name == "stop") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_stop(gLibVLCMediaPlayer); + } + } + else if (message_name == "start") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_play(gLibVLCMediaPlayer); + } + } + else if (message_name == "pause") + { + if (gLibVLCMediaPlayer) + { + libvlc_media_player_pause(gLibVLCMediaPlayer); + } + } + else if (message_name == "seek") + { + } + else if (message_name == "set_loop") + { + } + else if (message_name == "set_volume") + { + if (gLibVLCMediaPlayer) + { + F64 volume = message_in.getValueReal("volume"); + libvlc_audio_set_volume(gLibVLCMediaPlayer, (int)(volume * 100)); + } + } + } } } From aca2dab2d0ff7d66576b5d79f34eb9a706187de4 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Fri, 3 Jun 2016 20:09:33 +0300 Subject: [PATCH 118/278] MAINT-6460 Crash calculating mesh complexity --- indra/newview/llmeshrepository.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0aaed3e286..117507ef39 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4034,6 +4034,11 @@ void LLMeshRepository::uploadError(LLSD& args) //static F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) { + if (header.size() == 0) + { + return 0.f; + } + F32 max_distance = 512.f; F32 dlowest = llmin(radius/0.03f, max_distance); From f9023371ba6b9bae9eef353ca8b42e4619b8ee01 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 8 Jun 2016 03:49:55 +0300 Subject: [PATCH 119/278] MAINT-6461 Added a null check --- indra/llui/llview.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 8f7cac1f61..62c3f401bf 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -588,6 +588,11 @@ void LLView::onVisibilityChange ( BOOL new_visibility ) BOOL log_visibility_change = LLViewerEventRecorder::instance().getLoggingStatus(); BOOST_FOREACH(LLView* viewp, mChildList) { + if (!viewp) + { + continue; + } + // only views that are themselves visible will have their overall visibility affected by their ancestors old_visibility=viewp->getVisible(); From 1adfaa081fd27d653619c84c520c16516c530ab1 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 1 Jun 2016 16:56:04 +0300 Subject: [PATCH 120/278] MAINT-6446 Correct password length handling --- indra/llcommon/llstring.cpp | 27 +++++++++++++++++++ indra/llcommon/llstring.h | 11 ++++++++ indra/llui/lllineeditor.cpp | 7 +---- .../skins/default/xui/en/panel_login.xml | 2 +- .../default/xui/en/panel_login_first.xml | 2 +- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f3b8999883..c45db3b185 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -576,6 +576,33 @@ std::string utf8str_truncate(const std::string& utf8str, const S32 max_len) } } +std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol_len) +{ + if (0 == symbol_len) + { + return std::string(); + } + if ((S32)utf8str.length() <= symbol_len) + { + return utf8str; + } + else + { + int len = 0, byteIndex = 0; + const char* aStr = utf8str.c_str(); + size_t origSize = utf8str.size(); + + for (byteIndex = 0; len < symbol_len && byteIndex < origSize; byteIndex++) + { + if ((aStr[byteIndex] & 0xc0) != 0x80) + { + len += 1; + } + } + return utf8str.substr(0, byteIndex); + } +} + std::string utf8str_substChar( const std::string& utf8str, const llwchar target_char, diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 393f6d7a8c..a40db0f8cc 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -563,6 +563,17 @@ LL_COMMON_API S32 utf8str_compare_insensitive( const std::string& lhs, const std::string& rhs); +/** +* @brief Properly truncate a utf8 string to a maximum character count. +* +* If symbol_len is longer than the string passed in, the return +* value == utf8str. +* @param utf8str A valid utf8 string to truncate. +* @param symbol_len The maximum number of symbols in the return value. +* @return Returns a valid utf8 string with symbol count <= max_len. +*/ +LL_COMMON_API std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol_len); + /** * @brief Replace all occurences of target_char with replace_char * diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index a08cf91a69..492c9315d1 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -400,12 +400,7 @@ void LLLineEditor::setText(const LLStringExplicit &new_text) if (mMaxLengthChars) { - LLWString truncated_wstring = utf8str_to_wstring(truncated_utf8); - if (truncated_wstring.size() > (U32)mMaxLengthChars) - { - truncated_wstring = truncated_wstring.substr(0, mMaxLengthChars); - } - mText.assign(wstring_to_utf8str(truncated_wstring)); + mText.assign(utf8str_symbol_truncate(truncated_utf8, mMaxLengthChars)); } if (all_selected) diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index ae8e78a9d6..ded814bbeb 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -67,7 +67,7 @@ follows="left|top" height="32" left_pad="-11" - max_length_bytes="64" + max_length_chars="16" text_pad_left="8" name="password_edit" label="Password" diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index dc6e27a1ee..35b80c56ab 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -124,7 +124,7 @@ width="200" height="32" left="220" - max_length_bytes="64" + max_length_chars="16" name="password_edit" label="Password" text_pad_left="8" From b61d62bbf405774c3fa51a490e6d13c4288a567c Mon Sep 17 00:00:00 2001 From: Nicky Date: Wed, 1 Jun 2016 22:29:27 +0200 Subject: [PATCH 121/278] GCC compile fix (function returns a pointer, not a bool). --- indra/llui/llview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 8f7cac1f61..bbc55b785c 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -807,7 +807,7 @@ LLView* LLView::childrenHandleHover(S32 x, S32 y, MASK mask) LLView* LLView::childFromPoint(S32 x, S32 y, bool recur) { if (!getVisible()) - return false; + return NULL; BOOST_FOREACH(LLView* viewp, mChildList) { From 254fbd69a65ccbdfbf3678f1f99bda292b4cfc59 Mon Sep 17 00:00:00 2001 From: Nicky Date: Wed, 1 Jun 2016 22:30:12 +0200 Subject: [PATCH 122/278] GCC compile fix, array initialization needs proper type. --- indra/newview/llsurfacepatch.cpp | 4 ++-- indra/newview/llworld.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 2d06b8599c..d28a7cc048 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -230,8 +230,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((F32)(mOriginGlobal.mdV[0] + x)*xyScaleInv, 256.f), + (F32)fmod((F32)(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/llworld.cpp b/indra/newview/llworld.cpp index 11d3706821..cee47a591e 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -957,10 +957,10 @@ void LLWorld::updateWaterObjects() center_y = min_y + (wy >> 1); S32 add_boundary[4] = { - 512 - (max_x - region_x), - 512 - (max_y - region_y), - 512 - (region_x - min_x), - 512 - (region_y - min_y) }; + (S32)(512 - (max_x - region_x)), + (S32)(512 - (max_y - region_y)), + (S32)(512 - (region_x - min_x)), + (S32)(512 - (region_y - min_y)) }; S32 dir; for (dir = 0; dir < 8; dir++) From b78f19f82e94f3fb8c5717bc36656856840f3807 Mon Sep 17 00:00:00 2001 From: Nicky Date: Wed, 1 Jun 2016 22:31:00 +0200 Subject: [PATCH 123/278] Linux: SDL has a dependency on X11 -> Link against it. --- indra/cmake/LLWindow.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index ba07a80f05..80af7ff2ab 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -18,7 +18,7 @@ else (USESYSTEMLIBS) use_prebuilt_binary(SDL) set (SDL_FOUND TRUE) set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux) - set (SDL_LIBRARY SDL directfb fusion direct) + set (SDL_LIBRARY SDL directfb fusion direct X11) endif (LINUX) endif (USESYSTEMLIBS) From bebfe34aac9b217a807baea8fc78ab20c0c94045 Mon Sep 17 00:00:00 2001 From: Nicky Date: Wed, 1 Jun 2016 22:33:30 +0200 Subject: [PATCH 124/278] Linux: Use media_plugin_libvlc for media playback. --- indra/cmake/LibVLCPlugin.cmake | 5 ++++ indra/media_plugins/CMakeLists.txt | 1 + indra/newview/CMakeLists.txt | 1 + .../skins/default/xui/en/mime_types_linux.xml | 30 +++++++++---------- indra/newview/viewer_manifest.py | 12 +++++++- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake index 0d2c46bac0..4472676fb4 100644 --- a/indra/cmake/LibVLCPlugin.cmake +++ b/indra/cmake/LibVLCPlugin.cmake @@ -19,4 +19,9 @@ if (WINDOWS) ) elseif (DARWIN) elseif (LINUX) + # Specify a full path to make sure we get a static link + set(VLC_PLUGIN_LIBRARIES + ${LIBS_PREBUILT_DIR}/lib/libvlc.a + ${LIBS_PREBUILT_DIR}/lib/libvlccore.a + ) endif (WINDOWS) diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt index 6652bd021f..9055e0111a 100644 --- a/indra/media_plugins/CMakeLists.txt +++ b/indra/media_plugins/CMakeLists.txt @@ -4,6 +4,7 @@ add_subdirectory(base) if (LINUX) add_subdirectory(gstreamer010) + add_subdirectory(libvlc) endif (LINUX) if (DARWIN) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9ffc99adb2..f7f01a6e4e 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1969,6 +1969,7 @@ if (LINUX) linux-crash-logger SLPlugin media_plugin_gstreamer010 + media_plugin_libvlc llcommon ) diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml index 84aeaf3b54..7188b1e699 100644 --- a/indra/newview/skins/default/xui/en/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/en/mime_types_linux.xml @@ -130,7 +130,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -163,7 +163,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -174,7 +174,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -196,7 +196,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -218,7 +218,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -295,7 +295,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -306,7 +306,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -317,7 +317,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -328,7 +328,7 @@ audio - media_plugin_gstreamer + media_plugin_libvlc @@ -438,7 +438,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -449,7 +449,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -460,7 +460,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -471,7 +471,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -482,7 +482,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc @@ -493,7 +493,7 @@ movie - media_plugin_gstreamer + media_plugin_libvlc diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e7f517518b..04cc4774e4 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1092,8 +1092,18 @@ class LinuxManifest(ViewerManifest): # plugins if self.prefix(src="", dst="bin/llplugin"): self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so") + self.path("../media_plugins/libvlc/libmedia_plugin_libvlc.so", "libmedia_plugin_libvlc.so") self.end_prefix("bin/llplugin") + if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'vlc', 'plugins'), dst="bin/llplugin/vlc/plugins"): + self.path( "plugins.dat" ) + self.path( "*/*.so" ) + self.end_prefix() + + if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib' ), dst="lib"): + self.path( "libvlc*.so*" ) + self.end_prefix() + # llcommon if not self.path("../llcommon/libllcommon.so", "lib/libllcommon.so"): print "Skipping llcommon.so (assuming llcommon was linked statically)" @@ -1147,7 +1157,7 @@ class LinuxManifest(ViewerManifest): def strip_binaries(self): if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" - self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure + self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install \! -name *.dat | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure class Linux_i686_Manifest(LinuxManifest): def construct(self): From 66e8ed280707b2ada96708bb97f472280bf9431e Mon Sep 17 00:00:00 2001 From: callum_linden Date: Wed, 1 Jun 2016 14:41:13 -0700 Subject: [PATCH 125/278] Point audio MIME types at libVLC media plugin vs CEF --- indra/newview/skins/default/xui/en/mime_types.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml index 2867204318..c27fac6731 100644 --- a/indra/newview/skins/default/xui/en/mime_types.xml +++ b/indra/newview/skins/default/xui/en/mime_types.xml @@ -174,7 +174,7 @@ audio - media_plugin_cef + media_plugin_libvlc @@ -317,7 +317,7 @@ audio - media_plugin_cef + media_plugin_libvlc @@ -328,7 +328,7 @@ audio - media_plugin_cef + media_plugin_libvlc @@ -339,7 +339,7 @@ audio - media_plugin_cef + media_plugin_libvlc From 76947b8fdcabe6904f86f233034304056fea388a Mon Sep 17 00:00:00 2001 From: Nicky Date: Thu, 2 Jun 2016 11:33:37 +0200 Subject: [PATCH 126/278] Linux: Official 3P URL for vlc-bin. --- autobuild.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/autobuild.xml b/autobuild.xml index ff2216d767..0a97b82bf4 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -2159,6 +2159,18 @@ name windows + linux + + archive + + hash + 2f410640df3f9812d1abff02a414cfa8 + url + https://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-vlc-bin/rev/315283/arch/Linux/vlc_bin-2.2.3-linux-201606011750-r10.tar.bz2 + + name + linux + version 2.2.3.315283 From 4796f717c2a2c5756b91fa5281019ff23a10a613 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Thu, 2 Jun 2016 09:49:08 -0700 Subject: [PATCH 127/278] BUG-18252 - media flipped on OS X when played in 2D browser --- indra/media_plugins/quicktime/media_plugin_quicktime.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index 011fd4e051..6d4c6ca43d 100755 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -921,7 +921,10 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string) #endif message.setValueS32("depth", mDepth); message.setValueU32("internalformat", GL_RGB); - message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. + + // note this apparently only has an effect when media is opened in 2D browser. + // see https://jira.secondlife.com/browse/BUG-18252 - media flipped in 2D so flipping it back. + message.setValueBoolean("coords_opengl", false); // true == use OpenGL-style coordinates, false == (0,0) is upper left. message.setValueBoolean("allow_downsample", true); sendMessage(message); } From 1e803a6bd7a89f60407a1fd2b2697d9e5dd23467 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Fri, 10 Jun 2016 12:33:39 -0700 Subject: [PATCH 128/278] MAINT-6486: Be sure that all the script queue functions hit all objects and scripts in those objects. Convert from responders and callbacks to coroutines. --- indra/llmessage/llassetstorage.h | 4 + indra/newview/llcompilequeue.cpp | 928 +++++++++++++++++-------------- indra/newview/llcompilequeue.h | 77 +-- 3 files changed, 555 insertions(+), 454 deletions(-) diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h index 4be677a4b0..0f23754096 100644 --- a/indra/llmessage/llassetstorage.h +++ b/indra/llmessage/llassetstorage.h @@ -181,6 +181,10 @@ protected: // Map of known bad assets typedef std::map toxic_asset_map_t; +// *TODO: these typedefs are passed into the VFS via a legacy C function pointer +// future project would be to convert these to C++ callables (std::function<>) so that +// we can use bind and remove the userData parameter. +// typedef void (*LLGetAssetCallback)(LLVFS *vfs, const LLUUID &asset_id, LLAssetType::EType asset_type, void *user_data, S32 status, LLExtStat ext_status); diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 219bcf0eb0..1c9f766666 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -62,6 +62,45 @@ #include "llviewerassetupload.h" #include "llcorehttputil.h" +namespace +{ + + const std::string QUEUE_EVENTPUMP_NAME("ScriptActionQueue"); + const F32 TIMEOUT_INVENTORY_FETCH(5.0); + + + class ObjectInventoryFetcher: public LLVOInventoryListener + { + public: + typedef boost::shared_ptr ptr_t; + + ObjectInventoryFetcher(LLEventPump &pump, LLViewerObject* object, void* user_data) : + mPump(pump), + LLVOInventoryListener() + { + registerVOInventoryListener(object, this); + } + + virtual void inventoryChanged(LLViewerObject* object, + LLInventoryObject::object_list_t* inventory, + S32 serial_num, + void* user_data); + + void fetchInventory() + { + requestVOInventory(); + } + + const LLInventoryObject::object_list_t & getInventoryList() const { return mInventoryList; } + + private: + LLInventoryObject::object_list_t mInventoryList; + LLEventPump & mPump; + }; + + +} + // *NOTE$: A minor specialization of LLScriptAssetUpload, it does not require a buffer // (and does not save a buffer to the vFS) and it finds the compile queue window and // displays a compiling message. @@ -149,47 +188,6 @@ BOOL LLFloaterScriptQueue::postBuild() return TRUE; } -// This is the callback method for the viewer object currently being -// worked on. -// NOT static, virtual! -void LLFloaterScriptQueue::inventoryChanged(LLViewerObject* viewer_object, - LLInventoryObject::object_list_t* inv, - S32, - void* q_id) -{ - LL_INFOS() << "LLFloaterScriptQueue::inventoryChanged() for object " - << viewer_object->getID() << LL_ENDL; - - //Remove this listener from the object since its - //listener callback is now being executed. - - //We remove the listener here because the function - //removeVOInventoryListener removes the listener from a ViewerObject - //which it internally stores. - - //If we call this further down in the function, calls to handleInventory - //and nextObject may update the internally stored viewer object causing - //the removal of the incorrect listener from an incorrect object. - - //Fixes SL-6119:Recompile scripts fails to complete - removeVOInventoryListener(); - - if (viewer_object && inv && (viewer_object->getID() == mCurrentObjectID) ) - { - handleInventory(viewer_object, inv); - } - else - { - // something went wrong... - // note that we're not working on this one, and move onto the - // next object in the list. - LL_WARNS() << "No inventory for " << mCurrentObjectID - << LL_ENDL; - nextObject(); - } -} - - // static void LLFloaterScriptQueue::onCloseBtn(void* user_data) { @@ -199,7 +197,7 @@ void LLFloaterScriptQueue::onCloseBtn(void* user_data) void LLFloaterScriptQueue::addObject(const LLUUID& id) { - mObjectIDs.push_back(id); + mObjectIDs.insert(id); } BOOL LLFloaterScriptQueue::start() @@ -216,74 +214,24 @@ BOOL LLFloaterScriptQueue::start() return startQueue(); } +void LLFloaterScriptQueue::addProcessingMessage(const std::string &message, const LLSD &args) +{ + std::string buffer(LLTrans::getString(message, args)); + + getChild("queue output")->addSimpleElement(buffer, ADD_BOTTOM); +} + +void LLFloaterScriptQueue::addStringMessage(const std::string &message) +{ + getChild("queue output")->addSimpleElement(message, ADD_BOTTOM); +} + + BOOL LLFloaterScriptQueue::isDone() const { return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0)); } -// go to the next object. If no objects left, it falls out silently -// and waits to be killed by the window being closed. -BOOL LLFloaterScriptQueue::nextObject() -{ - U32 count; - BOOL successful_start = FALSE; - do - { - count = mObjectIDs.size(); - LL_INFOS() << "LLFloaterScriptQueue::nextObject() - " << count - << " objects left to process." << LL_ENDL; - mCurrentObjectID.setNull(); - if(count > 0) - { - successful_start = popNext(); - } - LL_INFOS() << "LLFloaterScriptQueue::nextObject() " - << (successful_start ? "successful" : "unsuccessful") - << LL_ENDL; - } while((mObjectIDs.size() > 0) && !successful_start); - if(isDone() && !mDone) - { - mDone = true; - getChild("queue output")->addSimpleElement(getString("Done"), ADD_BOTTOM); - getChildView("close")->setEnabled(TRUE); - } - return successful_start; -} - -// returns true if the queue has started, otherwise false. This -// method pops the top object off of the queue. -BOOL LLFloaterScriptQueue::popNext() -{ - // get the first element off of the container, and attempt to get - // the inventory. - BOOL rv = FALSE; - S32 count = mObjectIDs.size(); - if(mCurrentObjectID.isNull() && (count > 0)) - { - mCurrentObjectID = mObjectIDs.at(0); - LL_INFOS() << "LLFloaterScriptQueue::popNext() - mCurrentID: " - << mCurrentObjectID << LL_ENDL; - mObjectIDs.erase(mObjectIDs.begin()); - LLViewerObject* obj = gObjectList.findObject(mCurrentObjectID); - if(obj) - { - LL_INFOS() << "LLFloaterScriptQueue::popNext() requesting inv for " - << mCurrentObjectID << LL_ENDL; - LLUUID* id = new LLUUID(getKey().asUUID()); - registerVOInventoryListener(obj,id); - requestVOInventory(); - rv = TRUE; - } - } - return rv; -} - -BOOL LLFloaterScriptQueue::startQueue() -{ - return nextObject(); -} - - ///---------------------------------------------------------------------------- /// Class LLFloaterCompileQueue ///---------------------------------------------------------------------------- @@ -306,7 +254,7 @@ void LLFloaterCompileQueue::experienceIdsReceived( const LLSD& content ) { mExperienceIds.insert(it->asUUID()); } - nextObject(); +// nextObject(); } BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const @@ -314,188 +262,295 @@ BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const return mExperienceIds.find(id) != mExperienceIds.end(); } +// //Attempt to record this asset ID. If it can not be inserted into the set +// //then it has already been processed so return false. +// bool LLFloaterCompileQueue::checkAssetId(const LLUUID &assetId) +// { +// std::pair result = mAssetIds.insert(assetId); +// return result.second; +// } -void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object, - LLInventoryObject::object_list_t* inv) +void LLFloaterCompileQueue::handleHTTPResponse(std::string pumpName, const LLSD &expresult) { - // find all of the lsl, leaving off duplicates. We'll remove - // all matching asset uuids on compilation success. - - typedef std::multimap > uuid_item_map; - uuid_item_map asset_item_map; - - LLInventoryObject::object_list_t::const_iterator it = inv->begin(); - LLInventoryObject::object_list_t::const_iterator end = inv->end(); - for ( ; it != end; ++it) - { - if((*it)->getType() == LLAssetType::AT_LSL_TEXT) - { - LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - // Check permissions before allowing the user to retrieve data. - if (item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID()) && - item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()) ) - { - LLPointer script = new LLViewerInventoryItem(item); - mCurrentScripts.push_back(script); - asset_item_map.insert(std::make_pair(item->getAssetUUID(), item)); - } - } - } - - if (asset_item_map.empty()) - { - // There are no scripts in this object. move on. - nextObject(); - } - else - { - // request all of the assets. - uuid_item_map::iterator iter; - for(iter = asset_item_map.begin(); iter != asset_item_map.end(); iter++) - { - LLInventoryItem *itemp = iter->second; - LLScriptQueueData* datap = new LLScriptQueueData(getKey().asUUID(), - viewer_object->getID(), itemp); - - LLExperienceCache::instance().fetchAssociatedExperience(itemp->getParentUUID(), itemp->getUUID(), - boost::bind(&LLFloaterCompileQueue::requestAsset, datap, _1)); - } - } + LLEventPumps::instance().post(pumpName, expresult); } - -void LLFloaterCompileQueue::requestAsset( LLScriptQueueData* datap, const LLSD& experience ) +class HandleScriptUserData { - LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance("compile_queue", datap->mQueueID); - if(!queue) - { - delete datap; - return; - } - if(experience.has(LLExperienceCache::EXPERIENCE_ID)) - { - datap->mExperienceId=experience[LLExperienceCache::EXPERIENCE_ID].asUUID(); - if(!queue->hasExperience(datap->mExperienceId)) - { - std::string buffer = LLTrans::getString("CompileNoExperiencePerm", LLSD::emptyMap() - .with("SCRIPT", datap->mItem->getName()) - .with("EXPERIENCE", experience[LLExperienceCache::NAME].asString())); - - queue->getChild("queue output")->addSimpleElement(buffer, ADD_BOTTOM); - queue->removeItemByItemID(datap->mItem->getUUID()); - delete datap; - return; - } - } - //LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL; - gAssetStorage->getInvItemAsset(datap->mHost, - gAgent.getID(), - gAgent.getSessionID(), - datap->mItem->getPermissions().getOwner(), - datap->mTaskId, - datap->mItem->getUUID(), - datap->mItem->getAssetUUID(), - datap->mItem->getType(), - LLFloaterCompileQueue::scriptArrived, - (void*)datap); -} +public: + HandleScriptUserData(std::string &pumpname) : + mPumpname(pumpname) + { } -/*static*/ -void LLFloaterCompileQueue::finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId) + const std::string &getPumpName() const { return mPumpname; } + +private: + std::string mPumpname; +}; + +// *TODO: handleSCriptRetrieval is passed into the VFS via a legacy C function pointer +// future project would be to convert these to C++ callables (std::function<>) so that +// we can use bind and remove the userData parameter. +// +void LLFloaterCompileQueue::handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId, + LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus) { + LLSD result(LLSD::emptyMap()); - LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance("compile_queue", LLSD(queueId)); - if (queue) + result["asset_id"] = assetId; + if (status) { - // Bytecode save completed - if (response["compiled"]) + result["error"] = status; + + if (status == LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE) { - std::string message = std::string("Compilation of \"") + scriptName + std::string("\" succeeded"); - - queue->getChild("queue output")->addSimpleElement(message, ADD_BOTTOM); - LL_INFOS() << message << LL_ENDL; + result["message"] = LLTrans::getString("CompileQueueProblemDownloading") + (":"); + result["alert"] = LLTrans::getString("CompileQueueScriptNotFound"); + } + else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status) + { + result["message"] = LLTrans::getString("CompileQueueInsufficientPermFor") + (":"); + result["alert"] = LLTrans::getString("CompileQueueInsufficientPermDownload"); } else { - LLSD compile_errors = response["errors"]; - for (LLSD::array_const_iterator line = compile_errors.beginArray(); - line < compile_errors.endArray(); line++) - { - std::string str = line->asString(); - str.erase(std::remove(str.begin(), str.end(), '\n'), str.end()); + result["message"] = LLTrans::getString("CompileQueueUnknownFailure"); + } + } - queue->getChild("queue output")->addSimpleElement(str, ADD_BOTTOM); + LLEventPumps::instance().post(((HandleScriptUserData *)userData)->getPumpName(), result); + +} + +/*static*/ +void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent) +{ + LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance("compile_queue", parent); + if (!queue) + return; + + queue->experienceIdsReceived(result["experience_ids"]); + + LLHandle hFloater(queue->getDerivedHandle()); + + fnQueueAction_t fn = boost::bind(LLFloaterCompileQueue::processScript, + queue->getDerivedHandle(), _1, _2, _3); + + + LLCoros::instance().launch("ScriptQueueCompile", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, + queue->mStartString, + hFloater, + queue->mObjectIDs, + fn)); + +} + +bool LLFloaterCompileQueue::processScript(LLHandle hfloater, + const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump) +{ + LLSD result; + LLFloaterCompileQueue *that = hfloater.get(); + bool monocompile = that->mMono; + + if (!that) + return false; + + // Initial test to see if we can (or should) attempt to compile the script. + LLInventoryItem *item = dynamic_cast(inventory); + { + + if (!item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID()) || + !item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID())) + { + std::string buffer = "Skipping: " + item->getName() + "(Permissions)"; + that->addStringMessage(buffer); + return true; + } + +// if (!that->checkAssetId(item->getAssetUUID())) +// { +// std::string buffer = "Skipping: " + item->getName() + "(Repeat)"; +// that->addStringMessage(buffer); +// return true; +// } + } + that = NULL; + + // Attempt to retrieve the experience + LLUUID experienceId; + { + LLExperienceCache::instance().fetchAssociatedExperience(inventory->getParentUUID(), inventory->getUUID(), + boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _1)); + + result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, + LLSD().with("timeout", LLSD::Boolean(true))); + + that = hfloater.get(); + if (!that) + { + return false; + } + + if (result.has("timeout") && result["timeout"].asBoolean()) + { + std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + that->addStringMessage(buffer); + return true; + } + + if (result.has(LLExperienceCache::EXPERIENCE_ID)) + { + experienceId = result[LLExperienceCache::EXPERIENCE_ID].asUUID(); + if (!that->hasExperience(experienceId)) + { + that->addProcessingMessage("CompileNoExperiencePerm", LLSD() + .with("SCRIPT", inventory->getName()) + .with("EXPERIENCE", result[LLExperienceCache::NAME].asString())); + return true; } - LL_INFOS() << response["errors"] << LL_ENDL; } } + that = NULL; + + { + HandleScriptUserData userData(pump.getName()); + + + // request the asset + gAssetStorage->getInvItemAsset(LLHost(), + gAgent.getID(), + gAgent.getSessionID(), + item->getPermissions().getOwner(), + object->getID(), + item->getUUID(), + item->getAssetUUID(), + item->getType(), + &LLFloaterCompileQueue::handleScriptRetrieval, + &userData); + + result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, + LLSD().with("timeout", LLSD::Boolean(true))); + } + + that = hfloater.get(); + if (!that) + { + return false; + } + + if (result.has("timeout")) + { + if (result.has("timeout") && result["timeout"].asBoolean()) + { + std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + that->addStringMessage(buffer); + return true; + } + } + + if (result.has("error")) + { + LL_WARNS("SCRIPTQ") << "Inventory fetch returned with error. Code: " << result["error"].asString() << LL_ENDL; + std::string buffer = result["message"].asString() + " " + inventory->getName(); + that->addStringMessage(buffer); + + if (result.has("alert")) + { + LLSD args; + args["MESSAGE"] = result["alert"].asString(); + LLNotificationsUtil::add("SystemMessage", args); + } + return true; + } + + LLUUID assetId = result["asset_id"]; + that = NULL; + + + std::string url = object->getRegion()->getCapability("UpdateScriptTask"); + + + { + LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(object->getID(), + inventory->getUUID(), + assetId, + monocompile ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2, + true, + inventory->getName(), + LLUUID(), + experienceId, + boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _4))); + + LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); + } + + result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, LLSD().with("timeout", LLSD::Boolean(true))); + + that = hfloater.get(); + if (!that) + { + return false; + } + + if (result.has("timeout")) + { + if (result.has("timeout") && result["timeout"].asBoolean()) + { + std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + that->addStringMessage(buffer); + return true; + } + } + + // Bytecode save completed + if (result["compiled"]) + { + std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" succeeded"); + + that->addStringMessage(buffer); + LL_INFOS() << buffer << LL_ENDL; + } + else + { + LLSD compile_errors = result["errors"]; + std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" failed:"); + that->addStringMessage(buffer); + for (LLSD::array_const_iterator line = compile_errors.beginArray(); + line < compile_errors.endArray(); line++) + { + std::string str = line->asString(); + str.erase(std::remove(str.begin(), str.end(), '\n'), str.end()); + + that->addStringMessage(str); + } + LL_INFOS() << result["errors"] << LL_ENDL; + } + + return true; } -// This is the callback for when each script arrives -// static -void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status) +bool LLFloaterCompileQueue::startQueue() { - LL_INFOS() << "LLFloaterCompileQueue::scriptArrived()" << LL_ENDL; - LLScriptQueueData* data = (LLScriptQueueData*)user_data; - if(!data) - { - return; - } - LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance("compile_queue", data->mQueueID); - - std::string buffer; - if(queue && (0 == status)) - { - LLViewerObject* object = gObjectList.findObject(data->mTaskId); - if (object) + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + std::string lookup_url = region->getCapability("GetCreatorExperiences"); + if (!lookup_url.empty()) { - std::string url = object->getRegion()->getCapability("UpdateScriptTask"); - std::string scriptName = data->mItem->getName(); + LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success = + boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID()); - LLBufferedAssetUploadInfo::taskUploadFinish_f proc = boost::bind(&LLFloaterCompileQueue::finishLSLUpload, _1, _2, _3, _4, - scriptName, data->mQueueID); + LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure = + boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID()); - LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(data->mTaskId, data->mItem->getUUID(), asset_id, - (queue->mMono) ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2, - true, scriptName, data->mQueueID, data->mExperienceId, proc)); - - LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url, + success, failure); + return TRUE; } - } - else - { - if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ) - { - LLSD args; - args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound"); - LLNotificationsUtil::add("SystemMessage", args); - - buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mItem->getName(); - } - else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status) - { - LLSD args; - args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload"); - LLNotificationsUtil::add("SystemMessage", args); + } - buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mItem->getName(); - } - else - { - buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mItem->getName(); - } - - LL_WARNS() << "Problem downloading script asset." << LL_ENDL; - if(queue) queue->removeItemByItemID(data->mItem->getUUID()); - } - if(queue && (buffer.size() > 0)) - { - queue->getChild("queue output")->addSimpleElement(buffer, ADD_BOTTOM); - } - delete data; + return true; } @@ -514,40 +569,42 @@ LLFloaterResetQueue::~LLFloaterResetQueue() { } -void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv) +bool LLFloaterResetQueue::resetObjectScripts(LLHandle hfloater, + const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump) { - // find all of the lsl, leaving off duplicates. We'll remove - // all matching asset uuids on compilation success. + LLFloaterScriptQueue *that = hfloater.get(); + if (that) + { + std::string buffer; + buffer = that->getString("Resetting") + (": ") + inventory->getName(); + that->addStringMessage(buffer); + } + + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_ScriptReset); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_Script); + msg->addUUIDFast(_PREHASH_ObjectID, object->getID()); + msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID()); + msg->sendReliable(object->getRegion()->getHost()); - LLInventoryObject::object_list_t::const_iterator it = inv->begin(); - LLInventoryObject::object_list_t::const_iterator end = inv->end(); - for ( ; it != end; ++it) - { - if((*it)->getType() == LLAssetType::AT_LSL_TEXT) - { - LLViewerObject* object = gObjectList.findObject(viewer_obj->getID()); + return true; +} - if (object) - { - LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - std::string buffer; - buffer = getString("Resetting") + (": ") + item->getName(); - getChild("queue output")->addSimpleElement(buffer, ADD_BOTTOM); - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_ScriptReset); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_Script); - msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID()); - msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID()); - msg->sendReliable(object->getRegion()->getHost()); - } - } - } +bool LLFloaterResetQueue::startQueue() +{ + fnQueueAction_t fn = boost::bind(LLFloaterResetQueue::resetObjectScripts, + getDerivedHandle(), _1, _2, _3); - nextObject(); + LLCoros::instance().launch("ScriptResetQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, + mStartString, + getDerivedHandle(), + mObjectIDs, + fn)); + + return true; } ///---------------------------------------------------------------------------- @@ -565,44 +622,46 @@ LLFloaterRunQueue::~LLFloaterRunQueue() { } -void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv) +bool LLFloaterRunQueue::runObjectScripts(LLHandle hfloater, + const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump) { - // find all of the lsl, leaving off duplicates. We'll remove - // all matching asset uuids on compilation success. - LLInventoryObject::object_list_t::const_iterator it = inv->begin(); - LLInventoryObject::object_list_t::const_iterator end = inv->end(); - for ( ; it != end; ++it) - { - if((*it)->getType() == LLAssetType::AT_LSL_TEXT) - { - LLViewerObject* object = gObjectList.findObject(viewer_obj->getID()); + LLFloaterScriptQueue *that = hfloater.get(); + if (that) + { + std::string buffer; + buffer = that->getString("Running") + (": ") + inventory->getName(); + that->addStringMessage(buffer); + } - if (object) - { - LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - LLScrollListCtrl* list = getChild("queue output"); - std::string buffer; - buffer = getString("Running") + (": ") + item->getName(); - list->addSimpleElement(buffer, ADD_BOTTOM); + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_SetScriptRunning); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_Script); + msg->addUUIDFast(_PREHASH_ObjectID, object->getID()); + msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID()); + msg->addBOOLFast(_PREHASH_Running, TRUE); + msg->sendReliable(object->getRegion()->getHost()); - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_SetScriptRunning); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_Script); - msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID()); - msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID()); - msg->addBOOLFast(_PREHASH_Running, TRUE); - msg->sendReliable(object->getRegion()->getHost()); - } - } - } - - nextObject(); + return true; } +bool LLFloaterRunQueue::startQueue() +{ + LLHandle hFloater(getDerivedHandle()); + fnQueueAction_t fn = boost::bind(LLFloaterRunQueue::runObjectScripts, hFloater, _1, _2, _3); + + LLCoros::instance().launch("ScriptRunQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, + mStartString, + hFloater, + mObjectIDs, + fn)); + + return true; +} + + ///---------------------------------------------------------------------------- /// Class LLFloaterNotRunQueue ///---------------------------------------------------------------------------- @@ -618,96 +677,151 @@ LLFloaterNotRunQueue::~LLFloaterNotRunQueue() { } -void LLFloaterCompileQueue::removeItemByItemID(const LLUUID& asset_id) +bool LLFloaterNotRunQueue::stopObjectScripts(LLHandle hfloater, + const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump) { - LL_INFOS() << "LLFloaterCompileQueue::removeItemByAssetID()" << LL_ENDL; - for(S32 i = 0; i < mCurrentScripts.size(); ) - { - if(asset_id == mCurrentScripts.at(i)->getUUID()) - { - vector_replace_with_last(mCurrentScripts, mCurrentScripts.begin() + i); - } - else - { - ++i; - } - } - if(mCurrentScripts.empty()) - { - nextObject(); - } + LLFloaterScriptQueue *that = hfloater.get(); + if (that) + { + std::string buffer; + buffer = that->getString("NotRunning") + (": ") + inventory->getName(); + that->addStringMessage(buffer); + } + + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_SetScriptRunning); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_Script); + msg->addUUIDFast(_PREHASH_ObjectID, object->getID()); + msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID()); + msg->addBOOLFast(_PREHASH_Running, FALSE); + msg->sendReliable(object->getRegion()->getHost()); + + return true; } -BOOL LLFloaterCompileQueue::startQueue() +bool LLFloaterNotRunQueue::startQueue() { - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - std::string lookup_url=region->getCapability("GetCreatorExperiences"); - if(!lookup_url.empty()) - { - LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success = - boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID()); + LLHandle hFloater(getDerivedHandle()); - LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure = - boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID()); + fnQueueAction_t fn = boost::bind(&LLFloaterNotRunQueue::stopObjectScripts, hFloater, _1, _2, _3); + LLCoros::instance().launch("ScriptQueueNotRun", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, + mStartString, + hFloater, + mObjectIDs, + fn)); - LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url, - success, failure); - return TRUE; - } - } - return nextObject(); -} - -/*static*/ -void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent) -{ - LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance("compile_queue", parent); - if (!queue) - return; - - queue->experienceIdsReceived(result["experience_ids"]); -} - -void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv) -{ - // find all of the lsl, leaving off duplicates. We'll remove - // all matching asset uuids on compilation success. - LLInventoryObject::object_list_t::const_iterator it = inv->begin(); - LLInventoryObject::object_list_t::const_iterator end = inv->end(); - for ( ; it != end; ++it) - { - if((*it)->getType() == LLAssetType::AT_LSL_TEXT) - { - LLViewerObject* object = gObjectList.findObject(viewer_obj->getID()); - - if (object) - { - LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - LLScrollListCtrl* list = getChild("queue output"); - std::string buffer; - buffer = getString("NotRunning") + (": ") +item->getName(); - list->addSimpleElement(buffer, ADD_BOTTOM); - - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_SetScriptRunning); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_Script); - msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID()); - msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID()); - msg->addBOOLFast(_PREHASH_Running, FALSE); - msg->sendReliable(object->getRegion()->getHost()); - } - } - } - - nextObject(); + return true; } ///---------------------------------------------------------------------------- /// Local function definitions ///---------------------------------------------------------------------------- +void ObjectInventoryFetcher::inventoryChanged(LLViewerObject* object, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data) +{ + mInventoryList.clear(); + mInventoryList.assign(inventory->begin(), inventory->end()); + + mPump.post(LLSD().with("changed", LLSD::Boolean(true))); + +} + +void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, LLHandle hfloater, + uuid_list_t objectList, fnQueueAction_t func) +{ + LLCoros::set_consuming(true); + LLFloaterScriptQueue * floater(NULL); + LLEventMailDrop maildrop(QUEUE_EVENTPUMP_NAME, true); + +// floater = hfloater.get(); +// floater->addProcessingMessage("Starting", +// LLSD() +// .with("[START]", action) +// .with("[COUNT]", LLSD::Integer(objectList.size()))); +// floater = NULL; + + for (uuid_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj) + { + bool firstForObject = true; + LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << (*itObj).asString() << LL_ENDL; + + LLPointer obj = gObjectList.findObject(*itObj); + LLInventoryObject::object_list_t inventory; + if (obj) + { + ObjectInventoryFetcher::ptr_t fetcher(new ObjectInventoryFetcher(maildrop, obj, NULL)); + + fetcher->fetchInventory(); + + LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, TIMEOUT_INVENTORY_FETCH, + LLSD().with("timeout", LLSD::Boolean(true))); + + if (result.has("timeout") && result["timeout"].asBoolean()) + { + LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << (*itObj).asString() << + ". Skipping to next object." << LL_ENDL; + continue; + } + + inventory.assign(fetcher->getInventoryList().begin(), fetcher->getInventoryList().end()); + } + else + { + LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << (*itObj) << + ". Skipping to next." << LL_ENDL; + continue; + } + + // TODO: Get the name of the object we are looking at here so that we can display it below. + //std::string objName = (dynamic_cast(obj.get()))->getName(); + LL_DEBUGS("SCRIPTQ") << "Object has " << inventory.size() << " items." << LL_ENDL; + + for (LLInventoryObject::object_list_t::iterator itInv = inventory.begin(); + itInv != inventory.end(); ++itInv) + { + floater = hfloater.get(); + if (!floater) + { + LL_WARNS("SCRIPTQ") << "Script Queue floater closed! Canceling remaining ops" << LL_ENDL; + break; + } + + // note, we have a smart pointer to the obj above... but if we didn't we'd check that + // it still exists here. + + if (((*itInv)->getType() == LLAssetType::AT_LSL_TEXT)) + { + LL_DEBUGS("SCRIPTQ") << "Inventory item " << (*itInv)->getUUID().asString() << "\"" << (*itInv)->getName() << "\"" << LL_ENDL; + if (firstForObject) + { + //floater->addStringMessage(objName + ":"); + firstForObject = false; + } + + if (!func(obj, (*itInv), maildrop)) + { + continue; + } + } + + llcoro::suspend(); + } + // Just test to be sure the floater is still present before calling the func + if (!hfloater.get()) + { + LL_WARNS("SCRIPTQ") << "Script Queue floater dismissed." << LL_ENDL; + break; + } + + } + + floater = hfloater.get(); + if (floater) + { + floater->addStringMessage("Done"); + floater->getChildView("close")->setEnabled(TRUE); + } +} diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index 46bcb9746b..271ac5e05d 100644 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -37,6 +37,8 @@ #include "llviewerinventory.h" +#include "llevents.h" + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLFloaterScriptQueue // @@ -48,7 +50,7 @@ // scripts manipulated. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLFloaterScriptQueue : public LLFloater, public LLVOInventoryListener +class LLFloaterScriptQueue : public LLFloater/*, public LLVOInventoryListener*/ { public: LLFloaterScriptQueue(const LLSD& key); @@ -64,29 +66,18 @@ public: // start() returns TRUE if the queue has started, otherwise FALSE. BOOL start(); -protected: - // This is the callback method for the viewer object currently - // being worked on. - /*virtual*/ void inventoryChanged(LLViewerObject* obj, - LLInventoryObject::object_list_t* inv, - S32 serial_num, - void* queue); - - // This is called by inventoryChanged - virtual void handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv) = 0; + void addProcessingMessage(const std::string &message, const LLSD &args); + void addStringMessage(const std::string &message); + std::string getStartString() const { return mStartString; } + +protected: static void onCloseBtn(void* user_data); // returns true if this is done BOOL isDone() const; - virtual BOOL startQueue(); - - // go to the next object. If no objects left, it falls out - // silently and waits to be killed by the deleteIfDone() callback. - BOOL nextObject(); - BOOL popNext(); + virtual bool startQueue() = 0; void setStartString(const std::string& s) { mStartString = s; } @@ -96,12 +87,16 @@ protected: LLButton* mCloseBtn; // Object Queue - std::vector mObjectIDs; + uuid_list_t mObjectIDs; LLUUID mCurrentObjectID; bool mDone; std::string mStartString; bool mMono; + + typedef boost::function &, LLInventoryObject*, LLEventPump &)> fnQueueAction_t; + static void objectScriptProcessingQueueCoro(std::string action, LLHandle hfloater, uuid_list_t objectList, fnQueueAction_t func); + }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -122,8 +117,6 @@ class LLFloaterCompileQueue : public LLFloaterScriptQueue { friend class LLFloaterReg; public: - // remove any object in mScriptScripts with the matching uuid. - void removeItemByItemID(const LLUUID& item_id); void experienceIdsReceived( const LLSD& content ); BOOL hasExperience(const LLUUID& id)const; @@ -132,27 +125,17 @@ protected: LLFloaterCompileQueue(const LLSD& key); virtual ~LLFloaterCompileQueue(); - // This is called by inventoryChanged - virtual void handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv); + virtual bool startQueue(); - static void requestAsset(struct LLScriptQueueData* datap, const LLSD& experience); + static bool processScript(LLHandle hfloater, const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump); - - static void finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId); - - // This is the callback for when each script arrives - static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id, - LLAssetType::EType type, - void* user_data, S32 status, LLExtStat ext_status); - - virtual BOOL startQueue(); -protected: - LLViewerInventoryItem::item_array_t mCurrentScripts; + //bool checkAssetId(const LLUUID &assetId); + static void handleHTTPResponse(std::string pumpName, const LLSD &expresult); + static void handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId, LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus); private: static void processExperienceIdResults(LLSD result, LLUUID parent); - + //uuid_list_t mAssetIds; // list of asset IDs processed. uuid_list_t mExperienceIds; }; @@ -169,9 +152,9 @@ protected: LLFloaterResetQueue(const LLSD& key); virtual ~LLFloaterResetQueue(); - // This is called by inventoryChanged - virtual void handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv); + static bool resetObjectScripts(LLHandle hfloater, const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump); + + virtual bool startQueue(); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -186,10 +169,10 @@ class LLFloaterRunQueue : public LLFloaterScriptQueue protected: LLFloaterRunQueue(const LLSD& key); virtual ~LLFloaterRunQueue(); - - // This is called by inventoryChanged - virtual void handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv); + + static bool runObjectScripts(LLHandle hfloater, const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump); + + virtual bool startQueue(); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -205,9 +188,9 @@ protected: LLFloaterNotRunQueue(const LLSD& key); virtual ~LLFloaterNotRunQueue(); - // This is called by inventoryChanged - virtual void handleInventory(LLViewerObject* viewer_obj, - LLInventoryObject::object_list_t* inv); + static bool stopObjectScripts(LLHandle hfloater, const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump); + + virtual bool startQueue(); }; #endif // LL_LLCOMPILEQUEUE_H From c8b662814093fa6ed592fb9cb5118a1401fdc488 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Fri, 10 Jun 2016 13:25:22 -0700 Subject: [PATCH 129/278] Make string ref in HandleScriptUserData const --- indra/newview/llcompilequeue.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 1c9f766666..c592a6c0c6 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -98,6 +98,19 @@ namespace LLEventPump & mPump; }; + class HandleScriptUserData + { + public: + HandleScriptUserData(const std::string &pumpname) : + mPumpname(pumpname) + { } + + const std::string &getPumpName() const { return mPumpname; } + + private: + std::string mPumpname; + }; + } @@ -275,19 +288,6 @@ void LLFloaterCompileQueue::handleHTTPResponse(std::string pumpName, const LLSD LLEventPumps::instance().post(pumpName, expresult); } -class HandleScriptUserData -{ -public: - HandleScriptUserData(std::string &pumpname) : - mPumpname(pumpname) - { } - - const std::string &getPumpName() const { return mPumpname; } - -private: - std::string mPumpname; -}; - // *TODO: handleSCriptRetrieval is passed into the VFS via a legacy C function pointer // future project would be to convert these to C++ callables (std::function<>) so that // we can use bind and remove the userData parameter. From c664ae73c3fa46e430306d7b24af3026246f8097 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 15 Jun 2016 18:01:44 +0300 Subject: [PATCH 130/278] MAINT-6460 additional header check --- indra/newview/llmeshrepository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 117507ef39..39ebf9f95b 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4034,7 +4034,7 @@ void LLMeshRepository::uploadError(LLSD& args) //static F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) { - if (header.size() == 0) + if (header.size() == 0 || header.has("404") || header["version"].asInteger() > MAX_MESH_VERSION) { return 0.f; } From 0597f876469d8ef672a270528cbeecc069ab5e66 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 15 Jun 2016 13:42:39 -0700 Subject: [PATCH 131/278] MAINT-6486: Use literal string. Don't try and look it up. --- indra/newview/llcompilequeue.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index c592a6c0c6..ea2e284305 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -393,7 +393,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + std::string buffer = "Timeout: " + inventory->getName(); that->addStringMessage(buffer); return true; } @@ -443,7 +443,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat { if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + std::string buffer = "Timeout: " + inventory->getName(); that->addStringMessage(buffer); return true; } @@ -497,7 +497,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat { if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = that->getString("Timeout") + ": " + inventory->getName(); + std::string buffer = "Timeout: " + inventory->getName(); that->addStringMessage(buffer); return true; } From 2b287b6bf7313100c78cc7c6186654e832c1887f Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 16 Jun 2016 23:27:39 +0300 Subject: [PATCH 132/278] MAINT-6511 Added a null check in LLFloaterView::restoreAll --- indra/llui/llfloater.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 5ea9f5b6cc..69038a8627 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2321,7 +2321,10 @@ void LLFloaterView::restoreAll() for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { LLFloater* floaterp = (LLFloater*)*child_it; - floaterp->setMinimized(FALSE); + if (floaterp) + { + floaterp->setMinimized(FALSE); + } } // *FIX: make sure dependents are restored From e2ee3a151978d1783baecefd337530bd7fde7c9b Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Thu, 30 Jun 2016 16:47:12 +0300 Subject: [PATCH 133/278] MAINT-6534 Resetting scripts fails due to small timeout --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llcompilequeue.cpp | 11 ++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4912f27e70..ce2d652c37 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3701,6 +3701,17 @@ Value 1 + QueueInventoryFetchTimeout + + Comment + Max time llcompilequeue will wait for inventory fetch to complete (in seconds) + Persist + 1 + Type + F32 + Value + 40.0 + FindLandArea Comment diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index ea2e284305..de7bc1e3c5 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -66,7 +66,6 @@ namespace { const std::string QUEUE_EVENTPUMP_NAME("ScriptActionQueue"); - const F32 TIMEOUT_INVENTORY_FETCH(5.0); class ObjectInventoryFetcher: public LLVOInventoryListener @@ -351,6 +350,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat LLSD result; LLFloaterCompileQueue *that = hfloater.get(); bool monocompile = that->mMono; + F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout"); if (!that) return false; @@ -382,7 +382,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat LLExperienceCache::instance().fetchAssociatedExperience(inventory->getParentUUID(), inventory->getUUID(), boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _1)); - result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, + result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true))); that = hfloater.get(); @@ -429,7 +429,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat &LLFloaterCompileQueue::handleScriptRetrieval, &userData); - result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, + result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true))); } @@ -485,7 +485,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); } - result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, LLSD().with("timeout", LLSD::Boolean(true))); + result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true))); that = hfloater.get(); if (!that) @@ -735,6 +735,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L LLCoros::set_consuming(true); LLFloaterScriptQueue * floater(NULL); LLEventMailDrop maildrop(QUEUE_EVENTPUMP_NAME, true); + F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout"); // floater = hfloater.get(); // floater->addProcessingMessage("Starting", @@ -756,7 +757,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L fetcher->fetchInventory(); - LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, TIMEOUT_INVENTORY_FETCH, + LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true))); if (result.has("timeout") && result["timeout"].asBoolean()) From 33be227716b0fa675f010555e753f45adb746971 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Thu, 2 Jun 2016 19:59:35 +0300 Subject: [PATCH 134/278] MAINT-6448 PERMISSION_DEBIT notification should default to Deny --- indra/newview/lltoastscriptquestion.cpp | 19 +++++++++++++++++++ indra/newview/lltoastscriptquestion.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/indra/newview/lltoastscriptquestion.cpp b/indra/newview/lltoastscriptquestion.cpp index 91ba8c0247..7a3a1d8fd7 100644 --- a/indra/newview/lltoastscriptquestion.cpp +++ b/indra/newview/lltoastscriptquestion.cpp @@ -54,6 +54,19 @@ BOOL LLToastScriptQuestion::postBuild() return TRUE; } + +// virtual +void LLToastScriptQuestion::setFocus(BOOL b) +{ + LLToastPanel::setFocus(b); + // toast can fade out and disappear with focus ON, so reset to default anyway + LLButton* dfbutton = getDefaultButton(); + if (dfbutton && dfbutton->getVisible() && dfbutton->getEnabled()) + { + dfbutton->setFocus(b); + } +} + void LLToastScriptQuestion::snapToMessageHeight() { LLTextBox* mMessage = getChild("top_info_message"); @@ -118,6 +131,12 @@ void LLToastScriptQuestion::createButtons() button->setRect(rect); buttons_width += rect.getWidth() + LEFT_PAD; + + if (form_element.has("default") && form_element["default"].asBoolean()) + { + button->setFocus(TRUE); + setDefaultBtn(button); + } } } } diff --git a/indra/newview/lltoastscriptquestion.h b/indra/newview/lltoastscriptquestion.h index 3a557f60f6..a756f88415 100644 --- a/indra/newview/lltoastscriptquestion.h +++ b/indra/newview/lltoastscriptquestion.h @@ -39,6 +39,8 @@ public: virtual BOOL postBuild(); virtual ~LLToastScriptQuestion(){}; + /*virtual*/ void setFocus(BOOL b); + private: void snapToMessageHeight(); From 9f789ddfbad656b0a6e1f59b592795ad22bdd061 Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Thu, 2 Jun 2016 20:23:46 +0300 Subject: [PATCH 135/278] MAINT-5194 Visual Outfit browser Made refactoring of LLFloaterOutfitSnapshot and LLFloaterSnapshot --- indra/newview/CMakeLists.txt | 1 + indra/newview/llappviewer.cpp | 3 +- indra/newview/llfloaterfacebook.cpp | 1026 +++++++++---------- indra/newview/llfloaterflickr.cpp | 4 +- indra/newview/llfloateroutfitsnapshot.cpp | 1065 ++++---------------- indra/newview/llfloateroutfitsnapshot.h | 104 +- indra/newview/llfloatersnapshot.cpp | 735 ++++++-------- indra/newview/llfloatersnapshot.h | 175 +++- indra/newview/llfloatertwitter.cpp | 4 +- indra/newview/lloutfitgallery.cpp | 8 +- indra/newview/llpanelsnapshot.cpp | 16 +- indra/newview/llpanelsnapshot.h | 20 +- indra/newview/llpanelsnapshotinventory.cpp | 42 +- indra/newview/llpanelsnapshotlocal.cpp | 30 +- indra/newview/llpanelsnapshotoptions.cpp | 5 +- indra/newview/llpanelsnapshotpostcard.cpp | 20 +- indra/newview/llpanelsnapshotprofile.cpp | 6 +- indra/newview/llsnapshotlivepreview.cpp | 38 +- indra/newview/llsnapshotlivepreview.h | 18 +- indra/newview/llsnapshotmodel.h | 55 + indra/newview/llviewerassetupload.cpp | 9 +- indra/newview/llviewermenufile.cpp | 24 +- indra/newview/llviewerwindow.cpp | 10 +- indra/newview/llviewerwindow.h | 13 +- indra/newview/llviewerwindowlistener.cpp | 6 +- 25 files changed, 1389 insertions(+), 2048 deletions(-) create mode 100644 indra/newview/llsnapshotmodel.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index de0dff61bb..5d7ab0c985 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1144,6 +1144,7 @@ set(viewer_HEADER_FILES llsky.h llslurl.h llsnapshotlivepreview.h + llsnapshotmodel.h llspatialpartition.h llspeakers.h llspeakingindicatormanager.h diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 86cf1cecf3..a92ad4e41d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1448,8 +1448,7 @@ bool LLAppViewer::mainLoop() display(); pingMainloopTimeout("Main:Snapshot"); LLFloaterSnapshot::update(); // take snapshots - //TODO: Make one call by moving LLFloaterOutfitSnapshot::update() to LLFloaterSnapshotBase class - LLFloaterOutfitSnapshot::update(); + LLFloaterOutfitSnapshot::update(); gGLActive = FALSE; } } diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp index ff6e342d62..b1d6d8be82 100644 --- a/indra/newview/llfloaterfacebook.cpp +++ b/indra/newview/llfloaterfacebook.cpp @@ -87,7 +87,7 @@ S32 compute_jpeg_quality(S32 width, S32 height) { F32 target_compression_ratio = (F32)(width * height * 3) / (F32)(TARGET_DATA_SIZE); S32 quality = (S32)(110.0f - (2.0f * target_compression_ratio)); - return llclamp(quality,MIN_QUALITY,MAX_QUALITY); + return llclamp(quality, MIN_QUALITY, MAX_QUALITY); } /////////////////////////// @@ -95,52 +95,52 @@ S32 compute_jpeg_quality(S32 width, S32 height) /////////////////////////// LLFacebookStatusPanel::LLFacebookStatusPanel() : - mMessageTextEditor(NULL), - mPostButton(NULL), + mMessageTextEditor(NULL), + mPostButton(NULL), mCancelButton(NULL), - mAccountCaptionLabel(NULL), - mAccountNameLabel(NULL), - mPanelButtons(NULL), - mConnectButton(NULL), - mDisconnectButton(NULL) + mAccountCaptionLabel(NULL), + mAccountNameLabel(NULL), + mPanelButtons(NULL), + mConnectButton(NULL), + mDisconnectButton(NULL) { - mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this)); - mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this)); + mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this)); + mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this)); - setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2)); - mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this)); + mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this)); } BOOL LLFacebookStatusPanel::postBuild() { - mAccountCaptionLabel = getChild("account_caption_label"); - mAccountNameLabel = getChild("account_name_label"); - mPanelButtons = getChild("panel_buttons"); - mConnectButton = getChild("connect_btn"); - mDisconnectButton = getChild("disconnect_btn"); + mAccountCaptionLabel = getChild("account_caption_label"); + mAccountNameLabel = getChild("account_name_label"); + mPanelButtons = getChild("panel_buttons"); + mConnectButton = getChild("connect_btn"); + mDisconnectButton = getChild("disconnect_btn"); - mMessageTextEditor = getChild("status_message"); - mPostButton = getChild("post_status_btn"); - mCancelButton = getChild("cancel_status_btn"); + mMessageTextEditor = getChild("status_message"); + mPostButton = getChild("post_status_btn"); + mCancelButton = getChild("cancel_status_btn"); - return LLPanel::postBuild(); + return LLPanel::postBuild(); } void LLFacebookStatusPanel::draw() { - LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); + LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); - //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress - bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; - mDisconnectButton->setEnabled(!disconnecting); + //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress + bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; + mDisconnectButton->setEnabled(!disconnecting); - //Disable the 'connect' button when a connection is in progress - bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; - mConnectButton->setEnabled(!connecting); + //Disable the 'connect' button when a connection is in progress + bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; + mConnectButton->setEnabled(!connecting); if (mMessageTextEditor && mPostButton && mCancelButton) - { + { bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing()); std::string message = mMessageTextEditor->getValue().asString(); mMessageTextEditor->setEnabled(no_ongoing_connection); @@ -148,175 +148,175 @@ void LLFacebookStatusPanel::draw() mPostButton->setEnabled(no_ongoing_connection && !message.empty()); } - LLPanel::draw(); + LLPanel::draw(); } void LLFacebookStatusPanel::onSend() { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1)); - - // Connect to Facebook if necessary and then post - if (LLFacebookConnect::instance().isConnected()) - { - sendStatus(); - } - else - { - LLFacebookConnect::instance().checkConnectionToFacebook(true); - } + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1)); + + // Connect to Facebook if necessary and then post + if (LLFacebookConnect::instance().isConnected()) + { + sendStatus(); + } + else + { + LLFacebookConnect::instance().checkConnectionToFacebook(true); + } } bool LLFacebookStatusPanel::onFacebookConnectStateChange(const LLSD& data) { - switch (data.get("enum").asInteger()) - { - case LLFacebookConnect::FB_CONNECTED: - sendStatus(); - break; + switch (data.get("enum").asInteger()) + { + case LLFacebookConnect::FB_CONNECTED: + sendStatus(); + break; - case LLFacebookConnect::FB_POSTED: - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); - clearAndClose(); - break; - } + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); + clearAndClose(); + break; + } - return false; + return false; } bool LLFacebookStatusPanel::onFacebookConnectAccountStateChange(const LLSD& data) { - if(LLFacebookConnect::instance().isConnected()) - { - //In process of disconnecting so leave the layout as is - if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) - { - showConnectedLayout(); - } - } - else - { - showDisconnectedLayout(); - } + if (LLFacebookConnect::instance().isConnected()) + { + //In process of disconnecting so leave the layout as is + if (data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) + { + showConnectedLayout(); + } + } + else + { + showDisconnectedLayout(); + } - return false; + return false; } void LLFacebookStatusPanel::sendStatus() { - std::string message = mMessageTextEditor->getValue().asString(); - if (!message.empty()) - { - LLFacebookConnect::instance().updateStatus(message); - } + std::string message = mMessageTextEditor->getValue().asString(); + if (!message.empty()) + { + LLFacebookConnect::instance().updateStatus(message); + } } void LLFacebookStatusPanel::onVisibilityChange(BOOL visible) { - if(visible) - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1)); + if (visible) + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1)); - LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this)); + LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this)); - //Connected - if(LLFacebookConnect::instance().isConnected()) - { - showConnectedLayout(); - } - //Check if connected (show disconnected layout in meantime) - else - { - showDisconnectedLayout(); - } + //Connected + if (LLFacebookConnect::instance().isConnected()) + { + showConnectedLayout(); + } + //Check if connected (show disconnected layout in meantime) + else + { + showDisconnectedLayout(); + } if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) { LLFacebookConnect::instance().checkConnectionToFacebook(); } - } - else - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); - } + } + else + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); + } } bool LLFacebookStatusPanel::onFacebookConnectInfoChange() { - LLSD info = LLFacebookConnect::instance().getInfo(); - std::string clickable_name; + LLSD info = LLFacebookConnect::instance().getInfo(); + std::string clickable_name; - //Strings of format [http://www.somewebsite.com Click Me] become clickable text - if(info.has("link") && info.has("name")) - { - clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; - } + //Strings of format [http://www.somewebsite.com Click Me] become clickable text + if (info.has("link") && info.has("name")) + { + clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; + } - mAccountNameLabel->setText(clickable_name); + mAccountNameLabel->setText(clickable_name); - return false; + return false; } void LLFacebookStatusPanel::showConnectButton() { - if(!mConnectButton->getVisible()) - { - mConnectButton->setVisible(TRUE); - mDisconnectButton->setVisible(FALSE); - } + if (!mConnectButton->getVisible()) + { + mConnectButton->setVisible(TRUE); + mDisconnectButton->setVisible(FALSE); + } } void LLFacebookStatusPanel::hideConnectButton() { - if(mConnectButton->getVisible()) - { - mConnectButton->setVisible(FALSE); - mDisconnectButton->setVisible(TRUE); - } + if (mConnectButton->getVisible()) + { + mConnectButton->setVisible(FALSE); + mDisconnectButton->setVisible(TRUE); + } } void LLFacebookStatusPanel::showDisconnectedLayout() { - mAccountCaptionLabel->setText(getString("facebook_disconnected")); - mAccountNameLabel->setText(std::string("")); - showConnectButton(); + mAccountCaptionLabel->setText(getString("facebook_disconnected")); + mAccountNameLabel->setText(std::string("")); + showConnectButton(); } void LLFacebookStatusPanel::showConnectedLayout() { - LLFacebookConnect::instance().loadFacebookInfo(); + LLFacebookConnect::instance().loadFacebookInfo(); - mAccountCaptionLabel->setText(getString("facebook_connected")); - hideConnectButton(); + mAccountCaptionLabel->setText(getString("facebook_connected")); + hideConnectButton(); } void LLFacebookStatusPanel::onConnect() { - LLFacebookConnect::instance().checkConnectionToFacebook(true); + LLFacebookConnect::instance().checkConnectionToFacebook(true); - //Clear only the facebook browser cookies so that the facebook login screen appears - LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); + //Clear only the facebook browser cookies so that the facebook login screen appears + LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); } void LLFacebookStatusPanel::onDisconnect() { - LLFacebookConnect::instance().disconnectFromFacebook(); + LLFacebookConnect::instance().disconnectFromFacebook(); - LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); + LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); } void LLFacebookStatusPanel::clearAndClose() { - mMessageTextEditor->setValue(""); + mMessageTextEditor->setValue(""); - LLFloater* floater = getParentByType(); - if (floater) - { - floater->closeFloater(); - } + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } } /////////////////////////// @@ -324,89 +324,89 @@ void LLFacebookStatusPanel::clearAndClose() /////////////////////////// LLFacebookPhotoPanel::LLFacebookPhotoPanel() : -mResolutionComboBox(NULL), -mRefreshBtn(NULL), -mBtnPreview(NULL), -mWorkingLabel(NULL), -mThumbnailPlaceholder(NULL), -mCaptionTextBox(NULL), -mPostButton(NULL), -mBigPreviewFloater(NULL), -mQuality(MAX_QUALITY) + mResolutionComboBox(NULL), + mRefreshBtn(NULL), + mBtnPreview(NULL), + mWorkingLabel(NULL), + mThumbnailPlaceholder(NULL), + mCaptionTextBox(NULL), + mPostButton(NULL), + mBigPreviewFloater(NULL), + mQuality(MAX_QUALITY) { - mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLFacebookPhotoPanel::onSend, this)); - mCommitCallbackRegistrar.add("SocialSharing.RefreshPhoto", boost::bind(&LLFacebookPhotoPanel::onClickNewSnapshot, this)); - mCommitCallbackRegistrar.add("SocialSharing.BigPreview", boost::bind(&LLFacebookPhotoPanel::onClickBigPreview, this)); + mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLFacebookPhotoPanel::onSend, this)); + mCommitCallbackRegistrar.add("SocialSharing.RefreshPhoto", boost::bind(&LLFacebookPhotoPanel::onClickNewSnapshot, this)); + mCommitCallbackRegistrar.add("SocialSharing.BigPreview", boost::bind(&LLFacebookPhotoPanel::onClickBigPreview, this)); } LLFacebookPhotoPanel::~LLFacebookPhotoPanel() { - if(mPreviewHandle.get()) - { - mPreviewHandle.get()->die(); - } + if (mPreviewHandle.get()) + { + mPreviewHandle.get()->die(); + } } BOOL LLFacebookPhotoPanel::postBuild() { - setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2)); - - mResolutionComboBox = getChild("resolution_combobox"); - mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw! - mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); - mFilterComboBox = getChild("filters_combobox"); - mFilterComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); - mRefreshBtn = getChild("new_snapshot_btn"); - mBtnPreview = getChild("big_preview_btn"); - mWorkingLabel = getChild("working_lbl"); - mThumbnailPlaceholder = getChild("thumbnail_placeholder"); - mCaptionTextBox = getChild("photo_caption"); - mPostButton = getChild("post_photo_btn"); - mCancelButton = getChild("cancel_photo_btn"); - mBigPreviewFloater = dynamic_cast(LLFloaterReg::getInstance("big_preview")); + setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2)); - // Update filter list + mResolutionComboBox = getChild("resolution_combobox"); + mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw! + mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); + mFilterComboBox = getChild("filters_combobox"); + mFilterComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); + mRefreshBtn = getChild("new_snapshot_btn"); + mBtnPreview = getChild("big_preview_btn"); + mWorkingLabel = getChild("working_lbl"); + mThumbnailPlaceholder = getChild("thumbnail_placeholder"); + mCaptionTextBox = getChild("photo_caption"); + mPostButton = getChild("post_photo_btn"); + mCancelButton = getChild("cancel_photo_btn"); + mBigPreviewFloater = dynamic_cast(LLFloaterReg::getInstance("big_preview")); + + // Update filter list std::vector filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); - LLComboBox* filterbox = static_cast(mFilterComboBox); + LLComboBox* filterbox = static_cast(mFilterComboBox); for (U32 i = 0; i < filter_list.size(); i++) - { + { filterbox->add(filter_list[i]); } - return LLPanel::postBuild(); + return LLPanel::postBuild(); } // virtual S32 LLFacebookPhotoPanel::notify(const LLSD& info) { - if (info.has("snapshot-updating")) - { + if (info.has("snapshot-updating")) + { // Disable the Post button and whatever else while the snapshot is not updated // updateControls(); - return 1; - } - - if (info.has("snapshot-updated")) - { + return 1; + } + + if (info.has("snapshot-updated")) + { // Enable the send/post/save buttons. updateControls(); - - // The refresh button is initially hidden. We show it after the first update, - // i.e. after snapshot is taken - LLUICtrl * refresh_button = getRefreshBtn(); - if (!refresh_button->getVisible()) - { - refresh_button->setVisible(true); - } - return 1; - } - - return 0; + + // The refresh button is initially hidden. We show it after the first update, + // i.e. after snapshot is taken + LLUICtrl * refresh_button = getRefreshBtn(); + if (!refresh_button->getVisible()) + { + refresh_button->setVisible(true); + } + return 1; + } + + return 0; } void LLFacebookPhotoPanel::draw() -{ - LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); +{ + LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); // Enable interaction only if no transaction with the service is on-going (prevent duplicated posts) bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing()); @@ -416,98 +416,98 @@ void LLFacebookPhotoPanel::draw() mFilterComboBox->setEnabled(no_ongoing_connection); mRefreshBtn->setEnabled(no_ongoing_connection); mBtnPreview->setEnabled(no_ongoing_connection); - + // Reassign the preview floater if we have the focus and the preview exists if (hasFocus() && isPreviewVisible()) { attachPreview(); } - + // Toggle the button state as appropriate bool preview_active = (isPreviewVisible() && mBigPreviewFloater->isFloaterOwner(getParentByType())); - mBtnPreview->setToggleState(preview_active); - + mBtnPreview->setToggleState(preview_active); + // Display the thumbnail if one is available - if (previewp && previewp->getThumbnailImage()) - { - const LLRect& thumbnail_rect = mThumbnailPlaceholder->getRect(); - const S32 thumbnail_w = previewp->getThumbnailWidth(); - const S32 thumbnail_h = previewp->getThumbnailHeight(); + if (previewp && previewp->getThumbnailImage()) + { + const LLRect& thumbnail_rect = mThumbnailPlaceholder->getRect(); + const S32 thumbnail_w = previewp->getThumbnailWidth(); + const S32 thumbnail_h = previewp->getThumbnailHeight(); - // calc preview offset within the preview rect - const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; - const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; - S32 offset_x = thumbnail_rect.mLeft + local_offset_x; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y; + // calc preview offset within the preview rect + const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2; + const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2; + S32 offset_x = thumbnail_rect.mLeft + local_offset_x; + S32 offset_y = thumbnail_rect.mBottom + local_offset_y; - gGL.matrixMode(LLRender::MM_MODELVIEW); - // Apply floater transparency to the texture unless the floater is focused. - F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); - LLColor4 color = LLColor4::white; - gl_draw_scaled_image(offset_x, offset_y, - thumbnail_w, thumbnail_h, - previewp->getThumbnailImage(), color % alpha); - } + gGL.matrixMode(LLRender::MM_MODELVIEW); + // Apply floater transparency to the texture unless the floater is focused. + F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); + LLColor4 color = LLColor4::white; + gl_draw_scaled_image(offset_x, offset_y, + thumbnail_w, thumbnail_h, + previewp->getThumbnailImage(), color % alpha); + } // Update the visibility of the working (computing preview) label mWorkingLabel->setVisible(!(previewp && previewp->getSnapshotUpToDate())); - + // Enable Post if we have a preview to send and no on going connection being processed mPostButton->setEnabled(no_ongoing_connection && (previewp && previewp->getSnapshotUpToDate())); - + // Draw the rest of the panel on top of it - LLPanel::draw(); + LLPanel::draw(); } LLSnapshotLivePreview* LLFacebookPhotoPanel::getPreviewView() { - LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)mPreviewHandle.get(); - return previewp; + LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)mPreviewHandle.get(); + return previewp; } void LLFacebookPhotoPanel::onVisibilityChange(BOOL visible) { - if (visible) - { - if (mPreviewHandle.get()) - { - LLSnapshotLivePreview* preview = getPreviewView(); - if(preview) - { - LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; - preview->updateSnapshot(TRUE); - } - } - else - { - LLRect full_screen_rect = getRootView()->getRect(); - LLSnapshotLivePreview::Params p; - p.rect(full_screen_rect); - LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); - mPreviewHandle = previewp->getHandle(); + if (visible) + { + if (mPreviewHandle.get()) + { + LLSnapshotLivePreview* preview = getPreviewView(); + if (preview) + { + LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; + preview->updateSnapshot(TRUE); + } + } + else + { + LLRect full_screen_rect = getRootView()->getRect(); + LLSnapshotLivePreview::Params p; + p.rect(full_screen_rect); + LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); + mPreviewHandle = previewp->getHandle(); mQuality = MAX_QUALITY; previewp->setContainer(this); - previewp->setSnapshotType(LLPanelSnapshot::SNAPSHOT_WEB); - previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); - previewp->setSnapshotQuality(mQuality, false); + previewp->setSnapshotType(LLSnapshotModel::SNAPSHOT_WEB); + previewp->setSnapshotFormat(LLSnapshotModel::SNAPSHOT_FORMAT_JPEG); + previewp->setSnapshotQuality(mQuality, false); previewp->setThumbnailSubsampled(TRUE); // We want the preview to reflect the *saved* image previewp->setAllowRenderUI(FALSE); // We do not want the rendered UI in our snapshots previewp->setAllowFullScreenPreview(FALSE); // No full screen preview in SL Share mode - previewp->setThumbnailPlaceholderRect(mThumbnailPlaceholder->getRect()); + previewp->setThumbnailPlaceholderRect(mThumbnailPlaceholder->getRect()); - updateControls(); - } - } + updateControls(); + } + } } void LLFacebookPhotoPanel::onClickNewSnapshot() { - LLSnapshotLivePreview* previewp = getPreviewView(); - if (previewp) - { - previewp->updateSnapshot(TRUE); - } + LLSnapshotLivePreview* previewp = getPreviewView(); + if (previewp) + { + previewp->updateSnapshot(TRUE); + } } void LLFacebookPhotoPanel::onClickBigPreview() @@ -541,167 +541,167 @@ void LLFacebookPhotoPanel::attachPreview() void LLFacebookPhotoPanel::onSend() { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookPhotoPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookPhotoPanel", boost::bind(&LLFacebookPhotoPanel::onFacebookConnectStateChange, this, _1)); - - // Connect to Facebook if necessary and then post - if (LLFacebookConnect::instance().isConnected()) - { - sendPhoto(); - } - else - { - LLFacebookConnect::instance().checkConnectionToFacebook(true); - } + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookPhotoPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookPhotoPanel", boost::bind(&LLFacebookPhotoPanel::onFacebookConnectStateChange, this, _1)); + + // Connect to Facebook if necessary and then post + if (LLFacebookConnect::instance().isConnected()) + { + sendPhoto(); + } + else + { + LLFacebookConnect::instance().checkConnectionToFacebook(true); + } } bool LLFacebookPhotoPanel::onFacebookConnectStateChange(const LLSD& data) { - switch (data.get("enum").asInteger()) - { - case LLFacebookConnect::FB_CONNECTED: - sendPhoto(); - break; + switch (data.get("enum").asInteger()) + { + case LLFacebookConnect::FB_CONNECTED: + sendPhoto(); + break; - case LLFacebookConnect::FB_POSTED: - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookPhotoPanel"); - clearAndClose(); - break; - } + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookPhotoPanel"); + clearAndClose(); + break; + } - return false; + return false; } void LLFacebookPhotoPanel::sendPhoto() { - // Get the caption - std::string caption = mCaptionTextBox->getValue().asString(); + // Get the caption + std::string caption = mCaptionTextBox->getValue().asString(); - // Get the image - LLSnapshotLivePreview* previewp = getPreviewView(); - - // Post to Facebook - LLFacebookConnect::instance().sharePhoto(previewp->getFormattedImage(), caption); + // Get the image + LLSnapshotLivePreview* previewp = getPreviewView(); - updateControls(); + // Post to Facebook + LLFacebookConnect::instance().sharePhoto(previewp->getFormattedImage(), caption); + + updateControls(); } void LLFacebookPhotoPanel::clearAndClose() { - mCaptionTextBox->setValue(""); + mCaptionTextBox->setValue(""); - LLFloater* floater = getParentByType(); - if (floater) - { - floater->closeFloater(); + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); if (mBigPreviewFloater) { mBigPreviewFloater->closeOnFloaterOwnerClosing(floater); } - } + } } void LLFacebookPhotoPanel::updateControls() { - LLSnapshotLivePreview* previewp = getPreviewView(); - BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); - - // *TODO: Separate maximum size for Web images from postcards - LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; - - updateResolution(FALSE); + LLSnapshotLivePreview* previewp = getPreviewView(); + BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); + + // *TODO: Separate maximum size for Web images from postcards + LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; + + updateResolution(FALSE); } void LLFacebookPhotoPanel::updateResolution(BOOL do_update) { - LLComboBox* combobox = static_cast(mResolutionComboBox); - LLComboBox* filterbox = static_cast(mFilterComboBox); + LLComboBox* combobox = static_cast(mResolutionComboBox); + LLComboBox* filterbox = static_cast(mFilterComboBox); - std::string sdstring = combobox->getSelectedValue(); - LLSD sdres; - std::stringstream sstream(sdstring); - LLSDSerialize::fromNotation(sdres, sstream, sdstring.size()); + std::string sdstring = combobox->getSelectedValue(); + LLSD sdres; + std::stringstream sstream(sdstring); + LLSDSerialize::fromNotation(sdres, sstream, sdstring.size()); - S32 width = sdres[0]; - S32 height = sdres[1]; + S32 width = sdres[0]; + S32 height = sdres[1]; // Note : index 0 of the filter drop down is assumed to be "No filter" in whichever locale std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : ""); - LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); - if (previewp && combobox->getCurrentIndex() >= 0) - { - S32 original_width = 0 , original_height = 0 ; - previewp->getSize(original_width, original_height) ; + LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); + if (previewp && combobox->getCurrentIndex() >= 0) + { + S32 original_width = 0, original_height = 0; + previewp->getSize(original_width, original_height); - if (width == 0 || height == 0) - { - // take resolution from current window size - LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; - previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); - } - else - { - // use the resolution from the selected pre-canned drop-down choice - LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; - previewp->setSize(width, height); - } + if (width == 0 || height == 0) + { + // take resolution from current window size + LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; + previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); + } + else + { + // use the resolution from the selected pre-canned drop-down choice + LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; + previewp->setSize(width, height); + } - checkAspectRatio(width); + checkAspectRatio(width); + + previewp->getSize(width, height); - previewp->getSize(width, height); - // Recompute quality setting mQuality = compute_jpeg_quality(width, height); previewp->setSnapshotQuality(mQuality, false); - - if (original_width != width || original_height != height) - { - previewp->setSize(width, height); - if (do_update) - { + + if (original_width != width || original_height != height) + { + previewp->setSize(width, height); + if (do_update) + { previewp->updateSnapshot(TRUE); - updateControls(); - } - } + updateControls(); + } + } // Get the old filter, compare to the current one "filter_name" and set if changed std::string original_filter = previewp->getFilter(); - if (original_filter != filter_name) - { + if (original_filter != filter_name) + { previewp->setFilter(filter_name); - if (do_update) - { + if (do_update) + { previewp->updateSnapshot(FALSE, TRUE); - updateControls(); - } - } - } + updateControls(); + } + } + } } void LLFacebookPhotoPanel::checkAspectRatio(S32 index) { - LLSnapshotLivePreview *previewp = getPreviewView() ; + LLSnapshotLivePreview *previewp = getPreviewView(); - BOOL keep_aspect = FALSE; + BOOL keep_aspect = FALSE; - if (0 == index) // current window size - { - keep_aspect = TRUE; - } - else // predefined resolution - { - keep_aspect = FALSE; - } + if (0 == index) // current window size + { + keep_aspect = TRUE; + } + else // predefined resolution + { + keep_aspect = FALSE; + } - if (previewp) - { - previewp->mKeepAspectRatio = keep_aspect; - } + if (previewp) + { + previewp->mKeepAspectRatio = keep_aspect; + } } LLUICtrl* LLFacebookPhotoPanel::getRefreshBtn() { - return mRefreshBtn; + return mRefreshBtn; } //////////////////////// @@ -712,21 +712,21 @@ LLFacebookCheckinPanel::LLFacebookCheckinPanel() : mMapUrl(""), mReloadingMapTexture(false) { - mCommitCallbackRegistrar.add("SocialSharing.SendCheckin", boost::bind(&LLFacebookCheckinPanel::onSend, this)); + mCommitCallbackRegistrar.add("SocialSharing.SendCheckin", boost::bind(&LLFacebookCheckinPanel::onSend, this)); } BOOL LLFacebookCheckinPanel::postBuild() { // Keep pointers to widgets so we don't traverse the UI hierarchy too often - mPostButton = getChild("post_place_btn"); - mCancelButton = getChild("cancel_place_btn"); - mMessageTextEditor = getChild("place_caption"); + mPostButton = getChild("post_place_btn"); + mCancelButton = getChild("cancel_place_btn"); + mMessageTextEditor = getChild("place_caption"); mMapLoadingIndicator = getChild("map_loading_indicator"); mMapPlaceholder = getChild("map_placeholder"); mMapDefault = getChild("map_default"); mMapCheckBox = getChild("add_place_view_cb"); - - return LLPanel::postBuild(); + + return LLPanel::postBuild(); } void LLFacebookCheckinPanel::draw() @@ -767,101 +767,101 @@ void LLFacebookCheckinPanel::draw() // This will hide/show the loading indicator and/or tile underneath mMapDefault->setVisible(!(mMapCheckBox->get())); - LLPanel::draw(); + LLPanel::draw(); } void LLFacebookCheckinPanel::onSend() { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookCheckinPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookCheckinPanel", boost::bind(&LLFacebookCheckinPanel::onFacebookConnectStateChange, this, _1)); - - // Connect to Facebook if necessary and then post - if (LLFacebookConnect::instance().isConnected()) - { - sendCheckin(); - } - else - { - LLFacebookConnect::instance().checkConnectionToFacebook(true); - } + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookCheckinPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookCheckinPanel", boost::bind(&LLFacebookCheckinPanel::onFacebookConnectStateChange, this, _1)); + + // Connect to Facebook if necessary and then post + if (LLFacebookConnect::instance().isConnected()) + { + sendCheckin(); + } + else + { + LLFacebookConnect::instance().checkConnectionToFacebook(true); + } } bool LLFacebookCheckinPanel::onFacebookConnectStateChange(const LLSD& data) { - switch (data.get("enum").asInteger()) - { - case LLFacebookConnect::FB_CONNECTED: - sendCheckin(); - break; + switch (data.get("enum").asInteger()) + { + case LLFacebookConnect::FB_CONNECTED: + sendCheckin(); + break; - case LLFacebookConnect::FB_POSTED: - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookCheckinPanel"); - clearAndClose(); - break; - } + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookCheckinPanel"); + clearAndClose(); + break; + } - return false; + return false; } void LLFacebookCheckinPanel::sendCheckin() { - // Get the location SLURL - LLSLURL slurl; - LLAgentUI::buildSLURL(slurl); - std::string slurl_string = slurl.getSLURLString(); + // Get the location SLURL + LLSLURL slurl; + LLAgentUI::buildSLURL(slurl); + std::string slurl_string = slurl.getSLURLString(); - // Use a valid http:// URL if the scheme is secondlife:// - LLURI slurl_uri(slurl_string); - if (slurl_uri.scheme() == LLSLURL::SLURL_SECONDLIFE_SCHEME) - { - slurl_string = DEFAULT_CHECKIN_LOCATION_URL; - } + // Use a valid http:// URL if the scheme is secondlife:// + LLURI slurl_uri(slurl_string); + if (slurl_uri.scheme() == LLSLURL::SLURL_SECONDLIFE_SCHEME) + { + slurl_string = DEFAULT_CHECKIN_LOCATION_URL; + } - // Add query parameters so Google Analytics can track incoming clicks! - slurl_string += DEFAULT_CHECKIN_QUERY_PARAMETERS; - - // Get the region name - std::string region_name(""); + // Add query parameters so Google Analytics can track incoming clicks! + slurl_string += DEFAULT_CHECKIN_QUERY_PARAMETERS; + + // Get the region name + std::string region_name(""); LLViewerRegion *regionp = gAgent.getRegion(); if (regionp) { region_name = regionp->getName(); } - - // Get the region description - std::string description; - LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); - - // Optionally add the region map view - bool add_map_view = mMapCheckBox->getValue().asBoolean(); - std::string map_url = (add_map_view ? get_map_url() : DEFAULT_CHECKIN_ICON_URL); - - // Get the caption - std::string caption = mMessageTextEditor->getValue().asString(); - // Post to Facebook - LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption); + // Get the region description + std::string description; + LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); + + // Optionally add the region map view + bool add_map_view = mMapCheckBox->getValue().asBoolean(); + std::string map_url = (add_map_view ? get_map_url() : DEFAULT_CHECKIN_ICON_URL); + + // Get the caption + std::string caption = mMessageTextEditor->getValue().asString(); + + // Post to Facebook + LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption); } void LLFacebookCheckinPanel::clearAndClose() { - mMessageTextEditor->setValue(""); + mMessageTextEditor->setValue(""); - LLFloater* floater = getParentByType(); - if (floater) - { - floater->closeFloater(); - } + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } } /////////////////////////// //LLFacebookFriendsPanel////// /////////////////////////// -LLFacebookFriendsPanel::LLFacebookFriendsPanel() : -mFriendsStatusCaption(NULL), -mSecondLifeFriends(NULL), -mSuggestedFriends(NULL) +LLFacebookFriendsPanel::LLFacebookFriendsPanel() : + mFriendsStatusCaption(NULL), + mSecondLifeFriends(NULL), + mSuggestedFriends(NULL) { } @@ -872,55 +872,55 @@ LLFacebookFriendsPanel::~LLFacebookFriendsPanel() BOOL LLFacebookFriendsPanel::postBuild() { - mFriendsStatusCaption = getChild("facebook_friends_status"); + mFriendsStatusCaption = getChild("facebook_friends_status"); - mSecondLifeFriends = getChild("second_life_friends"); - mSecondLifeFriends->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); - - mSuggestedFriends = getChild("suggested_friends"); - mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gSuggestedFriendsContextMenu); - - setVisibleCallback(boost::bind(&LLFacebookFriendsPanel::updateFacebookList, this, _2)); + mSecondLifeFriends = getChild("second_life_friends"); + mSecondLifeFriends->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); + + mSuggestedFriends = getChild("suggested_friends"); + mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gSuggestedFriendsContextMenu); + + setVisibleCallback(boost::bind(&LLFacebookFriendsPanel::updateFacebookList, this, _2)); LLAvatarTracker::instance().addObserver(this); - - return LLPanel::postBuild(); + + return LLPanel::postBuild(); } bool LLFacebookFriendsPanel::updateSuggestedFriendList() { - const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); - uuid_vec_t& second_life_friends = mSecondLifeFriends->getIDs(); - second_life_friends.clear(); - uuid_vec_t& suggested_friends = mSuggestedFriends->getIDs(); - suggested_friends.clear(); + const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); + uuid_vec_t& second_life_friends = mSecondLifeFriends->getIDs(); + second_life_friends.clear(); + uuid_vec_t& suggested_friends = mSuggestedFriends->getIDs(); + suggested_friends.clear(); - //Add suggested friends - LLSD friends = LLFacebookConnect::instance().getContent(); - for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) - { - LLUUID agent_id = (*i).asUUID(); - if (agent_id.notNull()) - { - bool second_life_buddy = av_tracker.isBuddy(agent_id); - if (second_life_buddy) - { - second_life_friends.push_back(agent_id); - } - else - { - //FB+SL but not SL friend - suggested_friends.push_back(agent_id); - } - } - } + //Add suggested friends + LLSD friends = LLFacebookConnect::instance().getContent(); + for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) + { + LLUUID agent_id = (*i).asUUID(); + if (agent_id.notNull()) + { + bool second_life_buddy = av_tracker.isBuddy(agent_id); + if (second_life_buddy) + { + second_life_friends.push_back(agent_id); + } + else + { + //FB+SL but not SL friend + suggested_friends.push_back(agent_id); + } + } + } - //Force a refresh when there aren't any filter matches (prevent displaying content that shouldn't display) - mSecondLifeFriends->setDirty(true, !mSecondLifeFriends->filterHasMatches()); - mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); - showFriendsAccordionsIfNeeded(); + //Force a refresh when there aren't any filter matches (prevent displaying content that shouldn't display) + mSecondLifeFriends->setDirty(true, !mSecondLifeFriends->filterHasMatches()); + mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); + showFriendsAccordionsIfNeeded(); - return false; + return false; } void LLFacebookFriendsPanel::showFriendsAccordionsIfNeeded() @@ -949,15 +949,15 @@ void LLFacebookFriendsPanel::showFriendsAccordionsIfNeeded() { // We have something in the lists, hide the explanatory text mFriendsStatusCaption->setVisible(false); - + // Show the lists LLAccordionCtrl* accordion = getChild("friends_accordion"); accordion->setVisible(true); - + // Expand and show accordions if needed, else - hide them getChild("tab_second_life_friends")->setVisible(mSecondLifeFriends->filterHasMatches()); getChild("tab_suggested_friends")->setVisible(mSuggestedFriends->filterHasMatches()); - + // Rearrange accordions accordion->arrange(); } @@ -965,56 +965,56 @@ void LLFacebookFriendsPanel::showFriendsAccordionsIfNeeded() void LLFacebookFriendsPanel::changed(U32 mask) { - if (mask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE)) - { + if (mask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE)) + { LLFacebookConnect::instance().loadFacebookFriends(); - updateFacebookList(true); - } + updateFacebookList(true); + } } void LLFacebookFriendsPanel::updateFacebookList(bool visible) { - if (visible) - { + if (visible) + { // We want this to be called to fetch the friends list once a connection is established - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookFriendsPanel"); - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookFriendsPanel", boost::bind(&LLFacebookFriendsPanel::onConnectedToFacebook, this, _1)); - + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookFriendsPanel"); + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookFriendsPanel", boost::bind(&LLFacebookFriendsPanel::onConnectedToFacebook, this, _1)); + // We then want this to be called to update the displayed lists once the list of friends is received - LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLFacebookFriendsPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLFacebookFriendsPanel", boost::bind(&LLFacebookFriendsPanel::updateSuggestedFriendList, this)); - - // Try to connect to Facebook + LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLFacebookFriendsPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLFacebookFriendsPanel", boost::bind(&LLFacebookFriendsPanel::updateSuggestedFriendList, this)); + + // Try to connect to Facebook if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) { LLFacebookConnect::instance().checkConnectionToFacebook(); } - // Loads FB friends - if (LLFacebookConnect::instance().isConnected()) - { - LLFacebookConnect::instance().loadFacebookFriends(); - } + // Loads FB friends + if (LLFacebookConnect::instance().isConnected()) + { + LLFacebookConnect::instance().loadFacebookFriends(); + } // Sort the FB friends and update the lists - updateSuggestedFriendList(); - } + updateSuggestedFriendList(); + } } bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data) { - LLSD::Integer connection_state = data.get("enum").asInteger(); + LLSD::Integer connection_state = data.get("enum").asInteger(); - if (connection_state == LLFacebookConnect::FB_CONNECTED) - { - LLFacebookConnect::instance().loadFacebookFriends(); - } - else if (connection_state == LLFacebookConnect::FB_NOT_CONNECTED) - { - updateSuggestedFriendList(); - } + if (connection_state == LLFacebookConnect::FB_CONNECTED) + { + LLFacebookConnect::instance().loadFacebookFriends(); + } + else if (connection_state == LLFacebookConnect::FB_NOT_CONNECTED) + { + updateSuggestedFriendList(); + } - return false; + return false; } //////////////////////// @@ -1027,7 +1027,7 @@ LLFloaterFacebook::LLFloaterFacebook(const LLSD& key) : LLFloater(key), mStatusLoadingText(NULL), mStatusLoadingIndicator(NULL) { - mCommitCallbackRegistrar.add("SocialSharing.Cancel", boost::bind(&LLFloaterFacebook::onCancel, this)); + mCommitCallbackRegistrar.add("SocialSharing.Cancel", boost::bind(&LLFloaterFacebook::onCancel, this)); } void LLFloaterFacebook::onClose(bool app_quitting) @@ -1037,7 +1037,7 @@ void LLFloaterFacebook::onClose(bool app_quitting) { big_preview_floater->closeOnFloaterOwnerClosing(this); } - LLFloater::onClose(app_quitting); + LLFloater::onClose(app_quitting); } void LLFloaterFacebook::onCancel() @@ -1053,24 +1053,24 @@ void LLFloaterFacebook::onCancel() BOOL LLFloaterFacebook::postBuild() { // Keep tab of the Photo Panel - mFacebookPhotoPanel = static_cast(getChild("panel_facebook_photo")); + mFacebookPhotoPanel = static_cast(getChild("panel_facebook_photo")); // Connection status widgets mStatusErrorText = getChild("connection_error_text"); mStatusLoadingText = getChild("connection_loading_text"); mStatusLoadingIndicator = getChild("connection_loading_indicator"); - return LLFloater::postBuild(); + return LLFloater::postBuild(); } void LLFloaterFacebook::showPhotoPanel() { - LLTabContainer* parent = dynamic_cast(mFacebookPhotoPanel->getParent()); - if (!parent) - { - LL_WARNS() << "Cannot find panel container" << LL_ENDL; - return; - } + LLTabContainer* parent = dynamic_cast(mFacebookPhotoPanel->getParent()); + if (!parent) + { + LL_WARNS() << "Cannot find panel container" << LL_ENDL; + return; + } - parent->selectTabPanel(mFacebookPhotoPanel); + parent->selectTabPanel(mFacebookPhotoPanel); } void LLFloaterFacebook::draw() @@ -1082,7 +1082,7 @@ void LLFloaterFacebook::draw() mStatusLoadingIndicator->setVisible(false); LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); std::string status_text; - + switch (connection_state) { case LLFacebookConnect::FB_NOT_CONNECTED: @@ -1105,7 +1105,7 @@ void LLFloaterFacebook::draw() status_text = LLTrans::getString("SocialFacebookPosting"); mStatusLoadingText->setValue(status_text); mStatusLoadingIndicator->setVisible(true); - break; + break; case LLFacebookConnect::FB_CONNECTION_FAILED: // Error connecting to the service mStatusErrorText->setVisible(true); @@ -1118,21 +1118,21 @@ void LLFloaterFacebook::draw() status_text = LLTrans::getString("SocialFacebookErrorPosting"); mStatusErrorText->setValue(status_text); break; - case LLFacebookConnect::FB_DISCONNECTING: - // Disconnecting loading indicator - mStatusLoadingText->setVisible(true); - status_text = LLTrans::getString("SocialFacebookDisconnecting"); - mStatusLoadingText->setValue(status_text); - mStatusLoadingIndicator->setVisible(true); - break; - case LLFacebookConnect::FB_DISCONNECT_FAILED: - // Error disconnecting from the service - mStatusErrorText->setVisible(true); - status_text = LLTrans::getString("SocialFacebookErrorDisconnecting"); - mStatusErrorText->setValue(status_text); - break; + case LLFacebookConnect::FB_DISCONNECTING: + // Disconnecting loading indicator + mStatusLoadingText->setVisible(true); + status_text = LLTrans::getString("SocialFacebookDisconnecting"); + mStatusLoadingText->setValue(status_text); + mStatusLoadingIndicator->setVisible(true); + break; + case LLFacebookConnect::FB_DISCONNECT_FAILED: + // Error disconnecting from the service + mStatusErrorText->setVisible(true); + status_text = LLTrans::getString("SocialFacebookErrorDisconnecting"); + mStatusErrorText->setValue(status_text); + break; } } - LLFloater::draw(); + LLFloater::draw(); } diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 131df22956..15b7c7fafa 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -238,8 +238,8 @@ void LLFlickrPhotoPanel::onVisibilityChange(BOOL visible) mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); - previewp->setSnapshotType(LLPanelSnapshot::SNAPSHOT_WEB); - previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG); + previewp->setSnapshotType(LLSnapshotModel::SNAPSHOT_WEB); + previewp->setSnapshotFormat(LLSnapshotModel::SNAPSHOT_FORMAT_PNG); previewp->setThumbnailSubsampled(TRUE); // We want the preview to reflect the *saved* image previewp->setAllowRenderUI(FALSE); // We do not want the rendered UI in our snapshots previewp->setAllowFullScreenPreview(FALSE); // No full screen preview in SL Share mode diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index 6d641613ff..4c4e9bcc48 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -42,7 +42,6 @@ #include "llresmgr.h" // LLLocale #include "llsdserialize.h" #include "llsidetraypanelcontainer.h" -#include "llsnapshotlivepreview.h" #include "llspinctrl.h" #include "llviewercontrol.h" #include "lltoolfocus.h" @@ -52,7 +51,6 @@ ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- -LLUICtrl* LLFloaterOutfitSnapshot::sThumbnailPlaceholder = NULL; LLOutfitSnapshotFloaterView* gOutfitSnapshotFloaterView = NULL; const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; @@ -62,213 +60,32 @@ const S32 OUTFIT_SNAPSHOT_HEIGHT = 256; static LLDefaultChildRegistry::Register r("snapshot_outfit_floater_view"); - ///---------------------------------------------------------------------------- -/// Class LLFloaterSnapshot::Impl +/// Class LLFloaterOutfitSnapshot::Impl ///---------------------------------------------------------------------------- - -class LLFloaterOutfitSnapshot::Impl -{ - LOG_CLASS(LLFloaterOutfitSnapshot::Impl); -public: - typedef enum e_status - { - STATUS_READY, - STATUS_WORKING, - STATUS_FINISHED - } EStatus; - - Impl() - : mAvatarPauseHandles(), - mLastToolset(NULL), - mAspectRatioCheckOff(false), - mNeedRefresh(false), - mStatus(STATUS_READY) - { - } - ~Impl() - { - //unpause avatars - mAvatarPauseHandles.clear(); - - } - static void onClickNewSnapshot(void* data); - static void onClickAutoSnap(LLUICtrl *ctrl, void* data); - static void onClickFilter(LLUICtrl *ctrl, void* data); - //static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data); - static void onClickUICheck(LLUICtrl *ctrl, void* data); - static void onClickHUDCheck(LLUICtrl *ctrl, void* data); - static void updateResolution(void* data); - static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data); - static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); - static void onSnapshotUploadFinished(bool status); - static void onSendingPostcardFinished(bool status); - - static LLPanelSnapshot* getActivePanel(LLFloaterOutfitSnapshot* floater, bool ok_if_not_found = true); - static LLPanelSnapshot::ESnapshotType getActiveSnapshotType(LLFloaterOutfitSnapshot* floater); - static LLFloaterOutfitSnapshot::ESnapshotFormat getImageFormat(LLFloaterOutfitSnapshot* floater); - - static LLSnapshotLivePreview* getPreviewView(LLFloaterOutfitSnapshot *floater); - static void updateControls(LLFloaterOutfitSnapshot* floater); - static void updateLayout(LLFloaterOutfitSnapshot* floater); - static void setStatus(EStatus status, bool ok = true, const std::string& msg = LLStringUtil::null); - EStatus getStatus() const { return mStatus; } - static void setNeedRefresh(LLFloaterOutfitSnapshot* floater, bool need); - -private: - static LLViewerWindow::ESnapshotType getLayerType(LLFloaterOutfitSnapshot* floater); - static void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE); - static void setWorking(LLFloaterOutfitSnapshot* floater, bool working); - static void setFinished(LLFloaterOutfitSnapshot* floater, bool finished, bool ok = true, const std::string& msg = LLStringUtil::null); - - -public: - std::vector mAvatarPauseHandles; - - LLToolset* mLastToolset; - LLHandle mPreviewHandle; - bool mAspectRatioCheckOff ; - bool mNeedRefresh; - EStatus mStatus; -}; - - - -// static -LLPanelSnapshot* LLFloaterOutfitSnapshot::Impl::getActivePanel(LLFloaterOutfitSnapshot* floater, bool ok_if_not_found) +// virtual +LLPanelSnapshot* LLFloaterOutfitSnapshot::Impl::getActivePanel(LLFloaterSnapshotBase* floater, bool ok_if_not_found) { LLPanel* panel = floater->getChild("panel_outfit_snapshot_inventory"); - //LLPanel* panel = panel_container->getCurrentPanel(); LLPanelSnapshot* active_panel = dynamic_cast(panel); - if (!ok_if_not_found) - { - llassert_always(active_panel != NULL); - } - return active_panel; + if (!ok_if_not_found) + { + llassert_always(active_panel != NULL); + } + return active_panel; } -// static -LLPanelSnapshot::ESnapshotType LLFloaterOutfitSnapshot::Impl::getActiveSnapshotType(LLFloaterOutfitSnapshot* floater) +// virtual +LLSnapshotModel::ESnapshotFormat LLFloaterOutfitSnapshot::Impl::getImageFormat(LLFloaterSnapshotBase* floater) { - return LLPanelSnapshot::SNAPSHOT_TEXTURE; + return LLSnapshotModel::SNAPSHOT_FORMAT_PNG; } -// static -LLFloaterOutfitSnapshot::ESnapshotFormat LLFloaterOutfitSnapshot::Impl::getImageFormat(LLFloaterOutfitSnapshot* floater) +// virtual +LLSnapshotModel::ESnapshotLayerType LLFloaterOutfitSnapshot::Impl::getLayerType(LLFloaterSnapshotBase* floater) { - return LLFloaterOutfitSnapshot::SNAPSHOT_FORMAT_PNG; -} - -// static -LLSnapshotLivePreview* LLFloaterOutfitSnapshot::Impl::getPreviewView(LLFloaterOutfitSnapshot *floater) -{ - LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)floater->impl.mPreviewHandle.get(); - return previewp; -} - -// static -LLViewerWindow::ESnapshotType LLFloaterOutfitSnapshot::Impl::getLayerType(LLFloaterOutfitSnapshot* floater) -{ - return LLViewerWindow::SNAPSHOT_TYPE_COLOR; -} - -//static -void LLFloaterOutfitSnapshot::Impl::updateLayout(LLFloaterOutfitSnapshot* floaterp) -{ - LLSnapshotLivePreview* previewp = getPreviewView(floaterp); - - BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot"); - - //BD - Automatically calculate the size of our snapshot window to enlarge - // the snapshot preview to its maximum size, this is especially helpfull - // for pretty much every aspect ratio other than 1:1. - F32 panel_width = 400.f * gViewerWindow->getWorldViewAspectRatio(); - - //BD - Make sure we clamp at 700 here because 700 would be for 16:9 which we - // consider the maximum. Everything bigger will be clamped and will have - // a slightly smaller preview window which most likely won't fill up the - // whole snapshot floater as it should. - if(panel_width > 700.f) - { - panel_width = 700.f; - } - - S32 floater_width = 224.f; - if(advanced) - { - floater_width = floater_width + panel_width; - } - - LLUICtrl* thumbnail_placeholder = floaterp->getChild("thumbnail_placeholder"); - thumbnail_placeholder->setVisible(advanced); - thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight()); - floaterp->getChild("image_res_text")->setVisible(advanced); - floaterp->getChild("file_size_label")->setVisible(advanced); - if(!floaterp->isMinimized()) - { - floaterp->reshape(floater_width, floaterp->getRect().getHeight()); - } - - bool use_freeze_frame = floaterp->getChild("freeze_frame_check")->getValue().asBoolean(); - - if (use_freeze_frame) - { - // stop all mouse events at fullscreen preview layer - floaterp->getParent()->setMouseOpaque(TRUE); - - // shrink to smaller layout - // *TODO: unneeded? - floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getRect().getHeight()); - - // can see and interact with fullscreen preview now - if (previewp) - { - previewp->setVisible(TRUE); - previewp->setEnabled(TRUE); - } - - //RN: freeze all avatars - LLCharacter* avatarp; - for (std::vector::iterator iter = LLCharacter::sInstances.begin(); - iter != LLCharacter::sInstances.end(); ++iter) - { - avatarp = *iter; - floaterp->impl.mAvatarPauseHandles.push_back(avatarp->requestPause()); - } - - // freeze everything else - gSavedSettings.setBOOL("FreezeTime", TRUE); - - if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset) - { - floaterp->impl.mLastToolset = LLToolMgr::getInstance()->getCurrentToolset(); - LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset); - } - } - else // turning off freeze frame mode - { - floaterp->getParent()->setMouseOpaque(FALSE); - // *TODO: unneeded? - floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getRect().getHeight()); - if (previewp) - { - previewp->setVisible(FALSE); - previewp->setEnabled(FALSE); - } - - //RN: thaw all avatars - floaterp->impl.mAvatarPauseHandles.clear(); - - // thaw everything else - gSavedSettings.setBOOL("FreezeTime", FALSE); - - // restore last tool (e.g. pie menu, etc) - if (floaterp->impl.mLastToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(floaterp->impl.mLastToolset); - } - } + return LLSnapshotModel::SNAPSHOT_TYPE_COLOR; } // This is the main function that keeps all the GUI controls in sync with the saved settings. @@ -277,788 +94,272 @@ void LLFloaterOutfitSnapshot::Impl::updateLayout(LLFloaterOutfitSnapshot* floate // The basic pattern for programmatically changing the GUI settings is to first set the // appropriate saved settings and then call this method to sync the GUI with them. // FIXME: The above comment seems obsolete now. -// static -void LLFloaterOutfitSnapshot::Impl::updateControls(LLFloaterOutfitSnapshot* floater) +// virtual +void LLFloaterOutfitSnapshot::Impl::updateControls(LLFloaterSnapshotBase* floater) { - LLPanelSnapshot::ESnapshotType shot_type = getActiveSnapshotType(floater); - LLFloaterSnapshotBase::ESnapshotFormat shot_format = (LLFloaterSnapshotBase::ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); - LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); - - LLSnapshotLivePreview* previewp = getPreviewView(floater); - BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); + LLSnapshotModel::ESnapshotType shot_type = getActiveSnapshotType(floater); + LLSnapshotModel::ESnapshotFormat shot_format = (LLSnapshotModel::ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); + LLSnapshotModel::ESnapshotLayerType layer_type = getLayerType(floater); - // *TODO: Separate maximum size for Web images from postcards - LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; + LLSnapshotLivePreview* previewp = getPreviewView(); + BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); - LLLocale locale(LLLocale::USER_LOCALE); - std::string bytes_string; - if (got_snap) - { - LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 ); - } + // *TODO: Separate maximum size for Web images from postcards + LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; - // Update displayed image resolution. - LLTextBox* image_res_tb = floater->getChild("image_res_text"); - image_res_tb->setVisible(got_snap); - if (got_snap) - { - image_res_tb->setTextArg("[WIDTH]", llformat("%d", previewp->getEncodedImageWidth())); - image_res_tb->setTextArg("[HEIGHT]", llformat("%d", previewp->getEncodedImageHeight())); - } + LLLocale locale(LLLocale::USER_LOCALE); + std::string bytes_string; + if (got_snap) + { + LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10); + } - floater->getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); - floater->getChild("file_size_label")->setColor(LLUIColorTable::instance().getColor( "LabelTextColor" )); + // Update displayed image resolution. + LLTextBox* image_res_tb = floater->getChild("image_res_text"); + image_res_tb->setVisible(got_snap); + if (got_snap) + { + image_res_tb->setTextArg("[WIDTH]", llformat("%d", previewp->getEncodedImageWidth())); + image_res_tb->setTextArg("[HEIGHT]", llformat("%d", previewp->getEncodedImageHeight())); + } - updateResolution(floater); + floater->getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); + floater->getChild("file_size_label")->setColor(LLUIColorTable::instance().getColor("LabelTextColor")); - if (previewp) - { - previewp->setSnapshotType(shot_type); - previewp->setSnapshotFormat(shot_format); - previewp->setSnapshotBufferType(layer_type); - } + updateResolution(floater); - LLPanelSnapshot* current_panel = Impl::getActivePanel(floater); - if (current_panel) - { - LLSD info; - info["have-snapshot"] = got_snap; - current_panel->updateControls(info); - } - LL_DEBUGS() << "finished updating controls" << LL_ENDL; + if (previewp) + { + previewp->setSnapshotType(shot_type); + previewp->setSnapshotFormat(shot_format); + previewp->setSnapshotBufferType(layer_type); + } + + LLPanelSnapshot* current_panel = Impl::getActivePanel(floater); + if (current_panel) + { + LLSD info; + info["have-snapshot"] = got_snap; + current_panel->updateControls(info); + } + LL_DEBUGS() << "finished updating controls" << LL_ENDL; } -// static -void LLFloaterOutfitSnapshot::Impl::setStatus(EStatus status, bool ok, const std::string& msg) +// virtual +std::string LLFloaterOutfitSnapshot::Impl::getSnapshotPanelPrefix() { - LLFloaterOutfitSnapshot* floater = LLFloaterOutfitSnapshot::getInstance(); - switch (status) - { - case STATUS_READY: - setWorking(floater, false); - setFinished(floater, false); - break; - case STATUS_WORKING: - setWorking(floater, true); - setFinished(floater, false); - break; - case STATUS_FINISHED: - setWorking(floater, false); - setFinished(floater, true, ok, msg); - break; - } - - floater->impl.mStatus = status; -} - -// static -void LLFloaterOutfitSnapshot::Impl::setNeedRefresh(LLFloaterOutfitSnapshot* floater, bool need) -{ - if (!floater) return; - - // Don't display the "Refresh to save" message if we're in auto-refresh mode. - if (gSavedSettings.getBOOL("AutoSnapshot")) - { - need = false; - } - - floater->mRefreshLabel->setVisible(need); - floater->impl.mNeedRefresh = need; -} - -// static -void LLFloaterOutfitSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp, BOOL update_thumbnail) -{ - if (previewp) - { - BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot"); - LL_DEBUGS() << "updating " << (autosnap ? "snapshot" : "thumbnail") << LL_ENDL; - previewp->updateSnapshot(autosnap, update_thumbnail, autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onClickNewSnapshot(void* data) -{ - LLSnapshotLivePreview* previewp = getPreviewView((LLFloaterOutfitSnapshot *)data); - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (previewp && view) - { - view->impl.setStatus(Impl::STATUS_READY); - LL_DEBUGS() << "updating snapshot" << LL_ENDL; - previewp->mForceUpdateSnapshot = TRUE; - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data) -{ - LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; - gSavedSettings.setBOOL( "AutoSnapshot", check->get() ); - - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (view) - { - checkAutoSnapshot(getPreviewView(view)); - updateControls(view); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data) -{ - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (view) - { - updateControls(view); - LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp) - { - checkAutoSnapshot(previewp); - // Note : index 0 of the filter drop down is assumed to be "No filter" in whichever locale - LLComboBox* filterbox = static_cast(view->getChild("filters_combobox")); - std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : ""); - previewp->setFilter(filter_name); - previewp->updateSnapshot(TRUE); - } - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data) -{ - LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; - gSavedSettings.setBOOL( "RenderUIInSnapshot", check->get() ); - - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (view) - { - LLSnapshotLivePreview* previewp = getPreviewView(view); - if(previewp) - { - previewp->updateSnapshot(TRUE, TRUE); - } - updateControls(view); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data) -{ - LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; - gSavedSettings.setBOOL( "RenderHUDInSnapshot", check->get() ); - - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - if (view) - { - LLSnapshotLivePreview* previewp = getPreviewView(view); - if(previewp) - { - previewp->updateSnapshot(TRUE, TRUE); - } - updateControls(view); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) -{ - LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl; - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - LLSnapshotLivePreview* previewp = getPreviewView(view); - - if (!view || !check_box || !previewp) - { - return; - } - - gSavedSettings.setBOOL("UseFreezeFrame", check_box->get()); - - if (check_box->get()) - { - previewp->prepareFreezeFrame(); - } - - updateLayout(view); -} - -// Show/hide upload progress indicators. -// static -void LLFloaterOutfitSnapshot::Impl::setWorking(LLFloaterOutfitSnapshot* floater, bool working) -{ - LLUICtrl* working_lbl = floater->getChild("working_lbl"); - working_lbl->setVisible(working); - floater->getChild("working_indicator")->setVisible(working); - - if (working) - { - const std::string panel_name = getActivePanel(floater, false)->getName(); - const std::string prefix = panel_name.substr(std::string("panel_outfit_snapshot_").size()); - std::string progress_text = floater->getString(prefix + "_" + "progress_str"); - working_lbl->setValue(progress_text); - } - - // All controls should be disabled while posting. - floater->setCtrlsEnabled(!working); - LLPanelSnapshot* active_panel = getActivePanel(floater); - if (active_panel) - { - active_panel->enableControls(!working); - } + return "panel_outfit_snapshot_"; } // Show/hide upload status message. -// static -void LLFloaterOutfitSnapshot::Impl::setFinished(LLFloaterOutfitSnapshot* floater, bool finished, bool ok, const std::string& msg) +// virtual +void LLFloaterOutfitSnapshot::Impl::setFinished(bool finished, bool ok, const std::string& msg) { - floater->mSucceessLblPanel->setVisible(finished && ok); - floater->mFailureLblPanel->setVisible(finished && !ok); + mFloater->setSuccessLabelPanelVisible(finished && ok); + mFloater->setFailureLabelPanelVisible(finished && !ok); - if (finished) - { - LLUICtrl* finished_lbl = floater->getChild(ok ? "succeeded_lbl" : "failed_lbl"); - std::string result_text = floater->getString(msg + "_" + (ok ? "succeeded_str" : "failed_str")); - finished_lbl->setValue(result_text); + if (finished) + { + LLUICtrl* finished_lbl = mFloater->getChild(ok ? "succeeded_lbl" : "failed_lbl"); + std::string result_text = mFloater->getString(msg + "_" + (ok ? "succeeded_str" : "failed_str")); + finished_lbl->setValue(result_text); - //LLSideTrayPanelContainer* panel_container = floater->getChild("panel_container"); - //panel_container->openPreviousPanel(); - //panel_container->getCurrentPanel()->onOpen(LLSD()); - LLPanel* snapshot_panel = floater->getChild("panel_outfit_snapshot_inventory"); + LLPanel* snapshot_panel = mFloater->getChild("panel_outfit_snapshot_inventory"); snapshot_panel->onOpen(LLSD()); - } + } } -// Apply a new resolution selected from the given combobox. -// static void LLFloaterOutfitSnapshot::Impl::updateResolution(void* data) { - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - - if (!view) - { - llassert(view); - return; - } - - S32 width = OUTFIT_SNAPSHOT_WIDTH; - S32 height = OUTFIT_SNAPSHOT_HEIGHT; - - LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp) - { - S32 original_width = 0 , original_height = 0 ; - previewp->getSize(original_width, original_height) ; - - if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) - { //clamp snapshot resolution to window size when showing UI or HUD in snapshot - width = llmin(width, gViewerWindow->getWindowWidthRaw()); - height = llmin(height, gViewerWindow->getWindowHeightRaw()); - } - + LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; + + if (!view) + { + llassert(view); + return; + } + + S32 width = OUTFIT_SNAPSHOT_WIDTH; + S32 height = OUTFIT_SNAPSHOT_HEIGHT; + + LLSnapshotLivePreview* previewp = getPreviewView(); + if (previewp) + { + S32 original_width = 0, original_height = 0; + previewp->getSize(original_width, original_height); + + if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) + { //clamp snapshot resolution to window size when showing UI or HUD in snapshot + width = llmin(width, gViewerWindow->getWindowWidthRaw()); + height = llmin(height, gViewerWindow->getWindowHeightRaw()); + } + llassert(width > 0 && height > 0); // use the resolution from the selected pre-canned drop-down choice LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; previewp->setSize(width, height); - - if(original_width != width || original_height != height) - { - //previewp->setSize(width, height); - // hide old preview as the aspect ratio could be wrong - checkAutoSnapshot(previewp, FALSE); - LL_DEBUGS() << "updating thumbnail" << LL_ENDL; + if (original_width != width || original_height != height) + { + // hide old preview as the aspect ratio could be wrong + checkAutoSnapshot(previewp, FALSE); + LL_DEBUGS() << "updating thumbnail" << LL_ENDL; previewp->updateSnapshot(TRUE); - } - } + } + } } -// static -void LLFloaterOutfitSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data) -{ - LLComboBox* combobox = (LLComboBox*)ctrl; - - LLFloaterOutfitSnapshot *view = (LLFloaterOutfitSnapshot *)data; - - if (view) - { - LLSnapshotLivePreview* previewp = getPreviewView(view); - if (previewp) - { - previewp->setSnapshotBufferType((LLViewerWindow::ESnapshotType)combobox->getCurrentIndex()); - } - checkAutoSnapshot(previewp, TRUE); - } -} - -// static -void LLFloaterOutfitSnapshot::Impl::onSnapshotUploadFinished(bool status) -{ - setStatus(STATUS_FINISHED, status, "profile"); -} - - -// static -void LLFloaterOutfitSnapshot::Impl::onSendingPostcardFinished(bool status) -{ - setStatus(STATUS_FINISHED, status, "postcard"); -} - - ///---------------------------------------------------------------------------- -/// Class LLFloaterSnapshot +/// Class LLFloaterOutfitSnapshot ///---------------------------------------------------------------------------- // Default constructor LLFloaterOutfitSnapshot::LLFloaterOutfitSnapshot(const LLSD& key) - : LLFloaterSnapshotBase(key), - mRefreshBtn(NULL), - mRefreshLabel(NULL), - mSucceessLblPanel(NULL), - mFailureLblPanel(NULL), - mOutfitGallery(NULL), - impl (*(new Impl)) +: LLFloaterSnapshotBase(key), +mOutfitGallery(NULL) { + impl = new Impl(this); } -// Destroys the object LLFloaterOutfitSnapshot::~LLFloaterOutfitSnapshot() { - if (impl.mPreviewHandle.get()) impl.mPreviewHandle.get()->die(); - - //unfreeze everything else - gSavedSettings.setBOOL("FreezeTime", FALSE); - - if (impl.mLastToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset); - } - - delete &impl; } - +// virtual BOOL LLFloaterOutfitSnapshot::postBuild() { - mRefreshBtn = getChild("new_snapshot_btn"); - childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this); - mRefreshLabel = getChild("refresh_lbl"); - mSucceessLblPanel = getChild("succeeded_panel"); - mFailureLblPanel = getChild("failed_panel"); + mRefreshBtn = getChild("new_snapshot_btn"); + childSetAction("new_snapshot_btn", ImplBase::onClickNewSnapshot, this); + mRefreshLabel = getChild("refresh_lbl"); + mSucceessLblPanel = getChild("succeeded_panel"); + mFailureLblPanel = getChild("failed_panel"); - childSetCommitCallback("ui_check", Impl::onClickUICheck, this); - getChild("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); + childSetCommitCallback("ui_check", ImplBase::onClickUICheck, this); + getChild("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); - childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this); - getChild("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); + childSetCommitCallback("hud_check", ImplBase::onClickHUDCheck, this); + getChild("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); - getChild("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame")); - childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); + getChild("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame")); + childSetCommitCallback("freeze_frame_check", ImplBase::onCommitFreezeFrame, this); - getChild("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); - childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this); - + getChild("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); + childSetCommitCallback("auto_snapshot_check", ImplBase::onClickAutoSnap, this); - // Filters - LLComboBox* filterbox = getChild("filters_combobox"); + + // Filters + LLComboBox* filterbox = getChild("filters_combobox"); std::vector filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); for (U32 i = 0; i < filter_list.size(); i++) { filterbox->add(filter_list[i]); } - childSetCommitCallback("filters_combobox", Impl::onClickFilter, this); - - LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterOutfitSnapshot::Impl::onSnapshotUploadFinished, _1)); - LLPostCard::setPostResultCallback(boost::bind(&LLFloaterOutfitSnapshot::Impl::onSendingPostcardFinished, _1)); + childSetCommitCallback("filters_combobox", ImplBase::onClickFilter, this); - sThumbnailPlaceholder = getChild("thumbnail_placeholder"); + LLWebProfile::setImageUploadResultCallback(boost::bind(&ImplBase::onSnapshotUploadFinished, this, _1)); - // create preview window - LLRect full_screen_rect = getRootView()->getRect(); - LLSnapshotLivePreview::Params p; - p.rect(full_screen_rect); - LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); - LLView* parent_view = gSnapshotFloaterView->getParent(); - - parent_view->removeChild(gSnapshotFloaterView); - // make sure preview is below snapshot floater - parent_view->addChild(previewp); - parent_view->addChild(gSnapshotFloaterView); - - //move snapshot floater to special purpose snapshotfloaterview - gFloaterView->removeChild(this); - gSnapshotFloaterView->addChild(this); + sThumbnailPlaceholder = getChild("thumbnail_placeholder"); - impl.mPreviewHandle = previewp->getHandle(); + // create preview window + LLRect full_screen_rect = getRootView()->getRect(); + LLSnapshotLivePreview::Params p; + p.rect(full_screen_rect); + LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); + LLView* parent_view = gSnapshotFloaterView->getParent(); + + parent_view->removeChild(gSnapshotFloaterView); + // make sure preview is below snapshot floater + parent_view->addChild(previewp); + parent_view->addChild(gSnapshotFloaterView); + + //move snapshot floater to special purpose snapshotfloaterview + gFloaterView->removeChild(this); + gSnapshotFloaterView->addChild(this); + + impl->mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); - impl.updateControls(this); - impl.updateLayout(this); - - previewp->mKeepAspectRatio = FALSE; - previewp->setThumbnailPlaceholderRect(getThumbnailPlaceholderRect()); + impl->updateControls(this); + impl->updateLayout(this); - return TRUE; -} - -void LLFloaterOutfitSnapshot::draw() -{ - LLSnapshotLivePreview* previewp = impl.getPreviewView(this); - - if (previewp && (previewp->isSnapshotActive() || previewp->getThumbnailLock())) - { - // don't render snapshot window in snapshot, even if "show ui" is turned on - return; - } - - LLFloater::draw(); - - if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible()) - { - if(previewp->getThumbnailImage()) - { - bool working = impl.getStatus() == Impl::STATUS_WORKING; - const LLRect& thumbnail_rect = getThumbnailPlaceholderRect(); - const S32 thumbnail_w = previewp->getThumbnailWidth(); - const S32 thumbnail_h = previewp->getThumbnailHeight(); - - // calc preview offset within the preview rect - const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; - const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; // preview y pos within the preview rect - - // calc preview offset within the floater rect - S32 offset_x = thumbnail_rect.mLeft + local_offset_x; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y; - - gGL.matrixMode(LLRender::MM_MODELVIEW); - // Apply floater transparency to the texture unless the floater is focused. - F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); - LLColor4 color = working ? LLColor4::grey4 : LLColor4::white; - gl_draw_scaled_image(offset_x, offset_y, - thumbnail_w, thumbnail_h, - previewp->getThumbnailImage(), color % alpha); - - previewp->drawPreviewRect(offset_x, offset_y) ; - - gGL.pushUIMatrix(); - LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom); - sThumbnailPlaceholder->draw(); - gGL.popUIMatrix(); - } - } - impl.updateLayout(this); + previewp->mKeepAspectRatio = FALSE; + previewp->setThumbnailPlaceholderRect(getThumbnailPlaceholderRect()); + + return TRUE; } +// virtual void LLFloaterOutfitSnapshot::onOpen(const LLSD& key) { - LLSnapshotLivePreview* preview = LLFloaterOutfitSnapshot::Impl::getPreviewView(this); - if(preview) - { - LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; - preview->updateSnapshot(TRUE); - } - focusFirstItem(FALSE); - gSnapshotFloaterView->setEnabled(TRUE); - gSnapshotFloaterView->setVisible(TRUE); - gSnapshotFloaterView->adjustToFitScreen(this, FALSE); + LLSnapshotLivePreview* preview = getPreviewView(); + if (preview) + { + LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; + preview->updateSnapshot(TRUE); + } + focusFirstItem(FALSE); + gSnapshotFloaterView->setEnabled(TRUE); + gSnapshotFloaterView->setVisible(TRUE); + gSnapshotFloaterView->adjustToFitScreen(this, FALSE); - impl.updateControls(this); - impl.updateLayout(this); + impl->updateControls(this); + impl->updateLayout(this); - // Initialize default tab. - //getChild("panel_container")->getCurrentPanel()->onOpen(LLSD()); - //parent->openPanel(panel_name); LLPanel* snapshot_panel = getChild("panel_outfit_snapshot_inventory"); snapshot_panel->onOpen(LLSD()); postPanelSwitch(); } -void LLFloaterOutfitSnapshot::onClose(bool app_quitting) -{ - getParent()->setMouseOpaque(FALSE); - - //unfreeze everything, hide fullscreen preview - LLSnapshotLivePreview* previewp = LLFloaterOutfitSnapshot::Impl::getPreviewView(this); - if (previewp) - { - previewp->setVisible(FALSE); - previewp->setEnabled(FALSE); - } - - gSavedSettings.setBOOL("FreezeTime", FALSE); - impl.mAvatarPauseHandles.clear(); - - if (impl.mLastToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset); - } -} - -// virtual -S32 LLFloaterOutfitSnapshot::notify(const LLSD& info) -{ - if (info.has("set-ready")) - { - impl.setStatus(Impl::STATUS_READY); - return 1; - } - - if (info.has("set-working")) - { - impl.setStatus(Impl::STATUS_WORKING); - return 1; - } - - if (info.has("set-finished")) - { - LLSD data = info["set-finished"]; - impl.setStatus(Impl::STATUS_FINISHED, data["ok"].asBoolean(), data["msg"].asString()); - return 1; - } - - if (info.has("snapshot-updating")) - { - // Disable the send/post/save buttons until snapshot is ready. - impl.updateControls(this); - return 1; - } - - if (info.has("snapshot-updated")) - { - // Enable the send/post/save buttons. - impl.updateControls(this); - // We've just done refresh. - impl.setNeedRefresh(this, false); - - // The refresh button is initially hidden. We show it after the first update, - // i.e. when preview appears. - if (!mRefreshBtn->getVisible()) - { - mRefreshBtn->setVisible(true); - } - return 1; - } - - return 0; -} - -//static +// static void LLFloaterOutfitSnapshot::update() { - LLFloaterOutfitSnapshot* inst = findInstance(); - LLFloaterFacebook* floater_facebook = LLFloaterReg::findTypedInstance("facebook"); - LLFloaterFlickr* floater_flickr = LLFloaterReg::findTypedInstance("flickr"); - LLFloaterTwitter* floater_twitter = LLFloaterReg::findTypedInstance("twitter"); - - if (!inst && !floater_facebook && !floater_flickr && !floater_twitter) - return; - - BOOL changed = FALSE; - LL_DEBUGS() << "npreviews: " << LLSnapshotLivePreview::sList.size() << LL_ENDL; - for (std::set::iterator iter = LLSnapshotLivePreview::sList.begin(); - iter != LLSnapshotLivePreview::sList.end(); ++iter) - { - changed |= LLSnapshotLivePreview::onIdle(*iter); - } - - if (inst && changed) - { - LL_DEBUGS() << "changed" << LL_ENDL; - inst->impl.updateControls(inst); - } + LLFloaterOutfitSnapshot* inst = getInstance(); + if (inst != NULL) + { + inst->impl->updateLivePreview(); + } } // static LLFloaterOutfitSnapshot* LLFloaterOutfitSnapshot::getInstance() { - return LLFloaterReg::getTypedInstance("outfit_snapshot"); + return LLFloaterReg::getTypedInstance("outfit_snapshot"); } -// static -LLFloaterOutfitSnapshot* LLFloaterOutfitSnapshot::findInstance() -{ - return LLFloaterReg::findTypedInstance("outfit_snapshot"); -} - -// static +// virtual void LLFloaterOutfitSnapshot::saveTexture() { - LL_DEBUGS() << "saveTexture" << LL_ENDL; + LL_DEBUGS() << "saveTexture" << LL_ENDL; - // FIXME: duplicated code - LLFloaterOutfitSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return; - } - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); - if (!previewp) - { - llassert(previewp != NULL); - return; - } - - if (instance->mOutfitGallery) + LLSnapshotLivePreview* previewp = getPreviewView(); + if (!previewp) { - instance->mOutfitGallery->onBeforeOutfitSnapshotSave(); + llassert(previewp != NULL); + return; } - previewp->saveTexture(TRUE, instance->getOutfitID().asString()); - if (instance->mOutfitGallery) + + if (mOutfitGallery) { - instance->mOutfitGallery->onAfterOutfitSnapshotSave(); + mOutfitGallery->onBeforeOutfitSnapshotSave(); } - instance->closeFloater(); -} - -// static -void LLFloaterOutfitSnapshot::postSave() -{ - LLFloaterOutfitSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return; - } - - instance->impl.updateControls(instance); - instance->impl.setStatus(Impl::STATUS_WORKING); -} - -// static -void LLFloaterOutfitSnapshot::postPanelSwitch() -{ - LLFloaterOutfitSnapshot* instance = getInstance(); - instance->impl.updateControls(instance); - - // Remove the success/failure indicator whenever user presses a snapshot option button. - instance->impl.setStatus(Impl::STATUS_READY); -} - -// static -LLPointer LLFloaterOutfitSnapshot::getImageData() -{ - // FIXME: May not work for textures. - - LLFloaterOutfitSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return NULL; - } - - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); - if (!previewp) - { - llassert(previewp != NULL); - return NULL; - } - - LLPointer img = previewp->getFormattedImage(); - if (!img.get()) - { - LL_WARNS() << "Empty snapshot image data" << LL_ENDL; - llassert(img.get() != NULL); - } - - return img; -} - -// static -const LLVector3d& LLFloaterOutfitSnapshot::getPosTakenGlobal() -{ - LLFloaterOutfitSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return LLVector3d::zero; - } - - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); - if (!previewp) - { - llassert(previewp != NULL); - return LLVector3d::zero; - } - - return previewp->getPosTakenGlobal(); + previewp->saveTexture(TRUE, getOutfitID().asString()); + if (mOutfitGallery) + { + mOutfitGallery->onAfterOutfitSnapshotSave(); + } + closeFloater(); } ///---------------------------------------------------------------------------- -/// Class LLSnapshotFloaterView +/// Class LLOutfitSnapshotFloaterView ///---------------------------------------------------------------------------- -LLOutfitSnapshotFloaterView::LLOutfitSnapshotFloaterView (const Params& p) : LLFloaterView (p) +LLOutfitSnapshotFloaterView::LLOutfitSnapshotFloaterView(const Params& p) : LLFloaterView(p) { } LLOutfitSnapshotFloaterView::~LLOutfitSnapshotFloaterView() { } - -BOOL LLOutfitSnapshotFloaterView::handleKey(KEY key, MASK mask, BOOL called_from_parent) -{ - // use default handler when not in freeze-frame mode - if(!gSavedSettings.getBOOL("FreezeTime")) - { - return LLFloaterView::handleKey(key, mask, called_from_parent); - } - - if (called_from_parent) - { - // pass all keystrokes down - LLFloaterView::handleKey(key, mask, called_from_parent); - } - else - { - // bounce keystrokes back down - LLFloaterView::handleKey(key, mask, TRUE); - } - return TRUE; -} - -BOOL LLOutfitSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask) -{ - // use default handler when not in freeze-frame mode - if(!gSavedSettings.getBOOL("FreezeTime")) - { - return LLFloaterView::handleMouseDown(x, y, mask); - } - // give floater a change to handle mouse, else camera tool - if (childrenHandleMouseDown(x, y, mask) == NULL) - { - LLToolMgr::getInstance()->getCurrentTool()->handleMouseDown( x, y, mask ); - } - return TRUE; -} - -BOOL LLOutfitSnapshotFloaterView::handleMouseUp(S32 x, S32 y, MASK mask) -{ - // use default handler when not in freeze-frame mode - if(!gSavedSettings.getBOOL("FreezeTime")) - { - return LLFloaterView::handleMouseUp(x, y, mask); - } - // give floater a change to handle mouse, else camera tool - if (childrenHandleMouseUp(x, y, mask) == NULL) - { - LLToolMgr::getInstance()->getCurrentTool()->handleMouseUp( x, y, mask ); - } - return TRUE; -} - -BOOL LLOutfitSnapshotFloaterView::handleHover(S32 x, S32 y, MASK mask) -{ - // use default handler when not in freeze-frame mode - if(!gSavedSettings.getBOOL("FreezeTime")) - { - return LLFloaterView::handleHover(x, y, mask); - } - // give floater a change to handle mouse, else camera tool - if (childrenHandleHover(x, y, mask) == NULL) - { - LLToolMgr::getInstance()->getCurrentTool()->handleHover( x, y, mask ); - } - return TRUE; -} diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 9a7b30ebd8..37e264b0e7 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -1,25 +1,25 @@ -/** +/** * @file llfloateroutfitsnapshot.h * @brief Snapshot preview window for saving as an outfit thumbnail in visual outfit gallery * * $LicenseInfo:firstyear=2004&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2016, Linden Research, Inc. - * + * * 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. - * + * * 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. - * + * * 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$ */ @@ -30,71 +30,87 @@ #include "llfloater.h" #include "llfloatersnapshot.h" #include "lloutfitgallery.h" +#include "llsnapshotlivepreview.h" -class LLSpinCtrl; +///---------------------------------------------------------------------------- +/// Class LLFloaterOutfitSnapshot +///---------------------------------------------------------------------------- class LLFloaterOutfitSnapshot : public LLFloaterSnapshotBase { - LOG_CLASS(LLFloaterOutfitSnapshot); + LOG_CLASS(LLFloaterOutfitSnapshot); public: - LLFloaterOutfitSnapshot(const LLSD& key); - virtual ~LLFloaterOutfitSnapshot(); - - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); - /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClose(bool app_quitting); - /*virtual*/ S32 notify(const LLSD& info); - - static void update(); + LLFloaterOutfitSnapshot(const LLSD& key); + /*virtual*/ ~LLFloaterOutfitSnapshot(); - // TODO: create a snapshot model instead - static LLFloaterOutfitSnapshot* getInstance(); - static LLFloaterOutfitSnapshot* findInstance(); - static void saveTexture(); - static void postSave(); - static void postPanelSwitch(); - static LLPointer getImageData(); - static const LLVector3d& getPosTakenGlobal(); + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& key); - static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } + static void update(); + + static LLFloaterOutfitSnapshot* getInstance(); + /*virtual*/ void saveTexture(); + + static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } void setOutfitID(LLUUID id) { mOutfitID = id; } LLUUID getOutfitID() { return mOutfitID; } void setGallery(LLOutfitGallery* gallery) { mOutfitGallery = gallery; } -private: - static LLUICtrl* sThumbnailPlaceholder; - LLUICtrl *mRefreshBtn, *mRefreshLabel; - LLUICtrl *mSucceessLblPanel, *mFailureLblPanel; - class Impl; - Impl& impl; + class Impl; + friend Impl; +private: LLUUID mOutfitID; LLOutfitGallery* mOutfitGallery; }; +///---------------------------------------------------------------------------- +/// Class LLFloaterOutfitSnapshot::Impl +///---------------------------------------------------------------------------- + +class LLFloaterOutfitSnapshot::Impl : public LLFloaterSnapshotBase::ImplBase +{ + LOG_CLASS(LLFloaterOutfitSnapshot::Impl); +public: + Impl(LLFloaterSnapshotBase* floater) + : LLFloaterSnapshotBase::ImplBase(floater) + {} + ~Impl() + {} + void updateResolution(void* data); + + /*virtual*/ LLPanelSnapshot* getActivePanel(LLFloaterSnapshotBase* floater, bool ok_if_not_found = true); + /*virtual*/ LLSnapshotModel::ESnapshotFormat getImageFormat(LLFloaterSnapshotBase* floater); + /*virtual*/ std::string getSnapshotPanelPrefix(); + + /*virtual*/ void updateControls(LLFloaterSnapshotBase* floater); + +private: + /*virtual*/ LLSnapshotModel::ESnapshotLayerType getLayerType(LLFloaterSnapshotBase* floater); + /*virtual*/ void setFinished(bool finished, bool ok = true, const std::string& msg = LLStringUtil::null); +}; + +///---------------------------------------------------------------------------- +/// Class LLOutfitSnapshotFloaterView +///---------------------------------------------------------------------------- + class LLOutfitSnapshotFloaterView : public LLFloaterView { public: - struct Params - : public LLInitParam::Block - { - }; + struct Params + : public LLInitParam::Block + { + }; protected: - LLOutfitSnapshotFloaterView (const Params& p); - friend class LLUICtrlFactory; + LLOutfitSnapshotFloaterView(const Params& p); + friend class LLUICtrlFactory; public: - virtual ~LLOutfitSnapshotFloaterView(); - - /*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); - /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + virtual ~LLOutfitSnapshotFloaterView(); }; extern LLOutfitSnapshotFloaterView* gOutfitSnapshotFloaterView; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index e5a2bd03cd..2585c7c6a5 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2004&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2016, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,7 +28,6 @@ #include "llfloatersnapshot.h" -#include "llagent.h" #include "llfacebookconnect.h" #include "llfloaterreg.h" #include "llfloaterfacebook.h" @@ -51,7 +50,7 @@ ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- -LLUICtrl* LLFloaterSnapshot::sThumbnailPlaceholder = NULL; +LLUICtrl* LLFloaterSnapshotBase::sThumbnailPlaceholder = NULL; LLSnapshotFloaterView* gSnapshotFloaterView = NULL; const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; @@ -61,101 +60,8 @@ const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 static LLDefaultChildRegistry::Register r("snapshot_floater_view"); - -LLFloaterSnapshotBase::ImplBase::ImplBase() -{ -} - -LLFloaterSnapshotBase::ImplBase::~ImplBase() -{ -} - - -///---------------------------------------------------------------------------- -/// Class LLFloaterSnapshot::Impl -///---------------------------------------------------------------------------- - -class LLFloaterSnapshot::Impl : public LLFloaterSnapshotBase::ImplBase -{ - LOG_CLASS(LLFloaterSnapshot::Impl); -public: - typedef enum e_status - { - STATUS_READY, - STATUS_WORKING, - STATUS_FINISHED - } EStatus; - - Impl() - : mAvatarPauseHandles(), - mLastToolset(NULL), - mAspectRatioCheckOff(false), - mNeedRefresh(false), - mStatus(STATUS_READY) - { - } - ~Impl() - { - //unpause avatars - mAvatarPauseHandles.clear(); - - } - static void onClickNewSnapshot(void* data); - static void onClickAutoSnap(LLUICtrl *ctrl, void* data); - static void onClickFilter(LLUICtrl *ctrl, void* data); - //static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data); - static void onClickUICheck(LLUICtrl *ctrl, void* data); - static void onClickHUDCheck(LLUICtrl *ctrl, void* data); - static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked); - static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE); - static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data); - static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); - static void onImageQualityChange(LLFloaterSnapshot* view, S32 quality_val); - static void onImageFormatChange(LLFloaterSnapshot* view); - static void applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h); - static void onSnapshotUploadFinished(bool status); - static void onSendingPostcardFinished(bool status); - static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); - static void setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height) ; - static void updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed); - - static LLPanelSnapshot* getActivePanel(LLFloaterSnapshot* floater, bool ok_if_not_found = true); - static LLPanelSnapshot::ESnapshotType getActiveSnapshotType(LLFloaterSnapshot* floater); - static LLFloaterSnapshotBase::ESnapshotFormat getImageFormat(LLFloaterSnapshot* floater); - static LLSpinCtrl* getWidthSpinner(LLFloaterSnapshot* floater); - static LLSpinCtrl* getHeightSpinner(LLFloaterSnapshot* floater); - static void enableAspectRatioCheckbox(LLFloaterSnapshot* floater, BOOL enable); - static void setAspectRatioCheckboxValue(LLFloaterSnapshot* floater, BOOL checked); - - static LLSnapshotLivePreview* getPreviewView(LLFloaterSnapshot *floater); - static void setResolution(LLFloaterSnapshot* floater, const std::string& comboname); - static void updateControls(LLFloaterSnapshot* floater); - static void updateLayout(LLFloaterSnapshot* floater); - static void setStatus(EStatus status, bool ok = true, const std::string& msg = LLStringUtil::null); - EStatus getStatus() const { return mStatus; } - static void setNeedRefresh(LLFloaterSnapshot* floater, bool need); - -private: - static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater); - static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname); - static void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE); - static void checkAspectRatio(LLFloaterSnapshot *view, S32 index) ; - static void setWorking(LLFloaterSnapshot* floater, bool working); - static void setFinished(LLFloaterSnapshot* floater, bool finished, bool ok = true, const std::string& msg = LLStringUtil::null); - - -public: - std::vector mAvatarPauseHandles; - - LLToolset* mLastToolset; - LLHandle mPreviewHandle; - bool mAspectRatioCheckOff ; - bool mNeedRefresh; - EStatus mStatus; -}; - -// static -LLPanelSnapshot* LLFloaterSnapshot::Impl::getActivePanel(LLFloaterSnapshot* floater, bool ok_if_not_found) +// virtual +LLPanelSnapshot* LLFloaterSnapshot::Impl::getActivePanel(LLFloaterSnapshotBase* floater, bool ok_if_not_found) { LLSideTrayPanelContainer* panel_container = floater->getChild("panel_container"); LLPanelSnapshot* active_panel = dynamic_cast(panel_container->getCurrentPanel()); @@ -166,63 +72,40 @@ LLPanelSnapshot* LLFloaterSnapshot::Impl::getActivePanel(LLFloaterSnapshot* floa return active_panel; } -// static -LLPanelSnapshot::ESnapshotType LLFloaterSnapshot::Impl::getActiveSnapshotType(LLFloaterSnapshot* floater) +// virtual +LLSnapshotModel::ESnapshotType LLFloaterSnapshotBase::ImplBase::getActiveSnapshotType(LLFloaterSnapshotBase* floater) { - // LLPanelSnapshot::ESnapshotType type = LLPanelSnapshot::SNAPSHOT_WEB; - //std::string name; LLPanelSnapshot* spanel = getActivePanel(floater); - //if (spanel) - //{ - // name = spanel->getName(); - //} - - //if (name == "panel_snapshot_postcard") - //{ - // type = LLPanelSnapshot::SNAPSHOT_POSTCARD; - //} - //else if (name == "panel_snapshot_inventory") - //{ - // type = LLSnapshotLivePreview::SNAPSHOT_TEXTURE; - //} - //else if (name == "panel_snapshot_local") - //{ - // type = LLSnapshotLivePreview::SNAPSHOT_LOCAL; - //} - //return type; if (spanel) { return spanel->getSnapshotType(); } - return LLPanelSnapshot::SNAPSHOT_WEB; + return LLSnapshotModel::SNAPSHOT_WEB; } -// static -LLFloaterSnapshotBase::ESnapshotFormat LLFloaterSnapshot::Impl::getImageFormat(LLFloaterSnapshot* floater) +// virtual +LLSnapshotModel::ESnapshotFormat LLFloaterSnapshot::Impl::getImageFormat(LLFloaterSnapshotBase* floater) { LLPanelSnapshot* active_panel = getActivePanel(floater); // FIXME: if the default is not PNG, profile uploads may fail. - return active_panel ? active_panel->getImageFormat() : LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG; + return active_panel ? active_panel->getImageFormat() : LLSnapshotModel::SNAPSHOT_FORMAT_PNG; } -// static -LLSpinCtrl* LLFloaterSnapshot::Impl::getWidthSpinner(LLFloaterSnapshot* floater) +LLSpinCtrl* LLFloaterSnapshot::Impl::getWidthSpinner(LLFloaterSnapshotBase* floater) { LLPanelSnapshot* active_panel = getActivePanel(floater); return active_panel ? active_panel->getWidthSpinner() : floater->getChild("snapshot_width"); } -// static -LLSpinCtrl* LLFloaterSnapshot::Impl::getHeightSpinner(LLFloaterSnapshot* floater) +LLSpinCtrl* LLFloaterSnapshot::Impl::getHeightSpinner(LLFloaterSnapshotBase* floater) { LLPanelSnapshot* active_panel = getActivePanel(floater); return active_panel ? active_panel->getHeightSpinner() : floater->getChild("snapshot_height"); } -// static -void LLFloaterSnapshot::Impl::enableAspectRatioCheckbox(LLFloaterSnapshot* floater, BOOL enable) +void LLFloaterSnapshot::Impl::enableAspectRatioCheckbox(LLFloaterSnapshotBase* floater, BOOL enable) { LLPanelSnapshot* active_panel = getActivePanel(floater); if (active_panel) @@ -231,8 +114,7 @@ void LLFloaterSnapshot::Impl::enableAspectRatioCheckbox(LLFloaterSnapshot* float } } -// static -void LLFloaterSnapshot::Impl::setAspectRatioCheckboxValue(LLFloaterSnapshot* floater, BOOL checked) +void LLFloaterSnapshot::Impl::setAspectRatioCheckboxValue(LLFloaterSnapshotBase* floater, BOOL checked) { LLPanelSnapshot* active_panel = getActivePanel(floater); if (active_panel) @@ -241,38 +123,41 @@ void LLFloaterSnapshot::Impl::setAspectRatioCheckboxValue(LLFloaterSnapshot* flo } } -// static -LLSnapshotLivePreview* LLFloaterSnapshot::Impl::getPreviewView(LLFloaterSnapshot *floater) +LLSnapshotLivePreview* LLFloaterSnapshotBase::getPreviewView() { - LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)floater->impl.mPreviewHandle.get(); + return impl->getPreviewView(); +} + +LLSnapshotLivePreview* LLFloaterSnapshotBase::ImplBase::getPreviewView() +{ + LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)mPreviewHandle.get(); return previewp; } -// static -LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSnapshot* floater) +// virtual +LLSnapshotModel::ESnapshotLayerType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSnapshotBase* floater) { - LLViewerWindow::ESnapshotType type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; + LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR; LLSD value = floater->getChild("layer_types")->getValue(); const std::string id = value.asString(); if (id == "colors") - type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; + type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR; else if (id == "depth") - type = LLViewerWindow::SNAPSHOT_TYPE_DEPTH; + type = LLSnapshotModel::SNAPSHOT_TYPE_DEPTH; return type; } -// static -void LLFloaterSnapshot::Impl::setResolution(LLFloaterSnapshot* floater, const std::string& comboname) +void LLFloaterSnapshot::Impl::setResolution(LLFloaterSnapshotBase* floater, const std::string& comboname) { LLComboBox* combo = floater->getChild(comboname); combo->setVisible(TRUE); updateResolution(combo, floater, FALSE); // to sync spinners with combo } -//static -void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) +//virtual +void LLFloaterSnapshotBase::ImplBase::updateLayout(LLFloaterSnapshotBase* floaterp) { - LLSnapshotLivePreview* previewp = getPreviewView(floaterp); + LLSnapshotLivePreview* previewp = getPreviewView(); BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot"); @@ -330,7 +215,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) iter != LLCharacter::sInstances.end(); ++iter) { avatarp = *iter; - floaterp->impl.mAvatarPauseHandles.push_back(avatarp->requestPause()); + floaterp->impl->mAvatarPauseHandles.push_back(avatarp->requestPause()); } // freeze everything else @@ -338,7 +223,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset) { - floaterp->impl.mLastToolset = LLToolMgr::getInstance()->getCurrentToolset(); + floaterp->impl->mLastToolset = LLToolMgr::getInstance()->getCurrentToolset(); LLToolMgr::getInstance()->setCurrentToolset(gCameraToolset); } } @@ -354,15 +239,15 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) } //RN: thaw all avatars - floaterp->impl.mAvatarPauseHandles.clear(); + floaterp->impl->mAvatarPauseHandles.clear(); // thaw everything else gSavedSettings.setBOOL("FreezeTime", FALSE); // restore last tool (e.g. pie menu, etc) - if (floaterp->impl.mLastToolset) + if (floaterp->impl->mLastToolset) { - LLToolMgr::getInstance()->setCurrentToolset(floaterp->impl.mLastToolset); + LLToolMgr::getInstance()->setCurrentToolset(floaterp->impl->mLastToolset); } } } @@ -373,15 +258,15 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) // The basic pattern for programmatically changing the GUI settings is to first set the // appropriate saved settings and then call this method to sync the GUI with them. // FIXME: The above comment seems obsolete now. -// static -void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) +// virtual +void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshotBase* floater) { - LLPanelSnapshot::ESnapshotType shot_type = getActiveSnapshotType(floater); - ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); - LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); + LLSnapshotModel::ESnapshotType shot_type = getActiveSnapshotType(floater); + LLSnapshotModel::ESnapshotFormat shot_format = (LLSnapshotModel::ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); + LLSnapshotModel::ESnapshotLayerType layer_type = getLayerType(floater); floater->getChild("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat")); - floater->getChildView("layer_types")->setEnabled(shot_type == LLPanelSnapshot::SNAPSHOT_LOCAL); + floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotModel::SNAPSHOT_LOCAL); LLPanelSnapshot* active_panel = getActivePanel(floater); if (active_panel) @@ -395,7 +280,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) S32 w = gViewerWindow->getWindowWidthRaw(); LL_DEBUGS() << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << LL_ENDL; width_ctrl->setValue(w); - if(getActiveSnapshotType(floater) == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getActiveSnapshotType(floater) == LLSnapshotModel::SNAPSHOT_TEXTURE) { width_ctrl->setIncrement(w >> 1); } @@ -405,7 +290,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) S32 h = gViewerWindow->getWindowHeightRaw(); LL_DEBUGS() << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << LL_ENDL; height_ctrl->setValue(h); - if(getActiveSnapshotType(floater) == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getActiveSnapshotType(floater) == LLSnapshotModel::SNAPSHOT_TEXTURE) { height_ctrl->setIncrement(h >> 1); } @@ -437,7 +322,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) } } - LLSnapshotLivePreview* previewp = getPreviewView(floater); + LLSnapshotLivePreview* previewp = getPreviewView(); BOOL got_bytes = previewp && previewp->getDataSize() > 0; BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); @@ -462,35 +347,35 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) floater->getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); floater->getChild("file_size_label")->setColor( - shot_type == LLPanelSnapshot::SNAPSHOT_POSTCARD + shot_type == LLSnapshotModel::SNAPSHOT_POSTCARD && got_bytes && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); // Update the width and height spinners based on the corresponding resolution combos. (?) switch(shot_type) { - case LLPanelSnapshot::SNAPSHOT_WEB: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; + case LLSnapshotModel::SNAPSHOT_WEB: + layer_type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR; floater->getChild("layer_types")->setValue("colors"); setResolution(floater, "profile_size_combo"); break; - case LLPanelSnapshot::SNAPSHOT_POSTCARD: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; + case LLSnapshotModel::SNAPSHOT_POSTCARD: + layer_type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR; floater->getChild("layer_types")->setValue("colors"); setResolution(floater, "postcard_size_combo"); break; - case LLPanelSnapshot::SNAPSHOT_TEXTURE: - layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; + case LLSnapshotModel::SNAPSHOT_TEXTURE: + layer_type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR; floater->getChild("layer_types")->setValue("colors"); setResolution(floater, "texture_size_combo"); break; - case LLPanelSnapshot::SNAPSHOT_LOCAL: + case LLSnapshotModel::SNAPSHOT_LOCAL: setResolution(floater, "local_size_combo"); break; default: break; } - setAspectRatioCheckboxValue(floater, !floater->impl.mAspectRatioCheckOff && gSavedSettings.getBOOL("KeepAspectForSnapshot")); + setAspectRatioCheckboxValue(floater, !floater->impl->mAspectRatioCheckOff && gSavedSettings.getBOOL("KeepAspectForSnapshot")); if (previewp) { @@ -509,33 +394,32 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) LL_DEBUGS() << "finished updating controls" << LL_ENDL; } -// static -void LLFloaterSnapshot::Impl::setStatus(EStatus status, bool ok, const std::string& msg) +//virtual +void LLFloaterSnapshotBase::ImplBase::setStatus(EStatus status, bool ok, const std::string& msg) { - LLFloaterSnapshot* floater = LLFloaterSnapshot::getInstance(); switch (status) { case STATUS_READY: - setWorking(floater, false); - setFinished(floater, false); + setWorking(false); + setFinished(false); break; case STATUS_WORKING: - setWorking(floater, true); - setFinished(floater, false); + setWorking(true); + setFinished(false); break; case STATUS_FINISHED: - setWorking(floater, false); - setFinished(floater, true, ok, msg); + setWorking(false); + setFinished(true, ok, msg); break; } - floater->impl.mStatus = status; + mStatus = status; } -// static -void LLFloaterSnapshot::Impl::setNeedRefresh(LLFloaterSnapshot* floater, bool need) +// virtual +void LLFloaterSnapshotBase::ImplBase::setNeedRefresh(bool need) { - if (!floater) return; + if (!mFloater) return; // Don't display the "Refresh to save" message if we're in auto-refresh mode. if (gSavedSettings.getBOOL("AutoSnapshot")) @@ -543,12 +427,12 @@ void LLFloaterSnapshot::Impl::setNeedRefresh(LLFloaterSnapshot* floater, bool ne need = false; } - floater->mRefreshLabel->setVisible(need); - floater->impl.mNeedRefresh = need; + mFloater->setRefreshLabelVisible(need); + mNeedRefresh = need; } -// static -void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp, BOOL update_thumbnail) +// virtual +void LLFloaterSnapshotBase::ImplBase::checkAutoSnapshot(LLSnapshotLivePreview* previewp, BOOL update_thumbnail) { if (previewp) { @@ -559,43 +443,43 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp, } // static -void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data) +void LLFloaterSnapshotBase::ImplBase::onClickNewSnapshot(void* data) { - LLSnapshotLivePreview* previewp = getPreviewView((LLFloaterSnapshot *)data); - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; - if (previewp && view) + LLFloaterSnapshotBase* floater = (LLFloaterSnapshotBase *)data; + LLSnapshotLivePreview* previewp = floater->getPreviewView(); + if (previewp) { - view->impl.setStatus(Impl::STATUS_READY); + floater->impl->setStatus(ImplBase::STATUS_READY); LL_DEBUGS() << "updating snapshot" << LL_ENDL; previewp->mForceUpdateSnapshot = TRUE; } } // static -void LLFloaterSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data) +void LLFloaterSnapshotBase::ImplBase::onClickAutoSnap(LLUICtrl *ctrl, void* data) { LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; gSavedSettings.setBOOL( "AutoSnapshot", check->get() ); - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; + LLFloaterSnapshotBase *view = (LLFloaterSnapshotBase *)data; if (view) { - checkAutoSnapshot(getPreviewView(view)); - updateControls(view); + view->impl->checkAutoSnapshot(view->getPreviewView()); + view->impl->updateControls(view); } } // static -void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data) +void LLFloaterSnapshotBase::ImplBase::onClickFilter(LLUICtrl *ctrl, void* data) { - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; + LLFloaterSnapshotBase *view = (LLFloaterSnapshotBase *)data; if (view) { - updateControls(view); - LLSnapshotLivePreview* previewp = getPreviewView(view); + view->impl->updateControls(view); + LLSnapshotLivePreview* previewp = view->getPreviewView(); if (previewp) { - checkAutoSnapshot(previewp); + view->impl->checkAutoSnapshot(previewp); // Note : index 0 of the filter drop down is assumed to be "No filter" in whichever locale LLComboBox* filterbox = static_cast(view->getChild("filters_combobox")); std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : ""); @@ -606,7 +490,7 @@ void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data) } // static -void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data) +void LLFloaterSnapshotBase::ImplBase::onClickUICheck(LLUICtrl *ctrl, void* data) { LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; gSavedSettings.setBOOL( "RenderUIInSnapshot", check->get() ); @@ -614,17 +498,17 @@ void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data) LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; if (view) { - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = view->getPreviewView(); if(previewp) { previewp->updateSnapshot(TRUE, TRUE); } - updateControls(view); + view->impl->updateControls(view); } } // static -void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data) +void LLFloaterSnapshotBase::ImplBase::onClickHUDCheck(LLUICtrl *ctrl, void* data) { LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; gSavedSettings.setBOOL( "RenderHUDInSnapshot", check->get() ); @@ -632,17 +516,16 @@ void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data) LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; if (view) { - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = view->getPreviewView(); if(previewp) { previewp->updateSnapshot(TRUE, TRUE); } - updateControls(view); + view->impl->updateControls(view); } } -// static -void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked) +void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshotBase* view, BOOL checked) { gSavedSettings.setBOOL("KeepAspectForSnapshot", checked); @@ -655,7 +538,7 @@ void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index } - LLSnapshotLivePreview* previewp = getPreviewView(view) ; + LLSnapshotLivePreview* previewp = getPreviewView() ; if(previewp) { previewp->mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; @@ -673,11 +556,11 @@ void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL } // static -void LLFloaterSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) +void LLFloaterSnapshotBase::ImplBase::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) { LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl; - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLFloaterSnapshotBase *view = (LLFloaterSnapshotBase *)data; + LLSnapshotLivePreview* previewp = view->getPreviewView(); if (!view || !check_box || !previewp) { @@ -691,16 +574,15 @@ void LLFloaterSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) previewp->prepareFreezeFrame(); } - updateLayout(view); + view->impl->updateLayout(view); } -// static -void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 index) +void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshotBase *view, S32 index) { - LLSnapshotLivePreview *previewp = getPreviewView(view) ; + LLSnapshotLivePreview *previewp = getPreviewView() ; // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here - if(LLPanelSnapshot::SNAPSHOT_TEXTURE == getActiveSnapshotType(view)) + if (LLSnapshotModel::SNAPSHOT_TEXTURE == getActiveSnapshotType(view)) { previewp->mKeepAspectRatio = FALSE ; return ; @@ -724,7 +606,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde keep_aspect = FALSE; } - view->impl.mAspectRatioCheckOff = !enable_cb; + view->impl->mAspectRatioCheckOff = !enable_cb; if (previewp) { @@ -733,51 +615,55 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde } // Show/hide upload progress indicators. -// static -void LLFloaterSnapshot::Impl::setWorking(LLFloaterSnapshot* floater, bool working) +void LLFloaterSnapshotBase::ImplBase::setWorking(bool working) { - LLUICtrl* working_lbl = floater->getChild("working_lbl"); + LLUICtrl* working_lbl = mFloater->getChild("working_lbl"); working_lbl->setVisible(working); - floater->getChild("working_indicator")->setVisible(working); + mFloater->getChild("working_indicator")->setVisible(working); if (working) { - const std::string panel_name = getActivePanel(floater, false)->getName(); - const std::string prefix = panel_name.substr(std::string("panel_snapshot_").size()); - std::string progress_text = floater->getString(prefix + "_" + "progress_str"); + const std::string panel_name = getActivePanel(mFloater, false)->getName(); + const std::string prefix = panel_name.substr(getSnapshotPanelPrefix().size()); + std::string progress_text = mFloater->getString(prefix + "_" + "progress_str"); working_lbl->setValue(progress_text); } // All controls should be disabled while posting. - floater->setCtrlsEnabled(!working); - LLPanelSnapshot* active_panel = getActivePanel(floater); + mFloater->setCtrlsEnabled(!working); + LLPanelSnapshot* active_panel = getActivePanel(mFloater); if (active_panel) { active_panel->enableControls(!working); } } -// Show/hide upload status message. -// static -void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finished, bool ok, const std::string& msg) +//virtual +std::string LLFloaterSnapshot::Impl::getSnapshotPanelPrefix() { - floater->mSucceessLblPanel->setVisible(finished && ok); - floater->mFailureLblPanel->setVisible(finished && !ok); + return "panel_snapshot_"; +} + +// Show/hide upload status message. +// virtual +void LLFloaterSnapshot::Impl::setFinished(bool finished, bool ok, const std::string& msg) +{ + mFloater->setSuccessLabelPanelVisible(finished && ok); + mFloater->setFailureLabelPanelVisible(finished && !ok); if (finished) { - LLUICtrl* finished_lbl = floater->getChild(ok ? "succeeded_lbl" : "failed_lbl"); - std::string result_text = floater->getString(msg + "_" + (ok ? "succeeded_str" : "failed_str")); + LLUICtrl* finished_lbl = mFloater->getChild(ok ? "succeeded_lbl" : "failed_lbl"); + std::string result_text = mFloater->getString(msg + "_" + (ok ? "succeeded_str" : "failed_str")); finished_lbl->setValue(result_text); - LLSideTrayPanelContainer* panel_container = floater->getChild("panel_container"); + LLSideTrayPanelContainer* panel_container = mFloater->getChild("panel_container"); panel_container->openPreviousPanel(); panel_container->getCurrentPanel()->onOpen(LLSD()); } } // Apply a new resolution selected from the given combobox. -// static void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update) { LLComboBox* combobox = (LLComboBox*)ctrl; @@ -797,7 +683,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL S32 width = sdres[0]; S32 height = sdres[1]; - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = getPreviewView(); if (previewp && combobox->getCurrentIndex() >= 0) { S32 original_width = 0 , original_height = 0 ; @@ -827,7 +713,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL new_height = spanel->getTypedPreviewHeight(); // Limit custom size for inventory snapshots to 512x512 px. - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getActiveSnapshotType(view) == LLSnapshotModel::SNAPSHOT_TEXTURE) { new_width = llmin(new_width, MAX_TEXTURE_SIZE); new_height = llmin(new_height, MAX_TEXTURE_SIZE); @@ -865,7 +751,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL { getWidthSpinner(view)->setValue(width); getHeightSpinner(view)->setValue(height); - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getActiveSnapshotType(view) == LLSnapshotModel::SNAPSHOT_TEXTURE) { getWidthSpinner(view)->setIncrement(width >> 1); getHeightSpinner(view)->setIncrement(height >> 1); @@ -879,7 +765,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL // hide old preview as the aspect ratio could be wrong checkAutoSnapshot(previewp, FALSE); LL_DEBUGS() << "updating thumbnail" << LL_ENDL; - getPreviewView(view)->updateSnapshot(TRUE); + getPreviewView()->updateSnapshot(TRUE); if(do_update) { LL_DEBUGS() << "Will update controls" << LL_ENDL; @@ -898,40 +784,37 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data) if (view) { - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = view->getPreviewView(); if (previewp) { - previewp->setSnapshotBufferType((LLViewerWindow::ESnapshotType)combobox->getCurrentIndex()); + previewp->setSnapshotBufferType((LLSnapshotModel::ESnapshotLayerType)combobox->getCurrentIndex()); } - checkAutoSnapshot(previewp, TRUE); + view->impl->checkAutoSnapshot(previewp, TRUE); } } -// static -void LLFloaterSnapshot::Impl::onImageQualityChange(LLFloaterSnapshot* view, S32 quality_val) +void LLFloaterSnapshot::Impl::onImageQualityChange(LLFloaterSnapshotBase* view, S32 quality_val) { - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = getPreviewView(); if (previewp) { previewp->setSnapshotQuality(quality_val); } } -// static -void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view) +void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshotBase* view) { if (view) { gSavedSettings.setS32("SnapshotFormat", getImageFormat(view)); LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL; - getPreviewView(view)->updateSnapshot(TRUE); + getPreviewView()->updateSnapshot(TRUE); updateControls(view); } } // Sets the named size combo to "custom" mode. -// static -void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname) +void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshotBase* floater, const std::string& comboname) { LLComboBox* combo = floater->getChild(comboname); combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index @@ -939,7 +822,6 @@ void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const s } // Update supplied width and height according to the constrain proportions flag; limit them by max_val. -//static BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value) { S32 w = width ; @@ -984,20 +866,18 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3 return (w != width || h != height) ; } -//static -void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height) +void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshotBase* view, S32 width, S32 height) { getWidthSpinner(view)->forceSetValue(width); getHeightSpinner(view)->forceSetValue(height); - if (getActiveSnapshotType(view) == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getActiveSnapshotType(view) == LLSnapshotModel::SNAPSHOT_TEXTURE) { getWidthSpinner(view)->setIncrement(width >> 1); getHeightSpinner(view)->setIncrement(height >> 1); } } -// static -void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed) +void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshotBase* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed) { getWidthSpinner(view)->resetDirty(); getHeightSpinner(view)->resetDirty(); @@ -1007,13 +887,12 @@ void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshot } } -// static -void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h) +void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshotBase* view, S32 w, S32 h) { LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL; if (!view) return; - LLSnapshotLivePreview* previewp = getPreviewView(view); + LLSnapshotLivePreview* previewp = getPreviewView(); if (previewp) { S32 curw,curh; @@ -1037,16 +916,15 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 } // static -void LLFloaterSnapshot::Impl::onSnapshotUploadFinished(bool status) +void LLFloaterSnapshotBase::ImplBase::onSnapshotUploadFinished(LLFloaterSnapshotBase* floater, bool status) { - setStatus(STATUS_FINISHED, status, "profile"); + floater->impl->setStatus(STATUS_FINISHED, status, "profile"); } - // static -void LLFloaterSnapshot::Impl::onSendingPostcardFinished(bool status) +void LLFloaterSnapshot::Impl::onSendingPostcardFinished(LLFloaterSnapshotBase* floater, bool status) { - setStatus(STATUS_FINISHED, status, "postcard"); + floater->impl->setStatus(STATUS_FINISHED, status, "postcard"); } ///---------------------------------------------------------------------------- @@ -1055,12 +933,27 @@ void LLFloaterSnapshot::Impl::onSendingPostcardFinished(bool status) // Default constructor LLFloaterSnapshotBase::LLFloaterSnapshotBase(const LLSD& key) - : LLFloater(key) + : LLFloater(key), + mRefreshBtn(NULL), + mRefreshLabel(NULL), + mSucceessLblPanel(NULL), + mFailureLblPanel(NULL) { } LLFloaterSnapshotBase::~LLFloaterSnapshotBase() { + if (impl->mPreviewHandle.get()) impl->mPreviewHandle.get()->die(); + + //unfreeze everything else + gSavedSettings.setBOOL("FreezeTime", FALSE); + + if (impl->mLastToolset) + { + LLToolMgr::getInstance()->setCurrentToolset(impl->mLastToolset); + } + + delete impl; } ///---------------------------------------------------------------------------- @@ -1069,57 +962,41 @@ LLFloaterSnapshotBase::~LLFloaterSnapshotBase() // Default constructor LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key) - : LLFloaterSnapshotBase(key), - mRefreshBtn(NULL), - mRefreshLabel(NULL), - mSucceessLblPanel(NULL), - mFailureLblPanel(NULL), - impl (*(new Impl)) + : LLFloaterSnapshotBase(key) { + impl = new Impl(this); } -// Destroys the object LLFloaterSnapshot::~LLFloaterSnapshot() { - if (impl.mPreviewHandle.get()) impl.mPreviewHandle.get()->die(); - - //unfreeze everything else - gSavedSettings.setBOOL("FreezeTime", FALSE); - - if (impl.mLastToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset); - } - - delete &impl; } - +// virtual BOOL LLFloaterSnapshot::postBuild() { mRefreshBtn = getChild("new_snapshot_btn"); - childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this); + childSetAction("new_snapshot_btn", ImplBase::onClickNewSnapshot, this); mRefreshLabel = getChild("refresh_lbl"); mSucceessLblPanel = getChild("succeeded_panel"); mFailureLblPanel = getChild("failed_panel"); - childSetCommitCallback("ui_check", Impl::onClickUICheck, this); + childSetCommitCallback("ui_check", ImplBase::onClickUICheck, this); getChild("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); - childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this); + childSetCommitCallback("hud_check", ImplBase::onClickHUDCheck, this); getChild("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); - impl.setAspectRatioCheckboxValue(this, gSavedSettings.getBOOL("KeepAspectForSnapshot")); + ((Impl*)impl)->setAspectRatioCheckboxValue(this, gSavedSettings.getBOOL("KeepAspectForSnapshot")); childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this); getChild("layer_types")->setValue("colors"); getChildView("layer_types")->setEnabled(FALSE); getChild("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame")); - childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); + childSetCommitCallback("freeze_frame_check", ImplBase::onCommitFreezeFrame, this); getChild("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); - childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this); + childSetCommitCallback("auto_snapshot_check", ImplBase::onClickAutoSnap, this); // Filters @@ -1129,10 +1006,10 @@ BOOL LLFloaterSnapshot::postBuild() { filterbox->add(filter_list[i]); } - childSetCommitCallback("filters_combobox", Impl::onClickFilter, this); + childSetCommitCallback("filters_combobox", ImplBase::onClickFilter, this); - LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSnapshotUploadFinished, _1)); - LLPostCard::setPostResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSendingPostcardFinished, _1)); + LLWebProfile::setImageUploadResultCallback(boost::bind(&ImplBase::onSnapshotUploadFinished, this, _1)); + LLPostCard::setPostResultCallback(boost::bind(&Impl::onSendingPostcardFinished, this, _1)); sThumbnailPlaceholder = getChild("thumbnail_placeholder"); @@ -1159,10 +1036,10 @@ BOOL LLFloaterSnapshot::postBuild() getChild("local_size_combo")->selectNthItem(8); getChild("local_format_combo")->selectNthItem(0); - impl.mPreviewHandle = previewp->getHandle(); + impl->mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); - impl.updateControls(this); - impl.updateLayout(this); + impl->updateControls(this); + impl->updateLayout(this); previewp->setThumbnailPlaceholderRect(getThumbnailPlaceholderRect()); @@ -1170,9 +1047,10 @@ BOOL LLFloaterSnapshot::postBuild() return TRUE; } -void LLFloaterSnapshot::draw() +// virtual +void LLFloaterSnapshotBase::draw() { - LLSnapshotLivePreview* previewp = impl.getPreviewView(this); + LLSnapshotLivePreview* previewp = getPreviewView(); if (previewp && (previewp->isSnapshotActive() || previewp->getThumbnailLock())) { @@ -1186,7 +1064,7 @@ void LLFloaterSnapshot::draw() { if(previewp->getThumbnailImage()) { - bool working = impl.getStatus() == Impl::STATUS_WORKING; + bool working = impl->getStatus() == ImplBase::STATUS_WORKING; const LLRect& thumbnail_rect = getThumbnailPlaceholderRect(); const S32 thumbnail_w = previewp->getThumbnailWidth(); const S32 thumbnail_h = previewp->getThumbnailHeight(); @@ -1215,12 +1093,13 @@ void LLFloaterSnapshot::draw() gGL.popUIMatrix(); } } - impl.updateLayout(this); + impl->updateLayout(this); } +//virtual void LLFloaterSnapshot::onOpen(const LLSD& key) { - LLSnapshotLivePreview* preview = LLFloaterSnapshot::Impl::getPreviewView(this); + LLSnapshotLivePreview* preview = getPreviewView(); if(preview) { LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; @@ -1231,19 +1110,20 @@ void LLFloaterSnapshot::onOpen(const LLSD& key) gSnapshotFloaterView->setVisible(TRUE); gSnapshotFloaterView->adjustToFitScreen(this, FALSE); - impl.updateControls(this); - impl.updateLayout(this); + impl->updateControls(this); + impl->updateLayout(this); // Initialize default tab. getChild("panel_container")->getCurrentPanel()->onOpen(LLSD()); } -void LLFloaterSnapshot::onClose(bool app_quitting) +//virtual +void LLFloaterSnapshotBase::onClose(bool app_quitting) { getParent()->setMouseOpaque(FALSE); //unfreeze everything, hide fullscreen preview - LLSnapshotLivePreview* previewp = LLFloaterSnapshot::Impl::getPreviewView(this); + LLSnapshotLivePreview* previewp = getPreviewView(); if (previewp) { previewp->setVisible(FALSE); @@ -1251,118 +1131,135 @@ void LLFloaterSnapshot::onClose(bool app_quitting) } gSavedSettings.setBOOL("FreezeTime", FALSE); - impl.mAvatarPauseHandles.clear(); + impl->mAvatarPauseHandles.clear(); - if (impl.mLastToolset) + if (impl->mLastToolset) { - LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset); + LLToolMgr::getInstance()->setCurrentToolset(impl->mLastToolset); } } // virtual -S32 LLFloaterSnapshot::notify(const LLSD& info) +S32 LLFloaterSnapshotBase::notify(const LLSD& info) { - // A child panel wants to change snapshot resolution. - if (info.has("combo-res-change")) - { - std::string combo_name = info["combo-res-change"]["control-name"].asString(); - impl.updateResolution(getChild(combo_name), this); - return 1; - } - - if (info.has("custom-res-change")) - { - LLSD res = info["custom-res-change"]; - impl.applyCustomResolution(this, res["w"].asInteger(), res["h"].asInteger()); - return 1; - } - - if (info.has("keep-aspect-change")) - { - impl.applyKeepAspectCheck(this, info["keep-aspect-change"].asBoolean()); - return 1; - } - - if (info.has("image-quality-change")) - { - impl.onImageQualityChange(this, info["image-quality-change"].asInteger()); - return 1; - } - - if (info.has("image-format-change")) - { - impl.onImageFormatChange(this); - return 1; - } - if (info.has("set-ready")) { - impl.setStatus(Impl::STATUS_READY); + impl->setStatus(ImplBase::STATUS_READY); return 1; } if (info.has("set-working")) { - impl.setStatus(Impl::STATUS_WORKING); + impl->setStatus(ImplBase::STATUS_WORKING); return 1; } if (info.has("set-finished")) { LLSD data = info["set-finished"]; - impl.setStatus(Impl::STATUS_FINISHED, data["ok"].asBoolean(), data["msg"].asString()); + impl->setStatus(ImplBase::STATUS_FINISHED, data["ok"].asBoolean(), data["msg"].asString()); return 1; } - + if (info.has("snapshot-updating")) { - // Disable the send/post/save buttons until snapshot is ready. - impl.updateControls(this); + // Disable the send/post/save buttons until snapshot is ready. + impl->updateControls(this); return 1; } if (info.has("snapshot-updated")) { - // Enable the send/post/save buttons. - impl.updateControls(this); - // We've just done refresh. - impl.setNeedRefresh(this, false); - - // The refresh button is initially hidden. We show it after the first update, - // i.e. when preview appears. - if (!mRefreshBtn->getVisible()) - { - mRefreshBtn->setVisible(true); - } + // Enable the send/post/save buttons. + impl->updateControls(this); + // We've just done refresh. + impl->setNeedRefresh(false); + + // The refresh button is initially hidden. We show it after the first update, + // i.e. when preview appears. + if (!mRefreshBtn->getVisible()) + { + mRefreshBtn->setVisible(true); + } return 1; - } + } + + return 0; +} + +// virtual +S32 LLFloaterSnapshot::notify(const LLSD& info) +{ + bool res = LLFloaterSnapshotBase::notify(info); + if (res) + return res; + // A child panel wants to change snapshot resolution. + if (info.has("combo-res-change")) + { + std::string combo_name = info["combo-res-change"]["control-name"].asString(); + ((Impl*)impl)->updateResolution(getChild(combo_name), this); + return 1; + } + + if (info.has("custom-res-change")) + { + LLSD res = info["custom-res-change"]; + ((Impl*)impl)->applyCustomResolution(this, res["w"].asInteger(), res["h"].asInteger()); + return 1; + } + + if (info.has("keep-aspect-change")) + { + ((Impl*)impl)->applyKeepAspectCheck(this, info["keep-aspect-change"].asBoolean()); + return 1; + } + + if (info.has("image-quality-change")) + { + ((Impl*)impl)->onImageQualityChange(this, info["image-quality-change"].asInteger()); + return 1; + } + + if (info.has("image-format-change")) + { + ((Impl*)impl)->onImageFormatChange(this); + return 1; + } return 0; } +void LLFloaterSnapshotBase::ImplBase::updateLivePreview() +{ + LLFloaterFacebook* floater_facebook = LLFloaterReg::findTypedInstance("facebook"); + LLFloaterFlickr* floater_flickr = LLFloaterReg::findTypedInstance("flickr"); + LLFloaterTwitter* floater_twitter = LLFloaterReg::findTypedInstance("twitter"); + + if (!mFloater && !floater_facebook && !floater_flickr && !floater_twitter) + return; + + BOOL changed = FALSE; + LL_DEBUGS() << "npreviews: " << LLSnapshotLivePreview::sList.size() << LL_ENDL; + for (std::set::iterator iter = LLSnapshotLivePreview::sList.begin(); + iter != LLSnapshotLivePreview::sList.end(); ++iter) + { + changed |= LLSnapshotLivePreview::onIdle(*iter); + } + + if (mFloater && changed) + { + LL_DEBUGS() << "changed" << LL_ENDL; + updateControls(mFloater); + } +} + //static void LLFloaterSnapshot::update() { - LLFloaterSnapshot* inst = findInstance(); - LLFloaterFacebook* floater_facebook = LLFloaterReg::findTypedInstance("facebook"); - LLFloaterFlickr* floater_flickr = LLFloaterReg::findTypedInstance("flickr"); - LLFloaterTwitter* floater_twitter = LLFloaterReg::findTypedInstance("twitter"); - - if (!inst && !floater_facebook && !floater_flickr && !floater_twitter) - return; - - BOOL changed = FALSE; - LL_DEBUGS() << "npreviews: " << LLSnapshotLivePreview::sList.size() << LL_ENDL; - for (std::set::iterator iter = LLSnapshotLivePreview::sList.begin(); - iter != LLSnapshotLivePreview::sList.end(); ++iter) + LLFloaterSnapshot* inst = getInstance(); + if (inst != NULL) { - changed |= LLSnapshotLivePreview::onIdle(*iter); - } - - if (inst && changed) - { - LL_DEBUGS() << "changed" << LL_ENDL; - inst->impl.updateControls(inst); + inst->impl->updateLivePreview(); } } @@ -1372,25 +1269,12 @@ LLFloaterSnapshot* LLFloaterSnapshot::getInstance() return LLFloaterReg::getTypedInstance("snapshot"); } -// static -LLFloaterSnapshot* LLFloaterSnapshot::findInstance() -{ - return LLFloaterReg::findTypedInstance("snapshot"); -} - -// static +// virtual void LLFloaterSnapshot::saveTexture() { LL_DEBUGS() << "saveTexture" << LL_ENDL; - // FIXME: duplicated code - LLFloaterSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return; - } - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); + LLSnapshotLivePreview* previewp = getPreviewView(); if (!previewp) { llassert(previewp != NULL); @@ -1400,18 +1284,10 @@ void LLFloaterSnapshot::saveTexture() previewp->saveTexture(); } -// static BOOL LLFloaterSnapshot::saveLocal() { LL_DEBUGS() << "saveLocal" << LL_ENDL; - // FIXME: duplicated code - LLFloaterSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return FALSE; - } - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); + LLSnapshotLivePreview* previewp = getPreviewView(); if (!previewp) { llassert(previewp != NULL); @@ -1421,43 +1297,26 @@ BOOL LLFloaterSnapshot::saveLocal() return previewp->saveLocal(); } -// static -void LLFloaterSnapshot::postSave() +void LLFloaterSnapshotBase::postSave() { - LLFloaterSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return; - } - - instance->impl.updateControls(instance); - instance->impl.setStatus(Impl::STATUS_WORKING); + impl->updateControls(this); + impl->setStatus(ImplBase::STATUS_WORKING); } -// static -void LLFloaterSnapshot::postPanelSwitch() +// virtual +void LLFloaterSnapshotBase::postPanelSwitch() { - LLFloaterSnapshot* instance = getInstance(); - instance->impl.updateControls(instance); + impl->updateControls(this); // Remove the success/failure indicator whenever user presses a snapshot option button. - instance->impl.setStatus(Impl::STATUS_READY); + impl->setStatus(ImplBase::STATUS_READY); } -// static -LLPointer LLFloaterSnapshot::getImageData() +LLPointer LLFloaterSnapshotBase::getImageData() { // FIXME: May not work for textures. - LLFloaterSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return NULL; - } - - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); + LLSnapshotLivePreview* previewp = getPreviewView(); if (!previewp) { llassert(previewp != NULL); @@ -1474,17 +1333,9 @@ LLPointer LLFloaterSnapshot::getImageData() return img; } -// static -const LLVector3d& LLFloaterSnapshot::getPosTakenGlobal() +const LLVector3d& LLFloaterSnapshotBase::getPosTakenGlobal() { - LLFloaterSnapshot* instance = findInstance(); - if (!instance) - { - llassert(instance != NULL); - return LLVector3d::zero; - } - - LLSnapshotLivePreview* previewp = Impl::getPreviewView(instance); + LLSnapshotLivePreview* previewp = getPreviewView(); if (!previewp) { llassert(previewp != NULL); @@ -1497,7 +1348,7 @@ const LLVector3d& LLFloaterSnapshot::getPosTakenGlobal() // static void LLFloaterSnapshot::setAgentEmail(const std::string& email) { - LLFloaterSnapshot* instance = findInstance(); + LLFloaterSnapshot* instance = getInstance(); if (instance) { LLSideTrayPanelContainer* panel_container = instance->getChild("panel_container"); @@ -1518,6 +1369,7 @@ LLSnapshotFloaterView::~LLSnapshotFloaterView() { } +// virtual BOOL LLSnapshotFloaterView::handleKey(KEY key, MASK mask, BOOL called_from_parent) { // use default handler when not in freeze-frame mode @@ -1539,6 +1391,7 @@ BOOL LLSnapshotFloaterView::handleKey(KEY key, MASK mask, BOOL called_from_paren return TRUE; } +// virtual BOOL LLSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask) { // use default handler when not in freeze-frame mode @@ -1554,6 +1407,7 @@ BOOL LLSnapshotFloaterView::handleMouseDown(S32 x, S32 y, MASK mask) return TRUE; } +// virtual BOOL LLSnapshotFloaterView::handleMouseUp(S32 x, S32 y, MASK mask) { // use default handler when not in freeze-frame mode @@ -1569,6 +1423,7 @@ BOOL LLSnapshotFloaterView::handleMouseUp(S32 x, S32 y, MASK mask) return TRUE; } +// virtual BOOL LLSnapshotFloaterView::handleHover(S32 x, S32 y, MASK mask) { // use default handler when not in freeze-frame mode diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 5f9857c8c5..431888d2d0 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2004&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2016, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,36 +27,109 @@ #ifndef LL_LLFLOATERSNAPSHOT_H #define LL_LLFLOATERSNAPSHOT_H +#include "llagent.h" #include "llfloater.h" +#include "llpanelsnapshot.h" +#include "llsnapshotmodel.h" class LLSpinCtrl; +class LLSnapshotLivePreview; class LLFloaterSnapshotBase : public LLFloater { LOG_CLASS(LLFloaterSnapshotBase); public: - typedef enum e_snapshot_format - { - SNAPSHOT_FORMAT_PNG, - SNAPSHOT_FORMAT_JPEG, - SNAPSHOT_FORMAT_BMP - } ESnapshotFormat; LLFloaterSnapshotBase(const LLSD& key); virtual ~LLFloaterSnapshotBase(); - ///*virtual*/ S32 notify(const LLSD& info); + /*virtual*/ void draw(); + /*virtual*/ void onClose(bool app_quitting); + virtual S32 notify(const LLSD& info); - //static LLFloaterSnapshotBase* getInstance(); - //static LLFloaterSnapshotBase* findInstance(); - //static void saveTexture(); - //static BOOL saveLocal(); - //static void postSave(); + // TODO: create a snapshot model instead + virtual void saveTexture() = 0; + void postSave(); + virtual void postPanelSwitch(); + LLPointer getImageData(); + LLSnapshotLivePreview* getPreviewView(); + const LLVector3d& getPosTakenGlobal(); + + static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } + + void setRefreshLabelVisible(bool value) { mRefreshLabel->setVisible(value); } + void setSuccessLabelPanelVisible(bool value) { mSucceessLblPanel->setVisible(value); } + void setFailureLabelPanelVisible(bool value) { mFailureLblPanel->setVisible(value); } + + class ImplBase; + friend ImplBase; + ImplBase* impl; protected: - class ImplBase; - //ImplBase& impl; + static LLUICtrl* sThumbnailPlaceholder; + LLUICtrl *mRefreshBtn, *mRefreshLabel; + LLUICtrl *mSucceessLblPanel, *mFailureLblPanel; +}; + +class LLFloaterSnapshotBase::ImplBase +{ +public: + typedef enum e_status + { + STATUS_READY, + STATUS_WORKING, + STATUS_FINISHED + } EStatus; + + ImplBase(LLFloaterSnapshotBase* floater) : mAvatarPauseHandles(), + mLastToolset(NULL), + mAspectRatioCheckOff(false), + mNeedRefresh(false), + mStatus(STATUS_READY), + mFloater(floater) + {} + virtual ~ImplBase() + { + //unpause avatars + mAvatarPauseHandles.clear(); + } + + static void onClickNewSnapshot(void* data); + static void onClickAutoSnap(LLUICtrl *ctrl, void* data); + static void onClickFilter(LLUICtrl *ctrl, void* data); + static void onClickUICheck(LLUICtrl *ctrl, void* data); + static void onClickHUDCheck(LLUICtrl *ctrl, void* data); + static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data); + static void onSnapshotUploadFinished(LLFloaterSnapshotBase* floater, bool status); + + virtual LLPanelSnapshot* getActivePanel(LLFloaterSnapshotBase* floater, bool ok_if_not_found = true) = 0; + virtual LLSnapshotModel::ESnapshotType getActiveSnapshotType(LLFloaterSnapshotBase* floater); + virtual LLSnapshotModel::ESnapshotFormat getImageFormat(LLFloaterSnapshotBase* floater) = 0; + virtual std::string getSnapshotPanelPrefix() = 0; + + LLSnapshotLivePreview* getPreviewView(); + virtual void updateControls(LLFloaterSnapshotBase* floater) = 0; + virtual void updateLayout(LLFloaterSnapshotBase* floater); + virtual void updateLivePreview(); + virtual void setStatus(EStatus status, bool ok = true, const std::string& msg = LLStringUtil::null); + virtual EStatus getStatus() const { return mStatus; } + virtual void setNeedRefresh(bool need); + + virtual LLSnapshotModel::ESnapshotLayerType getLayerType(LLFloaterSnapshotBase* floater) = 0; + virtual void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE); + void setWorking(bool working); + virtual void setFinished(bool finished, bool ok = true, const std::string& msg = LLStringUtil::null) = 0; + +public: + LLFloaterSnapshotBase* mFloater; + std::vector mAvatarPauseHandles; + + LLToolset* mLastToolset; + LLHandle mPreviewHandle; + bool mAspectRatioCheckOff; + bool mNeedRefresh; + EStatus mStatus; }; class LLFloaterSnapshot : public LLFloaterSnapshotBase @@ -64,51 +137,65 @@ class LLFloaterSnapshot : public LLFloaterSnapshotBase LOG_CLASS(LLFloaterSnapshot); public: - //typedef enum e_snapshot_format - //{ - // SNAPSHOT_FORMAT_PNG, - // SNAPSHOT_FORMAT_JPEG, - // SNAPSHOT_FORMAT_BMP - //} ESnapshotFormat; - LLFloaterSnapshot(const LLSD& key); - virtual ~LLFloaterSnapshot(); + /*virtual*/ ~LLFloaterSnapshot(); /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClose(bool app_quitting); /*virtual*/ S32 notify(const LLSD& info); static void update(); - // TODO: create a snapshot model instead static LLFloaterSnapshot* getInstance(); - static LLFloaterSnapshot* findInstance(); - static void saveTexture(); - static BOOL saveLocal(); - static void postSave(); - static void postPanelSwitch(); - static LLPointer getImageData(); - static const LLVector3d& getPosTakenGlobal(); + /*virtual*/ void saveTexture(); + BOOL saveLocal(); static void setAgentEmail(const std::string& email); - static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } - -private: - static LLUICtrl* sThumbnailPlaceholder; - LLUICtrl *mRefreshBtn, *mRefreshLabel; - LLUICtrl *mSucceessLblPanel, *mFailureLblPanel; - class Impl; - Impl& impl; + friend Impl; }; -class LLFloaterSnapshotBase::ImplBase +///---------------------------------------------------------------------------- +/// Class LLFloaterSnapshot::Impl +///---------------------------------------------------------------------------- + +class LLFloaterSnapshot::Impl : public LLFloaterSnapshotBase::ImplBase { + LOG_CLASS(LLFloaterSnapshot::Impl); public: - ImplBase(); - ~ImplBase(); + Impl(LLFloaterSnapshotBase* floater) + : LLFloaterSnapshotBase::ImplBase(floater) + {} + ~Impl() + {} + + void applyKeepAspectCheck(LLFloaterSnapshotBase* view, BOOL checked); + void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE); + static void onCommitLayerTypes(LLUICtrl* ctrl, void*data); + void onImageQualityChange(LLFloaterSnapshotBase* view, S32 quality_val); + void onImageFormatChange(LLFloaterSnapshotBase* view); + void applyCustomResolution(LLFloaterSnapshotBase* view, S32 w, S32 h); + static void onSendingPostcardFinished(LLFloaterSnapshotBase* floater, bool status); + BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); + void setImageSizeSpinnersValues(LLFloaterSnapshotBase *view, S32 width, S32 height); + void updateSpinners(LLFloaterSnapshotBase* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed); + + /*virtual*/ LLPanelSnapshot* getActivePanel(LLFloaterSnapshotBase* floater, bool ok_if_not_found = true); + /*virtual*/ LLSnapshotModel::ESnapshotFormat getImageFormat(LLFloaterSnapshotBase* floater); + LLSpinCtrl* getWidthSpinner(LLFloaterSnapshotBase* floater); + LLSpinCtrl* getHeightSpinner(LLFloaterSnapshotBase* floater); + void enableAspectRatioCheckbox(LLFloaterSnapshotBase* floater, BOOL enable); + void setAspectRatioCheckboxValue(LLFloaterSnapshotBase* floater, BOOL checked); + /*virtual*/ std::string getSnapshotPanelPrefix(); + + void setResolution(LLFloaterSnapshotBase* floater, const std::string& comboname); + /*virtual*/ void updateControls(LLFloaterSnapshotBase* floater); + +private: + /*virtual*/ LLSnapshotModel::ESnapshotLayerType getLayerType(LLFloaterSnapshotBase* floater); + void comboSetCustom(LLFloaterSnapshotBase *floater, const std::string& comboname); + void checkAspectRatio(LLFloaterSnapshotBase *view, S32 index); + void setFinished(bool finished, bool ok = true, const std::string& msg = LLStringUtil::null); }; class LLSnapshotFloaterView : public LLFloaterView diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 984ba587ed..4bab89ace2 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -241,8 +241,8 @@ void LLTwitterPhotoPanel::onVisibilityChange(BOOL visible) mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); - previewp->setSnapshotType(LLPanelSnapshot::SNAPSHOT_WEB); - previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); + previewp->setSnapshotType(LLSnapshotModel::SNAPSHOT_WEB); + previewp->setSnapshotFormat(LLSnapshotModel::SNAPSHOT_FORMAT_JPEG); previewp->setThumbnailSubsampled(TRUE); // We want the preview to reflect the *saved* image previewp->setAllowRenderUI(FALSE); // We do not want the rendered UI in our snapshots previewp->setAllowFullScreenPreview(FALSE); // No full screen preview in SL Share mode diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index 7bd9c0bd94..f6af3d63f6 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -1115,8 +1115,12 @@ void LLOutfitGallery::onSelectPhoto(LLUUID selected_outfit_id) void LLOutfitGallery::onTakeSnapshot(LLUUID selected_outfit_id) { LLFloaterReg::toggleInstanceOrBringToFront("outfit_snapshot"); - LLFloaterOutfitSnapshot::getInstance()->setOutfitID(selected_outfit_id); - LLFloaterOutfitSnapshot::getInstance()->setGallery(this); + LLFloaterOutfitSnapshot* snapshot_floater = LLFloaterOutfitSnapshot::getInstance(); + if (snapshot_floater) + { + snapshot_floater->setOutfitID(selected_outfit_id); + snapshot_floater->getInstance()->setGallery(this); + } } void LLOutfitGallery::onBeforeOutfitSnapshotSave() diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp index e320c4ce8b..a17e3f9e78 100644 --- a/indra/newview/llpanelsnapshot.cpp +++ b/indra/newview/llpanelsnapshot.cpp @@ -29,6 +29,8 @@ // libs #include "llcombobox.h" +#include "llfloater.h" +#include "llfloatersnapshot.h" #include "llsliderctrl.h" #include "llspinctrl.h" #include "lltrans.h" @@ -50,6 +52,10 @@ S32 power_of_two(S32 sz, S32 upper) return res; } +LLPanelSnapshot::LLPanelSnapshot() + : mSnapshotFloater(NULL) +{} + // virtual BOOL LLPanelSnapshot::postBuild() { @@ -67,6 +73,8 @@ BOOL LLPanelSnapshot::postBuild() getChild(getAspectRatioCBName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onKeepAspectRatioCommit, this, _1)); } updateControls(LLSD()); + + mSnapshotFloater = getParentByType(); return TRUE; } @@ -88,9 +96,9 @@ void LLPanelSnapshot::onOpen(const LLSD& key) } } -LLFloaterSnapshotBase::ESnapshotFormat LLPanelSnapshot::getImageFormat() const +LLSnapshotModel::ESnapshotFormat LLPanelSnapshot::getImageFormat() const { - return LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG; + return LLSnapshotModel::SNAPSHOT_FORMAT_JPEG; } void LLPanelSnapshot::enableControls(BOOL enable) @@ -228,7 +236,7 @@ void LLPanelSnapshot::onKeepAspectRatioCommit(LLUICtrl* ctrl) getParentByType()->notify(LLSD().with("keep-aspect-change", ctrl->getValue().asBoolean())); } -LLPanelSnapshot::ESnapshotType LLPanelSnapshot::getSnapshotType() +LLSnapshotModel::ESnapshotType LLPanelSnapshot::getSnapshotType() { - return LLPanelSnapshot::SNAPSHOT_WEB; + return LLSnapshotModel::SNAPSHOT_WEB; } diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h index 3868020cdf..55273797cc 100644 --- a/indra/newview/llpanelsnapshot.h +++ b/indra/newview/llpanelsnapshot.h @@ -27,9 +27,13 @@ #ifndef LL_LLPANELSNAPSHOT_H #define LL_LLPANELSNAPSHOT_H -#include "llfloatersnapshot.h" +//#include "llfloatersnapshot.h" +#include "llpanel.h" +#include "llsnapshotmodel.h" +class LLSpinCtrl; class LLSideTrayPanelContainer; +class LLFloaterSnapshotBase; /** * Snapshot panel base class. @@ -37,13 +41,7 @@ class LLSideTrayPanelContainer; class LLPanelSnapshot: public LLPanel { public: - enum ESnapshotType - { - SNAPSHOT_POSTCARD, - SNAPSHOT_TEXTURE, - SNAPSHOT_LOCAL, - SNAPSHOT_WEB - }; + LLPanelSnapshot(); /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); @@ -59,8 +57,8 @@ public: virtual LLSpinCtrl* getWidthSpinner(); virtual LLSpinCtrl* getHeightSpinner(); virtual void enableAspectRatioCheckbox(BOOL enable); - virtual LLFloaterSnapshotBase::ESnapshotFormat getImageFormat() const; - virtual ESnapshotType getSnapshotType(); + virtual LLSnapshotModel::ESnapshotFormat getImageFormat() const; + virtual LLSnapshotModel::ESnapshotType getSnapshotType(); virtual void updateControls(const LLSD& info) = 0; ///< Update controls from saved settings void enableControls(BOOL enable); @@ -74,6 +72,8 @@ protected: void onCustomResolutionCommit(); void onResolutionComboCommit(LLUICtrl* ctrl); void onKeepAspectRatioCommit(LLUICtrl* ctrl); + + LLFloaterSnapshotBase* mSnapshotFloater; }; #endif // LL_LLPANELSNAPSHOT_H diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp index 057e046e30..408eb8fbf3 100644 --- a/indra/newview/llpanelsnapshotinventory.cpp +++ b/indra/newview/llpanelsnapshotinventory.cpp @@ -32,7 +32,6 @@ #include "llspinctrl.h" #include "llfloatersnapshot.h" // FIXME: replace with a snapshot storage model -#include "llfloateroutfitsnapshot.h" #include "llpanelsnapshot.h" #include "llsnapshotlivepreview.h" #include "llviewercontrol.h" // gSavedSettings @@ -48,10 +47,10 @@ class LLPanelSnapshotInventoryBase public: LLPanelSnapshotInventoryBase(); + /*virtual*/ BOOL postBuild(); protected: - virtual void onSend() = 0; - /*virtual*/ LLPanelSnapshot::ESnapshotType getSnapshotType(); - + void onSend(); + /*virtual*/ LLSnapshotModel::ESnapshotType getSnapshotType(); }; class LLPanelSnapshotInventory @@ -74,7 +73,6 @@ private: /*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; } /*virtual*/ void updateControls(const LLSD& info); - /*virtual*/ void onSend(); }; class LLPanelOutfitSnapshotInventory @@ -95,7 +93,6 @@ private: /*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; } /*virtual*/ void updateControls(const LLSD& info); - /*virtual*/ void onSend(); /*virtual*/ void cancel(); }; @@ -107,9 +104,14 @@ LLPanelSnapshotInventoryBase::LLPanelSnapshotInventoryBase() { } -LLPanelSnapshot::ESnapshotType LLPanelSnapshotInventoryBase::getSnapshotType() +BOOL LLPanelSnapshotInventoryBase::postBuild() { - return LLPanelSnapshot::SNAPSHOT_TEXTURE; + return LLPanelSnapshot::postBuild(); +} + +LLSnapshotModel::ESnapshotType LLPanelSnapshotInventoryBase::getSnapshotType() +{ + return LLSnapshotModel::SNAPSHOT_TEXTURE; } LLPanelSnapshotInventory::LLPanelSnapshotInventory() @@ -125,7 +127,7 @@ BOOL LLPanelSnapshotInventory::postBuild() getChild(getHeightSpinnerName())->setAllowEdit(FALSE); getChild(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelSnapshotInventory::onResolutionCommit, this, _1)); - return LLPanelSnapshot::postBuild(); + return LLPanelSnapshotInventoryBase::postBuild(); } // virtual @@ -149,10 +151,13 @@ void LLPanelSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl) getChild(getHeightSpinnerName())->setVisible(!current_window_selected); } -void LLPanelSnapshotInventory::onSend() +void LLPanelSnapshotInventoryBase::onSend() { - LLFloaterSnapshot::saveTexture(); - LLFloaterSnapshot::postSave(); + if (mSnapshotFloater) + { + mSnapshotFloater->saveTexture(); + mSnapshotFloater->postSave(); + } } LLPanelOutfitSnapshotInventory::LLPanelOutfitSnapshotInventory() @@ -164,7 +169,7 @@ LLPanelOutfitSnapshotInventory::LLPanelOutfitSnapshotInventory() // virtual BOOL LLPanelOutfitSnapshotInventory::postBuild() { - return LLPanelSnapshot::postBuild(); + return LLPanelSnapshotInventoryBase::postBuild(); } // virtual @@ -181,13 +186,10 @@ void LLPanelOutfitSnapshotInventory::updateControls(const LLSD& info) getChild("save_btn")->setEnabled(have_snapshot); } -void LLPanelOutfitSnapshotInventory::onSend() -{ - LLFloaterOutfitSnapshot::saveTexture(); - LLFloaterOutfitSnapshot::postSave(); -} - void LLPanelOutfitSnapshotInventory::cancel() { - getParentByType()->closeFloater(); + if (mSnapshotFloater) + { + mSnapshotFloater->closeFloater(); + } } diff --git a/indra/newview/llpanelsnapshotlocal.cpp b/indra/newview/llpanelsnapshotlocal.cpp index 954eb63a28..3652c10586 100644 --- a/indra/newview/llpanelsnapshotlocal.cpp +++ b/indra/newview/llpanelsnapshotlocal.cpp @@ -56,9 +56,9 @@ private: /*virtual*/ std::string getAspectRatioCBName() const { return "local_keep_aspect_check"; } /*virtual*/ std::string getImageSizeComboName() const { return "local_size_combo"; } /*virtual*/ std::string getImageSizePanelName() const { return "local_image_size_lp"; } - /*virtual*/ LLFloaterSnapshotBase::ESnapshotFormat getImageFormat() const; - /*virtual*/ LLPanelSnapshot::ESnapshotType getSnapshotType(); - /*virtual*/ void updateControls(const LLSD& info); + /*virtual*/ LLSnapshotModel::ESnapshotFormat getImageFormat() const; + /*virtual*/ LLSnapshotModel::ESnapshotType getSnapshotType(); + /*virtual*/ void updateControls(const LLSD& info); S32 mLocalFormat; @@ -96,23 +96,23 @@ void LLPanelSnapshotLocal::onOpen(const LLSD& key) } // virtual -LLFloaterSnapshotBase::ESnapshotFormat LLPanelSnapshotLocal::getImageFormat() const +LLSnapshotModel::ESnapshotFormat LLPanelSnapshotLocal::getImageFormat() const { - LLFloaterSnapshotBase::ESnapshotFormat fmt = LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG; + LLSnapshotModel::ESnapshotFormat fmt = LLSnapshotModel::SNAPSHOT_FORMAT_PNG; LLComboBox* local_format_combo = getChild("local_format_combo"); const std::string id = local_format_combo->getValue().asString(); if (id == "PNG") { - fmt = LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG; + fmt = LLSnapshotModel::SNAPSHOT_FORMAT_PNG; } else if (id == "JPEG") { - fmt = LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG; + fmt = LLSnapshotModel::SNAPSHOT_FORMAT_JPEG; } else if (id == "BMP") { - fmt = LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP; + fmt = LLSnapshotModel::SNAPSHOT_FORMAT_BMP; } return fmt; @@ -121,11 +121,11 @@ LLFloaterSnapshotBase::ESnapshotFormat LLPanelSnapshotLocal::getImageFormat() co // virtual void LLPanelSnapshotLocal::updateControls(const LLSD& info) { - LLFloaterSnapshotBase::ESnapshotFormat fmt = - (LLFloaterSnapshotBase::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); + LLSnapshotModel::ESnapshotFormat fmt = + (LLSnapshotModel::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); getChild("local_format_combo")->selectNthItem((S32) fmt); - const bool show_quality_ctrls = (fmt == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); + const bool show_quality_ctrls = (fmt == LLSnapshotModel::SNAPSHOT_FORMAT_JPEG); getChild("image_quality_slider")->setVisible(show_quality_ctrls); getChild("image_quality_level")->setVisible(show_quality_ctrls); @@ -164,10 +164,10 @@ void LLPanelSnapshotLocal::onSaveFlyoutCommit(LLUICtrl* ctrl) LLFloaterSnapshot* floater = LLFloaterSnapshot::getInstance(); floater->notify(LLSD().with("set-working", true)); - BOOL saved = LLFloaterSnapshot::saveLocal(); + BOOL saved = floater->saveLocal(); if (saved) { - LLFloaterSnapshot::postSave(); + mSnapshotFloater->postSave(); goBack(); floater->notify(LLSD().with("set-finished", LLSD().with("ok", true).with("msg", "local"))); } @@ -177,7 +177,7 @@ void LLPanelSnapshotLocal::onSaveFlyoutCommit(LLUICtrl* ctrl) } } -LLPanelSnapshot::ESnapshotType LLPanelSnapshotLocal::getSnapshotType() +LLSnapshotModel::ESnapshotType LLPanelSnapshotLocal::getSnapshotType() { - return LLPanelSnapshot::SNAPSHOT_LOCAL; + return LLSnapshotModel::SNAPSHOT_LOCAL; } diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 0fc9ceec83..269f16c5e4 100644 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -62,6 +62,8 @@ private: void onSendToFacebook(); void onSendToTwitter(); void onSendToFlickr(); + + LLFloaterSnapshotBase* mSnapshotFloater; }; static LLPanelInjector panel_class("llpanelsnapshotoptions"); @@ -86,6 +88,7 @@ LLPanelSnapshotOptions::~LLPanelSnapshotOptions() // virtual BOOL LLPanelSnapshotOptions::postBuild() { + mSnapshotFloater = getParentByType(); return LLPanel::postBuild(); } @@ -112,7 +115,7 @@ void LLPanelSnapshotOptions::openPanel(const std::string& panel_name) parent->openPanel(panel_name); parent->getCurrentPanel()->onOpen(LLSD()); - LLFloaterSnapshot::postPanelSwitch(); + mSnapshotFloater->postPanelSwitch(); } void LLPanelSnapshotOptions::onSaveToProfile() diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp index dcd12a7a47..12adcdec8d 100644 --- a/indra/newview/llpanelsnapshotpostcard.cpp +++ b/indra/newview/llpanelsnapshotpostcard.cpp @@ -65,13 +65,13 @@ private: /*virtual*/ std::string getAspectRatioCBName() const { return "postcard_keep_aspect_check"; } /*virtual*/ std::string getImageSizeComboName() const { return "postcard_size_combo"; } /*virtual*/ std::string getImageSizePanelName() const { return "postcard_image_size_lp"; } - /*virtual*/ LLFloaterSnapshotBase::ESnapshotFormat getImageFormat() const { return LLFloaterSnapshotBase::SNAPSHOT_FORMAT_JPEG; } - /*virtual*/ LLPanelSnapshot::ESnapshotType getSnapshotType(); - /*virtual*/ void updateControls(const LLSD& info); + /*virtual*/ LLSnapshotModel::ESnapshotFormat getImageFormat() const { return LLSnapshotModel::SNAPSHOT_FORMAT_JPEG; } + /*virtual*/ LLSnapshotModel::ESnapshotType getSnapshotType(); + /*virtual*/ void updateControls(const LLSD& info); bool missingSubjMsgAlertCallback(const LLSD& notification, const LLSD& response); - static void sendPostcardFinished(LLSD result); - void sendPostcard(); + static void sendPostcardFinished(LLSD result); + void sendPostcard(); void onMsgFormFocusRecieved(); void onFormatComboCommit(LLUICtrl* ctrl); @@ -192,8 +192,8 @@ void LLPanelSnapshotPostcard::sendPostcard() getChild("to_form")->getValue().asString(), getChild("subject_form")->getValue().asString(), getChild("msg_form")->getValue().asString(), - LLFloaterSnapshot::getPosTakenGlobal(), - LLFloaterSnapshot::getImageData(), + mSnapshotFloater->getPosTakenGlobal(), + mSnapshotFloater->getImageData(), boost::bind(&LLPanelSnapshotPostcard::sendPostcardFinished, _4))); LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); @@ -207,7 +207,7 @@ void LLPanelSnapshotPostcard::sendPostcard() // Give user feedback of the event. gViewerWindow->playSnapshotAnimAndSound(); - LLFloaterSnapshot::postSave(); + mSnapshotFloater->postSave(); } void LLPanelSnapshotPostcard::onMsgFormFocusRecieved() @@ -267,7 +267,7 @@ void LLPanelSnapshotPostcard::onSend() sendPostcard(); } -LLPanelSnapshot::ESnapshotType LLPanelSnapshotPostcard::getSnapshotType() +LLSnapshotModel::ESnapshotType LLPanelSnapshotPostcard::getSnapshotType() { - return LLPanelSnapshot::SNAPSHOT_POSTCARD; + return LLSnapshotModel::SNAPSHOT_POSTCARD; } diff --git a/indra/newview/llpanelsnapshotprofile.cpp b/indra/newview/llpanelsnapshotprofile.cpp index b6fc45fb63..38dec78030 100644 --- a/indra/newview/llpanelsnapshotprofile.cpp +++ b/indra/newview/llpanelsnapshotprofile.cpp @@ -58,7 +58,7 @@ private: /*virtual*/ std::string getAspectRatioCBName() const { return "profile_keep_aspect_check"; } /*virtual*/ std::string getImageSizeComboName() const { return "profile_size_combo"; } /*virtual*/ std::string getImageSizePanelName() const { return "profile_image_size_lp"; } - /*virtual*/ LLFloaterSnapshotBase::ESnapshotFormat getImageFormat() const { return LLFloaterSnapshotBase::SNAPSHOT_FORMAT_PNG; } + /*virtual*/ LLSnapshotModel::ESnapshotFormat getImageFormat() const { return LLSnapshotModel::SNAPSHOT_FORMAT_PNG; } /*virtual*/ void updateControls(const LLSD& info); void onSend(); @@ -96,6 +96,6 @@ void LLPanelSnapshotProfile::onSend() std::string caption = getChild("caption")->getValue().asString(); bool add_location = getChild("add_location_cb")->getValue().asBoolean(); - LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location); - LLFloaterSnapshot::postSave(); + LLWebProfile::uploadImage(mSnapshotFloater->getImageData(), caption, add_location); + mSnapshotFloater->postSave(); } diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index 15aa62f5d3..049aae1336 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -86,13 +86,13 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Param mNeedsFlash(TRUE), mSnapshotQuality(gSavedSettings.getS32("SnapshotQuality")), mDataSize(0), - mSnapshotType(LLPanelSnapshot::SNAPSHOT_POSTCARD), - mSnapshotFormat(LLFloaterSnapshotBase::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat"))), + mSnapshotType(LLSnapshotModel::SNAPSHOT_POSTCARD), + mSnapshotFormat(LLSnapshotModel::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat"))), mSnapshotUpToDate(FALSE), mCameraPos(LLViewerCamera::getInstance()->getOrigin()), mCameraRot(LLViewerCamera::getInstance()->getQuaternion()), mSnapshotActive(FALSE), - mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR), + mSnapshotBufferType(LLSnapshotModel::SNAPSHOT_TYPE_COLOR), mFilterName(""), mAllowRenderUI(TRUE), mAllowFullScreenPreview(TRUE), @@ -737,7 +737,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) previewp->getWidth(), previewp->getHeight(), previewp->mKeepAspectRatio,//gSavedSettings.getBOOL("KeepAspectForSnapshot"), - previewp->getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE, + previewp->getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE, previewp->mAllowRenderUI && gSavedSettings.getBOOL("RenderUIInSnapshot"), FALSE, previewp->mSnapshotBufferType, @@ -813,7 +813,7 @@ void LLSnapshotLivePreview::prepareFreezeFrame() mViewerImage[mCurImageIndex] = LLViewerTextureManager::getLocalTexture(scaled.get(), FALSE); LLPointer curr_preview_image = mViewerImage[mCurImageIndex]; gGL.getTexUnit(0)->bind(curr_preview_image); - curr_preview_image->setFilteringOption(getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT); + curr_preview_image->setFilteringOption(getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT); curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); @@ -827,7 +827,7 @@ void LLSnapshotLivePreview::prepareFreezeFrame() S32 LLSnapshotLivePreview::getEncodedImageWidth() const { S32 width = getWidth(); - if (getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE) { width = LLImageRaw::biasedDimToPowerOfTwo(width,MAX_TEXTURE_SIZE); } @@ -836,7 +836,7 @@ S32 LLSnapshotLivePreview::getEncodedImageWidth() const S32 LLSnapshotLivePreview::getEncodedImageHeight() const { S32 height = getHeight(); - if (getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE) { height = LLImageRaw::biasedDimToPowerOfTwo(height,MAX_TEXTURE_SIZE); } @@ -854,7 +854,7 @@ LLPointer LLSnapshotLivePreview::getEncodedImage() mPreviewImage->getHeight(), mPreviewImage->getComponents()); - if (getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE) { // We don't store the intermediate formatted image in mFormattedImage in the J2C case LL_DEBUGS() << "Encoding new image of format J2C" << LL_ENDL; @@ -881,7 +881,7 @@ LLPointer LLSnapshotLivePreview::getEncodedImage() { // Update mFormattedImage if necessary getFormattedImage(); - if (getSnapshotFormat() == LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP) + if (getSnapshotFormat() == LLSnapshotModel::SNAPSHOT_FORMAT_BMP) { // BMP hack : copy instead of decode otherwise decode will crash. mPreviewImageEncoded->copy(mPreviewImage); @@ -903,23 +903,23 @@ void LLSnapshotLivePreview::estimateDataSize() // Compression ratio F32 ratio = 1.0; - if (getSnapshotType() == LLPanelSnapshot::SNAPSHOT_TEXTURE) + if (getSnapshotType() == LLSnapshotModel::SNAPSHOT_TEXTURE) { ratio = 8.0; // This is what we shoot for when compressing to J2C } else { - LLFloaterSnapshotBase::ESnapshotFormat format = getSnapshotFormat(); + LLSnapshotModel::ESnapshotFormat format = getSnapshotFormat(); switch (format) { - case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG: + case LLSnapshotModel::SNAPSHOT_FORMAT_PNG: ratio = 3.0; // Average observed PNG compression ratio break; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG: + case LLSnapshotModel::SNAPSHOT_FORMAT_JPEG: // Observed from JPG compression tests ratio = (110 - mSnapshotQuality) / 2; break; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP: + case LLSnapshotModel::SNAPSHOT_FORMAT_BMP: ratio = 1.0; // No compression with BMP break; } @@ -947,18 +947,18 @@ LLPointer LLSnapshotLivePreview::getFormattedImage() } // Create the new formatted image of the appropriate format. - LLFloaterSnapshotBase::ESnapshotFormat format = getSnapshotFormat(); + LLSnapshotModel::ESnapshotFormat format = getSnapshotFormat(); LL_DEBUGS() << "Encoding new image of format " << format << LL_ENDL; switch (format) { - case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG: + case LLSnapshotModel::SNAPSHOT_FORMAT_PNG: mFormattedImage = new LLImagePNG(); break; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG: + case LLSnapshotModel::SNAPSHOT_FORMAT_JPEG: mFormattedImage = new LLImageJPEG(mSnapshotQuality); break; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP: + case LLSnapshotModel::SNAPSHOT_FORMAT_BMP: mFormattedImage = new LLImageBMP(); break; } @@ -978,7 +978,7 @@ void LLSnapshotLivePreview::setSize(S32 w, S32 h) setHeight(h); } -void LLSnapshotLivePreview::setSnapshotFormat(LLFloaterSnapshotBase::ESnapshotFormat format) +void LLSnapshotLivePreview::setSnapshotFormat(LLSnapshotModel::ESnapshotFormat format) { if (mSnapshotFormat != format) { diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h index b822707d29..b689c50320 100644 --- a/indra/newview/llsnapshotlivepreview.h +++ b/indra/newview/llsnapshotlivepreview.h @@ -27,7 +27,7 @@ #ifndef LL_LLSNAPSHOTLIVEPREVIEW_H #define LL_LLSNAPSHOTLIVEPREVIEW_H -#include "llpanelsnapshot.h" +#include "llsnapshotmodel.h" #include "llviewertexture.h" #include "llviewerwindow.h" @@ -72,8 +72,8 @@ public: void setMaxImageSize(S32 size) ; S32 getMaxImageSize() {return mMaxImageSize ;} - LLPanelSnapshot::ESnapshotType getSnapshotType() const { return mSnapshotType; } - LLFloaterSnapshotBase::ESnapshotFormat getSnapshotFormat() const { return mSnapshotFormat; } + LLSnapshotModel::ESnapshotType getSnapshotType() const { return mSnapshotType; } + LLSnapshotModel::ESnapshotFormat getSnapshotFormat() const { return mSnapshotFormat; } BOOL getSnapshotUpToDate() const { return mSnapshotUpToDate; } BOOL isSnapshotActive() { return mSnapshotActive; } LLViewerTexture* getThumbnailImage() const { return mThumbnailImage ; } @@ -90,10 +90,10 @@ public: void setImageScaled(BOOL scaled) { mImageScaled[mCurImageIndex] = scaled; } const LLVector3d& getPosTakenGlobal() const { return mPosTakenGlobal; } - void setSnapshotType(LLPanelSnapshot::ESnapshotType type) { mSnapshotType = type; } - void setSnapshotFormat(LLFloaterSnapshotBase::ESnapshotFormat format); + void setSnapshotType(LLSnapshotModel::ESnapshotType type) { mSnapshotType = type; } + void setSnapshotFormat(LLSnapshotModel::ESnapshotFormat format); bool setSnapshotQuality(S32 quality, bool set_by_user = true); - void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; } + void setSnapshotBufferType(LLSnapshotModel::ESnapshotLayerType type) { mSnapshotBufferType = type; } void setAllowRenderUI(BOOL allow) { mAllowRenderUI = allow; } void setAllowFullScreenPreview(BOOL allow) { mAllowFullScreenPreview = allow; } void setFilter(std::string filter_name) { mFilterName = filter_name; } @@ -161,14 +161,14 @@ private: LLVector3d mPosTakenGlobal; S32 mSnapshotQuality; S32 mDataSize; - LLPanelSnapshot::ESnapshotType mSnapshotType; - LLFloaterSnapshotBase::ESnapshotFormat mSnapshotFormat; + LLSnapshotModel::ESnapshotType mSnapshotType; + LLSnapshotModel::ESnapshotFormat mSnapshotFormat; BOOL mSnapshotUpToDate; LLFrameTimer mFallAnimTimer; LLVector3 mCameraPos; LLQuaternion mCameraRot; BOOL mSnapshotActive; - LLViewerWindow::ESnapshotType mSnapshotBufferType; + LLSnapshotModel::ESnapshotLayerType mSnapshotBufferType; std::string mFilterName; public: diff --git a/indra/newview/llsnapshotmodel.h b/indra/newview/llsnapshotmodel.h new file mode 100644 index 0000000000..71402fb5bc --- /dev/null +++ b/indra/newview/llsnapshotmodel.h @@ -0,0 +1,55 @@ +/** +* @file llsnapshotmodel.h +* @brief Snapshot model for storing snapshot data etc. +* +* $LicenseInfo:firstyear=2004&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2016, Linden Research, Inc. +* +* 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. +* +* 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. +* +* 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$ +*/ + +#ifndef LL_LLSNAPSHOTMODEL_H +#define LL_LLSNAPSHOTMODEL_H + +class LLSnapshotModel +{ +public: + enum ESnapshotType + { + SNAPSHOT_POSTCARD, + SNAPSHOT_TEXTURE, + SNAPSHOT_LOCAL, + SNAPSHOT_WEB + }; + + typedef enum e_snapshot_format + { + SNAPSHOT_FORMAT_PNG, + SNAPSHOT_FORMAT_JPEG, + SNAPSHOT_FORMAT_BMP + } ESnapshotFormat; + + typedef enum + { + SNAPSHOT_TYPE_COLOR, + SNAPSHOT_TYPE_DEPTH + } ESnapshotLayerType; +}; + +#endif // LL_LLSNAPSHOTMODEL_H diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp index f0dafec240..f2b8a5ce06 100644 --- a/indra/newview/llviewerassetupload.cpp +++ b/indra/newview/llviewerassetupload.cpp @@ -779,12 +779,17 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti if (uploadInfo->showUploadDialog()) LLUploadDialog::modalUploadFinished(); - // Let the Snapshot floater know we have finished uploading a snapshot to inventory. + // Let the Snapshot floater know we have finished uploading a snapshot to inventory LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot"); - if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_snapshot) + if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_snapshot && floater_snapshot->isShown()) { floater_snapshot->notify(LLSD().with("set-finished", LLSD().with("ok", success).with("msg", "inventory"))); } + LLFloater* floater_outfit_snapshot = LLFloaterReg::findInstance("outfit_snapshot"); + if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_outfit_snapshot && floater_outfit_snapshot->isShown()) + { + floater_outfit_snapshot->notify(LLSD().with("set-finished", LLSD().with("ok", success).with("msg", "inventory"))); + } } //========================================================================= diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 0644e1b196..459397a0f7 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -37,6 +37,7 @@ #include "llfloatermap.h" #include "llfloatermodelpreview.h" #include "llfloatersnapshot.h" +#include "llfloateroutfitsnapshot.h" #include "llimage.h" #include "llimagebmp.h" #include "llimagepng.h" @@ -507,9 +508,11 @@ class LLFileEnableCloseAllWindows : public view_listener_t { bool handleEvent(const LLSD& userdata) { - LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::findInstance(); - bool is_floater_snapshot_opened = floater_snapshot && floater_snapshot->isInVisibleChain(); - bool open_children = gFloaterView->allChildrenClosed() && !is_floater_snapshot_opened; + LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::getInstance(); + LLFloaterOutfitSnapshot* floater_outfit_snapshot = LLFloaterOutfitSnapshot::getInstance(); + bool is_floaters_snapshot_opened = floater_snapshot && floater_snapshot->isInVisibleChain() + || floater_outfit_snapshot && floater_outfit_snapshot->isInVisibleChain(); + bool open_children = gFloaterView->allChildrenClosed() && !is_floaters_snapshot_opened; return !open_children; } }; @@ -520,7 +523,12 @@ class LLFileCloseAllWindows : public view_listener_t { bool app_quitting = false; gFloaterView->closeAllChildren(app_quitting); - LLFloaterSnapshot::getInstance()->closeFloater(app_quitting); + LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::getInstance(); + if (floater_snapshot) + floater_snapshot->closeFloater(app_quitting); + LLFloaterOutfitSnapshot* floater_outfit_snapshot = LLFloaterOutfitSnapshot::getInstance(); + if (floater_outfit_snapshot) + floater_outfit_snapshot->closeFloater(app_quitting); if (gMenuHolder) gMenuHolder->hideMenus(); return true; } @@ -551,18 +559,18 @@ class LLFileTakeSnapshotToDisk : public view_listener_t { gViewerWindow->playSnapshotAnimAndSound(); LLPointer formatted; - LLFloaterSnapshotBase::ESnapshotFormat fmt = (LLFloaterSnapshotBase::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); + LLSnapshotModel::ESnapshotFormat fmt = (LLSnapshotModel::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); switch (fmt) { - case LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG: + case LLSnapshotModel::SNAPSHOT_FORMAT_JPEG: formatted = new LLImageJPEG(gSavedSettings.getS32("SnapshotQuality")); break; default: LL_WARNS() << "Unknown local snapshot format: " << fmt << LL_ENDL; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG: + case LLSnapshotModel::SNAPSHOT_FORMAT_PNG: formatted = new LLImagePNG; break; - case LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP: + case LLSnapshotModel::SNAPSHOT_FORMAT_BMP: formatted = new LLImageBMP; break; } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c17c50fd88..cd9ab3e672 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4364,7 +4364,7 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height) } } -BOOL LLViewerWindow::saveSnapshot( const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) +BOOL LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type) { LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL; @@ -4403,7 +4403,7 @@ void LLViewerWindow::playSnapshotAnimAndSound() send_sound_trigger(LLUUID(gSavedSettings.getString("UISndSnapshot")), 1.0f); } -BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) +BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type) { return rawSnapshot(raw, preview_width, preview_height, FALSE, FALSE, show_ui, do_rebuild, type); } @@ -4412,7 +4412,7 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p // Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy // the results over to the final raw image. BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, - BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size) + BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type, S32 max_size) { if (!raw) { @@ -4620,7 +4620,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot"); } - if (type == SNAPSHOT_TYPE_COLOR) + if (type == LLSnapshotModel::SNAPSHOT_TYPE_COLOR) { glReadPixels( subimage_x_offset, out_y + subimage_y_offset, @@ -4629,7 +4629,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei raw->getData() + output_buffer_offset ); } - else // SNAPSHOT_TYPE_DEPTH + else // LLSnapshotModel::SNAPSHOT_TYPE_DEPTH { LLPointer depth_line_buffer = new LLImageRaw(read_width, 1, sizeof(GL_FLOAT)); // need to store floating point values glReadPixels( diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index ad06f00234..cdf5b686a7 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -46,6 +46,7 @@ #include "llhandle.h" #include "llinitparam.h" #include "lltrace.h" +#include "llsnapshotmodel.h" #include #include @@ -342,15 +343,11 @@ public: // snapshot functionality. // perhaps some of this should move to llfloatershapshot? -MG - typedef enum - { - SNAPSHOT_TYPE_COLOR, - SNAPSHOT_TYPE_DEPTH - } ESnapshotType; - BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR); + + BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR); BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE, - BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE ); - BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ; + BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE); + BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type); BOOL isSnapshotLocSet() const { return ! sSnapshotDir.empty(); } void resetSnapshotLoc() const { sSnapshotDir.clear(); } BOOL saveImageNumbered(LLImageFormatted *image, bool force_picker = false); diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index 1fe5fc9800..97b405c1d0 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -65,9 +65,9 @@ LLViewerWindowListener::LLViewerWindowListener(LLViewerWindow* llviewerwindow): void LLViewerWindowListener::saveSnapshot(const LLSD& event) const { - typedef std::map TypeMap; + typedef std::map TypeMap; TypeMap types; -#define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name +#define tp(name) types[#name] = LLSnapshotModel::SNAPSHOT_TYPE_##name tp(COLOR); tp(DEPTH); #undef tp @@ -84,7 +84,7 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const if (event.has("showui")) showui = event["showui"].asBoolean(); bool rebuild(event["rebuild"]); // defaults to false - LLViewerWindow::ESnapshotType type(LLViewerWindow::SNAPSHOT_TYPE_COLOR); + LLSnapshotModel::ESnapshotLayerType type(LLSnapshotModel::SNAPSHOT_TYPE_COLOR); if (event.has("type")) { TypeMap::const_iterator found = types.find(event["type"]); From 53cc5ba2256af3f70fc9aa69e06a1db0e195079b Mon Sep 17 00:00:00 2001 From: callum_linden Date: Thu, 2 Jun 2016 18:24:15 -0700 Subject: [PATCH 136/278] FIX MAINT-6748 content looks correct but page links are flipped vertically --- indra/media_plugins/cef/media_plugin_cef.cpp | 2 ++ indra/newview/llmediactrl.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 84fe83408f..be16ff7946 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -597,6 +597,8 @@ void MediaPluginCEF::receiveMessage(const char* message_string) S32 x = message_in.getValueS32("x"); S32 y = message_in.getValueS32("y"); + y = mHeight - y; + // only even send left mouse button events to LLCEFLib // (partially prompted by crash in OS X CEF when sending right button events) // we catch the right click in viewer and display our own context menu anyway diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 9cf3249983..08c927483f 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -911,7 +911,7 @@ void LLMediaCtrl::convertInputCoords(S32& x, S32& y) } x = ll_round((F32)x * LLUI::getScaleFactor().mV[VX]); - if ( ! coords_opengl ) + if ( coords_opengl ) { y = ll_round((F32)(y) * LLUI::getScaleFactor().mV[VY]); } From d3c4a6dbb163e45c044a2cbd5ae2440c0a031450 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 3 Jun 2016 13:45:51 +0300 Subject: [PATCH 137/278] linux build fix --- indra/newview/llfloateroutfitsnapshot.h | 2 +- indra/newview/llfloatersnapshot.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 37e264b0e7..c5c9ef09cb 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -60,7 +60,7 @@ public: void setGallery(LLOutfitGallery* gallery) { mOutfitGallery = gallery; } class Impl; - friend Impl; + friend class Impl; private: LLUUID mOutfitID; diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 431888d2d0..259d4f75a3 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -63,7 +63,7 @@ public: void setFailureLabelPanelVisible(bool value) { mFailureLblPanel->setVisible(value); } class ImplBase; - friend ImplBase; + friend class ImplBase; ImplBase* impl; protected: @@ -152,7 +152,7 @@ public: static void setAgentEmail(const std::string& email); class Impl; - friend Impl; + friend class Impl; }; ///---------------------------------------------------------------------------- From 3959d7b83f1fdca7d8daf5494dbc02a645cb868f Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 3 Jun 2016 14:57:52 +0300 Subject: [PATCH 138/278] MAINT-6471 FIXED Side scroll bar cut off --- indra/newview/skins/default/xui/en/panel_outfit_gallery.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml b/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml index 9a547f615d..c1272c6bf8 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_gallery.xml @@ -9,7 +9,7 @@ layout="topleft" left="0" top="0" - width="312"> + width="318"> Photo of "[OUTFIT_NAME]" outfit From e2e208898be7bcc3d3801bfd537a5d84201a1563 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Fri, 3 Jun 2016 16:06:10 +0300 Subject: [PATCH 139/278] mac build fix --- indra/newview/llfloateroutfitsnapshot.cpp | 2 -- indra/newview/llviewermenufile.cpp | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index 4c4e9bcc48..c29c607449 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -53,8 +53,6 @@ ///---------------------------------------------------------------------------- LLOutfitSnapshotFloaterView* gOutfitSnapshotFloaterView = NULL; -const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; - const S32 OUTFIT_SNAPSHOT_WIDTH = 256; const S32 OUTFIT_SNAPSHOT_HEIGHT = 256; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 459397a0f7..54b12cae12 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -510,8 +510,8 @@ class LLFileEnableCloseAllWindows : public view_listener_t { LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::getInstance(); LLFloaterOutfitSnapshot* floater_outfit_snapshot = LLFloaterOutfitSnapshot::getInstance(); - bool is_floaters_snapshot_opened = floater_snapshot && floater_snapshot->isInVisibleChain() - || floater_outfit_snapshot && floater_outfit_snapshot->isInVisibleChain(); + bool is_floaters_snapshot_opened = (floater_snapshot && floater_snapshot->isInVisibleChain()) + || (floater_outfit_snapshot && floater_outfit_snapshot->isInVisibleChain()); bool open_children = gFloaterView->allChildrenClosed() && !is_floaters_snapshot_opened; return !open_children; } From 2da3148759760abc97fdcb51b1feb6db28c38277 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 3 Jun 2016 17:53:24 +0300 Subject: [PATCH 140/278] MAINT-6475 FIXED Inconsistent sort order in "Outfit Gallery" tab --- indra/newview/lloutfitgallery.cpp | 19 ++++++++++++++++++- indra/newview/lloutfitgallery.h | 15 --------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index f6af3d63f6..a4315b9189 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -145,6 +145,23 @@ void LLOutfitGallery::updateRowsIfNeeded() } } +bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2) +{ + if((item1->mIsDefaultImage() && item2->mIsDefaultImage()) || (!item1->mIsDefaultImage() && !item2->mIsDefaultImage())) + { + std::string name1 = item1->getItemName(); + std::string name2 = item2->getItemName(); + + LLStringUtil::toUpper(name1); + LLStringUtil::toUpper(name2); + return name1 < name2; + } + else + { + return item2->mIsDefaultImage(); + } +} + void LLOutfitGallery::reArrangeRows(S32 row_diff) { @@ -161,7 +178,7 @@ void LLOutfitGallery::reArrangeRows(S32 row_diff) mItemsInRow+= row_diff; updateGalleryWidth(); - std::sort(buf_items.begin(), buf_items.end(), LLOutfitGalleryItem::compareGalleryItem()); + std::sort(buf_items.begin(), buf_items.end(), compareGalleryItem); for (std::vector::const_iterator it = buf_items.begin(); it != buf_items.end(); ++it) { diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index ad3f2a7129..385a1e1c7a 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -258,21 +258,6 @@ public: bool isHidden() {return mHidden;} void setHidden(bool hidden) {mHidden = hidden;} - - struct compareGalleryItem - { - bool operator()(LLOutfitGalleryItem* a, LLOutfitGalleryItem* b) - { - if((a->mIsDefaultImage() && b->mIsDefaultImage()) || (!a->mIsDefaultImage() && !b->mIsDefaultImage())) - { - return a->getItemName().compare(b->getItemName()) < 0; - } - else - { - return b->mIsDefaultImage(); - } - } - }; private: LLPointer mTexturep; From 3cbab4d820963565c23f72e0bb6efd519c97462d Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 6 Jun 2016 16:47:09 +0300 Subject: [PATCH 141/278] MAINT-6474 FIXED No easy way to remove an image from a VOB Folder --- indra/newview/lloutfitgallery.cpp | 57 ++++++++++++++++++- indra/newview/lloutfitgallery.h | 7 ++- indra/newview/lloutfitslist.cpp | 8 ++- indra/newview/lloutfitslist.h | 1 + .../xui/en/menu_gallery_outfit_tab.xml | 11 +++- .../skins/default/xui/en/menu_outfit_gear.xml | 8 ++- 6 files changed, 85 insertions(+), 7 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index a4315b9189..f414179f9c 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -147,7 +147,7 @@ void LLOutfitGallery::updateRowsIfNeeded() bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2) { - if((item1->mIsDefaultImage() && item2->mIsDefaultImage()) || (!item1->mIsDefaultImage() && !item2->mIsDefaultImage())) + if((item1->isDefaultImage() && item2->isDefaultImage()) || (!item1->isDefaultImage() && !item2->isDefaultImage())) { std::string name1 = item1->getItemName(); std::string name2 = item2->getItemName(); @@ -158,7 +158,7 @@ bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2) } else { - return item2->mIsDefaultImage(); + return item2->isDefaultImage(); } } @@ -577,6 +577,15 @@ bool LLOutfitGallery::canWearSelected() return false; } +bool LLOutfitGallery::hasDefaultImage(const LLUUID& outfit_cat_id) +{ + if (mOutfitMap[outfit_cat_id]) + { + return mOutfitMap[outfit_cat_id]->isDefaultImage(); + } + return false; +} + void LLOutfitGallery::updateMessageVisibility() { if(mItems.empty()) @@ -731,7 +740,7 @@ LLContextMenu* LLOutfitGalleryContextMenu::createMenu() registrar.add("Outfit.UploadPhoto", boost::bind(&LLOutfitGalleryContextMenu::onUploadPhoto, this, selected_id)); registrar.add("Outfit.SelectPhoto", boost::bind(&LLOutfitGalleryContextMenu::onSelectPhoto, this, selected_id)); registrar.add("Outfit.TakeSnapshot", boost::bind(&LLOutfitGalleryContextMenu::onTakeSnapshot, this, selected_id)); - + registrar.add("Outfit.RemovePhoto", boost::bind(&LLOutfitGalleryContextMenu::onRemovePhoto, this, selected_id)); enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitGalleryContextMenu::onEnable, this, _2)); enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitGalleryContextMenu::onVisible, this, _2)); @@ -756,6 +765,16 @@ void LLOutfitGalleryContextMenu::onSelectPhoto(const LLUUID& outfit_cat_id) } } +void LLOutfitGalleryContextMenu::onRemovePhoto(const LLUUID& outfit_cat_id) +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + if (gallery && outfit_cat_id.notNull()) + { + gallery->checkRemovePhoto(outfit_cat_id); + gallery->refreshOutfit(outfit_cat_id); + } +} + void LLOutfitGalleryContextMenu::onTakeSnapshot(const LLUUID& outfit_cat_id) { LLOutfitGallery* gallery = dynamic_cast(mOutfitList); @@ -800,6 +819,15 @@ bool LLOutfitGalleryContextMenu::onEnable(LLSD::String param) bool LLOutfitGalleryContextMenu::onVisible(LLSD::String param) { + if ("remove_photo" == param) + { + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + LLUUID selected_id = mUUIDs.front(); + if (gallery && selected_id.notNull()) + { + return !gallery->hasDefaultImage(selected_id); + } + } return LLOutfitContextMenu::onVisible(param); } @@ -817,6 +845,7 @@ void LLOutfitGalleryGearMenu::onUpdateItemsVisibility() mMenu->setItemVisible("upload_photo", have_selection); mMenu->setItemVisible("select_photo", have_selection); mMenu->setItemVisible("take_snapshot", have_selection); + mMenu->setItemVisible("remove_photo", !hasDefaultImage()); LLOutfitListGearMenuBase::onUpdateItemsVisibility(); } @@ -840,6 +869,17 @@ void LLOutfitGalleryGearMenu::onSelectPhoto() } } +void LLOutfitGalleryGearMenu::onRemovePhoto() +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + LLUUID selected_outfit_id = getSelectedOutfitID(); + if (gallery && !selected_outfit_id.isNull()) + { + gallery->checkRemovePhoto(selected_outfit_id); + gallery->refreshOutfit(selected_outfit_id); + } +} + void LLOutfitGalleryGearMenu::onTakeSnapshot() { LLOutfitGallery* gallery = dynamic_cast(mOutfitList); @@ -850,6 +890,17 @@ void LLOutfitGalleryGearMenu::onTakeSnapshot() } } +bool LLOutfitGalleryGearMenu::hasDefaultImage() +{ + LLOutfitGallery* gallery = dynamic_cast(mOutfitList); + LLUUID selected_outfit_id = getSelectedOutfitID(); + if (gallery && selected_outfit_id.notNull()) + { + return gallery->hasDefaultImage(selected_outfit_id); + } + return true; +} + void LLOutfitGallery::onTextureSelectionChanged(LLInventoryItem* itemp) { } diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index 385a1e1c7a..19bfc10586 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -105,6 +105,7 @@ public: /*virtual*/ bool getHasExpandableFolders() { return FALSE; } void updateMessageVisibility(); + bool hasDefaultImage(const LLUUID& outfit_cat_id); void refreshTextures(const LLUUID& category_id); void refreshOutfit(const LLUUID& category_id); @@ -209,6 +210,7 @@ protected: bool onVisible(LLSD::String param); void onUploadPhoto(const LLUUID& outfit_cat_id); void onSelectPhoto(const LLUUID& outfit_cat_id); + void onRemovePhoto(const LLUUID& outfit_cat_id); void onTakeSnapshot(const LLUUID& outfit_cat_id); void onCreate(const LLSD& data); void onRemoveOutfit(const LLUUID& outfit_cat_id); @@ -230,6 +232,9 @@ private: /*virtual*/ void onUploadFoto(); /*virtual*/ void onSelectPhoto(); /*virtual*/ void onTakeSnapshot(); + /*virtual*/ void onRemovePhoto(); + + bool hasDefaultImage(); }; class LLOutfitGalleryItem : public LLPanel @@ -254,7 +259,7 @@ public: void setSelected(bool value); std::string getItemName() {return mOutfitName;} - bool mIsDefaultImage() {return mDefaultImage;} + bool isDefaultImage() {return mDefaultImage;} bool isHidden() {return mHidden;} void setHidden(bool hidden) {mHidden = hidden;} diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 31fe6839f3..2e6599090a 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -1093,6 +1093,7 @@ LLOutfitListGearMenuBase::LLOutfitListGearMenuBase(LLOutfitListBase* olist) registrar.add("Gear.UploadPhoto", boost::bind(&LLOutfitListGearMenuBase::onUploadFoto, this)); registrar.add("Gear.SelectPhoto", boost::bind(&LLOutfitListGearMenuBase::onSelectPhoto, this)); registrar.add("Gear.TakeSnapshot", boost::bind(&LLOutfitListGearMenuBase::onTakeSnapshot, this)); + registrar.add("Gear.RemovePhoto", boost::bind(&LLOutfitListGearMenuBase::onRemovePhoto, this)); enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenuBase::onEnable, this, _2)); enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenuBase::onVisible, this, _2)); @@ -1241,6 +1242,10 @@ void LLOutfitListGearMenuBase::onTakeSnapshot() } +void LLOutfitListGearMenuBase::onRemovePhoto() +{ + +} LLOutfitListGearMenu::LLOutfitListGearMenu(LLOutfitListBase* olist) : LLOutfitListGearMenuBase(olist) {} @@ -1255,7 +1260,8 @@ void LLOutfitListGearMenu::onUpdateItemsVisibility() mMenu->setItemVisible("collapse", TRUE); mMenu->setItemVisible("upload_photo", FALSE); mMenu->setItemVisible("select_photo", FALSE); - mMenu->setItemVisible("take_snapshot", FALSE); + mMenu->setItemVisible("take_snapshot", FALSE); + mMenu->setItemVisible("remove_photo", FALSE); LLOutfitListGearMenuBase::onUpdateItemsVisibility(); } diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 696a18a36a..c4dd2cd075 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -166,6 +166,7 @@ protected: virtual void onUploadFoto(); virtual void onSelectPhoto(); virtual void onTakeSnapshot(); + virtual void onRemovePhoto(); const LLUUID& getSelectedOutfitID(); diff --git a/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml index b9e29788dc..1b08767edc 100755 --- a/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml +++ b/indra/newview/skins/default/xui/en/menu_gallery_outfit_tab.xml @@ -62,7 +62,16 @@ - + + + + - + + + From e9e6862513476f83734d9edb7da79d2a009f1c4a Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Mon, 6 Jun 2016 17:18:48 +0300 Subject: [PATCH 142/278] MAINT-6465 FIXED Snapshop "file size" is split apart and looks bad --- .../xui/en/floater_outfit_snapshot.xml | 52 +------------------ .../skins/default/xui/en/floater_snapshot.xml | 4 +- 2 files changed, 4 insertions(+), 52 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml index 34f02e535f..5941471907 100644 --- a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml @@ -19,66 +19,18 @@ name="unknown"> unknown - - Sending Email - - - Posting to Facebook - - - Posting - Saving to Inventory - - Saving to Computer - - - Image uploaded - - - Image uploaded - - - Email Sent! - Saved to Inventory! - - Saved to Computer! - - - Failed to upload image to your Facebook timeline. - - - Failed to upload image to your Profile Feed. - - - Failed to send email. - Failed to save to inventory. - - Failed to save to computer. - + + From 464a0df4c1d3e4073fe0bde506ac1d4aa194b02f Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 30 Jun 2016 16:51:50 -0400 Subject: [PATCH 149/278] DRTVWR-418: Unify control flow through LLAppViewer across platforms. The LLApp API used to consist of init(), mainLoop(), cleanup() methods. This makes sense -- but on Mac that structure was being subverted. The method called mainLoop() was in fact being called once per frame. There was initialization code in the method, which (on Mac) needed to be skipped with an already-initialized bool. There was a 'while' loop which (on Mac) needed to be turned into an 'if' instead so the method would return after every frame. Rename LLApp::mainLoop() to frame(). Propagate through subclasses LLAppViewer and LLCrashLogger. Document the fact that frame() returns true to mean "done." (This was always the case, but had to be inferred from the code.) Rename the Mac Objective-C function mainLoop to oneFrame. Rename the C++ free function it calls from runMainLoop() to pumpMainLoop(). Add comments to llappdelegate-objc.mm explaining (inferred) control flow. Change the Linux viewer main() and the Windows viewer WINMAIN() from a single LLAppViewer::mainLoop() call to repeatedly call frame() until it returns true. Move initialization code from the top of LLAppViewer::frame() to the init() method, where it more properly belongs. Remove corresponding mMainLoopInitialized flag (and all references) from LLAppViewer. Remove 'while (! LLApp::isExiting())' (or on Mac, 'if (! LLApp::isExiting())') from LLAppViewer::frame() -- thus unindenting the whole body of the 'while' and causing many lines of apparent change. (Apologies to reviewers.) There are four LLApp states: APP_STATUS_RUNNING, APP_STATUS_QUITTING, APP_STATUS_STOPPED and APP_STATUS_ERROR. Change LLAppViewer::frame() return value from (isExiting()) (QUITTING or ERROR) to (! isRunning()). I do not know under what circumstances the state might transition to STOPPED during a frame() call, but I'm quite sure that if it does, we don't want to call frame() again. We only want a subsequent call if the state is RUNNING. Also rename mainLoop() method in LLCrashLogger subclasses LLCrashLoggerWindows, LLCrashLoggerMac, LLCrashLoggerLinux. Of course it's completely up to the frame() method whether to yield control; none of those in fact do. Honor protocol by returning true (frame() is done), even though each one's main() caller ignores the return value. In fact LLCrashLoggerWindows::mainLoop() wasn't using the return protocol correctly anyway, returning wParam or 0 or 1 -- possibly because the return protocol was never explicitly documented. It should always return true: "I'm done, don't call me again." --- .../linux_crash_logger/linux_crash_logger.cpp | 2 +- .../linux_crash_logger/llcrashloggerlinux.cpp | 2 +- indra/linux_crash_logger/llcrashloggerlinux.h | 2 +- indra/llcommon/llapp.h | 8 +- indra/llcrashlogger/llcrashlogger.h | 2 +- indra/llwindow/llappdelegate-objc.h | 2 +- indra/llwindow/llwindowmacosx-objc.h | 2 +- indra/mac_crash_logger/llcrashloggermac.cpp | 2 +- indra/mac_crash_logger/llcrashloggermac.h | 2 +- indra/mac_crash_logger/mac_crash_logger.cpp | 2 +- indra/newview/llappdelegate-objc.mm | 24 +- indra/newview/llappviewer.cpp | 506 +++++++++--------- indra/newview/llappviewer.h | 3 +- indra/newview/llappviewerlinux.cpp | 6 +- indra/newview/llappviewermacosx.cpp | 9 +- indra/newview/llappviewerwin32.cpp | 6 +- indra/test/llapp_tut.cpp | 2 +- .../win_crash_logger/llcrashloggerwindows.cpp | 8 +- indra/win_crash_logger/llcrashloggerwindows.h | 2 +- indra/win_crash_logger/win_crash_logger.cpp | 2 +- 20 files changed, 288 insertions(+), 306 deletions(-) diff --git a/indra/linux_crash_logger/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp index 9d5ec33fed..63e5409876 100644 --- a/indra/linux_crash_logger/linux_crash_logger.cpp +++ b/indra/linux_crash_logger/linux_crash_logger.cpp @@ -51,7 +51,7 @@ int main(int argc, char **argv) return 1; } - app.mainLoop(); + app.frame(); app.cleanup(); LL_INFOS() << "Crash reporter finished normally." << LL_ENDL; return 0; diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp index e2d2e7ff26..4092d43fc5 100644 --- a/indra/linux_crash_logger/llcrashloggerlinux.cpp +++ b/indra/linux_crash_logger/llcrashloggerlinux.cpp @@ -114,7 +114,7 @@ void LLCrashLoggerLinux::gatherPlatformSpecificFiles() { } -bool LLCrashLoggerLinux::mainLoop() +bool LLCrashLoggerLinux::frame() { bool send_logs = true; if(CRASH_BEHAVIOR_ASK == getCrashBehavior()) diff --git a/indra/linux_crash_logger/llcrashloggerlinux.h b/indra/linux_crash_logger/llcrashloggerlinux.h index dae6c46651..789f6f03f5 100644 --- a/indra/linux_crash_logger/llcrashloggerlinux.h +++ b/indra/linux_crash_logger/llcrashloggerlinux.h @@ -36,7 +36,7 @@ class LLCrashLoggerLinux : public LLCrashLogger public: LLCrashLoggerLinux(void); ~LLCrashLoggerLinux(void); - virtual bool mainLoop(); + virtual bool frame(); virtual void updateApplication(const std::string& = LLStringUtil::null); virtual void gatherPlatformSpecificFiles(); virtual bool cleanup(); diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index d9933b3d36..ff9a92b45f 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -172,12 +172,12 @@ public: virtual bool cleanup() = 0; // Override to do application cleanup // - // mainLoop() + // frame() // - // Runs the application main loop. It's assumed that when you exit - // this method, the application is in one of the cleanup states, either QUITTING or ERROR + // Pass control to the application for a single frame. Returns 'done' + // flag: if frame() returns false, it expects to be called again. // - virtual bool mainLoop() = 0; // Override for the application main loop. Needs to at least gracefully notice the QUITTING state and exit. + virtual bool frame() = 0; // Override for application body logic // // Crash logging diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h index 8b4afae24a..56e26c23ba 100644 --- a/indra/llcrashlogger/llcrashlogger.h +++ b/indra/llcrashlogger/llcrashlogger.h @@ -57,7 +57,7 @@ public: LLSD constructPostData(); virtual void updateApplication(const std::string& message = LLStringUtil::null); virtual bool init(); - virtual bool mainLoop() = 0; + virtual bool frame() = 0; virtual bool cleanup() = 0; void commonCleanup(); void setUserText(const std::string& text) { mCrashInfo["UserNotes"] = text; } diff --git a/indra/llwindow/llappdelegate-objc.h b/indra/llwindow/llappdelegate-objc.h index faa5d3abb7..6daf1ac55b 100644 --- a/indra/llwindow/llappdelegate-objc.h +++ b/indra/llwindow/llappdelegate-objc.h @@ -41,7 +41,7 @@ @property (retain) NSString *currentInputLanguage; -- (void) mainLoop; +- (void) oneFrame; - (void) showInputWindow:(bool)show withEvent:(NSEvent*)textEvent; - (void) languageUpdated; - (bool) romanScript; diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index c22f3382fb..b06cd2c184 100644 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -69,7 +69,7 @@ typedef const NativeKeyEventData * NSKeyEventRef; // These are defined in llappviewermacosx.cpp. bool initViewer(); void handleQuit(); -bool runMainLoop(); +bool pumpMainLoop(); void initMainLoop(); void cleanupViewer(); void handleUrl(const char* url); diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp index 3149fad6e8..ec3616e26a 100644 --- a/indra/mac_crash_logger/llcrashloggermac.cpp +++ b/indra/mac_crash_logger/llcrashloggermac.cpp @@ -64,7 +64,7 @@ void LLCrashLoggerMac::gatherPlatformSpecificFiles() { } -bool LLCrashLoggerMac::mainLoop() +bool LLCrashLoggerMac::frame() { if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND) diff --git a/indra/mac_crash_logger/llcrashloggermac.h b/indra/mac_crash_logger/llcrashloggermac.h index 6d8f63ecac..05ef8c9f53 100644 --- a/indra/mac_crash_logger/llcrashloggermac.h +++ b/indra/mac_crash_logger/llcrashloggermac.h @@ -37,7 +37,7 @@ public: LLCrashLoggerMac(void); ~LLCrashLoggerMac(void); virtual bool init(); - virtual bool mainLoop(); + virtual bool frame(); virtual bool cleanup(); virtual void gatherPlatformSpecificFiles(); }; diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp index 95d4e65207..54e41a1954 100644 --- a/indra/mac_crash_logger/mac_crash_logger.cpp +++ b/indra/mac_crash_logger/mac_crash_logger.cpp @@ -49,7 +49,7 @@ int main(int argc, char **argv) { // return NSApplicationMain(argc, (const char **)argv); } - app.mainLoop(); + app.frame(); app.cleanup(); LL_INFOS() << "Crash reporter finished normally." << LL_ENDL; diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index 549df80fa1..be8877328d 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -48,16 +48,19 @@ - (void) applicationDidFinishLaunching:(NSNotification *)notification { frameTimer = nil; - + [self languageUpdated]; - + if (initViewer()) { - frameTimer = [NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(mainLoop) userInfo:nil repeats:YES]; + // Set up recurring calls to oneFrame (repeating timer with timeout 0) + // until applicationShouldTerminate. + frameTimer = [NSTimer scheduledTimerWithTimeInterval:0.0 target:self + selector:@selector(oneFrame) userInfo:nil repeats:YES]; } else { handleQuit(); } - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil]; // [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; @@ -96,22 +99,29 @@ - (NSApplicationDelegateReply) applicationShouldTerminate:(NSApplication *)sender { - if (!runMainLoop()) + // run one frame to assess state + if (!pumpMainLoop()) { + // pumpMainLoop() returns true when done, false if it wants to be + // called again. Since it returned false, do not yet cancel + // frameTimer. handleQuit(); return NSTerminateCancel; } else { + // pumpMainLoop() returned true: it's done. Okay, done with frameTimer. [frameTimer release]; cleanupViewer(); return NSTerminateNow; } } -- (void) mainLoop +- (void) oneFrame { - bool appExiting = runMainLoop(); + bool appExiting = pumpMainLoop(); if (appExiting) { + // Once pumpMainLoop() reports that we're done, cancel frameTimer: + // stop the repetitive calls. [frameTimer release]; [[NSApplication sharedApplication] terminate:self]; } diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b6d02ea2f8..604e45f314 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -769,9 +769,6 @@ bool LLAppViewer::init() // // Start of the application // -#ifdef LL_DARWIN - mMainLoopInitialized = false; -#endif // initialize LLWearableType translation bridge. // Memory will be cleaned up in ::cleanupClass() @@ -1220,6 +1217,23 @@ bool LLAppViewer::init() boost::bind(&LLControlGroup::getU32, boost::ref(gSavedSettings), _1), boost::bind(&LLControlGroup::declareU32, boost::ref(gSavedSettings), _1, _2, _3, LLControlVariable::PERSIST_ALWAYS)); + /*----------------------------------------------------------------------*/ + // nat 2016-06-29 moved the following here from the former mainLoop(). + mMainloopTimeout = new LLWatchdogTimeout(); + + // Create IO Pump to use for HTTP Requests. + gServicePump = new LLPumpIO(gAPRPoolp); + + // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated. + + LLVoiceChannel::initClass(); + LLVoiceClient::getInstance()->init(gServicePump); + LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLFloaterIMContainer::onCurrentChannelChanged, _1), true); + + joystick = LLViewerJoystick::getInstance(); + joystick->setNeedsReset(true); + /*----------------------------------------------------------------------*/ + return true; } @@ -1294,297 +1308,255 @@ static LLTrace::BlockTimerStatHandle FTM_AGENT_UPDATE("Update"); // externally visible timers LLTrace::BlockTimerStatHandle FTM_FRAME("Frame"); -bool LLAppViewer::mainLoop() +bool LLAppViewer::frame() { -#ifdef LL_DARWIN - if (!mMainLoopInitialized) -#endif - { - LL_INFOS() << "Entering main_loop" << LL_ENDL; - mMainloopTimeout = new LLWatchdogTimeout(); - - //------------------------------------------- - // Run main loop until time to quit - //------------------------------------------- - - // Create IO Pump to use for HTTP Requests. - gServicePump = new LLPumpIO(gAPRPoolp); - - // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated. - - LLVoiceChannel::initClass(); - LLVoiceClient::getInstance()->init(gServicePump); - LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLFloaterIMContainer::onCurrentChannelChanged, _1), true); - - joystick = LLViewerJoystick::getInstance(); - joystick->setNeedsReset(true); - -#ifdef LL_DARWIN - // Ensure that this section of code never gets called again on OS X. - mMainLoopInitialized = true; -#endif - } - // As we do not (yet) send data on the mainloop LLEventPump that varies - // with each frame, no need to instantiate a new LLSD event object each - // time. Obviously, if that changes, just instantiate the LLSD at the - // point of posting. - LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop")); - - LLSD newFrame; - + LLSD newFrame; + LLTimer frameTimer,idleTimer; LLTimer debugTime; - + //LLPrivateMemoryPoolTester::getInstance()->run(false) ; //LLPrivateMemoryPoolTester::getInstance()->run(true) ; //LLPrivateMemoryPoolTester::destroy() ; - // Handle messages -#ifdef LL_DARWIN - if (!LLApp::isExiting()) -#else - while (!LLApp::isExiting()) -#endif + LL_RECORD_BLOCK_TIME(FTM_FRAME); + LLTrace::BlockTimer::processTimes(); + LLTrace::get_frame_recording().nextPeriod(); + LLTrace::BlockTimer::logStats(); + + LLTrace::get_thread_recorder()->pullFromChildren(); + + //clear call stack records + LL_CLEAR_CALLSTACKS(); + + //check memory availability information + checkMemory() ; + + try { - LL_RECORD_BLOCK_TIME(FTM_FRAME); - LLTrace::BlockTimer::processTimes(); - LLTrace::get_frame_recording().nextPeriod(); - LLTrace::BlockTimer::logStats(); + pingMainloopTimeout("Main:MiscNativeWindowEvents"); - LLTrace::get_thread_recorder()->pullFromChildren(); - - //clear call stack records - LL_CLEAR_CALLSTACKS(); - - //check memory availability information - checkMemory() ; - - try + if (gViewerWindow) { - pingMainloopTimeout("Main:MiscNativeWindowEvents"); + LL_RECORD_BLOCK_TIME(FTM_MESSAGES); + gViewerWindow->getWindow()->processMiscNativeEvents(); + } - if (gViewerWindow) - { - LL_RECORD_BLOCK_TIME(FTM_MESSAGES); - gViewerWindow->getWindow()->processMiscNativeEvents(); - } - - pingMainloopTimeout("Main:GatherInput"); - - if (gViewerWindow) - { - LL_RECORD_BLOCK_TIME(FTM_MESSAGES); - if (!restoreErrorTrap()) - { - LL_WARNS() << " Someone took over my signal/exception handler (post messagehandling)!" << LL_ENDL; - } + pingMainloopTimeout("Main:GatherInput"); - gViewerWindow->getWindow()->gatherInput(); + if (gViewerWindow) + { + LL_RECORD_BLOCK_TIME(FTM_MESSAGES); + if (!restoreErrorTrap()) + { + LL_WARNS() << " Someone took over my signal/exception handler (post messagehandling)!" << LL_ENDL; } + gViewerWindow->getWindow()->gatherInput(); + } + #if 1 && !LL_RELEASE_FOR_DOWNLOAD - // once per second debug info - if (debugTime.getElapsedTimeF32() > 1.f) - { - debugTime.reset(); - } - + // once per second debug info + if (debugTime.getElapsedTimeF32() > 1.f) + { + debugTime.reset(); + } + #endif - //memory leaking simulation - LLFloaterMemLeak* mem_leak_instance = - LLFloaterReg::findTypedInstance("mem_leaking"); - if(mem_leak_instance) + //memory leaking simulation + LLFloaterMemLeak* mem_leak_instance = + LLFloaterReg::findTypedInstance("mem_leaking"); + if(mem_leak_instance) + { + mem_leak_instance->idle() ; + } + + // canonical per-frame event + mainloop.post(newFrame); + + if (!LLApp::isExiting()) + { + pingMainloopTimeout("Main:JoystickKeyboard"); + + // Scan keyboard for movement keys. Command keys and typing + // are handled by windows callbacks. Don't do this until we're + // done initializing. JC + if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible()) + && gViewerWindow->getActive() + && !gViewerWindow->getWindow()->getMinimized() + && LLStartUp::getStartupState() == STATE_STARTED + && (gHeadlessClient || !gViewerWindow->getShowProgress()) + && !gFocusMgr.focusLocked()) { - mem_leak_instance->idle() ; - } - - // canonical per-frame event - mainloop.post(newFrame); - - if (!LLApp::isExiting()) - { - pingMainloopTimeout("Main:JoystickKeyboard"); - - // Scan keyboard for movement keys. Command keys and typing - // are handled by windows callbacks. Don't do this until we're - // done initializing. JC - if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible()) - && gViewerWindow->getActive() - && !gViewerWindow->getWindow()->getMinimized() - && LLStartUp::getStartupState() == STATE_STARTED - && (gHeadlessClient || !gViewerWindow->getShowProgress()) - && !gFocusMgr.focusLocked()) - { - joystick->scanJoystick(); - gKeyboard->scanKeyboard(); - } - - // Update state based on messages, user input, object idle. - { - pauseMainloopTimeout(); // *TODO: Remove. Messages shouldn't be stalling for 20+ seconds! - - LL_RECORD_BLOCK_TIME(FTM_IDLE); - idle(); - - resumeMainloopTimeout(); - } - - if (gDoDisconnect && (LLStartUp::getStartupState() == STATE_STARTED)) - { - pauseMainloopTimeout(); - saveFinalSnapshot(); - disconnectViewer(); - resumeMainloopTimeout(); - } - - // Render scene. - // *TODO: Should we run display() even during gHeadlessClient? DK 2011-02-18 - if (!LLApp::isExiting() && !gHeadlessClient) - { - pingMainloopTimeout("Main:Display"); - gGLActive = TRUE; - display(); - pingMainloopTimeout("Main:Snapshot"); - LLFloaterSnapshot::update(); // take snapshots - gGLActive = FALSE; - } + joystick->scanJoystick(); + gKeyboard->scanKeyboard(); } - pingMainloopTimeout("Main:Sleep"); - - pauseMainloopTimeout(); - - // Sleep and run background threads + // Update state based on messages, user input, object idle. { - LL_RECORD_BLOCK_TIME(FTM_SLEEP); + pauseMainloopTimeout(); // *TODO: Remove. Messages shouldn't be stalling for 20+ seconds! - // yield some time to the os based on command line option - if(mYieldTime >= 0) - { - LL_RECORD_BLOCK_TIME(FTM_YIELD); - ms_sleep(mYieldTime); - } - - // yield cooperatively when not running as foreground window - if ( (gViewerWindow && !gViewerWindow->getWindow()->getVisible()) - || !gFocusMgr.getAppHasFocus()) - { - // Sleep if we're not rendering, or the window is minimized. - S32 milliseconds_to_sleep = llclamp(gSavedSettings.getS32("BackgroundYieldTime"), 0, 1000); - // don't sleep when BackgroundYieldTime set to 0, since this will still yield to other threads - // of equal priority on Windows - if (milliseconds_to_sleep > 0) - { - ms_sleep(milliseconds_to_sleep); - // also pause worker threads during this wait period - LLAppViewer::getTextureCache()->pause(); - LLAppViewer::getImageDecodeThread()->pause(); - } - } - - if (mRandomizeFramerate) - { - ms_sleep(rand() % 200); - } - - if (mPeriodicSlowFrame - && (gFrameCount % 10 == 0)) - { - LL_INFOS() << "Periodic slow frame - sleeping 500 ms" << LL_ENDL; - ms_sleep(500); - } - - const F64Milliseconds max_idle_time = llmin(.005f*10.f*(F32Milliseconds)gFrameTimeSeconds, F32Milliseconds(5)); // 5 ms a second - idleTimer.reset(); - S32 total_work_pending = 0; - S32 total_io_pending = 0; - while(1) - { - S32 work_pending = 0; - S32 io_pending = 0; - F32 max_time = llmin(gFrameIntervalSeconds.value() *10.f, 1.f); - - work_pending += updateTextureThreads(max_time); - - { - LL_RECORD_BLOCK_TIME(FTM_VFS); - io_pending += LLVFSThread::updateClass(1); - } - { - LL_RECORD_BLOCK_TIME(FTM_LFS); - io_pending += LLLFSThread::updateClass(1); - } - - if (io_pending > 1000) - { - ms_sleep(llmin(io_pending/100,100)); // give the vfs some time to catch up - } - - total_work_pending += work_pending ; - total_io_pending += io_pending ; - - if (!work_pending || idleTimer.getElapsedTimeF64() >= max_idle_time) - { - break; - } - } - gMeshRepo.update() ; - - if(!total_work_pending) //pause texture fetching threads if nothing to process. - { - LLAppViewer::getTextureCache()->pause(); - LLAppViewer::getImageDecodeThread()->pause(); - LLAppViewer::getTextureFetch()->pause(); - } - if(!total_io_pending) //pause file threads if nothing to process. - { - LLVFSThread::sLocal->pause(); - LLLFSThread::sLocal->pause(); - } - - //texture fetching debugger - if(LLTextureFetchDebugger::isEnabled()) - { - LLFloaterTextureFetchDebugger* tex_fetch_debugger_instance = - LLFloaterReg::findTypedInstance("tex_fetch_debugger"); - if(tex_fetch_debugger_instance) - { - tex_fetch_debugger_instance->idle() ; - } - } - - if ((LLStartUp::getStartupState() >= STATE_CLEANUP) && - (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) - { - gFrameStalls++; - } - frameTimer.reset(); + LL_RECORD_BLOCK_TIME(FTM_IDLE); + idle(); resumeMainloopTimeout(); - - pingMainloopTimeout("Main:End"); - } + } + + if (gDoDisconnect && (LLStartUp::getStartupState() == STATE_STARTED)) + { + pauseMainloopTimeout(); + saveFinalSnapshot(); + disconnectViewer(); + resumeMainloopTimeout(); + } + + // Render scene. + // *TODO: Should we run display() even during gHeadlessClient? DK 2011-02-18 + if (!LLApp::isExiting() && !gHeadlessClient) + { + pingMainloopTimeout("Main:Display"); + gGLActive = TRUE; + display(); + pingMainloopTimeout("Main:Snapshot"); + LLFloaterSnapshot::update(); // take snapshots + gGLActive = FALSE; + } } - catch(std::bad_alloc) - { - LLMemory::logMemoryInfo(TRUE) ; - //stop memory leaking simulation - LLFloaterMemLeak* mem_leak_instance = - LLFloaterReg::findTypedInstance("mem_leaking"); - if(mem_leak_instance) - { - mem_leak_instance->stop() ; - LL_WARNS() << "Bad memory allocation in LLAppViewer::mainLoop()!" << LL_ENDL ; - } - else - { - //output possible call stacks to log file. - LLError::LLCallStacks::print() ; + pingMainloopTimeout("Main:Sleep"); - LL_ERRS() << "Bad memory allocation in LLAppViewer::mainLoop()!" << LL_ENDL ; + pauseMainloopTimeout(); + + // Sleep and run background threads + { + LL_RECORD_BLOCK_TIME(FTM_SLEEP); + + // yield some time to the os based on command line option + if(mYieldTime >= 0) + { + LL_RECORD_BLOCK_TIME(FTM_YIELD); + ms_sleep(mYieldTime); } + + // yield cooperatively when not running as foreground window + if ( (gViewerWindow && !gViewerWindow->getWindow()->getVisible()) + || !gFocusMgr.getAppHasFocus()) + { + // Sleep if we're not rendering, or the window is minimized. + S32 milliseconds_to_sleep = llclamp(gSavedSettings.getS32("BackgroundYieldTime"), 0, 1000); + // don't sleep when BackgroundYieldTime set to 0, since this will still yield to other threads + // of equal priority on Windows + if (milliseconds_to_sleep > 0) + { + ms_sleep(milliseconds_to_sleep); + // also pause worker threads during this wait period + LLAppViewer::getTextureCache()->pause(); + LLAppViewer::getImageDecodeThread()->pause(); + } + } + + if (mRandomizeFramerate) + { + ms_sleep(rand() % 200); + } + + if (mPeriodicSlowFrame + && (gFrameCount % 10 == 0)) + { + LL_INFOS() << "Periodic slow frame - sleeping 500 ms" << LL_ENDL; + ms_sleep(500); + } + + const F64Milliseconds max_idle_time = llmin(.005f*10.f*(F32Milliseconds)gFrameTimeSeconds, F32Milliseconds(5)); // 5 ms a second + idleTimer.reset(); + S32 total_work_pending = 0; + S32 total_io_pending = 0; + while(1) + { + S32 work_pending = 0; + S32 io_pending = 0; + F32 max_time = llmin(gFrameIntervalSeconds.value() *10.f, 1.f); + + work_pending += updateTextureThreads(max_time); + + { + LL_RECORD_BLOCK_TIME(FTM_VFS); + io_pending += LLVFSThread::updateClass(1); + } + { + LL_RECORD_BLOCK_TIME(FTM_LFS); + io_pending += LLLFSThread::updateClass(1); + } + + if (io_pending > 1000) + { + ms_sleep(llmin(io_pending/100,100)); // give the vfs some time to catch up + } + + total_work_pending += work_pending ; + total_io_pending += io_pending ; + + if (!work_pending || idleTimer.getElapsedTimeF64() >= max_idle_time) + { + break; + } + } + gMeshRepo.update() ; + + if(!total_work_pending) //pause texture fetching threads if nothing to process. + { + LLAppViewer::getTextureCache()->pause(); + LLAppViewer::getImageDecodeThread()->pause(); + LLAppViewer::getTextureFetch()->pause(); + } + if(!total_io_pending) //pause file threads if nothing to process. + { + LLVFSThread::sLocal->pause(); + LLLFSThread::sLocal->pause(); + } + + //texture fetching debugger + if(LLTextureFetchDebugger::isEnabled()) + { + LLFloaterTextureFetchDebugger* tex_fetch_debugger_instance = + LLFloaterReg::findTypedInstance("tex_fetch_debugger"); + if(tex_fetch_debugger_instance) + { + tex_fetch_debugger_instance->idle() ; + } + } + + if ((LLStartUp::getStartupState() >= STATE_CLEANUP) && + (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) + { + gFrameStalls++; + } + frameTimer.reset(); + + resumeMainloopTimeout(); + + pingMainloopTimeout("Main:End"); + } + } + catch(std::bad_alloc) + { + LLMemory::logMemoryInfo(TRUE) ; + + //stop memory leaking simulation + LLFloaterMemLeak* mem_leak_instance = + LLFloaterReg::findTypedInstance("mem_leaking"); + if(mem_leak_instance) + { + mem_leak_instance->stop() ; + LL_WARNS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ; + } + else + { + //output possible call stacks to log file. + LLError::LLCallStacks::print() ; + + LL_ERRS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ; } } @@ -1618,7 +1590,7 @@ bool LLAppViewer::mainLoop() LL_INFOS() << "Exiting main_loop" << LL_ENDL; } - return LLApp::isExiting(); + return ! LLApp::isRunning(); } S32 LLAppViewer::updateTextureThreads(F32 max_time) diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index b5e674bd7b..f7c1bb58b4 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -79,7 +79,7 @@ public: // virtual bool init(); // Override to do application initialization virtual bool cleanup(); // Override to do application cleanup - virtual bool mainLoop(); // Override for the application main loop. Needs to at least gracefully notice the QUITTING state and exit. + virtual bool frame(); // Override for application body logic // Application control void flushVFSIO(); // waits for vfs transfers to complete @@ -283,7 +283,6 @@ private: std::string mSerialNumber; bool mPurgeCache; bool mPurgeOnExit; - bool mMainLoopInitialized; LLViewerJoystick* joystick; bool mSavedFinalSnapshot; diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index f5742b29cf..6f32aab851 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -95,10 +95,8 @@ int main( int argc, char **argv ) } // Run the application main loop - if(!LLApp::isQuitting()) - { - viewer_app_ptr->mainLoop(); - } + while (! viewer_app_ptr->frame()) + {} if (!LLApp::isError()) { diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index ca219fda59..4fe1e31668 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -117,12 +117,17 @@ void handleQuit() LLAppViewer::instance()->userQuit(); } -bool runMainLoop() +// This function is called pumpMainLoop() rather than runMainLoop() because +// it passes control to the viewer's main-loop logic for a single frame. Like +// LLAppViewer::frame(), it returns 'true' when it's done. Until then, it +// expects to be called again by the timer in LLAppDelegate +// (llappdelegate-objc.mm). +bool pumpMainLoop() { bool ret = LLApp::isQuitting(); if (!ret && gViewerAppPtr != NULL) { - ret = gViewerAppPtr->mainLoop(); + ret = gViewerAppPtr->frame(); } else { ret = true; } diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 4786f83bfd..a7f248ab5a 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -317,10 +317,8 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, } // Run the application main loop - if(!LLApp::isQuitting()) - { - viewer_app_ptr->mainLoop(); - } + while (! viewer_app_ptr->frame()) + {} if (!LLApp::isError()) { diff --git a/indra/test/llapp_tut.cpp b/indra/test/llapp_tut.cpp index aa5c0672e6..98e714a497 100644 --- a/indra/test/llapp_tut.cpp +++ b/indra/test/llapp_tut.cpp @@ -41,7 +41,7 @@ namespace tut public: virtual bool init() { return true; } virtual bool cleanup() { return true; } - virtual bool mainLoop() { return true; } + virtual bool frame() { return true; } }; LLTestApp* mApp; application() diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp index 23c29e6b18..167acf6ac7 100644 --- a/indra/win_crash_logger/llcrashloggerwindows.cpp +++ b/indra/win_crash_logger/llcrashloggerwindows.cpp @@ -454,7 +454,7 @@ void LLCrashLoggerWindows::gatherPlatformSpecificFiles() //mDebugLog["DisplayDeviceInfo"] = gDXHardware.getDisplayInfo(); //Not initialized. } -bool LLCrashLoggerWindows::mainLoop() +bool LLCrashLoggerWindows::frame() { LL_INFOS() << "CrashSubmitBehavior is " << mCrashBehavior << LL_ENDL; @@ -503,14 +503,14 @@ bool LLCrashLoggerWindows::mainLoop() TranslateMessage(&msg); DispatchMessage(&msg); } - return msg.wParam; + return true; // msg.wParam; } else { LL_WARNS() << "Unknown crash behavior " << mCrashBehavior << LL_ENDL; - return 1; + return true; // 1; } - return 0; + return true; // 0; } void LLCrashLoggerWindows::updateApplication(const std::string& message) diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h index 1812e2737e..f89b8708dc 100644 --- a/indra/win_crash_logger/llcrashloggerwindows.h +++ b/indra/win_crash_logger/llcrashloggerwindows.h @@ -46,7 +46,7 @@ public: static LLCrashLoggerWindows* sInstance; virtual bool init(); - virtual bool mainLoop(); + virtual bool frame(); virtual void updateApplication(const std::string& message = LLStringUtil::null); virtual bool cleanup(); virtual void gatherPlatformSpecificFiles(); diff --git a/indra/win_crash_logger/win_crash_logger.cpp b/indra/win_crash_logger/win_crash_logger.cpp index 366edd894b..7466dbb766 100644 --- a/indra/win_crash_logger/win_crash_logger.cpp +++ b/indra/win_crash_logger/win_crash_logger.cpp @@ -52,7 +52,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, } app.processingLoop(); - app.mainLoop(); + app.frame(); app.cleanup(); LL_INFOS() << "Crash reporter finished normally." << LL_ENDL; return 0; From 1a3fa64ecc3d88f42fb7abb99f854db0a4784b8b Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 1 Jul 2016 12:14:08 -0400 Subject: [PATCH 150/278] DRTVWR-418: Update to llappearance_utility fixed for LLApp::frame() --- autobuild.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 072dfa678a..e9928908be 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1454,9 +1454,9 @@ archive hash - faa1e5b7cf70c143caabe190fa5588ce + fddd634dec5ec03924d62cc774f7f8ea url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearance_viewer-update-llappearance-utility/rev/304432/arch/Linux/installer/llappearance_utility-0.0.1-linux-304432.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/p64_viewer-llappearance-utility/rev/317266/arch/Linux/installer/llappearance_utility-0.0.1-linux-317266.tar.bz2 name linux From 5f57257185f1535aae1967b2b6d8a40c154bef83 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Fri, 1 Jul 2016 14:52:51 -0700 Subject: [PATCH 151/278] MAINT-6481 FIX Media controls not present --- indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 3852d10c44..5dd866db80 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -214,7 +214,7 @@ void MediaPluginLibVLC::receiveMessage( const char* message_string ) LLSD versions = LLSD::emptyMap(); versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; - versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION; + versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME] = LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME_VERSION; message.setValueLLSD("versions", versions); std::ostringstream s; From d59ce04495be43ab1dc68c1a78b3ca6eb2e7b01e Mon Sep 17 00:00:00 2001 From: callum_linden Date: Thu, 7 Jul 2016 09:10:39 -0700 Subject: [PATCH 152/278] MAINT-6527 FIX -volume plays at full amount +50m away - volume was not set for media outside attenuation zone so played at random value --- indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 5dd866db80..fdad990b7c 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -189,6 +189,7 @@ void MediaPluginLibVLC::playMedia() gVLCCallbackContext.texture_pixels = mPixels; gVLCCallbackContext.mp = gLibVLCMediaPlayer; + libvlc_audio_set_volume(gLibVLCMediaPlayer, 0); libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, unlock, display, &gVLCCallbackContext); libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", mWidth, mHeight, mWidth * mDepth); libvlc_media_player_play(gLibVLCMediaPlayer); From 510957673399be1a4d603bc7e5491fe27c765d8a Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Thu, 7 Jul 2016 20:19:29 +0300 Subject: [PATCH 153/278] MAINT-6476 FIXED VOB - User can add any size image to an Outfit Gallery outfit folders Eliminated overuse of texture memory --- indra/newview/lloutfitgallery.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index 055d4dbe9f..fc736056b9 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -48,6 +48,7 @@ #include "lltexturectrl.h" #include "llviewercontrol.h" #include "llviewermenufile.h" +#include "llviewertexturelist.h" #include "llwearableitemslist.h" static LLPanelInjector t_outfit_gallery("outfit_gallery"); @@ -705,8 +706,7 @@ BOOL LLOutfitGalleryItem::handleRightMouseDown(S32 x, S32 y, MASK mask) void LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id) { mImageAssetId = image_asset_id; - mTexturep = LLViewerTextureManager::getFetchedTexture(image_asset_id); - mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); + mTexturep = LLViewerTextureManager::getFetchedTexture(image_asset_id, FTT_DEFAULT, MIPMAP_YES, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); getChildView("preview_outfit")->setVisible(FALSE); mDefaultImage = false; } From 8d542a46c7b1c5eb1817076348c0793fa6d3f617 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 8 Jul 2016 18:50:19 +0300 Subject: [PATCH 154/278] MAINT-6534 Fixed the LLSD validation failure --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ce2d652c37..aaf41b68b4 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3710,7 +3710,7 @@ Type F32 Value - 40.0 + 40.0 FindLandArea From 1c7548d3bfaa6f2351d8102e53b2dd90a5d864e7 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Fri, 8 Jul 2016 15:07:52 +0300 Subject: [PATCH 155/278] MAINT-6448 PERMISSION_DEBIT notification should default to Deny --- indra/newview/lltoast.cpp | 15 +++++++++++++++ indra/newview/lltoast.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 7020ac0c65..edde7c8076 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -202,6 +202,21 @@ void LLToast::hide() } } +/*virtual*/ +void LLToast::setFocus(BOOL b) +{ + if (b && !hasFocus() && mPanel) + { + LLModalDialog::setFocus(TRUE); + // mostly for buttons + mPanel->setFocus(TRUE); + } + else + { + LLModalDialog::setFocus(b); + } +} + void LLToast::onFocusLost() { if(mWrapperPanel && !isBackgroundVisible()) diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index f02d7c2a1a..cd92189012 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -150,6 +150,8 @@ public: // virtual void hide(); + /*virtual*/ void setFocus(BOOL b); + /*virtual*/ void onFocusLost(); /*virtual*/ void onFocusReceived(); From a3f63bce3c5f45e2275980363bbb598cd6861bc8 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 11 Jul 2016 16:23:18 +0300 Subject: [PATCH 156/278] MAINT-6534 Resetting scripts via the build menu no longer works on many scripted objects --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llcompilequeue.cpp | 60 +++++++++++++------ indra/newview/llcompilequeue.h | 13 +++- indra/newview/llviewermenu.cpp | 13 ++-- .../default/xui/en/floater_script_queue.xml | 8 +++ 5 files changed, 71 insertions(+), 25 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index aaf41b68b4..6ccf89eabe 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3710,7 +3710,7 @@ Type F32 Value - 40.0 + 300.0 FindLandArea diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index de7bc1e3c5..7721e67290 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -207,9 +207,10 @@ void LLFloaterScriptQueue::onCloseBtn(void* user_data) self->closeFloater(); } -void LLFloaterScriptQueue::addObject(const LLUUID& id) +void LLFloaterScriptQueue::addObject(const LLUUID& id, std::string name) { - mObjectIDs.insert(id); + ObjectData obj = { id, name }; + mObjectList.push_back(obj); } BOOL LLFloaterScriptQueue::start() @@ -218,7 +219,7 @@ BOOL LLFloaterScriptQueue::start() LLStringUtil::format_map_t args; args["[START]"] = mStartString; - args["[COUNT]"] = llformat ("%d", mObjectIDs.size()); + args["[COUNT]"] = llformat ("%d", mObjectList.size()); buffer = getString ("Starting", args); getChild("queue output")->addSimpleElement(buffer, ADD_BOTTOM); @@ -241,7 +242,7 @@ void LLFloaterScriptQueue::addStringMessage(const std::string &message) BOOL LLFloaterScriptQueue::isDone() const { - return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0)); + return (mCurrentObjectID.isNull() && (mObjectList.size() == 0)); } ///---------------------------------------------------------------------------- @@ -339,7 +340,7 @@ void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID paren LLCoros::instance().launch("ScriptQueueCompile", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, queue->mStartString, hFloater, - queue->mObjectIDs, + queue->mObjectList, fn)); } @@ -393,7 +394,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = "Timeout: " + inventory->getName(); + LLStringUtil::format_map_t args; + args["[OBJECT_NAME]"] = inventory->getName(); + std::string buffer = that->getString("Timeout", args); that->addStringMessage(buffer); return true; } @@ -443,7 +446,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat { if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = "Timeout: " + inventory->getName(); + LLStringUtil::format_map_t args; + args["[OBJECT_NAME]"] = inventory->getName(); + std::string buffer = that->getString("Timeout", args); that->addStringMessage(buffer); return true; } @@ -497,7 +502,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle hfloat { if (result.has("timeout") && result["timeout"].asBoolean()) { - std::string buffer = "Timeout: " + inventory->getName(); + LLStringUtil::format_map_t args; + args["[OBJECT_NAME]"] = inventory->getName(); + std::string buffer = that->getString("Timeout", args); that->addStringMessage(buffer); return true; } @@ -601,7 +608,7 @@ bool LLFloaterResetQueue::startQueue() LLCoros::instance().launch("ScriptResetQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, mStartString, getDerivedHandle(), - mObjectIDs, + mObjectList, fn)); return true; @@ -655,7 +662,7 @@ bool LLFloaterRunQueue::startQueue() LLCoros::instance().launch("ScriptRunQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, mStartString, hFloater, - mObjectIDs, + mObjectList, fn)); return true; @@ -710,7 +717,7 @@ bool LLFloaterNotRunQueue::startQueue() LLCoros::instance().launch("ScriptQueueNotRun", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro, mStartString, hFloater, - mObjectIDs, + mObjectList, fn)); return true; @@ -730,7 +737,7 @@ void ObjectInventoryFetcher::inventoryChanged(LLViewerObject* object, } void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, LLHandle hfloater, - uuid_list_t objectList, fnQueueAction_t func) + object_data_list_t objectList, fnQueueAction_t func) { LLCoros::set_consuming(true); LLFloaterScriptQueue * floater(NULL); @@ -744,12 +751,13 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L // .with("[COUNT]", LLSD::Integer(objectList.size()))); // floater = NULL; - for (uuid_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj) + for (object_data_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj) { bool firstForObject = true; - LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << (*itObj).asString() << LL_ENDL; + LLUUID object_id = (*itObj).mObjectId; + LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << object_id.asString() << LL_ENDL; - LLPointer obj = gObjectList.findObject(*itObj); + LLPointer obj = gObjectList.findObject(object_id); LLInventoryObject::object_list_t inventory; if (obj) { @@ -757,13 +765,31 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L fetcher->fetchInventory(); + floater = hfloater.get(); + if (floater) + { + LLStringUtil::format_map_t args; + args["[OBJECT_NAME]"] = (*itObj).mObjectName; + floater->addStringMessage(floater->getString("LoadingObjInv", args)); + } + LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true))); if (result.has("timeout") && result["timeout"].asBoolean()) { - LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << (*itObj).asString() << + LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << object_id.asString() << ". Skipping to next object." << LL_ENDL; + + // floater could have been closed + floater = hfloater.get(); + if (floater) + { + LLStringUtil::format_map_t args; + args["[OBJECT_NAME]"] = (*itObj).mObjectName; + floater->addStringMessage(floater->getString("Timeout", args)); + } + continue; } @@ -771,7 +797,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L } else { - LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << (*itObj) << + LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << object_id << ". Skipping to next." << LL_ENDL; continue; } diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index 271ac5e05d..1b3d8f83a0 100644 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -61,7 +61,7 @@ public: void setMono(bool mono) { mMono = mono; } // addObject() accepts an object id. - void addObject(const LLUUID& id); + void addObject(const LLUUID& id, std::string name); // start() returns TRUE if the queue has started, otherwise FALSE. BOOL start(); @@ -87,7 +87,14 @@ protected: LLButton* mCloseBtn; // Object Queue - uuid_list_t mObjectIDs; + struct ObjectData + { + LLUUID mObjectId; + std::string mObjectName; + }; + typedef std::vector object_data_list_t; + + object_data_list_t mObjectList; LLUUID mCurrentObjectID; bool mDone; @@ -95,7 +102,7 @@ protected: bool mMono; typedef boost::function &, LLInventoryObject*, LLEventPump &)> fnQueueAction_t; - static void objectScriptProcessingQueueCoro(std::string action, LLHandle hfloater, uuid_list_t objectList, fnQueueAction_t func); + static void objectScriptProcessingQueueCoro(std::string action, LLHandle hfloater, object_data_list_t objectList, fnQueueAction_t func); }; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 99a9ed1d75..f5b06fbd19 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6986,20 +6986,25 @@ class LLAvatarCall : public view_listener_t namespace { - struct QueueObjects : public LLSelectedObjectFunctor + struct QueueObjects : public LLSelectedNodeFunctor { BOOL scripted; BOOL modifiable; LLFloaterScriptQueue* mQueue; QueueObjects(LLFloaterScriptQueue* q) : mQueue(q), scripted(FALSE), modifiable(FALSE) {} - virtual bool apply(LLViewerObject* obj) + virtual bool apply(LLSelectNode* node) { + LLViewerObject* obj = node->getObject(); + if (!obj) + { + return true; + } scripted = obj->flagScripted(); modifiable = obj->permModify(); if( scripted && modifiable ) { - mQueue->addObject(obj->getID()); + mQueue->addObject(obj->getID(), node->mName); return false; } else @@ -7015,7 +7020,7 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& msg) QueueObjects func(q); LLSelectMgr *mgr = LLSelectMgr::getInstance(); LLObjectSelectionHandle selectHandle = mgr->getSelection(); - bool fail = selectHandle->applyToObjects(&func); + bool fail = selectHandle->applyToNodes(&func); if(fail) { if ( !func.scripted ) diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml index f4aca7bb3d..0982683a7f 100644 --- a/indra/newview/skins/default/xui/en/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml @@ -29,6 +29,14 @@ name="NotRunning"> Not running + + Timeout: [OBJECT_NAME] + + + Loading inventory for: [OBJECT_NAME] + + + + - - - - - + label="Media Browser" + name="Media Browser"> + parameter="http://google.com"/> - - - - + label="Media Browser" + name="Media Browser" + shortcut="control|alt|shift|Z"> + parameter="http://google.com"/> Date: Mon, 25 Jul 2016 12:09:55 -0700 Subject: [PATCH 195/278] Remove unncessary Y flip --- indra/newview/llmediactrl.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 5fed925dda..9cf3249983 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -907,14 +907,7 @@ void LLMediaCtrl::convertInputCoords(S32& x, S32& y) if(mMediaSource && mMediaSource->hasMedia()) { -// on OS X (maybe Linux) and on 2D media like login/search, the coords are wrong. -// they are fine on 3D media - so we flip (or is it unflip) them here for anything -// except windows (Which appears to be correct on both counts) -#if LL_WINDOWS coords_opengl = mMediaSource->getMediaPlugin()->getTextureCoordsOpenGL(); -#else - coords_opengl = ! mMediaSource->getMediaPlugin()->getTextureCoordsOpenGL(); -#endif } x = ll_round((F32)x * LLUI::getScaleFactor().mV[VX]); From 1b1f4252e3a243fcdc0906ada0c124dfe7b864bf Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 25 Jul 2016 23:43:37 +0300 Subject: [PATCH 196/278] MAINT-6460 Crash calculating mesh complexity --- indra/newview/llmeshrepository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index a0e57677c3..18634de500 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3934,7 +3934,7 @@ const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) { LLMutexLock lock(mHeaderMutex); mesh_header_map::iterator iter = mMeshHeader.find(mesh_id); - if (iter != mMeshHeader.end()) + if (iter != mMeshHeader.end() && mMeshHeaderSize[mesh_id] > 0) { return &(iter->second); } From 7187ec75a7095ab7bf1d49896d2f4f72b7899243 Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Tue, 26 Jul 2016 19:18:03 +0300 Subject: [PATCH 197/278] MAINT-6476 VOB - User can add any size image to an Outfit Gallery outfit folders Added restriction of image size that can be added to outfit via "Select Photo" --- indra/newview/lloutfitgallery.cpp | 60 ++++++++++++++++--- indra/newview/lloutfitgallery.h | 4 +- indra/newview/lltexturectrl.cpp | 7 ++- indra/newview/lltexturectrl.h | 3 + .../skins/default/xui/en/notifications.xml | 4 +- .../newview/skins/default/xui/en/strings.xml | 3 + 6 files changed, 69 insertions(+), 12 deletions(-) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index a65ab26c52..a93cbb30f5 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -55,6 +55,9 @@ static LLPanelInjector t_outfit_gallery("outfit_gallery"); +#define MAX_OUTFIT_PHOTO_WIDTH 256 +#define MAX_OUTFIT_PHOTO_HEIGHT 256 + LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p) : LLOutfitListBase(), mTexturesObserver(NULL), @@ -74,7 +77,8 @@ LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p) mItemHorizontalGap(p.item_horizontal_gap), mItemsInRow(p.items_in_row), mRowPanWidthFactor(p.row_panel_width_factor), - mGalleryWidthFactor(p.gallery_width_factor) + mGalleryWidthFactor(p.gallery_width_factor), + mTextureSelected(NULL) { updateGalleryWidth(); } @@ -1069,8 +1073,8 @@ void LLOutfitGallery::uploadPhoto(LLUUID outfit_id) image_load_error = image_info.getLastError(); } - S32 max_width = gSavedSettings.getS32("max_texture_dimension_X"); - S32 max_height = gSavedSettings.getS32("max_texture_dimension_Y"); + S32 max_width = MAX_OUTFIT_PHOTO_WIDTH; + S32 max_height = MAX_OUTFIT_PHOTO_HEIGHT; if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height)) { @@ -1078,14 +1082,14 @@ void LLOutfitGallery::uploadPhoto(LLUUID outfit_id) args["WIDTH"] = llformat("%d", max_width); args["HEIGHT"] = llformat("%d", max_height); - image_load_error = LLTrans::getString("texture_load_dimensions_error", args); + image_load_error = LLTrans::getString("outfit_photo_load_dimensions_error", args); } if (!image_load_error.empty()) { LLSD subst; subst["REASON"] = image_load_error; - LLNotificationsUtil::add("ImageLoadError", subst); + LLNotificationsUtil::add("OutfitPhotoLoadError", subst); return; } @@ -1158,7 +1162,43 @@ void LLOutfitGallery::onTexturePickerCommit(LLTextureCtrl::ETexturePickOp op, LL else { image_item_id = floaterp->findItemID(floaterp->getAssetID(), FALSE); + if (image_item_id.isNull()) + { + LL_WARNS() << "id or image_item_id is NULL!" << LL_ENDL; + return; + } } + + std::string image_load_error; + S32 max_width = MAX_OUTFIT_PHOTO_WIDTH; + S32 max_height = MAX_OUTFIT_PHOTO_HEIGHT; + if (mTextureSelected.isNull() || + mTextureSelected->getFullWidth() == 0 || + mTextureSelected->getFullHeight() == 0) + { + image_load_error = LLTrans::getString("outfit_photo_verify_dimensions_error"); + LL_WARNS() << "Cannot verify selected texture dimensions" << LL_ENDL; + return; + } + S32 width = mTextureSelected->getFullWidth(); + S32 height = mTextureSelected->getFullHeight(); + if ((width > max_width) || (height > max_height)) + { + LLStringUtil::format_map_t args; + args["WIDTH"] = llformat("%d", max_width); + args["HEIGHT"] = llformat("%d", max_height); + + image_load_error = LLTrans::getString("outfit_photo_select_dimensions_error", args); + } + + if (!image_load_error.empty()) + { + LLSD subst; + subst["REASON"] = image_load_error; + LLNotificationsUtil::add("OutfitPhotoLoadError", subst); + return; + } + checkRemovePhoto(getSelectedOutfitUUID()); linkPhotoToOutfit(image_item_id, getSelectedOutfitUUID()); } @@ -1196,15 +1236,14 @@ void LLOutfitGallery::onSelectPhoto(LLUUID selected_outfit_id) NULL); mFloaterHandle = floaterp->getHandle(); + mTextureSelected = NULL; LLFloaterTexturePicker* texture_floaterp = dynamic_cast(floaterp); if (texture_floaterp) { texture_floaterp->setTextureSelectedCallback(boost::bind(&LLOutfitGallery::onTextureSelectionChanged, this, _1)); - } - if (texture_floaterp) - { texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLOutfitGallery::onTexturePickerCommit, this, _1, _2)); + texture_floaterp->setOnUpdateImageStatsCallback(boost::bind(&LLOutfitGallery::onTexturePickerUpdateImageStats, this, _1)); } floaterp->openFloater(); @@ -1241,3 +1280,8 @@ void LLOutfitGallery::onAfterOutfitSnapshotSave() mOutfitLinkPending = selected_outfit_id; } } + +void LLOutfitGallery::onTexturePickerUpdateImageStats(LLPointer texture) +{ + mTextureSelected = texture; +} diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index f5954d9cc2..6b13f264a4 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -111,6 +111,7 @@ public: void refreshOutfit(const LLUUID& category_id); void onTexturePickerCommit(LLTextureCtrl::ETexturePickOp op, LLUUID id); + void onTexturePickerUpdateImageStats(LLPointer texture); void onBeforeOutfitSnapshotSave(); void onAfterOutfitSnapshotSave(); protected: @@ -168,6 +169,7 @@ private: bool mGalleryCreated; int mRowCount; int mItemsAddedCount; + LLPointer mTextureSelected; /* Params */ int mRowPanelHeight; int mVerticalGap; @@ -266,7 +268,7 @@ public: void setHidden(bool hidden) {mHidden = hidden;} private: - LLPointer mTexturep; + LLPointer mTexturep; LLUUID mImageAssetId; LLTextBox* mOutfitNameText; LLTextBox* mOutfitWornText; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 858486514f..f77e0349b5 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -118,7 +118,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( mPreviewSettingChanged(false), mOnFloaterCommitCallback(NULL), mOnFloaterCloseCallback(NULL), - mSetImageAssetIDCallback(NULL) + mSetImageAssetIDCallback(NULL), + mOnUpdateImageStatsCallback(NULL) { buildFromFile("floater_texture_ctrl.xml"); mCanApplyImmediately = can_apply_immediately; @@ -195,6 +196,10 @@ void LLFloaterTexturePicker::updateImageStats() { std::string formatted_dims = llformat("%d x %d", mTexturep->getFullWidth(),mTexturep->getFullHeight()); mResolutionLabel->setTextArg("[DIMENSIONS]", formatted_dims); + if (mOnUpdateImageStatsCallback) + { + mOnUpdateImageStatsCallback(mTexturep); + } } else { diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 3ea052ad57..471a36094c 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -240,6 +240,7 @@ private: typedef boost::function floater_commit_callback; typedef boost::function floater_close_callback; typedef boost::function set_image_asset_id_callback; +typedef boost::function texture)> set_on_update_image_stats_callback; class LLFloaterTexturePicker : public LLFloater { @@ -298,6 +299,7 @@ public: void setOnFloaterCloseCallback(const floater_close_callback& cb) { mOnFloaterCloseCallback = cb; } void setOnFloaterCommitCallback(const floater_commit_callback& cb) { mOnFloaterCommitCallback = cb; } void setSetImageAssetIDCallback(const set_image_asset_id_callback& cb) { mSetImageAssetIDCallback = cb; } + void setOnUpdateImageStatsCallback(const set_on_update_image_stats_callback& cb) { mOnUpdateImageStatsCallback = cb; } const LLUUID& getDefaultImageAssetID() { return mDefaultImageAssetID; } const LLUUID& getBlankImageAssetID() { return mBlankImageAssetID; } @@ -364,6 +366,7 @@ private: floater_close_callback mOnFloaterCloseCallback; floater_commit_callback mOnFloaterCommitCallback; set_image_asset_id_callback mSetImageAssetIDCallback; + set_on_update_image_stats_callback mOnUpdateImageStatsCallback; }; #endif // LL_LLTEXTURECTRL_H diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index f96b8636f5..bb9c767f2b 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -11019,9 +11019,9 @@ Cannot create large prims that intersect other players. Please re-try when othe - [REASON] + [REASON] fail none/none Can't load images larger than [WIDTH]*[HEIGHT] + Max outfit photo size is [WIDTH]*[HEIGHT]. Please resize or use another image + Max outfit photo size is [WIDTH]*[HEIGHT]. Please select another texture + Cannot verify photo dimensions. Please wait until photo size is displayed in picker From b779ca0aed88ec73284790781a53575e709f3010 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 26 Jul 2016 17:43:39 -0400 Subject: [PATCH 198/278] fail build on a failed configure --- build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index d67cb32e7c..cd2a9ebf5e 100755 --- a/build.sh +++ b/build.sh @@ -101,7 +101,8 @@ pre_build() -DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \ -DGRID:STRING="\"$viewer_grid\"" \ -DLL_TESTS:BOOL="$run_tests" \ - -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url + -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url \ + || fatal "$variant configuration failed" end_section "Configure $variant" } From 03bff896bd18b71c9a2d8e0b163647b1cd64b871 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 3 Aug 2016 20:40:03 -0400 Subject: [PATCH 199/278] MAINT-6584: Use RAII classes to manage helper object lifespans. Use boost::scoped_ptr instead of raw pointers to LLKDUMemSource, LLKDUDecodeState, kdu_coords and kdu_dims so cleanup is simpler, and automated on destruction of LLImageJ2CKDU. Replace pointer to kdu_codestream with a custom RAII class. kdu_codestream is itself an opaque handle, so we don't need to add another layer of indirection. Just wrap it to ensure its destroy() method is reliably called when needed. Make static instances of LLKDUMessageWarning and LLKDUMessageError self-register, eliminating the companion static bool and explicit checks in code. --- indra/llkdu/llimagej2ckdu.cpp | 98 ++++++++++++++--------------------- indra/llkdu/llimagej2ckdu.h | 45 ++++++++++++++-- 2 files changed, 78 insertions(+), 65 deletions(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 0b2ac03b9d..0d37b123ec 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -138,15 +138,21 @@ struct LLKDUMessageWarning : public LLKDUMessage { LLKDUMessageWarning(): LLKDUMessage("Warning") - {} + { + kdu_customize_warnings(this); + } }; +// Instantiating LLKDUMessageWarning calls kdu_customize_warnings() with the +// new instance. Make it static so this only happens once. static LLKDUMessageWarning sWarningHandler; struct LLKDUMessageError : public LLKDUMessage { LLKDUMessageError(): LLKDUMessage("Error") - {} + { + kdu_customize_errors(this); + } virtual void flush(bool end_of_message = false) { @@ -165,20 +171,20 @@ struct LLKDUMessageError : public LLKDUMessage } } }; +// Instantiating LLKDUMessageError calls kdu_customize_errors() with the new +// instance. Make it static so this only happens once. static LLKDUMessageError sErrorHandler; -static bool kdu_message_initialized = false; - LLImageJ2CKDU::LLImageJ2CKDU() : LLImageJ2CImpl(), -mInputp(NULL), -mCodeStreamp(NULL), -mTPosp(NULL), -mTileIndicesp(NULL), -mRawImagep(NULL), -mDecodeState(NULL), -mBlocksSize(-1), -mPrecinctsSize(-1), -mLevels(0) + mInputp(), + mCodeStreamp(), + mTPosp(), + mTileIndicesp(), + mRawImagep(NULL), + mDecodeState(), + mBlocksSize(-1), + mPrecinctsSize(-1), + mLevels(0) { } @@ -198,38 +204,27 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECod // // Initialization // - if (!kdu_message_initialized) - { - kdu_message_initialized = true; - kdu_customize_errors(&sErrorHandler); - kdu_customize_warnings(&sWarningHandler); - } - - if (mCodeStreamp) - { - mCodeStreamp->destroy(); - delete mCodeStreamp; - mCodeStreamp = NULL; - } + mCodeStreamp.reset(); if (!mInputp && base.getData()) { // The compressed data has been loaded // Setup the source for the codestream - mInputp = new LLKDUMemSource(base.getData(), data_size); + mInputp.reset(new LLKDUMemSource(base.getData(), data_size)); } if (mInputp) { + // This is LLKDUMemSource::reset(), not boost::scoped_ptr::reset(). mInputp->reset(); } - mCodeStreamp = new kdu_codestream; - mCodeStreamp->create(mInputp); + mCodeStreamp->create(mInputp.get()); // Set the maximum number of bytes to use from the codestream - // *TODO: This seems to be wrong. The base class should have no idea of how j2c compression works so no - // good way of computing what's the byte range to be used. + // *TODO: This seems to be wrong. The base class should have no idea of + // how j2c compression works so no good way of computing what's the byte + // range to be used. mCodeStreamp->set_max_bytes(max_bytes,true); // If you want to flip or rotate the image for some reason, change @@ -286,34 +281,18 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECod if (!keep_codestream) { - mCodeStreamp->destroy(); - delete mCodeStreamp; - mCodeStreamp = NULL; - delete mInputp; - mInputp = NULL; + mCodeStreamp.reset(); + mInputp.reset(); } } void LLImageJ2CKDU::cleanupCodeStream() { - delete mInputp; - mInputp = NULL; - - delete mDecodeState; - mDecodeState = NULL; - - if (mCodeStreamp) - { - mCodeStreamp->destroy(); - delete mCodeStreamp; - mCodeStreamp = NULL; - } - - delete mTPosp; - mTPosp = NULL; - - delete mTileIndicesp; - mTileIndicesp = NULL; + mInputp.reset(); + mDecodeState.reset(); + mCodeStreamp.reset(); + mTPosp.reset(); + mTileIndicesp.reset(); } bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level, int* region) @@ -395,12 +374,12 @@ bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco if (!mTileIndicesp) { - mTileIndicesp = new kdu_dims; + mTileIndicesp.reset(new kdu_dims); } mCodeStreamp->get_valid_tiles(*mTileIndicesp); if (!mTPosp) { - mTPosp = new kdu_coords; + mTPosp.reset(new kdu_coords); mTPosp->y = 0; mTPosp->x = 0; } @@ -427,7 +406,7 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco LLTimer decode_timer; - if (!mCodeStreamp) + if (!mCodeStreamp->exists()) { if (!initDecode(base, raw_image, decode_time, mode, first_channel, max_channel_count)) { @@ -478,15 +457,14 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco kdu_coords offset = tile_dims.pos - dims.pos; int row_gap = channels*dims.size.x; // inter-row separation kdu_byte *buf = buffer + offset.y*row_gap + offset.x*channels; - mDecodeState = new LLKDUDecodeState(tile, buf, row_gap); + mDecodeState.reset(new LLKDUDecodeState(tile, buf, row_gap)); } // Do the actual processing F32 remaining_time = decode_time - decode_timer.getElapsedTimeF32(); // This is where we do the actual decode. If we run out of time, return false. if (mDecodeState->processTileDecode(remaining_time, (decode_time > 0.0f))) { - delete mDecodeState; - mDecodeState = NULL; + mDecodeState.reset(); } else { diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h index da84749796..5fb093826e 100644 --- a/indra/llkdu/llimagej2ckdu.h +++ b/indra/llkdu/llimagej2ckdu.h @@ -48,6 +48,8 @@ #endif #include "kdu_sample_processing.h" +#include +#include class LLKDUDecodeState; class LLKDUMemSource; @@ -79,18 +81,51 @@ private: void setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECodeStreamMode mode); void cleanupCodeStream(); + // Helper class to hold a kdu_codestream, which is a handle to the + // underlying implementation object. When CodeStreamHolder is reset() or + // destroyed, it calls kdu_codestream::destroy() -- which kdu_codestream + // itself does not. + // + // Call through it like a smart pointer using operator->(). + // + // Every RAII class must be noncopyable. For this we don't need move + // support. + class CodeStreamHolder: public boost::noncopyable + { + public: + ~CodeStreamHolder() + { + reset(); + } + + void reset() + { + if (mCodeStream.exists()) + { + mCodeStream.destroy(); + } + } + + kdu_codestream* operator->() { return &mCodeStream; } + + private: + kdu_codestream mCodeStream; + }; + // Encode variable - LLKDUMemSource *mInputp; - kdu_codestream *mCodeStreamp; - kdu_coords *mTPosp; // tile position - kdu_dims *mTileIndicesp; + boost::scoped_ptr mInputp; + CodeStreamHolder mCodeStreamp; + boost::scoped_ptr mTPosp; // tile position + boost::scoped_ptr mTileIndicesp; int mBlocksSize; int mPrecinctsSize; int mLevels; // Temporary variables for in-progress decodes... + // We don't own this LLImageRaw. We're simply pointing to an instance + // passed into initDecode(). LLImageRaw *mRawImagep; - LLKDUDecodeState *mDecodeState; + boost::scoped_ptr mDecodeState; }; #endif From 2339e759fc2d6f36a4b9425022a22a747ec55dad Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 27 Jul 2016 05:49:07 +0300 Subject: [PATCH 200/278] MAINT-4327/MAINT-6584 Supress the crash on memory allocation error when decoding J2C images --- indra/llimage/llimage.cpp | 6 ++++-- indra/llkdu/llimagej2ckdu.cpp | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 109ef7e904..91fa8c6ad1 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -773,7 +773,8 @@ const U8* LLImageBase::getData() const { if(mBadBufferAllocation) { - LL_ERRS() << "Bad memory allocation for the image buffer!" << LL_ENDL ; + LL_WARNS() << "Bad memory allocation for the image buffer!" << LL_ENDL ; + return NULL; } return mData; @@ -783,7 +784,8 @@ U8* LLImageBase::getData() { if(mBadBufferAllocation) { - LL_ERRS() << "Bad memory allocation for the image buffer!" << LL_ENDL ; + LL_WARNS() << "Bad memory allocation for the image buffer!" << LL_ENDL; + return NULL; } return mData; diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 0d37b123ec..0863240686 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -422,6 +422,13 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco // Now we are ready to walk through the tiles processing them one-by-one. kdu_byte *buffer = raw_image.getData(); + if (!buffer) + { + base.setLastError("Memory error"); + base.decodeFailed(); + cleanupCodeStream(); + return true; // done + } while (mTPosp->y < mTileIndicesp->size.y) { From 781cf7fac47812d8f779113e61fa02daa97b67fe Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 27 Jul 2016 09:53:20 -0400 Subject: [PATCH 201/278] remove use of "override" C++11 feature not supported on gcc 4.6 --- indra/media_plugins/libvlc/media_plugin_libvlc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index c1e34b5c8f..0bd323eb58 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -61,7 +61,7 @@ private: static void unlock(void* data, void* id, void* const* raw_pixels); static void display(void* data, void* id); - /*virtual*/ void setDirty(int left, int top, int right, int bottom) override; + /*virtual*/ void setDirty(int left, int top, int right, int bottom) /* override, but that is not supported in gcc 4.6 */; static void eventCallbacks(const libvlc_event_t* event, void* ptr); From c32b27f5b77c7d8e53b11163d04f2842949d71de Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 27 Jul 2016 11:19:50 -0400 Subject: [PATCH 202/278] increment version number to 4.1.1 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 43beb4001b..627a3f43a6 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -4.0.7 +4.1.1 From 974e5e58681cb981fae77076dbc443acac24efd3 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 28 Jul 2016 00:15:49 +0300 Subject: [PATCH 203/278] MAINT-6511 Replaced c-style casts with dynamic_cast in llfloater.cpp --- doc/contributions.txt | 1 + indra/llui/llfloater.cpp | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 52371a365a..8ed41ddc34 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -192,6 +192,7 @@ Ansariel Hiller MAINT-4677 MAINT-6432 STORM-2133 + MAINT-6511 Aralara Rajal Arare Chantilly CHUIBUG-191 diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 69038a8627..1f9869fadc 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2263,7 +2263,7 @@ void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent) for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { LLView* viewp = *child_it; - LLFloater* floaterp = (LLFloater*)viewp; + LLFloater* floaterp = dynamic_cast(viewp); if (floaterp->isDependent()) { // dependents are moved with their "dependee" @@ -2320,7 +2320,7 @@ void LLFloaterView::restoreAll() // make sure all subwindows aren't minimized for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { - LLFloater* floaterp = (LLFloater*)*child_it; + LLFloater* floaterp = dynamic_cast(*child_it); if (floaterp) { floaterp->setMinimized(FALSE); @@ -2600,7 +2600,7 @@ void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom) ++child_it) //loop floaters { // Examine minimized children. - LLFloater* floater = (LLFloater*)((LLView*)*child_it); + LLFloater* floater = dynamic_cast(*child_it); if(floater->isMinimized()) { LLRect r = floater->getRect(); @@ -2653,7 +2653,7 @@ void LLFloaterView::closeAllChildren(bool app_quitting) continue; } - LLFloater* floaterp = (LLFloater*)viewp; + LLFloater* floaterp = dynamic_cast(viewp); // Attempt to close floater. This will cause the "do you want to save" // dialogs to appear. @@ -2719,8 +2719,7 @@ BOOL LLFloaterView::allChildrenClosed() // by setting themselves invisible) for (child_list_const_iter_t it = getChildList()->begin(); it != getChildList()->end(); ++it) { - LLView* viewp = *it; - LLFloater* floaterp = (LLFloater*)viewp; + LLFloater* floaterp = dynamic_cast(*it); if (floaterp->getVisible() && !floaterp->isDead() && floaterp->isCloseable()) { @@ -2956,7 +2955,7 @@ void LLFloaterView::syncFloaterTabOrder() // otherwise, make sure the focused floater is in the front of the child list for ( child_list_const_reverse_iter_t child_it = getChildList()->rbegin(); child_it != getChildList()->rend(); ++child_it) { - LLFloater* floaterp = (LLFloater*)*child_it; + LLFloater* floaterp = dynamic_cast(*child_it); if (gFocusMgr.childHasKeyboardFocus(floaterp)) { bringToFront(floaterp, FALSE); @@ -2978,7 +2977,7 @@ LLFloater* LLFloaterView::getParentFloater(LLView* viewp) const if (parentp == this) { - return (LLFloater*)viewp; + return dynamic_cast(viewp); } return NULL; From 0888078bd86136ed198d38b95f79f4bd1bdc3ed1 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 29 Jul 2016 12:44:52 +0300 Subject: [PATCH 204/278] MAINT-6601 FIXED [VOB] Texture picker generates WARNING spam in SecondLife.log --- indra/newview/lltexturectrl.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index f77e0349b5..a93f8da3f0 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -479,7 +479,6 @@ void LLFloaterTexturePicker::draw() mTexturep = NULL; if(mImageAssetID.notNull()) { - LL_WARNS() << "mImageAssetID: " << mImageAssetID << LL_ENDL; mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID); mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); } From 84677aad4cfb5b892f9037118b0bb6cdbe9d6309 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 1 Aug 2016 15:18:32 +0300 Subject: [PATCH 205/278] MAINT-6602 disable ability to select local textures --- indra/newview/lloutfitgallery.cpp | 1 + indra/newview/lltexturectrl.cpp | 5 +++++ indra/newview/lltexturectrl.h | 2 ++ 3 files changed, 8 insertions(+) diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index a93cbb30f5..65fd3f95ab 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -1244,6 +1244,7 @@ void LLOutfitGallery::onSelectPhoto(LLUUID selected_outfit_id) texture_floaterp->setTextureSelectedCallback(boost::bind(&LLOutfitGallery::onTextureSelectionChanged, this, _1)); texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLOutfitGallery::onTexturePickerCommit, this, _1, _2)); texture_floaterp->setOnUpdateImageStatsCallback(boost::bind(&LLOutfitGallery::onTexturePickerUpdateImageStats, this, _1)); + texture_floaterp->setLocalTextureEnabled(FALSE); } floaterp->openFloater(); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index a93f8da3f0..fd13f60606 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -941,6 +941,11 @@ void LLFloaterTexturePicker::onFilterEdit(const std::string& search_string ) mInventoryPanel->setFilterSubString(search_string); } +void LLFloaterTexturePicker::setLocalTextureEnabled(BOOL enabled) +{ + mModeSelector->setIndexEnabled(1,enabled); +} + void LLFloaterTexturePicker::onTextureSelect( const LLTextureEntry& te ) { LLUUID inventory_item_id = findItemID(te.getID(), TRUE); diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 471a36094c..61f99de5c0 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -322,6 +322,8 @@ public: static void onBtnUpload(void* userdata); static void onLocalScrollCommit(LLUICtrl* ctrl, void* userdata); + void setLocalTextureEnabled(BOOL enabled); + protected: LLPointer mTexturep; LLView* mOwner; From 13f19b1634a4d20c6daed965d52ea412ca4b0455 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 1 Aug 2016 17:25:20 +0300 Subject: [PATCH 206/278] Backed out changeset: c21a7e6d9796 --- indra/newview/llmeshrepository.cpp | 13 +++++++------ indra/newview/llmeshrepository.h | 4 ++-- indra/newview/llvovolume.cpp | 5 ++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 18634de500..d7665716b7 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3906,8 +3906,8 @@ void LLMeshRepository::buildHull(const LLVolumeParams& params, S32 detail) bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id) { - const LLSD* mesh = mThread->getMeshHeader(mesh_id); - if (mesh && mesh->has("physics_mesh") && (*mesh)["physics_mesh"].has("size") && ((*mesh)["physics_mesh"]["size"].asInteger() > 0)) + LLSD mesh = mThread->getMeshHeader(mesh_id); + if (mesh.has("physics_mesh") && mesh["physics_mesh"].has("size") && (mesh["physics_mesh"]["size"].asInteger() > 0)) { return true; } @@ -3921,26 +3921,27 @@ bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id) return false; } -const LLSD* LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) +LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) { LL_RECORD_BLOCK_TIME(FTM_MESH_FETCH); return mThread->getMeshHeader(mesh_id); } -const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) +LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) { + static LLSD dummy_ret; if (mesh_id.notNull()) { LLMutexLock lock(mHeaderMutex); mesh_header_map::iterator iter = mMeshHeader.find(mesh_id); if (iter != mMeshHeader.end() && mMeshHeaderSize[mesh_id] > 0) { - return &(iter->second); + return iter->second; } } - return NULL; + return dummy_ret; } diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 8a1166522f..d35c44397b 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -305,7 +305,7 @@ public: bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size); bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size); bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size); - const LLSD* getMeshHeader(const LLUUID& mesh_id); + LLSD& getMeshHeader(const LLUUID& mesh_id); void notifyLoadedMeshes(); S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); @@ -506,7 +506,7 @@ public: bool meshRezEnabled(); - const LLSD* getMeshHeader(const LLUUID& mesh_id); + LLSD& getMeshHeader(const LLUUID& mesh_id); void uploadModel(std::vector& data, LLVector3& scale, bool upload_textures, bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true, diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 486f6fae61..8f0b233f01 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3627,9 +3627,8 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v F32 radius = getScale().length()*0.5f; if (isMesh()) - { - const LLSD* header_ptr = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); - LLSD header = header_ptr ? *header_ptr : LLSD(); + { + LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value); } From 9b07078b470d40c4b6454d21da2909c35517b248 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 1 Aug 2016 18:00:54 +0300 Subject: [PATCH 207/278] MAINT-6460 Crash calculating mesh complexity --- indra/newview/llmeshrepository.cpp | 14 ++++++++++++++ indra/newview/llmeshrepository.h | 1 + indra/newview/llvovolume.cpp | 6 ++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index d7665716b7..8bc75c8433 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4031,6 +4031,20 @@ void LLMeshRepository::uploadError(LLSD& args) mUploadErrorQ.push(args); } +F32 LLMeshRepository::getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) +{ + if (mThread && mesh_id.notNull()) + { + LLMutexLock lock(mThread->mHeaderMutex); + LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id); + if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0) + { + return getStreamingCost(iter->second, radius, bytes, bytes_visible, lod, unscaled_value); + } + } + return 0.f; +} + //static F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) { diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index d35c44397b..a762042597 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -475,6 +475,7 @@ public: static LLDeadmanTimer sQuiescentTimer; // Time-to-complete-mesh-downloads after significant events + F32 getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL); static F32 getStreamingCost(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL); LLMeshRepository(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8f0b233f01..e69a8d1d1d 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3627,10 +3627,8 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v F32 radius = getScale().length()*0.5f; if (isMesh()) - { - LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); - - return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value); + { + return gMeshRepo.getStreamingCost(getVolume()->getParams().getSculptID(), radius, bytes, visible_bytes, mLOD, unscaled_value); } else { From ce3658455230cf392f45cc99f44a737ee59f13bd Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 1 Aug 2016 18:58:41 +0300 Subject: [PATCH 208/278] MAINT-6460 getMeshSize crash --- indra/newview/llmeshrepository.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 8bc75c8433..54f8fb93d0 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3956,10 +3956,11 @@ void LLMeshRepository::uploadModel(std::vector& data, LLVector3 S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod) { - if (mThread) + if (mThread && mesh_id.notNull()) { + LLMutexLock lock(mThread->mHeaderMutex); LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id); - if (iter != mThread->mMeshHeader.end()) + if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0) { LLSD& header = iter->second; From cc7dda96e7ab09ee221e741aac9813af815e0aed Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Thu, 4 Aug 2016 17:27:48 +0300 Subject: [PATCH 209/278] MAINT-6604 FIXED [VOB] Snapshot preview is corrupted --- indra/newview/llfloateroutfitsnapshot.cpp | 4 ++-- indra/newview/llfloateroutfitsnapshot.h | 2 +- indra/newview/llfloatersnapshot.cpp | 7 +++---- indra/newview/llfloatersnapshot.h | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index d671c36a1c..093a2dad64 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -1,5 +1,5 @@ /** - * @file llfloatersnapshot.cpp + * @file llfloateroutfitsnapshot.cpp * @brief Snapshot preview window for saving as an outfit thumbnail in visual outfit gallery * * $LicenseInfo:firstyear=2004&license=viewerlgpl$ @@ -256,7 +256,7 @@ BOOL LLFloaterOutfitSnapshot::postBuild() } childSetCommitCallback("filters_combobox", ImplBase::onClickFilter, this); - sThumbnailPlaceholder = getChild("thumbnail_placeholder"); + mThumbnailPlaceholder = getChild("thumbnail_placeholder"); // create preview window LLRect full_screen_rect = getRootView()->getRect(); diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index c7b221937f..482080da7a 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -53,7 +53,7 @@ public: static LLFloaterOutfitSnapshot* getInstance(); /*virtual*/ void saveTexture(); - static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } + const LLRect& getThumbnailPlaceholderRect() { return mThumbnailPlaceholder->getRect(); } void setOutfitID(LLUUID id) { mOutfitID = id; } LLUUID getOutfitID() { return mOutfitID; } diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 98d4034ccf..a0e54e47b6 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -50,7 +50,6 @@ ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- -LLUICtrl* LLFloaterSnapshotBase::sThumbnailPlaceholder = NULL; LLSnapshotFloaterView* gSnapshotFloaterView = NULL; const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; @@ -1011,7 +1010,7 @@ BOOL LLFloaterSnapshot::postBuild() LLWebProfile::setImageUploadResultCallback(boost::bind(&Impl::onSnapshotUploadFinished, this, _1)); LLPostCard::setPostResultCallback(boost::bind(&Impl::onSendingPostcardFinished, this, _1)); - sThumbnailPlaceholder = getChild("thumbnail_placeholder"); + mThumbnailPlaceholder = getChild("thumbnail_placeholder"); // create preview window LLRect full_screen_rect = getRootView()->getRect(); @@ -1060,7 +1059,7 @@ void LLFloaterSnapshotBase::draw() LLFloater::draw(); - if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible()) + if (previewp && !isMinimized() && mThumbnailPlaceholder->getVisible()) { if(previewp->getThumbnailImage()) { @@ -1089,7 +1088,7 @@ void LLFloaterSnapshotBase::draw() gGL.pushUIMatrix(); LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom); - sThumbnailPlaceholder->draw(); + mThumbnailPlaceholder->draw(); gGL.popUIMatrix(); } } diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 61639eebc5..4c65c8d06a 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -56,7 +56,7 @@ public: LLSnapshotLivePreview* getPreviewView(); const LLVector3d& getPosTakenGlobal(); - static const LLRect& getThumbnailPlaceholderRect() { return sThumbnailPlaceholder->getRect(); } + const LLRect& getThumbnailPlaceholderRect() { return mThumbnailPlaceholder->getRect(); } void setRefreshLabelVisible(bool value) { mRefreshLabel->setVisible(value); } void setSuccessLabelPanelVisible(bool value) { mSucceessLblPanel->setVisible(value); } @@ -67,7 +67,7 @@ public: ImplBase* impl; protected: - static LLUICtrl* sThumbnailPlaceholder; + LLUICtrl* mThumbnailPlaceholder; LLUICtrl *mRefreshBtn, *mRefreshLabel; LLUICtrl *mSucceessLblPanel, *mFailureLblPanel; }; From 2ce38c3c9890f6cf65238e125a78cdc57841f3bd Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 4 Aug 2016 16:20:39 -0400 Subject: [PATCH 210/278] MAINT-6584: Comment out completely unused LLImageJ2CKDU code. The only call to the findDiscardLevelsBoundaries() method was commented out inside initDecode(), with a comment: // Merov : Test!! DO NOT COMMIT!! This was the only caller of copy_tile(), which was the only caller of copy_block(). Commented out all three of these (biggish!) functions, since I have no idea what any of them were supposed to do or when it might be useful to call them. In other words, I can't yet rule out the possibility that I might have to uncomment them. --- indra/llkdu/llimagej2ckdu.cpp | 9 +++++++++ indra/llkdu/llimagej2ckdu.h | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 0863240686..9347e51b85 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -713,6 +713,8 @@ bool LLImageJ2CKDU::getMetadata(LLImageJ2C &base) /* STATIC copy_block */ /*****************************************************************************/ +/*==========================================================================*| +// Only called by copy_tile(), which is itself commented out static void copy_block(kdu_block *in, kdu_block *out) { if (in->K_max_prime != out->K_max_prime) @@ -741,11 +743,14 @@ static void copy_block(kdu_block *in, kdu_block *out) out->set_max_bytes(num_bytes,false); memcpy(out->byte_buffer,in->byte_buffer,(size_t) num_bytes); } +|*==========================================================================*/ /*****************************************************************************/ /* STATIC copy_tile */ /*****************************************************************************/ +/*==========================================================================*| +// Only called by findDiscardLevelsBoundaries(), which is itself commented out static void copy_tile(kdu_tile tile_in, kdu_tile tile_out, int tnum_in, int tnum_out, kdu_params *siz_in, kdu_params *siz_out, int skip_components, @@ -802,10 +807,13 @@ copy_tile(kdu_tile tile_in, kdu_tile tile_out, int tnum_in, int tnum_out, } } } +|*==========================================================================*/ // Find the block boundary for each discard level in the input image. // We parse the input blocks and copy them in a temporary output stream. // For the moment, we do nothing more that parsing the raw list of blocks and outputing result. +/*==========================================================================*| +// See comments in header file for why this is commented out. void LLImageJ2CKDU::findDiscardLevelsBoundaries(LLImageJ2C &base) { // We need the number of levels in that image before starting. @@ -909,6 +917,7 @@ void LLImageJ2CKDU::findDiscardLevelsBoundaries(LLImageJ2C &base) } return; } +|*==========================================================================*/ void set_default_colour_weights(kdu_params *siz) { diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h index 5fb093826e..7d234435a4 100644 --- a/indra/llkdu/llimagej2ckdu.h +++ b/indra/llkdu/llimagej2ckdu.h @@ -74,13 +74,18 @@ protected: virtual bool initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level = -1, int* region = NULL); virtual bool initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size = -1, int precincts_size = -1, int levels = 0); virtual std::string getEngineInfo() const; - void findDiscardLevelsBoundaries(LLImageJ2C &base); private: bool initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count, int discard_level = -1, int* region = NULL); void setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECodeStreamMode mode); void cleanupCodeStream(); + // This method was public, but the only call to it is commented out in our + // own initDecode() method. I (nat 2016-08-04) don't know what it does or + // why. Even if it should be uncommented, it should probably still be + // private. +// void findDiscardLevelsBoundaries(LLImageJ2C &base); + // Helper class to hold a kdu_codestream, which is a handle to the // underlying implementation object. When CodeStreamHolder is reset() or // destroyed, it calls kdu_codestream::destroy() -- which kdu_codestream From f459c67faea4bfcbca8e88c6d8b66319b4b461aa Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 5 Aug 2016 00:58:09 +0300 Subject: [PATCH 211/278] Buildfix: brought back LINDEN_J2C_COMMENT_PREFIX --- indra/llimage/llimagej2c.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h index 44aff98494..e196f7479e 100644 --- a/indra/llimage/llimagej2c.h +++ b/indra/llimage/llimagej2c.h @@ -130,6 +130,8 @@ protected: friend class LLImageJ2C; }; +#define LINDEN_J2C_COMMENT_PREFIX "LL_" // Used by LLAppearanceUtility + // // This class is used for performance data gathering only. // Tracks the image compression / decompression data, From 65d608cdac701ab10f84bd8dc4a6c0be7eef26f1 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 5 Aug 2016 14:02:12 -0400 Subject: [PATCH 212/278] MAINT-6584: Clarify LLKDUMessageError::flush() throwing exception. --- indra/llkdu/llimagej2ckdu.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 9347e51b85..2adb90320c 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -165,6 +165,12 @@ struct LLKDUMessageError : public LLKDUMessage // terminating handler→flush call." // So throwing an exception here isn't arbitrary: we MUST throw an // exception if we want to recover from a KDU error. + // Because this confused me: the above quote specifically refers to + // the kdu_error class, which is constructed internally within KDU at + // the point where a fatal error is discovered and reported. It is NOT + // talking about the kdu_message subclass passed to + // kdu_customize_errors(). Destroying this static object at program + // shutdown will NOT engage the behavior described above. if (end_of_message) { throw "KDU throwing an exception"; From a5ce63eb3c4a3f3ea57ca2a353954a2afd43fc72 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 5 Aug 2016 17:44:13 -0400 Subject: [PATCH 213/278] MAINT-6584: Add explanatory comments to LLImageJ2CKDU implementation. These comments are inherently fragile, in that they enumerate all present callers of certain methods. Adding, removing or relocating calls would invalidate these comments. However, the LLImageJ2CKDU implementation is probably pretty stable by now. --- indra/llkdu/llimagej2ckdu.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 2adb90320c..1201170f6d 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -202,6 +202,10 @@ LLImageJ2CKDU::~LLImageJ2CKDU() // Stuff for new simple decode void transfer_bytes(kdu_byte *dest, kdu_line_buf &src, int gap, int precision); +// This is called by the real (private) initDecode() (keep_codestream true) +// and getMetadata() methods (keep_codestream false). As far as nat can tell, +// mode is always MODE_FAST. It was called by findDiscardLevelsBoundaries() +// as well, when that still existed, with keep_codestream true and MODE_FAST. void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECodeStreamMode mode) { S32 data_size = base.getDataSize(); @@ -212,6 +216,12 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECod // mCodeStreamp.reset(); + // It's not clear to nat under what circumstances we would reuse a + // pre-existing LLKDUMemSource instance. As of 2016-08-05, it consists of + // two U32s and a pointer, so it's not as if it would be a huge overhead + // to allocate a new one every time. + // Also -- why is base.getData() tested specifically here? If that returns + // NULL, shouldn't we bail out of the whole method? if (!mInputp && base.getData()) { // The compressed data has been loaded @@ -301,6 +311,9 @@ void LLImageJ2CKDU::cleanupCodeStream() mTileIndicesp.reset(); } +// This is the protected virtual method called by LLImageJ2C::initDecode(). +// However, as far as nat can tell, LLImageJ2C::initDecode() is called only by +// llimage_libtest.cpp's load_image() function. No detectable production use. bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level, int* region) { return initDecode(base,raw_image,0.0f,MODE_FAST,0,4,discard_level,region); @@ -333,6 +346,9 @@ bool LLImageJ2CKDU::initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int bloc return true; } +// This is the real (private) initDecode() called both by the protected +// initDecode() method and by decodeImpl(). As far as nat can tell, only the +// decodeImpl() usage matters for production. bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count, int discard_level, int* region) { base.resetLastError(); From 80adc9b6aa9814c74fd0c67c5de9d1765a089925 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 5 Aug 2016 17:57:24 -0400 Subject: [PATCH 214/278] MAINT-6584: Introduce KDUError exception from other viewer project. Specifically, manually apply changesets b4db8a8 and b98371d from nat_linden/viewer-mac-mainloop. We need to throw from a new place, but if we threw const char* (current convention), the new throw wouldn't be patched when we merge to new exception convention. --- indra/llkdu/llimagej2ckdu.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 1201170f6d..ba1560ec56 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -34,6 +34,15 @@ #include "kdu_block_coding.h" +#include + +namespace { +struct KDUError: public std::runtime_error +{ + KDUError(const std::string& msg): std::runtime_error(msg) {} +}; +} // anonymous namespace + class kdc_flow_control { public: @@ -173,7 +182,7 @@ struct LLKDUMessageError : public LLKDUMessage // shutdown will NOT engage the behavior described above. if (end_of_message) { - throw "KDU throwing an exception"; + throw KDUError("LLKDUMessageError::flush()"); } } }; @@ -406,9 +415,9 @@ bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco mTPosp->x = 0; } } - catch (const char* msg) + catch (const KDUError& msg) { - base.setLastError(ll_safe_string(msg)); + base.setLastError(msg.what()); return false; } catch (...) @@ -502,9 +511,9 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco return false; } } - catch (const char* msg) + catch (const KDUError& msg) { - base.setLastError(ll_safe_string(msg)); + base.setLastError(msg.what()); base.decodeFailed(); cleanupCodeStream(); return true; // done @@ -695,9 +704,9 @@ bool LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co base.updateData(); // set width, height delete[] output_buffer; } - catch(const char* msg) + catch(const KDUError& msg) { - base.setLastError(ll_safe_string(msg)); + base.setLastError(msg.what()); return false; } catch( ... ) @@ -719,9 +728,9 @@ bool LLImageJ2CKDU::getMetadata(LLImageJ2C &base) setupCodeStream(base, false, MODE_FAST); return true; } - catch (const char* msg) + catch (const KDUError& msg) { - base.setLastError(ll_safe_string(msg)); + base.setLastError(msg.what()); return false; } catch (...) From 1773f44b6d9fffa7f5d0b2449184b2998e99be5a Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Sat, 6 Aug 2016 11:39:11 -0400 Subject: [PATCH 215/278] MAINT-6584: Don't crash on inconsistent dims in a JPEG-2000 image. Previous code would crump with LL_ERRS. But a bad image file should fail only the image load -- not crash the viewer. While at it, validate all components present, not just 0, 1, 2. While at it, make the failure message report which component and what the mismatched dimensions are, not just "Components don't have matching dimensions!" --- indra/llkdu/llimagej2ckdu.cpp | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index ba1560ec56..025c77b85e 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -31,18 +31,31 @@ #include "llpointer.h" #include "llmath.h" #include "llkdumem.h" +#include "stringize.h" #include "kdu_block_coding.h" #include +#include namespace { +// exception used to keep KDU from terminating entire program -- see comments +// in LLKDUMessageError::flush() struct KDUError: public std::runtime_error { - KDUError(const std::string& msg): std::runtime_error(msg) {} + KDUError(const std::string& msg): std::runtime_error(msg) {} }; } // anonymous namespace +// stream kdu_dims to std::ostream +// Turns out this must NOT be in the anonymous namespace! +inline +std::ostream& operator<<(std::ostream& out, const kdu_dims& dims) +{ + return out << "(" << dims.pos.x << "," << dims.pos.y << ")," + "[" << dims.size.x << "x" << dims.size.y << "]"; +} + class kdc_flow_control { public: @@ -287,13 +300,19 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, bool keep_codestream, ECod S32 components = mCodeStreamp->get_num_components(); - if (components >= 3) - { // Check that components have consistent dimensions (for PPM file) - kdu_dims dims1; mCodeStreamp->get_dims(1,dims1); - kdu_dims dims2; mCodeStreamp->get_dims(2,dims2); - if ((dims1 != dims) || (dims2 != dims)) + // Check that components have consistent dimensions (for PPM file) + for (int idx = 1; idx < components; ++idx) + { + kdu_dims other_dims; + mCodeStreamp->get_dims(idx, other_dims); + if (other_dims != dims) { - LL_ERRS() << "Components don't have matching dimensions!" << LL_ENDL; + // This method is only called from methods that catch KDUError. + // We want to fail the image load, not crash the viewer. + throw KDUError(STRINGIZE("Component " << idx << " dimensions " + << other_dims + << " do not match component 0 dimensions " + << dims << "!")); } } From d4b1db277ca538781661bf474b733296156e5728 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Tue, 9 Aug 2016 05:07:39 +0300 Subject: [PATCH 216/278] MAINT-6618 Fixed the crash in LLImageRaw::scale() + some additional checks --- indra/llimage/llimage.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 91fa8c6ad1..c7f02a6b1a 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -942,6 +942,12 @@ void LLImageRaw::clear(U8 r, U8 g, U8 b, U8 a) { llassert( getComponents() <= 4 ); // This is fairly bogus, but it'll do for now. + if (isBufferInvalid()) + { + LL_WARNS() << "Invalid image buffer" << LL_ENDL; + return; + } + U8 *pos = getData(); U32 x, y; for (x = 0; x < getWidth(); x++) @@ -1136,7 +1142,6 @@ void LLImageRaw::compositeUnscaled4onto3( LLImageRaw* src ) llassert( (3 == src->getComponents()) || (4 == src->getComponents()) ); llassert( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ); - U8* src_data = src->getData(); U8* dst_data = dst->getData(); S32 pixels = getWidth() * getHeight(); @@ -1193,6 +1198,12 @@ void LLImageRaw::copyUnscaledAlphaMask( LLImageRaw* src, const LLColor4U& fill) // Fill the buffer with a constant color void LLImageRaw::fill( const LLColor4U& color ) { + if (isBufferInvalid()) + { + LL_WARNS() << "Invalid image buffer" << LL_ENDL; + return; + } + S32 pixels = getWidth() * getHeight(); if( 4 == getComponents() ) { @@ -1403,6 +1414,12 @@ bool LLImageRaw::scale( S32 new_width, S32 new_height, bool scale_image_data ) { llassert((1 == getComponents()) || (3 == getComponents()) || (4 == getComponents()) ); + if (isBufferInvalid()) + { + LL_WARNS() << "Invalid image buffer" << LL_ENDL; + return false; + } + S32 old_width = getWidth(); S32 old_height = getHeight(); From 471ff40c2c544158158abebcd88070c3c6aaf4c8 Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Tue, 9 Aug 2016 17:37:48 +0300 Subject: [PATCH 217/278] Reverted change to lllayoutstack.cpp which could possibly cause memory leak --- indra/llui/lllayoutstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 11769760aa..69246a2f57 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -283,7 +283,7 @@ void LLLayoutStack::removeChild(LLView* view) if (embedded_panelp) { mPanels.erase(std::find(mPanels.begin(), mPanels.end(), embedded_panelp)); - //delete embedded_panelp; + delete embedded_panelp; updateFractionalSizes(); mNeedsLayout = true; } From 5e02d304f03dd6adcb99f422e3a9a67eb262b2a1 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Tue, 9 Aug 2016 19:26:30 +0300 Subject: [PATCH 218/278] MAINT-6618 More checks --- indra/llimage/llimage.cpp | 41 +++++++++++++++++++++++++++++++++++---- indra/llimage/llimage.h | 3 +++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index c7f02a6b1a..feb97ec2ab 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -1075,6 +1075,11 @@ void LLImageRaw::composite( LLImageRaw* src ) { LLImageRaw* dst = this; // Just for clarity. + if (!validateSrcAndDst("LLImageRaw::composite", src, dst)) + { + return; + } + llassert(3 == src->getComponents()); llassert(3 == dst->getComponents()); @@ -1176,6 +1181,11 @@ void LLImageRaw::copyUnscaledAlphaMask( LLImageRaw* src, const LLColor4U& fill) { LLImageRaw* dst = this; // Just for clarity. + if (!validateSrcAndDst("LLImageRaw::copyUnscaledAlphaMask", src, dst)) + { + return; + } + llassert( 1 == src->getComponents() ); llassert( 4 == dst->getComponents() ); llassert( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ); @@ -1242,14 +1252,13 @@ LLPointer LLImageRaw::duplicate() // Src and dst can be any size. Src and dst can each have 3 or 4 components. void LLImageRaw::copy(LLImageRaw* src) { - if (!src) + LLImageRaw* dst = this; // Just for clarity. + + if (!validateSrcAndDst("LLImageRaw::copy", src, dst)) { - LL_WARNS() << "LLImageRaw::copy called with a null src pointer" << LL_ENDL; return; } - LLImageRaw* dst = this; // Just for clarity. - if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ) { // No scaling needed @@ -1376,6 +1385,11 @@ void LLImageRaw::copyScaled( LLImageRaw* src ) { LLImageRaw* dst = this; // Just for clarity. + if (!validateSrcAndDst("LLImageRaw::copyScaled", src, dst)) + { + return; + } + llassert_always( (1 == src->getComponents()) || (3 == src->getComponents()) || (4 == src->getComponents()) ); llassert_always( src->getComponents() == dst->getComponents() ); @@ -1709,6 +1723,25 @@ void LLImageRaw::compositeRowScaled4onto3( U8* in, U8* out, S32 in_pixel_len, S3 } } +bool LLImageRaw::validateSrcAndDst(std::string func, LLImageRaw* src, LLImageRaw* dst) +{ + if (!src || !dst || src->isBufferInvalid() || dst->isBufferInvalid()) + { + LL_WARNS() << func << ": Source: "; + if (!src) LL_CONT << "Null pointer"; + else if (src->isBufferInvalid()) LL_CONT << "Invalid buffer"; + else LL_CONT << "OK"; + + LL_CONT << "; Destination: "; + if (!dst) LL_CONT << "Null pointer"; + else if (dst->isBufferInvalid()) LL_CONT << "Invalid buffer"; + else LL_CONT << "OK"; + LL_CONT << "." << LL_ENDL; + + return false; + } + return true; +} //---------------------------------------------------------------------------- diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index adc650d360..9cc7431a9c 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -277,6 +277,9 @@ protected: public: static S32 sGlobalRawMemory; static S32 sRawImageCount; + +private: + bool validateSrcAndDst(std::string func, LLImageRaw* src, LLImageRaw* dst); }; // Compressed representation of image. From b496e4ff156ab2fb055e741b97ceda5751476e7f Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 10 Aug 2016 16:32:35 +0300 Subject: [PATCH 219/278] MAINT-6616 new crash in VOB viewer in snapshot preview --- indra/newview/llfloateroutfitsnapshot.cpp | 9 ++++++++- indra/newview/llfloateroutfitsnapshot.h | 1 + indra/newview/llfloatersnapshot.cpp | 8 +++++++- indra/newview/llfloatersnapshot.h | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index 093a2dad64..ca5a2fdad5 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -311,13 +311,20 @@ void LLFloaterOutfitSnapshot::onOpen(const LLSD& key) // static void LLFloaterOutfitSnapshot::update() { - LLFloaterOutfitSnapshot* inst = getInstance(); + LLFloaterOutfitSnapshot* inst = findInstance(); if (inst != NULL) { inst->impl->updateLivePreview(); } } + +// static +LLFloaterOutfitSnapshot* LLFloaterOutfitSnapshot::findInstance() +{ + return LLFloaterReg::findTypedInstance("outfit_snapshot"); +} + // static LLFloaterOutfitSnapshot* LLFloaterOutfitSnapshot::getInstance() { diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 482080da7a..04623acf0f 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -51,6 +51,7 @@ public: static void update(); static LLFloaterOutfitSnapshot* getInstance(); + static LLFloaterOutfitSnapshot* findInstance(); /*virtual*/ void saveTexture(); const LLRect& getThumbnailPlaceholderRect() { return mThumbnailPlaceholder->getRect(); } diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index a0e54e47b6..48c44b88fc 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1255,13 +1255,19 @@ void LLFloaterSnapshotBase::ImplBase::updateLivePreview() //static void LLFloaterSnapshot::update() { - LLFloaterSnapshot* inst = getInstance(); + LLFloaterSnapshot* inst = findInstance(); if (inst != NULL) { inst->impl->updateLivePreview(); } } +// static +LLFloaterSnapshot* LLFloaterSnapshot::findInstance() +{ + return LLFloaterReg::findTypedInstance("snapshot"); +} + // static LLFloaterSnapshot* LLFloaterSnapshot::getInstance() { diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 4c65c8d06a..44c6415326 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -146,6 +146,7 @@ public: static void update(); static LLFloaterSnapshot* getInstance(); + static LLFloaterSnapshot* findInstance(); /*virtual*/ void saveTexture(); BOOL saveLocal(); static void setAgentEmail(const std::string& email); From e4a1b2c9408af860532e6bf7bb628a2bb32a82be Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 11 Aug 2016 15:31:41 -0400 Subject: [PATCH 220/278] Added tag 4.0.7-release for changeset 33981d8130f0 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 0d06bfe598..cee1281f2b 100755 --- a/.hgtags +++ b/.hgtags @@ -517,3 +517,4 @@ e9d350764dfbf5a46229e627547ef5c1b1eeef00 4.0.2-release 0a5de9ec2cb868f367501024d8d6958c20869053 4.0.4-release 450de775fff66a011be1a001acd117cc623c445d 4.0.5-release 4070611edd95eb3a683d1cd97c4c07fe67793812 4.0.6-release +33981d8130f031597b4c7f4c981b18359afb61a0 4.0.7-release From 4fb100ac7a33174883184f1320d0beac08ead3a7 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 11 Aug 2016 15:31:41 -0400 Subject: [PATCH 221/278] increment viewer version to 4.0.8 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 43beb4001b..a2cec7aff4 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -4.0.7 +4.0.8 From 1ed76c382e8b87bff02b6d37cf8acd7f6b1f8063 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 10:45:06 -0400 Subject: [PATCH 222/278] MAINT-5011: Add llexception_test.cpp with tests (and conclusions). llexception_test.cpp is an unusual test source in that it need not be verified on every build, so its invocation in indra/llcommon/CMakeLists.txt is commented out with that remark. Its purpose is to help a developer decide what base class(es) to use for LLException, how to throw and how to catch. Our current conclusions are written up as comments in llexception_test.cpp. Added CRASH_ON_UNHANDLED_EXCEPTION() and LOG_UNHANDLED_EXCEPTION() macros to llexception.h -- macros to log __FILE__, __LINE__ and __PRETTY_FUNCTION__ of the catch site. These invoke functions in llexception.cpp so we don't need to #include llerror.h for every possible catch site. --- indra/llcommon/CMakeLists.txt | 8 +- indra/llcommon/llexception.cpp | 41 +++ indra/llcommon/llexception.h | 27 +- indra/llcommon/tests/llexception_test.cpp | 308 ++++++++++++++++++++++ 4 files changed, 377 insertions(+), 7 deletions(-) create mode 100644 indra/llcommon/llexception.cpp create mode 100644 indra/llcommon/tests/llexception_test.cpp diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 44f45144e5..410a5819b3 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -58,6 +58,7 @@ set(llcommon_SOURCE_FILES lleventfilter.cpp llevents.cpp lleventtimer.cpp + llexception.cpp llfasttimer.cpp llfile.cpp llfindlocale.cpp @@ -316,7 +317,7 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(llprocinfo "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llsingleton "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llsingleton "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltrace "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") @@ -329,6 +330,11 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}") +## llexception_test.cpp isn't a regression test, and doesn't need to be run +## every build. It's to help a developer make implementation choices about +## throwing and catching exceptions. +##LL_ADD_INTEGRATION_TEST(llexception "" "${test_libs}") + # *TODO - reenable these once tcmalloc libs no longer break the build. #ADD_BUILD_TEST(llallocator llcommon) #ADD_BUILD_TEST(llallocator_heap_profile llcommon) diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp new file mode 100644 index 0000000000..f48509b2aa --- /dev/null +++ b/indra/llcommon/llexception.cpp @@ -0,0 +1,41 @@ +/** + * @file llexception.cpp + * @author Nat Goodspeed + * @date 2016-08-12 + * @brief Implementation for llexception. + * + * $LicenseInfo:firstyear=2016&license=viewerlgpl$ + * Copyright (c) 2016, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llexception.h" +// STL headers +// std headers +#include +// external library headers +#include +// other Linden headers +#include "llerror.h" + +void crash_on_unhandled_exception_(const char* file, int line, const char* pretty_function) +{ + // LL_ERRS() terminates, but also propagates message into crash dump. + LL_ERRS() << file << "(" << line << "): Unhandled exception caught in " << pretty_function + << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; +} + +void log_unhandled_exception_(const char* file, int line, const char* pretty_function, + const LLContinueError& e) +{ + // Use LL_WARNS() because we seriously do not expect this to happen + // routinely, but we DO expect to return from this function. Deriving your + // exception from LLContinueError implies that such an exception should + // NOT be fatal to the viewer, only to its current task. + LL_WARNS() << file << "(" << line << "): Unhandled " << typeid(e).name() + << " exception caught in " << pretty_function + << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; +} diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h index 3ac2f4762f..68bd20fbcd 100644 --- a/indra/llcommon/llexception.h +++ b/indra/llcommon/llexception.h @@ -15,15 +15,20 @@ #include #include +// "Found someone who can comfort me +// But there are always exceptions..." +// - Empty Pages, Traffic, from John Barleycorn (1970) +// https://www.youtube.com/watch?v=dRH0CGVK7ic + /** * LLException is intended as the common base class from which all - * viewer-specific exceptions are derived. It is itself a subclass of - * boost::exception; use catch (const boost::exception& e) clause to log the - * string from boost::diagnostic_information(e). + * viewer-specific exceptions are derived. Rationale for why it's derived from + * both std::exception and boost::exception is explained in + * tests/llexception_test.cpp. * - * Since it is also derived from std::exception, a generic catch (const - * std::exception&) should also work, though what() is unlikely to be as - * informative as boost::diagnostic_information(). + * boost::current_exception_diagnostic_information() is quite wonderful: if + * all we need to do with an exception is log it, in most places we should + * catch (...) and log boost::current_exception_diagnostic_information(). * * Please use BOOST_THROW_EXCEPTION() * http://www.boost.org/doc/libs/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html @@ -60,4 +65,14 @@ struct LLContinueError: public LLException {} }; +/// Call this macro from a catch (...) clause +#define CRASH_ON_UNHANDLED_EXCEPTION() \ + crash_on_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) +void crash_on_unhandled_exception_(const char*, int, const char*); + +/// Call this from a catch (const LLContinueError&) clause +#define LOG_UNHANDLED_EXCEPTION(EXC) \ + log_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__, EXC) +void log_unhandled_exception_(const char*, int, const char*, const LLContinueError&); + #endif /* ! defined(LL_LLEXCEPTION_H) */ diff --git a/indra/llcommon/tests/llexception_test.cpp b/indra/llcommon/tests/llexception_test.cpp new file mode 100644 index 0000000000..6bee1943c2 --- /dev/null +++ b/indra/llcommon/tests/llexception_test.cpp @@ -0,0 +1,308 @@ +/** + * @file llexception_test.cpp + * @author Nat Goodspeed + * @date 2016-08-12 + * @brief Tests for throwing exceptions. + * + * This isn't a regression test: it doesn't need to be run every build, which + * is why the corresponding line in llcommon/CMakeLists.txt is commented out. + * Rather it's a head-to-head test of what kind of exception information we + * can collect from various combinations of exception base classes, type of + * throw verb and sequences of catch clauses. + * + * This "test" makes no ensure() calls: its output goes to stdout for human + * examination. + * + * As of 2016-08-12 with Boost 1.57, we come to the following conclusions. + * These should probably be re-examined from time to time as we update Boost. + * + * - It is indisputably beneficial to use BOOST_THROW_EXCEPTION() rather than + * plain throw. The macro annotates the exception object with the filename, + * line number and function name from which the exception was thrown. + * + * - That being the case, deriving only from boost::exception isn't an option. + * Every exception object passed to BOOST_THROW_EXCEPTION() must be derived + * directly or indirectly from std::exception. The only question is whether + * to also derive from boost::exception. We decided to derive LLException + * from both, as it makes message output slightly cleaner, but this is a + * trivial reason: if a strong reason emerges to prefer single inheritance, + * dropping the boost::exception base class shouldn't be a problem. + * + * - (As you will have guessed, ridiculous things like a char* or int or a + * class derived from neither boost::exception nor std::exception can only + * be caught by that specific type or (...), and + * boost::current_exception_diagnostic_information() simply throws up its + * hands and confesses utter ignorance. Stay away from such nonsense.) + * + * - But if you derive from std::exception, to nat's surprise, + * boost::current_exception_diagnostic_information() gives as much + * information about exceptions in a catch (...) clause as you can get from + * a specific catch (const std::exception&) clause, notably the concrete + * exception class and the what() string. So instead of a sequence like + * + * try { ... } + * catch (const boost::exception& e) { ... boost-flavored logging ... } + * catch (const std::exception& e) { ... std::exception logging ... } + * catch (...) { ... generic logging ... } + * + * we should be able to get away with only a catch (...) clause that logs + * boost::current_exception_diagnostic_information(). + * + * - Going further: boost::current_exception_diagnostic_information() provides + * just as much information even within a std::set_terminate() handler. So + * it might not even be strictly necessary to include a catch (...) clause + * since the viewer does use std::set_terminate(). + * + * - (We might consider adding a catch (int) clause because Kakadu internally + * throws ints, and who knows if one of those might leak out. If it does, + * boost::current_exception_diagnostic_information() can do nothing with it. + * A catch (int) clause could at least log the value and rethrow.) + * + * $LicenseInfo:firstyear=2016&license=viewerlgpl$ + * Copyright (c) 2016, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llexception.h" +// STL headers +// std headers +#include +// external library headers +#include +// other Linden headers +#include "../test/lltut.h" + +// helper for display output +// usage: std::cout << center(some string value, fill char, width) << std::endl; +// (assumes it's the only thing on that particular line) +struct center +{ + center(const std::string& label, char fill, std::size_t width): + mLabel(label), + mFill(fill), + mWidth(width) + {} + + // Use friend declaration not because we need to grant access, but because + // it lets us declare a free operator like a member function. + friend std::ostream& operator<<(std::ostream& out, const center& ctr) + { + std::size_t padded = ctr.mLabel.length() + 2; + std::size_t left = (ctr.mWidth - padded) / 2; + std::size_t right = ctr.mWidth - left - padded; + return out << std::string(left, ctr.mFill) << ' ' << ctr.mLabel << ' ' + << std::string(right, ctr.mFill); + } + + std::string mLabel; + char mFill; + std::size_t mWidth; +}; + +/***************************************************************************** +* Four kinds of exceptions: derived from boost::exception, from +* std::exception, from both, from neither +*****************************************************************************/ +// Interestingly, we can't use this variant with BOOST_THROW_EXCEPTION() +// (which we want) -- we reach a failure topped by this comment: +// //All boost exceptions are required to derive from std::exception, +// //to ensure compatibility with BOOST_NO_EXCEPTIONS. +struct FromBoost: public boost::exception +{ + FromBoost(const std::string& what): mWhat(what) {} + ~FromBoost() throw() {} + std::string what() const { return mWhat; } + std::string mWhat; +}; + +struct FromStd: public std::runtime_error +{ + FromStd(const std::string& what): std::runtime_error(what) {} +}; + +struct FromBoth: public boost::exception, public std::runtime_error +{ + FromBoth(const std::string& what): std::runtime_error(what) {} +}; + +// Same deal with FromNeither: can't use with BOOST_THROW_EXCEPTION(). +struct FromNeither +{ + FromNeither(const std::string& what): mWhat(what) {} + std::string what() const { return mWhat; } + std::string mWhat; +}; + +/***************************************************************************** +* Two kinds of throws: plain throw and BOOST_THROW_EXCEPTION() +*****************************************************************************/ +template +void plain_throw(const std::string& what) +{ + throw EXC(what); +} + +template +void boost_throw(const std::string& what) +{ + BOOST_THROW_EXCEPTION(EXC(what)); +} + +// Okay, for completeness, functions that throw non-class values. We wouldn't +// even deign to consider these if we hadn't found examples in our own source +// code! (Note that Kakadu's internal exception support is still based on +// throwing ints.) +void throw_char_ptr(const std::string& what) +{ + throw what.c_str(); // umm... +} + +void throw_int(const std::string& what) +{ + throw int(what.length()); +} + +/***************************************************************************** +* Three sequences of catch clauses: +* boost::exception then ..., +* std::exception then ..., +* or just ... +*****************************************************************************/ +void catch_boost_dotdotdot(void (*thrower)(const std::string&), const std::string& what) +{ + try + { + thrower(what); + } + catch (const boost::exception& e) + { + std::cout << "catch (const boost::exception& e)" << std::endl; + std::cout << "e is " << typeid(e).name() << std::endl; + std::cout << "boost::diagnostic_information(e):\n'" + << boost::diagnostic_information(e) << "'" << std::endl; + // no way to report e.what() + } + catch (...) + { + std::cout << "catch (...)" << std::endl; + std::cout << "boost::current_exception_diagnostic_information():\n'" + << boost::current_exception_diagnostic_information() << "'" + << std::endl; + } +} + +void catch_std_dotdotdot(void (*thrower)(const std::string&), const std::string& what) +{ + try + { + thrower(what); + } + catch (const std::exception& e) + { + std::cout << "catch (const std::exception& e)" << std::endl; + std::cout << "e is " << typeid(e).name() << std::endl; + std::cout << "boost::diagnostic_information(e):\n'" + << boost::diagnostic_information(e) << "'" << std::endl; + std::cout << "e.what: '" + << e.what() << "'" << std::endl; + } + catch (...) + { + std::cout << "catch (...)" << std::endl; + std::cout << "boost::current_exception_diagnostic_information():\n'" + << boost::current_exception_diagnostic_information() << "'" + << std::endl; + } +} + +void catch_dotdotdot(void (*thrower)(const std::string&), const std::string& what) +{ + try + { + thrower(what); + } + catch (...) + { + std::cout << "catch (...)" << std::endl; + std::cout << "boost::current_exception_diagnostic_information():\n'" + << boost::current_exception_diagnostic_information() << "'" + << std::endl; + } +} + +/***************************************************************************** +* Try a particular kind of throw against each of three catch sequences +*****************************************************************************/ +void catch_several(void (*thrower)(const std::string&), const std::string& what) +{ + std::cout << std::string(20, '-') << "catch_boost_dotdotdot(" << what << ")" << std::endl; + catch_boost_dotdotdot(thrower, "catch_boost_dotdotdot(" + what + ")"); + + std::cout << std::string(20, '-') << "catch_std_dotdotdot(" << what << ")" << std::endl; + catch_std_dotdotdot(thrower, "catch_std_dotdotdot(" + what + ")"); + + std::cout << std::string(20, '-') << "catch_dotdotdot(" << what << ")" << std::endl; + catch_dotdotdot(thrower, "catch_dotdotdot(" + what + ")"); +} + +/***************************************************************************** +* For a particular kind of exception, try both kinds of throw against all +* three catch sequences +*****************************************************************************/ +template +void catch_both_several(const std::string& what) +{ + std::cout << std::string(20, '*') << "plain_throw<" << what << ">" << std::endl; + catch_several(plain_throw, "plain_throw<" + what + ">"); + + std::cout << std::string(20, '*') << "boost_throw<" << what << ">" << std::endl; + catch_several(boost_throw, "boost_throw<" + what + ">"); +} + +/***************************************************************************** +* TUT +*****************************************************************************/ +namespace tut +{ + struct llexception_data + { + }; + typedef test_group llexception_group; + typedef llexception_group::object object; + llexception_group llexceptiongrp("llexception"); + + template<> template<> + void object::test<1>() + { + set_test_name("throwing exceptions"); + + // For each kind of exception, try both kinds of throw against all + // three catch sequences + std::size_t margin = 72; + std::cout << center("FromStd", '=', margin) << std::endl; + catch_both_several("FromStd"); + + std::cout << center("FromBoth", '=', margin) << std::endl; + catch_both_several("FromBoth"); + + std::cout << center("FromBoost", '=', margin) << std::endl; + // can't throw with BOOST_THROW_EXCEPTION(), just use catch_several() + catch_several(plain_throw, "plain_throw"); + + std::cout << center("FromNeither", '=', margin) << std::endl; + // can't throw this with BOOST_THROW_EXCEPTION() either + catch_several(plain_throw, "plain_throw"); + + std::cout << center("const char*", '=', margin) << std::endl; + // We don't expect BOOST_THROW_EXCEPTION() to throw anything so daft + // as a const char* or an int, so don't bother with + // catch_both_several() -- just catch_several(). + catch_several(throw_char_ptr, "throw_char_ptr"); + + std::cout << center("int", '=', margin) << std::endl; + catch_several(throw_int, "throw_int"); + } +} // namespace tut From 5e9d2f57c82a57307a48afea09aa539b9fa80abf Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 11:36:24 -0400 Subject: [PATCH 223/278] MAINT-5011: Use LLTHROW() instead of plain BOOST_THROW_EXCEPTION(). A level of preprocessor indirection lets us later change the implementation if desired. --- indra/llcommon/lldependencies.cpp | 4 +- indra/llcommon/lleventcoro.cpp | 4 +- indra/llcommon/llevents.cpp | 18 +++---- indra/llcommon/llexception.h | 16 +++--- indra/llcommon/llleap.cpp | 6 +-- indra/llcommon/llprocess.cpp | 20 ++++--- indra/llcommon/llthreadsafequeue.cpp | 14 ++--- indra/llcommon/lluuid.cpp | 2 +- indra/llcommon/tests/wrapllerrs.h | 3 +- indra/llimage/llpngwrapper.cpp | 9 ++-- indra/llkdu/llimagej2ckdu.cpp | 3 +- indra/llmessage/llhttpnode.cpp | 9 ++-- indra/llmessage/tests/commtest.h | 3 +- indra/llmessage/tests/networkio.h | 5 +- indra/newview/llappviewer.cpp | 3 +- indra/newview/llcommandlineparser.cpp | 17 +++--- indra/newview/llsecapi.cpp | 4 +- indra/newview/llsechandler_basic.cpp | 54 +++++++++---------- .../updater/llupdatedownloader.cpp | 11 ++-- .../updater/llupdateinstaller.cpp | 3 +- .../updater/llupdaterservice.cpp | 12 ++--- 21 files changed, 104 insertions(+), 116 deletions(-) diff --git a/indra/llcommon/lldependencies.cpp b/indra/llcommon/lldependencies.cpp index 87a699ff14..0d5757effd 100644 --- a/indra/llcommon/lldependencies.cpp +++ b/indra/llcommon/lldependencies.cpp @@ -39,8 +39,8 @@ #include #include #include -#include // other Linden headers +#include "llexception.h" LLDependenciesBase::VertexList LLDependenciesBase::topo_sort(int vertices, const EdgeList& edges) const { @@ -77,7 +77,7 @@ LLDependenciesBase::VertexList LLDependenciesBase::topo_sort(int vertices, const // Omit independent nodes: display only those that might contribute to // the cycle. describe(out, false); - BOOST_THROW_EXCEPTION(Cycle(out.str())); + LLTHROW(Cycle(out.str())); } // A peculiarity of boost::topological_sort() is that it emits results in // REVERSE topological order: to get the result you want, you must diff --git a/indra/llcommon/lleventcoro.cpp b/indra/llcommon/lleventcoro.cpp index f444530a17..56367b8f54 100644 --- a/indra/llcommon/lleventcoro.cpp +++ b/indra/llcommon/lleventcoro.cpp @@ -34,12 +34,12 @@ #include // std headers // external library headers -#include // other Linden headers #include "llsdserialize.h" #include "llerror.h" #include "llcoros.h" #include "llmake.h" +#include "llexception.h" #include "lleventfilter.h" @@ -352,7 +352,7 @@ LLSD errorException(const LLEventWithID& result, const std::string& desc) // returning it, deliver it via exception. if (result.second) { - BOOST_THROW_EXCEPTION(LLErrorEvent(desc, result.first)); + LLTHROW(LLErrorEvent(desc, result.first)); } // That way, our caller knows a simple return must be from the reply // pump (pump 0). diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp index 50919edb8e..19d700a3b0 100644 --- a/indra/llcommon/llevents.cpp +++ b/indra/llcommon/llevents.cpp @@ -45,7 +45,6 @@ #include // external library headers #include -#include #if LL_WINDOWS #pragma warning (push) #pragma warning (disable : 4701) // compiler thinks might use uninitialized var, but no @@ -58,6 +57,7 @@ #include "stringize.h" #include "llerror.h" #include "llsdutil.h" +#include "llexception.h" #if LL_MSVC #pragma warning (disable : 4702) #endif @@ -175,7 +175,7 @@ std::string LLEventPumps::registerNew(const LLEventPump& pump, const std::string // Unless we're permitted to tweak it, that's Bad. if (! tweak) { - BOOST_THROW_EXCEPTION(LLEventPump::DupPumpName(std::string("Duplicate LLEventPump name '") + name + "'")); + LLTHROW(LLEventPump::DupPumpName("Duplicate LLEventPump name '" + name + "'")); } // The passed name isn't unique, but we're permitted to tweak it. Find the // first decimal-integer suffix not already taken. The insert() attempt @@ -327,9 +327,8 @@ LLBoundListener LLEventPump::listen_impl(const std::string& name, const LLEventL // is only when the existing connection object is still connected. if (found != mConnections.end() && found->second.connected()) { - BOOST_THROW_EXCEPTION( - DupListenerName(std::string("Attempt to register duplicate listener name '") + name + - "' on " + typeid(*this).name() + " '" + getName() + "'")); + LLTHROW(DupListenerName("Attempt to register duplicate listener name '" + name + + "' on " + typeid(*this).name() + " '" + getName() + "'")); } // Okay, name is unique, try to reconcile its dependencies. Specify a new // "node" value that we never use for an mSignal placement; we'll fix it @@ -355,9 +354,8 @@ LLBoundListener LLEventPump::listen_impl(const std::string& name, const LLEventL // unsortable. If we leave the new node in mDeps, it will continue // to screw up all future attempts to sort()! Pull it out. mDeps.remove(name); - BOOST_THROW_EXCEPTION( - Cycle(std::string("New listener '") + name + "' on " + typeid(*this).name() + - " '" + getName() + "' would cause cycle: " + e.what())); + LLTHROW(Cycle("New listener '" + name + "' on " + typeid(*this).name() + + " '" + getName() + "' would cause cycle: " + e.what())); } // Walk the list to verify that we haven't changed the order. float previous = 0.0, myprev = 0.0; @@ -421,7 +419,7 @@ LLBoundListener LLEventPump::listen_impl(const std::string& name, const LLEventL // NOW remove the offending listener node. mDeps.remove(name); // Having constructed a description of the order change, inform caller. - BOOST_THROW_EXCEPTION(OrderChange(out.str())); + LLTHROW(OrderChange(out.str())); } // This node becomes the previous one. previous = dmi->second; @@ -611,7 +609,7 @@ bool LLListenerOrPumpName::operator()(const LLSD& event) const { if (! mListener) { - BOOST_THROW_EXCEPTION(Empty("attempting to call uninitialized")); + LLTHROW(Empty("attempting to call uninitialized")); } return (*mListener)(event); } diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h index 68bd20fbcd..e9e25ae689 100644 --- a/indra/llcommon/llexception.h +++ b/indra/llcommon/llexception.h @@ -14,6 +14,7 @@ #include #include +#include // "Found someone who can comfort me // But there are always exceptions..." @@ -30,12 +31,6 @@ * all we need to do with an exception is log it, in most places we should * catch (...) and log boost::current_exception_diagnostic_information(). * - * Please use BOOST_THROW_EXCEPTION() - * http://www.boost.org/doc/libs/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html - * to throw viewer exceptions whenever possible. This enriches the exception's - * diagnostic_information() with the source file, line and containing function - * of the BOOST_THROW_EXCEPTION() macro. - * * There may be circumstances in which it would be valuable to distinguish an * exception explicitly thrown by viewer code from an exception thrown by * (say) a third-party library. Catching (const LLException&) supports such @@ -65,6 +60,15 @@ struct LLContinueError: public LLException {} }; +/** + * Please use LLTHROW() to throw viewer exceptions whenever possible. This + * enriches the exception's diagnostic_information() with the source file, + * line and containing function of the LLTHROW() macro. + */ +// Currently we implement that using BOOST_THROW_EXCEPTION(). Wrap it in +// LLTHROW() in case we ever want to revisit that implementation decision. +#define LLTHROW(x) BOOST_THROW_EXCEPTION(x) + /// Call this macro from a catch (...) clause #define CRASH_ON_UNHANDLED_EXCEPTION() \ crash_on_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp index a8bb9bc53a..c87d2a3e58 100644 --- a/indra/llcommon/llleap.cpp +++ b/indra/llcommon/llleap.cpp @@ -21,7 +21,6 @@ #include #include #include -#include // other Linden headers #include "llerror.h" #include "llstring.h" @@ -34,6 +33,7 @@ #include "lltimer.h" #include "lluuid.h" #include "llleaplistener.h" +#include "llexception.h" #if LL_MSVC #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally @@ -70,7 +70,7 @@ public: // Rule out empty vector if (plugin.empty()) { - BOOST_THROW_EXCEPTION(Error("no plugin command")); + LLTHROW(Error("no plugin command")); } // Don't leave desc empty either, but in this case, if we weren't @@ -113,7 +113,7 @@ public: // If that didn't work, no point in keeping this LLLeap object. if (! mChild) { - BOOST_THROW_EXCEPTION(Error(STRINGIZE("failed to run " << mDesc))); + LLTHROW(Error(STRINGIZE("failed to run " << mDesc))); } // Okay, launch apparently worked. Change our mDonePump listener. diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp index ca19c94736..8c321d06b9 100644 --- a/indra/llcommon/llprocess.cpp +++ b/indra/llcommon/llprocess.cpp @@ -34,12 +34,12 @@ #include "llapr.h" #include "apr_signal.h" #include "llevents.h" +#include "llexception.h" #include #include #include #include -#include #include #include #include @@ -531,9 +531,8 @@ LLProcess::LLProcess(const LLSDOrParams& params): if (! params.validateBlock(true)) { - BOOST_THROW_EXCEPTION( - LLProcessError(STRINGIZE("not launched: failed parameter validation\n" - << LLSDNotationStreamer(params)))); + LLTHROW(LLProcessError(STRINGIZE("not launched: failed parameter validation\n" + << LLSDNotationStreamer(params)))); } mPostend = params.postend; @@ -598,11 +597,10 @@ LLProcess::LLProcess(const LLSDOrParams& params): } else { - BOOST_THROW_EXCEPTION( - LLProcessError(STRINGIZE("For " << params.executable() - << ": unsupported FileParam for " << which - << ": type='" << fparam.type() - << "', name='" << fparam.name() << "'"))); + LLTHROW(LLProcessError(STRINGIZE("For " << params.executable() + << ": unsupported FileParam for " << which + << ": type='" << fparam.type() + << "', name='" << fparam.name() << "'"))); } } // By default, pass APR_NO_PIPE for unspecified slots. @@ -681,7 +679,7 @@ LLProcess::LLProcess(const LLSDOrParams& params): if (ll_apr_warn_status(apr_proc_create(&mProcess, argv[0], &argv[0], NULL, procattr, gAPRPoolp))) { - BOOST_THROW_EXCEPTION(LLProcessError(STRINGIZE(params << " failed"))); + LLTHROW(LLProcessError(STRINGIZE(params << " failed"))); } // arrange to call status_callback() @@ -1066,7 +1064,7 @@ PIPETYPE& LLProcess::getPipe(FILESLOT slot) PIPETYPE* wp = getPipePtr(error, slot); if (! wp) { - BOOST_THROW_EXCEPTION(NoPipe(error)); + LLTHROW(NoPipe(error)); } return *wp; } diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp index a004618e96..491f920c0f 100644 --- a/indra/llcommon/llthreadsafequeue.cpp +++ b/indra/llcommon/llthreadsafequeue.cpp @@ -26,8 +26,8 @@ #include "linden_common.h" #include #include -#include #include "llthreadsafequeue.h" +#include "llexception.h" @@ -42,13 +42,13 @@ LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(apr_pool_t * po { if(mOwnsPool) { apr_status_t status = apr_pool_create(&mPool, 0); - if(status != APR_SUCCESS) BOOST_THROW_EXCEPTION(LLThreadSafeQueueError("failed to allocate pool")); + if(status != APR_SUCCESS) LLTHROW(LLThreadSafeQueueError("failed to allocate pool")); } else { ; // No op. } apr_status_t status = apr_queue_create(&mQueue, capacity, mPool); - if(status != APR_SUCCESS) BOOST_THROW_EXCEPTION(LLThreadSafeQueueError("failed to allocate queue")); + if(status != APR_SUCCESS) LLTHROW(LLThreadSafeQueueError("failed to allocate queue")); } @@ -69,9 +69,9 @@ void LLThreadSafeQueueImplementation::pushFront(void * element) apr_status_t status = apr_queue_push(mQueue, element); if(status == APR_EINTR) { - BOOST_THROW_EXCEPTION(LLThreadSafeQueueInterrupt()); + LLTHROW(LLThreadSafeQueueInterrupt()); } else if(status != APR_SUCCESS) { - BOOST_THROW_EXCEPTION(LLThreadSafeQueueError("push failed")); + LLTHROW(LLThreadSafeQueueError("push failed")); } else { ; // Success. } @@ -89,9 +89,9 @@ void * LLThreadSafeQueueImplementation::popBack(void) apr_status_t status = apr_queue_pop(mQueue, &element); if(status == APR_EINTR) { - BOOST_THROW_EXCEPTION(LLThreadSafeQueueInterrupt()); + LLTHROW(LLThreadSafeQueueInterrupt()); } else if(status != APR_SUCCESS) { - BOOST_THROW_EXCEPTION(LLThreadSafeQueueError("pop failed")); + LLTHROW(LLThreadSafeQueueError("pop failed")); } else { return element; } diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp index 785cf47926..d4af2c6b01 100644 --- a/indra/llcommon/lluuid.cpp +++ b/indra/llcommon/lluuid.cpp @@ -83,7 +83,7 @@ unsigned int decode( char const * fiveChars ) throw( bad_input_data ) unsigned int ret = 0; for( int ix = 0; ix < 5; ++ix ) { char * s = strchr( encodeTable, fiveChars[ ix ] ); -if( s == 0 ) BOOST_THROW_EXCEPTION(bad_input_data()); +if( s == 0 ) LLTHROW(bad_input_data()); ret = ret * 85 + (s-encodeTable); } return ret; diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h index fa16fd6915..9a4bbbd630 100644 --- a/indra/llcommon/tests/wrapllerrs.h +++ b/indra/llcommon/tests/wrapllerrs.h @@ -40,7 +40,6 @@ #include #include #include -#include #include #include @@ -79,7 +78,7 @@ struct WrapLLErrs error = message; // Also throw an appropriate exception since calling code is likely to // assume that control won't continue beyond LL_ERRS. - BOOST_THROW_EXCEPTION(FatalException(message)); + LLTHROW(FatalException(message)); } std::string error; diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp index 0b7d4c717f..640eda7b01 100644 --- a/indra/llimage/llpngwrapper.cpp +++ b/indra/llimage/llpngwrapper.cpp @@ -32,7 +32,6 @@ #include "llpngwrapper.h" #include "llexception.h" -#include namespace { struct PngError: public LLException @@ -88,7 +87,7 @@ BOOL LLPngWrapper::isValidPng(U8* src) // occurs. We throw PngError and let our try/catch block clean up. void LLPngWrapper::errorHandler(png_structp png_ptr, png_const_charp msg) { - BOOST_THROW_EXCEPTION(PngError(msg)); + LLTHROW(PngError(msg)); } // Called by the libpng library when reading (decoding) the PNG file. We @@ -138,7 +137,7 @@ BOOL LLPngWrapper::readPng(U8* src, S32 dataSize, LLImageRaw* rawImage, ImageInf this, &errorHandler, NULL); if (mReadPngPtr == NULL) { - BOOST_THROW_EXCEPTION(PngError("Problem creating png read structure")); + LLTHROW(PngError("Problem creating png read structure")); } // Allocate/initialize the memory for image information. @@ -297,14 +296,14 @@ BOOL LLPngWrapper::writePng(const LLImageRaw* rawImage, U8* dest) if (mColorType == -1) { - BOOST_THROW_EXCEPTION(PngError("Unsupported image: unexpected number of channels")); + LLTHROW(PngError("Unsupported image: unexpected number of channels")); } mWritePngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, &errorHandler, NULL); if (!mWritePngPtr) { - BOOST_THROW_EXCEPTION(PngError("Problem creating png write structure")); + LLTHROW(PngError("Problem creating png write structure")); } mWriteInfoPtr = png_create_info_struct(mWritePngPtr); diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index fa58931407..8dd0b6d458 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -35,7 +35,6 @@ #include "kdu_block_coding.h" #include "llexception.h" -#include namespace { struct KDUError: public LLException @@ -181,7 +180,7 @@ void LLKDUMessageError::flush(bool end_of_message) { if (end_of_message) { - BOOST_THROW_EXCEPTION(KDUError("LLKDUMessageError::flush()")); + LLTHROW(KDUError("LLKDUMessageError::flush()")); } } diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp index 48ce258ba2..04b34a296c 100644 --- a/indra/llmessage/llhttpnode.cpp +++ b/indra/llmessage/llhttpnode.cpp @@ -32,7 +32,6 @@ #include "llstl.h" #include "llhttpconstants.h" #include "llexception.h" -#include const std::string CONTEXT_HEADERS("headers"); const std::string CONTEXT_PATH("path"); @@ -103,19 +102,19 @@ namespace { // virtual LLSD LLHTTPNode::simpleGet() const { - BOOST_THROW_EXCEPTION(NotImplemented()); + LLTHROW(NotImplemented()); } // virtual LLSD LLHTTPNode::simplePut(const LLSD& input) const { - BOOST_THROW_EXCEPTION(NotImplemented()); + LLTHROW(NotImplemented()); } // virtual LLSD LLHTTPNode::simplePost(const LLSD& input) const { - BOOST_THROW_EXCEPTION(NotImplemented()); + LLTHROW(NotImplemented()); } @@ -175,7 +174,7 @@ void LLHTTPNode::del(LLHTTPNode::ResponsePtr response, const LLSD& context) cons // virtual LLSD LLHTTPNode::simpleDel(const LLSD&) const { - BOOST_THROW_EXCEPTION(NotImplemented()); + LLTHROW(NotImplemented()); } // virtual diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h index 5dff56b44f..7c8f27bbd2 100644 --- a/indra/llmessage/tests/commtest.h +++ b/indra/llmessage/tests/commtest.h @@ -38,7 +38,6 @@ #include #include #include -#include struct CommtestError: public LLException { @@ -69,7 +68,7 @@ static int query_port(const std::string& var) const char* cport = getenv(var.c_str()); if (! cport) { - BOOST_THROW_EXCEPTION(CommtestError(STRINGIZE("missing environment variable" << var))); + LLTHROW(CommtestError(STRINGIZE("missing environment variable" << var))); } // This will throw, too, if the value of PORT isn't numeric. int port(boost::lexical_cast(cport)); diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h index 6aaecf9bac..5eb739393f 100644 --- a/indra/llmessage/tests/networkio.h +++ b/indra/llmessage/tests/networkio.h @@ -35,7 +35,6 @@ #include "llpumpio.h" #include "llhttpclient.h" #include "llexception.h" -#include /***************************************************************************** * NetworkIO @@ -53,7 +52,7 @@ public: ll_init_apr(); if (! gAPRPoolp) { - BOOST_THROW_EXCEPTION(LLException("Can't initialize APR")); + LLTHROW(LLException("Can't initialize APR")); } // Create IO Pump to use for HTTP Requests. @@ -61,7 +60,7 @@ public: LLHTTPClient::setPump(*mServicePump); if (ll_init_ares() == NULL || !gAres->isInitialized()) { - BOOST_THROW_EXCEPTION(LLException("Can't start DNS resolver")); + LLTHROW(LLException("Can't start DNS resolver")); } // You can interrupt pump() without waiting the full timeout duration diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index fdef556589..0eca63da46 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -132,7 +132,6 @@ #include #include #include -#include #if LL_WINDOWS # include // For _SH_DENYWR in processMarkerFiles @@ -5513,7 +5512,7 @@ void LLAppViewer::forceErrorInfiniteLoop() void LLAppViewer::forceErrorSoftwareException() { LL_WARNS() << "Forcing a deliberate exception" << LL_ENDL; - BOOST_THROW_EXCEPTION(LLException("User selected Force Software Exception")); + LLTHROW(LLException("User selected Force Software Exception")); } void LLAppViewer::forceErrorDriverCrash() diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp index 54f96b8872..90a5483dc9 100644 --- a/indra/newview/llcommandlineparser.cpp +++ b/indra/newview/llcommandlineparser.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #if _MSC_VER # pragma warning(pop) @@ -52,6 +51,7 @@ #include "llsdserialize.h" #include "llerror.h" #include "stringize.h" +#include "llexception.h" #include #include #include @@ -204,17 +204,17 @@ protected: { if(gPastLastOption) { - BOOST_THROW_EXCEPTION(LLCLPLastOption("Don't parse no more!")); + LLTHROW(LLCLPLastOption("Don't parse no more!")); } // Error checks. Needed? if (!value_store.empty() && !is_composing()) { - BOOST_THROW_EXCEPTION(LLCLPError("Non composing value with multiple occurences.")); + LLTHROW(LLCLPError("Non composing value with multiple occurences.")); } if (new_tokens.size() < min_tokens() || new_tokens.size() > max_tokens()) { - BOOST_THROW_EXCEPTION(LLCLPError("Illegal number of tokens specified.")); + LLTHROW(LLCLPError("Illegal number of tokens specified.")); } if(value_store.empty()) @@ -468,7 +468,7 @@ onevalue(const std::string& option, { // What does it mean when the user specifies a command-line switch // that requires a value, but omits the value? Complain. - BOOST_THROW_EXCEPTION(LLCLPError(STRINGIZE("No value specified for --" << option << "!"))); + LLTHROW(LLCLPError(STRINGIZE("No value specified for --" << option << "!"))); } else if (value.size() > 1) { @@ -486,10 +486,9 @@ void badvalue(const std::string& option, // If the user passes an unusable value for a command-line switch, it // seems like a really bad idea to just ignore it, even with a log // warning. - BOOST_THROW_EXCEPTION( - LLCLPError(STRINGIZE("Invalid value specified by command-line switch '" << option - << "' for variable '" << varname << "' of type " << type - << ": '" << value << "'"))); + LLTHROW(LLCLPError(STRINGIZE("Invalid value specified by command-line switch '" << option + << "' for variable '" << varname << "' of type " << type + << ": '" << value << "'"))); } template diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp index bcb9417820..933f7bb16e 100644 --- a/indra/newview/llsecapi.cpp +++ b/indra/newview/llsecapi.cpp @@ -29,7 +29,7 @@ #include "llviewerprecompiledheaders.h" #include "llsecapi.h" #include "llsechandler_basic.h" -#include +#include "llexception.h" #include #include #include @@ -70,7 +70,7 @@ void initializeSecHandler() } if (!exception_msg.empty()) // an exception was thrown. { - BOOST_THROW_EXCEPTION(LLProtectedDataException(exception_msg)); + LLTHROW(LLProtectedDataException(exception_msg)); } } diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 39ce64ad0e..183a625382 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -35,7 +35,7 @@ #include "llfile.h" #include "lldir.h" #include "llviewercontrol.h" -#include +#include "llexception.h" #include #include #include @@ -73,14 +73,14 @@ LLBasicCertificate::LLBasicCertificate(const std::string& pem_cert) if(pem_bio == NULL) { LL_WARNS("SECAPI") << "Could not allocate an openssl memory BIO." << LL_ENDL; - BOOST_THROW_EXCEPTION(LLInvalidCertificate(this)); + LLTHROW(LLInvalidCertificate(this)); } mCert = NULL; PEM_read_bio_X509(pem_bio, &mCert, 0, NULL); BIO_free(pem_bio); if (!mCert) { - BOOST_THROW_EXCEPTION(LLInvalidCertificate(this)); + LLTHROW(LLInvalidCertificate(this)); } } @@ -89,7 +89,7 @@ LLBasicCertificate::LLBasicCertificate(X509* pCert) { if (!pCert || !pCert->cert_info) { - BOOST_THROW_EXCEPTION(LLInvalidCertificate(this)); + LLTHROW(LLInvalidCertificate(this)); } mCert = X509_dup(pCert); } @@ -874,22 +874,22 @@ void _validateCert(int validation_policy, // check basic properties exist in the cert if(!current_cert_info.has(CERT_SUBJECT_NAME) || !current_cert_info.has(CERT_SUBJECT_NAME_STRING)) { - BOOST_THROW_EXCEPTION(LLCertException(cert, "Cert doesn't have a Subject Name")); + LLTHROW(LLCertException(cert, "Cert doesn't have a Subject Name")); } if(!current_cert_info.has(CERT_ISSUER_NAME_STRING)) { - BOOST_THROW_EXCEPTION(LLCertException(cert, "Cert doesn't have an Issuer Name")); + LLTHROW(LLCertException(cert, "Cert doesn't have an Issuer Name")); } // check basic properties exist in the cert if(!current_cert_info.has(CERT_VALID_FROM) || !current_cert_info.has(CERT_VALID_TO)) { - BOOST_THROW_EXCEPTION(LLCertException(cert, "Cert doesn't have an expiration period")); + LLTHROW(LLCertException(cert, "Cert doesn't have an expiration period")); } if (!current_cert_info.has(CERT_SHA1_DIGEST)) { - BOOST_THROW_EXCEPTION(LLCertException(cert, "No SHA1 digest")); + LLTHROW(LLCertException(cert, "No SHA1 digest")); } if (validation_policy & VALIDATION_POLICY_TIME) @@ -904,7 +904,7 @@ void _validateCert(int validation_policy, if((validation_date < current_cert_info[CERT_VALID_FROM].asDate()) || (validation_date > current_cert_info[CERT_VALID_TO].asDate())) { - BOOST_THROW_EXCEPTION(LLCertValidationExpirationException(cert, validation_date)); + LLTHROW(LLCertValidationExpirationException(cert, validation_date)); } } if (validation_policy & VALIDATION_POLICY_SSL_KU) @@ -915,14 +915,14 @@ void _validateCert(int validation_policy, !(_LLSDArrayIncludesValue(current_cert_info[CERT_KEY_USAGE], LLSD((std::string)CERT_KU_KEY_ENCIPHERMENT))))) { - BOOST_THROW_EXCEPTION(LLCertKeyUsageValidationException(cert)); + LLTHROW(LLCertKeyUsageValidationException(cert)); } // only validate EKU if the cert has it if(current_cert_info.has(CERT_EXTENDED_KEY_USAGE) && current_cert_info[CERT_EXTENDED_KEY_USAGE].isArray() && (!_LLSDArrayIncludesValue(current_cert_info[CERT_EXTENDED_KEY_USAGE], LLSD((std::string)CERT_EKU_SERVER_AUTH)))) { - BOOST_THROW_EXCEPTION(LLCertKeyUsageValidationException(cert)); + LLTHROW(LLCertKeyUsageValidationException(cert)); } } if (validation_policy & VALIDATION_POLICY_CA_KU) @@ -931,7 +931,7 @@ void _validateCert(int validation_policy, (!_LLSDArrayIncludesValue(current_cert_info[CERT_KEY_USAGE], (std::string)CERT_KU_CERT_SIGN))) { - BOOST_THROW_EXCEPTION(LLCertKeyUsageValidationException(cert)); + LLTHROW(LLCertKeyUsageValidationException(cert)); } } @@ -943,13 +943,13 @@ void _validateCert(int validation_policy, if(!current_cert_info[CERT_BASIC_CONSTRAINTS].has(CERT_BASIC_CONSTRAINTS_CA) || !current_cert_info[CERT_BASIC_CONSTRAINTS][CERT_BASIC_CONSTRAINTS_CA]) { - BOOST_THROW_EXCEPTION(LLCertBasicConstraintsValidationException(cert)); + LLTHROW(LLCertBasicConstraintsValidationException(cert)); } if (current_cert_info[CERT_BASIC_CONSTRAINTS].has(CERT_BASIC_CONSTRAINTS_PATHLEN) && ((current_cert_info[CERT_BASIC_CONSTRAINTS][CERT_BASIC_CONSTRAINTS_PATHLEN].asInteger() != 0) && (depth > current_cert_info[CERT_BASIC_CONSTRAINTS][CERT_BASIC_CONSTRAINTS_PATHLEN].asInteger()))) { - BOOST_THROW_EXCEPTION(LLCertBasicConstraintsValidationException(cert)); + LLTHROW(LLCertBasicConstraintsValidationException(cert)); } } } @@ -1019,7 +1019,7 @@ void LLBasicCertificateStore::validate(int validation_policy, if(cert_chain->size() < 1) { - BOOST_THROW_EXCEPTION(LLCertException(NULL, "No certs in chain")); + LLTHROW(LLCertException(NULL, "No certs in chain")); } iterator current_cert = cert_chain->begin(); LLSD current_cert_info; @@ -1034,11 +1034,11 @@ void LLBasicCertificateStore::validate(int validation_policy, (*current_cert)->getLLSD(current_cert_info); if(!validation_params.has(CERT_HOSTNAME)) { - BOOST_THROW_EXCEPTION(LLCertException((*current_cert), "No hostname passed in for validation")); + LLTHROW(LLCertException((*current_cert), "No hostname passed in for validation")); } if(!current_cert_info.has(CERT_SUBJECT_NAME) || !current_cert_info[CERT_SUBJECT_NAME].has(CERT_NAME_CN)) { - BOOST_THROW_EXCEPTION(LLInvalidCertificate((*current_cert))); + LLTHROW(LLInvalidCertificate((*current_cert))); } LL_DEBUGS("SECAPI") << "Validating the hostname " << validation_params[CERT_HOSTNAME].asString() << @@ -1055,7 +1055,7 @@ void LLBasicCertificateStore::validate(int validation_policy, X509* cert_x509 = (*current_cert)->getOpenSSLX509(); if(!cert_x509) { - BOOST_THROW_EXCEPTION(LLInvalidCertificate((*current_cert))); + LLTHROW(LLInvalidCertificate((*current_cert))); } std::string sha1_hash((const char *)cert_x509->sha1_hash, SHA_DIGEST_LENGTH); X509_free( cert_x509 ); @@ -1076,7 +1076,7 @@ void LLBasicCertificateStore::validate(int validation_policy, if((validation_date < cache_entry->second.first) || (validation_date > cache_entry->second.second)) { - BOOST_THROW_EXCEPTION(LLCertValidationExpirationException((*current_cert), validation_date)); + LLTHROW(LLCertValidationExpirationException((*current_cert), validation_date)); } } // successfully found in cache @@ -1108,7 +1108,7 @@ void LLBasicCertificateStore::validate(int validation_policy, if(!_verify_signature((*current_cert), previous_cert)) { - BOOST_THROW_EXCEPTION(LLCertValidationInvalidSignatureException(previous_cert)); + LLTHROW(LLCertValidationInvalidSignatureException(previous_cert)); } } _validateCert(local_validation_policy, @@ -1157,7 +1157,7 @@ void LLBasicCertificateStore::validate(int validation_policy, if(!_verify_signature((*found_store_cert), (*current_cert))) { - BOOST_THROW_EXCEPTION(LLCertValidationInvalidSignatureException(*current_cert)); + LLTHROW(LLCertValidationInvalidSignatureException(*current_cert)); } // successfully validated. mTrustedCertCache[sha1_hash] = std::pair(from_time, to_time); @@ -1174,7 +1174,7 @@ void LLBasicCertificateStore::validate(int validation_policy, if (validation_policy & VALIDATION_POLICY_TRUSTED) { // we reached the end without finding a trusted cert. - BOOST_THROW_EXCEPTION(LLCertValidationTrustException((*cert_chain)[cert_chain->size()-1])); + LLTHROW(LLCertValidationTrustException((*cert_chain)[cert_chain->size()-1])); } mTrustedCertCache[sha1_hash] = std::pair(from_time, to_time); @@ -1262,7 +1262,7 @@ void LLSecAPIBasicHandler::_readProtectedData() protected_data_stream.read((char *)salt, STORE_SALT_SIZE); if (protected_data_stream.gcount() < STORE_SALT_SIZE) { - BOOST_THROW_EXCEPTION(LLProtectedDataException("Config file too short.")); + LLTHROW(LLProtectedDataException("Config file too short.")); } cipher.decrypt(salt, STORE_SALT_SIZE); @@ -1302,7 +1302,7 @@ void LLSecAPIBasicHandler::_readProtectedData() if (parser->parse(parse_stream, mProtectedDataMap, LLSDSerialize::SIZE_UNLIMITED) == LLSDParser::PARSE_FAILURE) { - BOOST_THROW_EXCEPTION(LLProtectedDataException("Config file cannot be decrypted.")); + LLTHROW(LLProtectedDataException("Config file cannot be decrypted.")); } } } @@ -1373,7 +1373,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() // Decided throwing an exception here was overkill until we figure out why this happens - //BOOST_THROW_EXCEPTION(LLProtectedDataException("Error writing Protected Data Store")); + //LLTHROW(LLProtectedDataException("Error writing Protected Data Store")); } try @@ -1388,7 +1388,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() // Decided throwing an exception here was overkill until we figure out why this happens - //BOOST_THROW_EXCEPTION(LLProtectedDataException("Could not overwrite protected data store")); + //LLTHROW(LLProtectedDataException("Could not overwrite protected data store")); } } catch (...) @@ -1402,7 +1402,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() //crash in LLSecAPIBasicHandler::_writeProtectedData() // Decided throwing an exception here was overkill until we figure out why this happens - //BOOST_THROW_EXCEPTION(LLProtectedDataException("Error writing Protected Data Store")); + //LLTHROW(LLProtectedDataException("Error writing Protected Data Store")); } } diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp index cd4b108c1a..04e0395c50 100644 --- a/indra/viewer_components/updater/llupdatedownloader.cpp +++ b/indra/viewer_components/updater/llupdatedownloader.cpp @@ -30,7 +30,6 @@ #include "llexception.h" #include #include -#include #include #include "lldir.h" #include "llevents.h" @@ -468,7 +467,7 @@ void LLUpdateDownloader::Implementation::initializeCurlGet(std::string const & u if(!mCurl) { - BOOST_THROW_EXCEPTION(DownloadError("failed to initialize curl")); + LLTHROW(DownloadError("failed to initialize curl")); } throwOnCurlError(curl_easy_setopt(mCurl.get(), CURLOPT_NOSIGNAL, true)); throwOnCurlError(curl_easy_setopt(mCurl.get(), CURLOPT_FOLLOWLOCATION, true)); @@ -509,7 +508,7 @@ void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte) mHeaderList = curl_slist_append(mHeaderList, rangeHeaderFormat.str().c_str()); if(mHeaderList == 0) { - BOOST_THROW_EXCEPTION(DownloadError("cannot add Range header")); + LLTHROW(DownloadError("cannot add Range header")); } throwOnCurlError(curl_easy_setopt(mCurl.get(), CURLOPT_HTTPHEADER, mHeaderList)); @@ -525,7 +524,7 @@ void LLUpdateDownloader::Implementation::startDownloading(LLURI const & uri, std mDownloadData["hash"] = hash; mDownloadData["current_version"] = ll_get_version(); LLSD path = uri.pathArray(); - if(path.size() == 0) BOOST_THROW_EXCEPTION(DownloadError("no file path")); + if(path.size() == 0) LLTHROW(DownloadError("no file path")); std::string fileName = path[path.size() - 1].asString(); std::string filePath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, fileName); mDownloadData["path"] = filePath; @@ -548,9 +547,9 @@ void LLUpdateDownloader::Implementation::throwOnCurlError(CURLcode code) if(code != CURLE_OK) { const char * errorString = curl_easy_strerror(code); if(errorString != 0) { - BOOST_THROW_EXCEPTION(DownloadError(curl_easy_strerror(code))); + LLTHROW(DownloadError(curl_easy_strerror(code))); } else { - BOOST_THROW_EXCEPTION(DownloadError("unknown curl error")); + LLTHROW(DownloadError("unknown curl error")); } } else { ; // No op. diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp index 9f9a08f590..1c7629da23 100644 --- a/indra/viewer_components/updater/llupdateinstaller.cpp +++ b/indra/viewer_components/updater/llupdateinstaller.cpp @@ -36,7 +36,6 @@ #pragma warning(disable: 4702) // disable 'unreachable code' so we can use lexical_cast (really!). #endif #include -#include namespace { struct RelocateError: public LLException @@ -49,7 +48,7 @@ namespace { std::string scriptFile = gDirUtilp->getBaseFileName(path); std::string newPath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, scriptFile); apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, gAPRPoolp); - if(status != APR_SUCCESS) BOOST_THROW_EXCEPTION(RelocateError()); + if(status != APR_SUCCESS) LLTHROW(RelocateError()); return newPath; } diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 0bdd1ede43..1665e41e70 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -32,10 +32,10 @@ #include "lltimer.h" #include "llupdatechecker.h" #include "llupdateinstaller.h" +#include "llexception.h" #include #include -#include #include "lldir.h" #include "llsdserialize.h" #include "llfile.h" @@ -191,9 +191,8 @@ void LLUpdaterServiceImpl::initialize(const std::string& channel, { if(mIsChecking || mIsDownloading) { - BOOST_THROW_EXCEPTION( - LLUpdaterService::UsageError("LLUpdaterService::initialize call " - "while updater is running.")); + LLTHROW(LLUpdaterService::UsageError("LLUpdaterService::initialize call " + "while updater is running.")); } mChannel = channel; @@ -224,9 +223,8 @@ void LLUpdaterServiceImpl::startChecking(bool install_if_ready) { if(mChannel.empty() || mVersion.empty()) { - BOOST_THROW_EXCEPTION( - LLUpdaterService::UsageError("Set params before call to " - "LLUpdaterService::startCheck().")); + LLTHROW(LLUpdaterService::UsageError("Set params before call to " + "LLUpdaterService::startCheck().")); } mIsChecking = true; From db4f13e7bcfc7ef61f750152494f1e52ad5a9080 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 11:48:33 -0400 Subject: [PATCH 224/278] MAINT-5011: Clean up indentation from merge of viewer-release. --- indra/llkdu/llimagej2ckdu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index fe79079db3..e6ed6b2202 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -176,7 +176,7 @@ struct LLKDUMessageError : public LLKDUMessage // exception if we want to recover from a KDU error. if (end_of_message) { - LLTHROW(KDUError("LLKDUMessageError::flush()")); + LLTHROW(KDUError("LLKDUMessageError::flush()")); } } }; From 993f54f6e91d78a9c2e1389ad878d6bd46e9be5b Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 15:40:03 -0400 Subject: [PATCH 225/278] MAINT-5011: Try to enrich catch (...) logging throughout viewer. Turns out we have a surprising number of catch (...) clauses in the viewer code base. If all we currently do is LL_ERRS() << "unknown exception" << LL_ENDL; then call CRASH_ON_UNHANDLED_EXCEPTION() instead. If what we do is LL_WARNS() << "unknown exception" << LL_ENDL; then call LOG_UNHANDLED_EXCEPTION() instead. Since many places need LOG_UNHANDLED_EXCEPTION() and nobody catches LLContinueError yet, eliminate LLContinueError& parameter from LOG_UNHANDLED_EXCEPTION(). This permits us to use the same log message as CRASH_ON_UNHANDLED_EXCEPTION(), just with a different severity level. Where a catch (...) clause actually provides contextual information, or makes an error string, add boost::current_exception_diagnostic_information() to try to figure out actual exception class and message. --- indra/llcommon/llexception.cpp | 31 ++++++++++++++--------- indra/llcommon/llexception.h | 9 ++++--- indra/llkdu/llimagej2ckdu.cpp | 13 +++++++--- indra/llmessage/llavatarnamecache.cpp | 3 ++- indra/llmessage/llcoproceduremanager.cpp | 4 ++- indra/newview/llaccountingcostmanager.cpp | 3 ++- indra/newview/llappcorehttp.cpp | 2 ++ indra/newview/llsecapi.cpp | 1 + indra/newview/llsechandler_basic.cpp | 10 +++++--- indra/viewer_components/login/lllogin.cpp | 3 ++- 10 files changed, 52 insertions(+), 27 deletions(-) diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp index f48509b2aa..9a6dfee3f1 100644 --- a/indra/llcommon/llexception.cpp +++ b/indra/llcommon/llexception.cpp @@ -21,21 +21,28 @@ // other Linden headers #include "llerror.h" -void crash_on_unhandled_exception_(const char* file, int line, const char* pretty_function) +namespace { +// used by crash_on_unhandled_exception_() and log_unhandled_exception_() +void log_unhandled_exception_(LLError::ELevel level, + const char* file, int line, const char* pretty_function) { - // LL_ERRS() terminates, but also propagates message into crash dump. - LL_ERRS() << file << "(" << line << "): Unhandled exception caught in " << pretty_function - << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; + // log same message but allow caller-specified severity level + // lllog() is the macro underlying LL_ERRS(), LL_WARNS() et al. + lllog(level, false) << file << "(" << line << "): Unhandled exception caught in " + << pretty_function + << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; +} } -void log_unhandled_exception_(const char* file, int line, const char* pretty_function, - const LLContinueError& e) +void crash_on_unhandled_exception_(const char* file, int line, const char* pretty_function) +{ + // LL_ERRS() terminates and propagates message into crash dump. + log_unhandled_exception_(LLError::LEVEL_ERROR, file, line, pretty_function); +} + +void log_unhandled_exception_(const char* file, int line, const char* pretty_function) { // Use LL_WARNS() because we seriously do not expect this to happen - // routinely, but we DO expect to return from this function. Deriving your - // exception from LLContinueError implies that such an exception should - // NOT be fatal to the viewer, only to its current task. - LL_WARNS() << file << "(" << line << "): Unhandled " << typeid(e).name() - << " exception caught in " << pretty_function - << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; + // routinely, but we DO expect to return from this function. + log_unhandled_exception_(LLError::LEVEL_WARN, file, line, pretty_function); } diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h index e9e25ae689..2a0f5e79eb 100644 --- a/indra/llcommon/llexception.h +++ b/indra/llcommon/llexception.h @@ -74,9 +74,10 @@ struct LLContinueError: public LLException crash_on_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) void crash_on_unhandled_exception_(const char*, int, const char*); -/// Call this from a catch (const LLContinueError&) clause -#define LOG_UNHANDLED_EXCEPTION(EXC) \ - log_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__, EXC) -void log_unhandled_exception_(const char*, int, const char*, const LLContinueError&); +/// Call this from a catch (const LLContinueError&) clause, or from a catch +/// (...) clause in which you do NOT want the viewer to crash. +#define LOG_UNHANDLED_EXCEPTION() \ + log_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) +void log_unhandled_exception_(const char*, int, const char*); #endif /* ! defined(LL_LLEXCEPTION_H) */ diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index e6ed6b2202..341c47a268 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -35,6 +35,7 @@ #include "kdu_block_coding.h" #include "llexception.h" +#include namespace { struct KDUError: public LLException @@ -400,7 +401,8 @@ bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco } catch (...) { - base.setLastError("Unknown J2C error"); + base.setLastError("Unknown J2C error: " + + boost::current_exception_diagnostic_information()); return false; } @@ -498,7 +500,8 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco } catch (...) { - base.setLastError( "Unknown J2C error" ); + base.setLastError("Unknown J2C error: " + + boost::current_exception_diagnostic_information()); base.decodeFailed(); cleanupCodeStream(); return true; // done @@ -689,7 +692,8 @@ bool LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co } catch( ... ) { - base.setLastError( "Unknown J2C error" ); + base.setLastError("Unknown J2C error: " + + boost::current_exception_diagnostic_information()); return false; } @@ -713,7 +717,8 @@ bool LLImageJ2CKDU::getMetadata(LLImageJ2C &base) } catch (...) { - base.setLastError( "Unknown J2C error" ); + base.setLastError("Unknown J2C error: " + + boost::current_exception_diagnostic_information()); return false; } } diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 1ca5f58ae2..2dbbc80741 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -43,6 +43,7 @@ #include "llcoros.h" #include "lleventcoro.h" #include "llcorehttputil.h" +#include "llexception.h" #include #include @@ -237,7 +238,7 @@ void LLAvatarNameCache::requestAvatarNameCache_(std::string url, std::vector +#include //========================================================================= // Map of pool sizes for known pools @@ -395,7 +396,8 @@ void LLCoprocedurePool::coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdap } catch (...) { - LL_WARNS() << "A non std::exception was thrown from " << coproc->mName << " with id=" << coproc->mId << "." << " in pool \"" << mPoolName << "\"" << LL_ENDL; + LL_WARNS() << "A non std::exception was thrown from " << coproc->mName << " with id=" << coproc->mId << "." << " in pool \"" << mPoolName << "\"\n" + << boost::current_exception_diagnostic_information() << LL_ENDL; } LL_INFOS() << "Finished coprocedure(" << coproc->mName << ")" << " in pool \"" << mPoolName << "\"" << LL_ENDL; diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp index 92a5413adb..a4a54cf8fb 100644 --- a/indra/newview/llaccountingcostmanager.cpp +++ b/indra/newview/llaccountingcostmanager.cpp @@ -31,6 +31,7 @@ #include "llcoros.h" #include "lleventcoro.h" #include "llcorehttputil.h" +#include "llexception.h" #include #include @@ -160,7 +161,7 @@ void LLAccountingCostManager::accountingCostCoro(std::string url, } catch (...) { - LL_WARNS() << "Caught unknown exception." << LL_ENDL; + LOG_UNHANDLED_EXCEPTION(); } mPendingObjectQuota.clear(); diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp index dbcae57de7..7ec041c02e 100644 --- a/indra/newview/llappcorehttp.cpp +++ b/indra/newview/llappcorehttp.cpp @@ -30,6 +30,7 @@ #include "llappviewer.h" #include "llviewercontrol.h" +#include "llexception.h" #include #include @@ -551,6 +552,7 @@ LLCore::HttpStatus LLAppCoreHttp::sslVerify(const std::string &url, } catch (...) { + LOG_UNHANDLED_EXCEPTION(); // any other odd error, we just handle as a connect error. result = LLCore::HttpStatus(LLCore::HttpStatus::EXT_CURL_EASY, CURLE_SSL_CONNECT_ERROR); } diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp index 933f7bb16e..6ca1e63417 100644 --- a/indra/newview/llsecapi.cpp +++ b/indra/newview/llsecapi.cpp @@ -121,6 +121,7 @@ LLSD LLCredential::getLoginParams() } catch (...) { + LOG_UNHANDLED_EXCEPTION(); // we could have corrupt data, so simply return a null login param if so LL_WARNS("AppInit") << "Invalid credential" << LL_ENDL; } diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 183a625382..54396cb9a4 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -38,6 +38,7 @@ #include "llexception.h" #include #include +#include #include #include #include @@ -618,7 +619,8 @@ void LLBasicCertificateStore::load_from_file(const std::string& filename) } catch (...) { - LL_WARNS("SECAPI") << "Failure creating certificate from the certificate store file." << LL_ENDL; + LL_WARNS("SECAPI") << "Failure creating certificate from the certificate store file: " + << boost::current_exception_diagnostic_information() << LL_ENDL; } X509_free(cert_x509); cert_x509 = NULL; @@ -1365,7 +1367,8 @@ void LLSecAPIBasicHandler::_writeProtectedData() } catch (...) { - LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL; + LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store): " + << boost::current_exception_diagnostic_information() << LL_ENDL; // it's good practice to clean up any secure information on error // (even though this file isn't really secure. Perhaps in the future // it may be, however. @@ -1394,7 +1397,8 @@ void LLSecAPIBasicHandler::_writeProtectedData() catch (...) { LL_WARNS() << "LLProtectedDataException(Error renaming '" << tmp_filename - << "' to '" << mProtectedDataFilename << "')" << LL_ENDL; + << "' to '" << mProtectedDataFilename << "'): " + << boost::current_exception_diagnostic_information() << LL_ENDL; // it's good practice to clean up any secure information on error // (even though this file isn't really secure. Perhaps in the future // it may be, however. diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 53d4acc9e0..14503c9c5a 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -42,6 +42,7 @@ #include "llevents.h" #include "lleventfilter.h" #include "lleventcoro.h" +#include "llexception.h" //********************* // LLLogin @@ -269,7 +270,7 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) sendProgressEvent("offline", "fail.login", error_response); } catch (...) { - LL_ERRS() << "login exception caught" << LL_ENDL; + CRASH_ON_UNHANDLED_EXCEPTION(); } } From 83eb9600631fcb98275b8d3db736f692fd5e6e1c Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 15:47:08 -0400 Subject: [PATCH 226/278] MAINT-5011: Derive image-load exceptions from LLContinueError. Failure to load an image shouldn't crash the whole viewer. --- indra/llimage/llpngwrapper.cpp | 5 +++-- indra/llkdu/llimagej2ckdu.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp index 640eda7b01..da289ea889 100644 --- a/indra/llimage/llpngwrapper.cpp +++ b/indra/llimage/llpngwrapper.cpp @@ -34,9 +34,10 @@ #include "llexception.h" namespace { -struct PngError: public LLException +// Failure to load an image shouldn't crash the whole viewer. +struct PngError: public LLContinueError { - PngError(png_const_charp msg): LLException(msg) {} + PngError(png_const_charp msg): LLContinueError(msg) {} }; } // anonymous namespace diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 341c47a268..4c2eac9eea 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -38,9 +38,10 @@ #include namespace { -struct KDUError: public LLException +// Failure to load an image shouldn't crash the whole viewer. +struct KDUError: public LLContinueError { - KDUError(const std::string& msg): LLException(msg) {} + KDUError(const std::string& msg): LLContinueError(msg) {} }; } // anonymous namespace From 0eac1f41f68bd2cd3b7e73db9eb96c690507b448 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 17 Aug 2016 16:42:10 -0400 Subject: [PATCH 227/278] MAINT-5011: Catch kdu_exception (aka int) in case it leaks out. KDU internally throws kdu_exception, which is a typedef for int. It's possible that such an exception might leak out. Our usual strategy for unknown exceptions is to catch (...) and let boost::current_exception_diagnostic_information() handle them. However, for int (or a class not derived from std::exception), that function will only shrug and report no information available. Besides, we want to format kdu_exception specially anyway. First, the KDU #defines are in hex, so we should report the value in hex. But on inspection, certain of those hex values are actually multibyte ASCII literals in disguise -- so also report the byte string value. --- indra/llkdu/llimagej2ckdu.cpp | 76 ++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index 4c2eac9eea..9e1dfc7213 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -1,4 +1,4 @@ - /** +/** * @file llimagej2ckdu.cpp * @brief This is an implementation of JPEG2000 encode/decode using Kakadu * @@ -36,6 +36,8 @@ #include "llexception.h" #include +#include +#include namespace { // Failure to load an image shouldn't crash the whole viewer. @@ -43,6 +45,40 @@ struct KDUError: public LLContinueError { KDUError(const std::string& msg): LLContinueError(msg) {} }; + +// KDU defines int error codes as hex values, so we should log them in hex +// so we can grep KDU headers for the hex. However those hex values +// generally "happen" to encode big-endian multibyte character sequences, +// e.g. KDU_ERROR_EXCEPTION is 0x6b647545: 'kduE' +// But beware because KDU_NULL_EXCEPTION is simply 0 -- which doesn't +// preclude somebody from throwing it. +std::string report_kdu_exception(kdu_exception mb) +{ + std::ostringstream out; + // always report mb in hex + out << "kdu_exception " << std::hex << mb; + + // Also display as many chars as are encoded in the kdu_exception + // value. Make a char array; reserve 1 extra byte for nul terminator. + char bytes[sizeof(kdu_exception) + 1]; + // Back up through 'bytes' + char *bptr = bytes + sizeof(bytes); + *(--bptr) = '\0'; + while (mb) + { + // store low-order byte of mb in next-left char + *(--bptr) = char(mb & 0xFF); + // then shift mb right by one byte + mb >>= 8; + } + // did that produce any characters? + if (*bptr) + { + out << " (" << bptr << ')'; + } + + return out.str(); +} } // anonymous namespace class kdc_flow_control { @@ -400,6 +436,15 @@ bool LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco base.setLastError(msg.what()); return false; } + catch (kdu_exception kdu_value) + { + // KDU internally throws kdu_exception. It's possible that such an + // exception might leak out into our code. Catch kdu_exception + // specially because boost::current_exception_diagnostic_information() + // could do nothing with it. + base.setLastError(report_kdu_exception(kdu_value)); + return false; + } catch (...) { base.setLastError("Unknown J2C error: " + @@ -499,6 +544,17 @@ bool LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco cleanupCodeStream(); return true; // done } + catch (kdu_exception kdu_value) + { + // KDU internally throws kdu_exception. It's possible that such an + // exception might leak out into our code. Catch kdu_exception + // specially because boost::current_exception_diagnostic_information() + // could do nothing with it. + base.setLastError(report_kdu_exception(kdu_value)); + base.decodeFailed(); + cleanupCodeStream(); + return true; // done + } catch (...) { base.setLastError("Unknown J2C error: " + @@ -691,6 +747,15 @@ bool LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co base.setLastError(msg.what()); return false; } + catch (kdu_exception kdu_value) + { + // KDU internally throws kdu_exception. It's possible that such an + // exception might leak out into our code. Catch kdu_exception + // specially because boost::current_exception_diagnostic_information() + // could do nothing with it. + base.setLastError(report_kdu_exception(kdu_value)); + return false; + } catch( ... ) { base.setLastError("Unknown J2C error: " + @@ -716,6 +781,15 @@ bool LLImageJ2CKDU::getMetadata(LLImageJ2C &base) base.setLastError(msg.what()); return false; } + catch (kdu_exception kdu_value) + { + // KDU internally throws kdu_exception. It's possible that such an + // exception might leak out into our code. Catch kdu_exception + // specially because boost::current_exception_diagnostic_information() + // could do nothing with it. + base.setLastError(report_kdu_exception(kdu_value)); + return false; + } catch (...) { base.setLastError("Unknown J2C error: " + From c7bf8af6378a54c3d03e77b161b7ba3b36186576 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 18 Aug 2016 11:06:51 -0400 Subject: [PATCH 228/278] MAINT-5011: Use BOOST_CURRENT_FUNCTION instead of __PRETTY_FUNCTION__ since Visual Studio doesn't know __PRETTY_FUNCTION__, and Boost already has a portable macro to Do The Right Thing. --- indra/llcommon/llexception.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h index 2a0f5e79eb..384b2271fb 100644 --- a/indra/llcommon/llexception.h +++ b/indra/llcommon/llexception.h @@ -15,6 +15,7 @@ #include #include #include +#include // "Found someone who can comfort me // But there are always exceptions..." @@ -71,13 +72,13 @@ struct LLContinueError: public LLException /// Call this macro from a catch (...) clause #define CRASH_ON_UNHANDLED_EXCEPTION() \ - crash_on_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) + crash_on_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) void crash_on_unhandled_exception_(const char*, int, const char*); /// Call this from a catch (const LLContinueError&) clause, or from a catch /// (...) clause in which you do NOT want the viewer to crash. #define LOG_UNHANDLED_EXCEPTION() \ - log_unhandled_exception_(__FILE__, __LINE__, __PRETTY_FUNCTION__) + log_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) void log_unhandled_exception_(const char*, int, const char*); #endif /* ! defined(LL_LLEXCEPTION_H) */ From 4d10172d8b2c72fa809e322a3b4ff326b19ff340 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 18 Aug 2016 17:33:44 -0400 Subject: [PATCH 229/278] MAINT-5011: Catch unhandled exceptions in LLCoros coroutines. Wrap coroutine call in try/catch in top-level coroutine wrapper function LLCoros::toplevel(). Distinguish exception classes derived from LLContinueError (log and continue) from all others (crash with LL_ERRS). Enhance CRASH_ON_UNHANDLED_EXCEPTIONS() and LOG_UNHANDLED_EXCEPTIONS() macros to accept a context string to supplement the log message. This lets us replace many places that called boost::current_exception_diagnostic_information() with LOG_UNHANDLED_EXCEPTIONS() instead, since the explicit calls were mostly to log supplemental information. Provide supplemental information (coroutine name, function parameters) for some of the previous LOG_UNHANDLED_EXCEPTIONS() calls. This information duplicates LL_DEBUGS() information at the top of these functions, but in a typical log file we wouldn't see the LL_DEBUGS() message. Eliminate a few catch (std::exception e) clauses: the information we get from boost::current_exception_diagnostic_information() in a catch (...) clause makes it unnecessary to distinguish. In a few cases, add a final 'throw;' to a catch (...) clause: having logged the local context info, propagate the exception to be caught by higher-level try/catch. In a couple places, couldn't resist reconciling indentation within a particular function: tabs where the rest of the function uses tabs, spaces where the rest of the function uses spaces. In LLLogin::Impl::loginCoro(), eliminate some confusing comments about an array of rewritten URIs that date back to a long-deleted implementation. --- indra/llcommon/llcoros.cpp | 14 +++- indra/llcommon/llexception.cpp | 21 +++-- indra/llcommon/llexception.h | 13 +-- indra/llmessage/llavatarnamecache.cpp | 10 +-- indra/llmessage/llcoproceduremanager.cpp | 16 ++-- indra/newview/llaccountingcostmanager.cpp | 9 +-- indra/newview/llappcorehttp.cpp | 3 +- indra/newview/llsecapi.cpp | 9 ++- indra/newview/llsechandler_basic.cpp | 43 +++++----- indra/viewer_components/login/lllogin.cpp | 99 +++++++++++------------ 10 files changed, 124 insertions(+), 113 deletions(-) diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index d16bf0160b..4ee8e6d796 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -38,6 +38,7 @@ #include "llevents.h" #include "llerror.h" #include "stringize.h" +#include "llexception.h" // do nothing, when we need nothing done void LLCoros::no_cleanup(CoroData*) {} @@ -235,7 +236,18 @@ void LLCoros::toplevel(coro::self& self, CoroData* data, const callable_t& calla // capture the 'self' param in CoroData data->mSelf = &self; // run the code the caller actually wants in the coroutine - callable(); + try + { + callable(); + } + catch (const LLContinueError& e) + { + LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << data->mName)); + } + catch (...) + { + CRASH_ON_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << data->mName)); + } // This cleanup isn't perfectly symmetrical with the way we initially set // data->mPrev, but this is our last chance to reset mCurrentCoro. sCurrentCoro.reset(data->mPrev); diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp index 9a6dfee3f1..791b115a8c 100644 --- a/indra/llcommon/llexception.cpp +++ b/indra/llcommon/llexception.cpp @@ -24,25 +24,32 @@ namespace { // used by crash_on_unhandled_exception_() and log_unhandled_exception_() void log_unhandled_exception_(LLError::ELevel level, - const char* file, int line, const char* pretty_function) + const char* file, int line, const char* pretty_function, + const std::string& context) { // log same message but allow caller-specified severity level // lllog() is the macro underlying LL_ERRS(), LL_WARNS() et al. lllog(level, false) << file << "(" << line << "): Unhandled exception caught in " - << pretty_function - << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; + << pretty_function; + if (! context.empty()) + { + LL_CONT << ": " << context; + } + LL_CONT << ":\n" << boost::current_exception_diagnostic_information() << LL_ENDL; } } -void crash_on_unhandled_exception_(const char* file, int line, const char* pretty_function) +void crash_on_unhandled_exception_(const char* file, int line, const char* pretty_function, + const std::string& context) { // LL_ERRS() terminates and propagates message into crash dump. - log_unhandled_exception_(LLError::LEVEL_ERROR, file, line, pretty_function); + log_unhandled_exception_(LLError::LEVEL_ERROR, file, line, pretty_function, context); } -void log_unhandled_exception_(const char* file, int line, const char* pretty_function) +void log_unhandled_exception_(const char* file, int line, const char* pretty_function, + const std::string& context) { // Use LL_WARNS() because we seriously do not expect this to happen // routinely, but we DO expect to return from this function. - log_unhandled_exception_(LLError::LEVEL_WARN, file, line, pretty_function); + log_unhandled_exception_(LLError::LEVEL_WARN, file, line, pretty_function, context); } diff --git a/indra/llcommon/llexception.h b/indra/llcommon/llexception.h index 384b2271fb..dfcb7c192f 100644 --- a/indra/llcommon/llexception.h +++ b/indra/llcommon/llexception.h @@ -31,6 +31,7 @@ * boost::current_exception_diagnostic_information() is quite wonderful: if * all we need to do with an exception is log it, in most places we should * catch (...) and log boost::current_exception_diagnostic_information(). + * See CRASH_ON_UNHANDLED_EXCEPTION() and LOG_UNHANDLED_EXCEPTION() below. * * There may be circumstances in which it would be valuable to distinguish an * exception explicitly thrown by viewer code from an exception thrown by @@ -71,14 +72,14 @@ struct LLContinueError: public LLException #define LLTHROW(x) BOOST_THROW_EXCEPTION(x) /// Call this macro from a catch (...) clause -#define CRASH_ON_UNHANDLED_EXCEPTION() \ - crash_on_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) -void crash_on_unhandled_exception_(const char*, int, const char*); +#define CRASH_ON_UNHANDLED_EXCEPTION(CONTEXT) \ + crash_on_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, CONTEXT) +void crash_on_unhandled_exception_(const char*, int, const char*, const std::string&); /// Call this from a catch (const LLContinueError&) clause, or from a catch /// (...) clause in which you do NOT want the viewer to crash. -#define LOG_UNHANDLED_EXCEPTION() \ - log_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) -void log_unhandled_exception_(const char*, int, const char*); +#define LOG_UNHANDLED_EXCEPTION(CONTEXT) \ + log_unhandled_exception_(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, CONTEXT) +void log_unhandled_exception_(const char*, int, const char*, const std::string&); #endif /* ! defined(LL_LLEXCEPTION_H) */ diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 2dbbc80741..004db546b7 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -44,6 +44,7 @@ #include "lleventcoro.h" #include "llcorehttputil.h" #include "llexception.h" +#include "stringize.h" #include #include @@ -232,13 +233,12 @@ void LLAvatarNameCache::requestAvatarNameCache_(std::string url, std::vector -#include //========================================================================= // Map of pool sizes for known pools @@ -389,15 +390,14 @@ void LLCoprocedurePool::coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdap { coproc->mProc(httpAdapter, coproc->mId); } - catch (std::exception &e) - { - LL_WARNS() << "Coprocedure(" << coproc->mName << ") id=" << coproc->mId.asString() << - " threw an exception! Message=\"" << e.what() << "\"" << LL_ENDL; - } catch (...) { - LL_WARNS() << "A non std::exception was thrown from " << coproc->mName << " with id=" << coproc->mId << "." << " in pool \"" << mPoolName << "\"\n" - << boost::current_exception_diagnostic_information() << LL_ENDL; + LOG_UNHANDLED_EXCEPTION(STRINGIZE("Coprocedure('" << coproc->mName + << "', id=" << coproc->mId.asString() + << ") in pool '" << mPoolName << "'")); + // must NOT omit this or we deplete the pool + mActiveCoprocs.erase(itActive); + throw; } LL_INFOS() << "Finished coprocedure(" << coproc->mName << ")" << " in pool \"" << mPoolName << "\"" << LL_ENDL; diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp index a4a54cf8fb..1dddf52961 100644 --- a/indra/newview/llaccountingcostmanager.cpp +++ b/indra/newview/llaccountingcostmanager.cpp @@ -32,6 +32,7 @@ #include "lleventcoro.h" #include "llcorehttputil.h" #include "llexception.h" +#include "stringize.h" #include #include @@ -155,13 +156,11 @@ void LLAccountingCostManager::accountingCostCoro(std::string url, } while (false); } - catch (std::exception e) - { - LL_WARNS() << "Caught exception '" << e.what() << "'" << LL_ENDL; - } catch (...) { - LOG_UNHANDLED_EXCEPTION(); + LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << LLCoros::instance().getName() + << "('" << url << "')")); + throw; } mPendingObjectQuota.clear(); diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp index 7ec041c02e..c1f898284a 100644 --- a/indra/newview/llappcorehttp.cpp +++ b/indra/newview/llappcorehttp.cpp @@ -31,6 +31,7 @@ #include "llappviewer.h" #include "llviewercontrol.h" #include "llexception.h" +#include "stringize.h" #include #include @@ -552,7 +553,7 @@ LLCore::HttpStatus LLAppCoreHttp::sslVerify(const std::string &url, } catch (...) { - LOG_UNHANDLED_EXCEPTION(); + LOG_UNHANDLED_EXCEPTION(STRINGIZE("('" << url << "')")); // any other odd error, we just handle as a connect error. result = LLCore::HttpStatus(LLCore::HttpStatus::EXT_CURL_EASY, CURLE_SSL_CONNECT_ERROR); } diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp index 6ca1e63417..72d7cf1e45 100644 --- a/indra/newview/llsecapi.cpp +++ b/indra/newview/llsecapi.cpp @@ -30,6 +30,7 @@ #include "llsecapi.h" #include "llsechandler_basic.h" #include "llexception.h" +#include "stringize.h" #include #include #include @@ -102,6 +103,7 @@ std::ostream& operator <<(std::ostream& s, const LLCredential& cred) LLSD LLCredential::getLoginParams() { LLSD result = LLSD::emptyMap(); + std::string username; try { if (mIdentifier["type"].asString() == "agent") @@ -110,18 +112,19 @@ LLSD LLCredential::getLoginParams() result["passwd"] = "$1$" + mAuthenticator["secret"].asString(); result["first"] = mIdentifier["first_name"]; result["last"] = mIdentifier["last_name"]; - + username = result["first"].asString() + " " + result["last"].asString(); } else if (mIdentifier["type"].asString() == "account") { result["username"] = mIdentifier["account_name"]; result["passwd"] = mAuthenticator["secret"]; - + username = result["username"].asString(); } } catch (...) { - LOG_UNHANDLED_EXCEPTION(); + // nat 2016-08-18: not clear what exceptions the above COULD throw?! + LOG_UNHANDLED_EXCEPTION(STRINGIZE("for '" << username << "'")); // we could have corrupt data, so simply return a null login param if so LL_WARNS("AppInit") << "Invalid credential" << LL_ENDL; } diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 54396cb9a4..d6fb801cc0 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -36,9 +36,9 @@ #include "lldir.h" #include "llviewercontrol.h" #include "llexception.h" +#include "stringize.h" #include #include -#include #include #include #include @@ -619,8 +619,7 @@ void LLBasicCertificateStore::load_from_file(const std::string& filename) } catch (...) { - LL_WARNS("SECAPI") << "Failure creating certificate from the certificate store file: " - << boost::current_exception_diagnostic_information() << LL_ENDL; + LOG_UNHANDLED_EXCEPTION("creating certificate from the certificate store file"); } X509_free(cert_x509); cert_x509 = NULL; @@ -1367,8 +1366,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() } catch (...) { - LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store): " - << boost::current_exception_diagnostic_information() << LL_ENDL; + LOG_UNHANDLED_EXCEPTION("LLProtectedDataException(Error writing Protected Data Store)"); // it's good practice to clean up any secure information on error // (even though this file isn't really secure. Perhaps in the future // it may be, however. @@ -1379,29 +1377,28 @@ void LLSecAPIBasicHandler::_writeProtectedData() //LLTHROW(LLProtectedDataException("Error writing Protected Data Store")); } - try - { - // move the temporary file to the specified file location. - if((( (LLFile::isfile(mProtectedDataFilename) != 0) - && (LLFile::remove(mProtectedDataFilename) != 0))) - || (LLFile::rename(tmp_filename, mProtectedDataFilename))) - { - LL_WARNS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; - LLFile::remove(tmp_filename); + try + { + // move the temporary file to the specified file location. + if((( (LLFile::isfile(mProtectedDataFilename) != 0) + && (LLFile::remove(mProtectedDataFilename) != 0))) + || (LLFile::rename(tmp_filename, mProtectedDataFilename))) + { + LL_WARNS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; + LLFile::remove(tmp_filename); - // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() - // Decided throwing an exception here was overkill until we figure out why this happens - //LLTHROW(LLProtectedDataException("Could not overwrite protected data store")); - } + // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() + // Decided throwing an exception here was overkill until we figure out why this happens + //LLTHROW(LLProtectedDataException("Could not overwrite protected data store")); + } } catch (...) { - LL_WARNS() << "LLProtectedDataException(Error renaming '" << tmp_filename - << "' to '" << mProtectedDataFilename << "'): " - << boost::current_exception_diagnostic_information() << LL_ENDL; + LOG_UNHANDLED_EXCEPTION(STRINGIZE("renaming '" << tmp_filename << "' to '" + << mProtectedDataFilename << "'")); // it's good practice to clean up any secure information on error // (even though this file isn't really secure. Perhaps in the future - // it may be, however. + // it may be, however). LLFile::remove(tmp_filename); //crash in LLSecAPIBasicHandler::_writeProtectedData() @@ -1409,7 +1406,7 @@ void LLSecAPIBasicHandler::_writeProtectedData() //LLTHROW(LLProtectedDataException("Error writing Protected Data Store")); } } - + // instantiate a certificate from a pem string LLPointer LLSecAPIBasicHandler::getCertificate(const std::string& pem_cert) { diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 14503c9c5a..c767d52c7b 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -43,6 +43,7 @@ #include "lleventfilter.h" #include "lleventcoro.h" #include "llexception.h" +#include "stringize.h" //********************* // LLLogin @@ -129,30 +130,23 @@ void LLLogin::Impl::connect(const std::string& uri, const LLSD& login_params) void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) { - try - { - LLSD printable_params = login_params; - //if(printable_params.has("params") - // && printable_params["params"].has("passwd")) - //{ - // printable_params["params"]["passwd"] = "*******"; - //} - LL_DEBUGS("LLLogin") << "Entering coroutine " << LLCoros::instance().getName() + LLSD printable_params = login_params; + if (printable_params.has("params") + && printable_params["params"].has("passwd")) + { + printable_params["params"]["passwd"] = "*******"; + } + try + { + LL_DEBUGS("LLLogin") << "Entering coroutine " << LLCoros::instance().getName() << " with uri '" << uri << "', parameters " << printable_params << LL_ENDL; - // Arriving in SRVRequest state - LLEventStream replyPump("SRVreply", true); - // Should be an array of one or more uri strings. - LLEventPump& xmlrpcPump(LLEventPumps::instance().obtain("LLXMLRPCTransaction")); // EXT-4193: use a DIFFERENT reply pump than for the SRV request. We used // to share them -- but the EXT-3934 fix made it possible for an abandoned // SRV response to arrive just as we were expecting the XMLRPC response. LLEventStream loginReplyPump("loginreply", true); - // Loop through the rewrittenURIs, counting attempts along the way. - // Because of possible redirect responses, we may make more than one - // attempt per rewrittenURIs entry. LLSD::Integer attempts = 0; LLSD request(login_params); @@ -168,11 +162,11 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) LLSD progress_data; progress_data["attempt"] = attempts; progress_data["request"] = request; - if(progress_data["request"].has("params") - && progress_data["request"]["params"].has("passwd")) - { - progress_data["request"]["params"]["passwd"] = "*******"; - } + if (progress_data["request"].has("params") + && progress_data["request"]["params"].has("passwd")) + { + progress_data["request"]["params"]["passwd"] = "*******"; + } sendProgressEvent("offline", "authenticating", progress_data); // We expect zero or more "Downloading" status events, followed by @@ -190,8 +184,8 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) // Still Downloading -- send progress update. sendProgressEvent("offline", "downloading"); } - - LL_DEBUGS("LLLogin") << "Auth Response: " << mAuthResponse << LL_ENDL; + + LL_DEBUGS("LLLogin") << "Auth Response: " << mAuthResponse << LL_ENDL; status = mAuthResponse["status"].asString(); // Okay, we've received our final status event for this @@ -203,7 +197,7 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) break; } - sendProgressEvent("offline", "indeterminate", mAuthResponse["responses"]); + sendProgressEvent("offline", "indeterminate", mAuthResponse["responses"]); // Here the login service at the current URI is redirecting us // to some other URI ("indeterminate" -- why not "redirect"?). @@ -213,8 +207,7 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) request["method"] = mAuthResponse["responses"]["next_method"].asString(); } // loop back to try the redirected URI - // Here we're done with redirects for the current rewrittenURIs - // entry. + // Here we're done with redirects. if (status == "Complete") { // StatusComplete does not imply auth success. Check the @@ -231,14 +224,14 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) return; // Done! } -// /* Sometimes we end with "Started" here. Slightly slow server? -// * Seems to be ok to just skip it. Otherwise we'd error out and crash in the if below. -// */ -// if( status == "Started") -// { -// LL_DEBUGS("LLLogin") << mAuthResponse << LL_ENDL; -// continue; -// } +// /* Sometimes we end with "Started" here. Slightly slow server? +// * Seems to be ok to just skip it. Otherwise we'd error out and crash in the if below. +// */ +// if( status == "Started") +// { +// LL_DEBUGS("LLLogin") << mAuthResponse << LL_ENDL; +// continue; +// } // If we don't recognize status at all, trouble if (! (status == "CURLError" @@ -251,27 +244,25 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params) } // Here status IS one of the errors tested above. + // Tell caller this didn't work out so well. - // Here we got through all the rewrittenURIs without succeeding. Tell - // caller this didn't work out so well. Of course, the only failure data - // we can reasonably show are from the last of the rewrittenURIs. - - // *NOTE: The response from LLXMLRPCListener's Poller::poll method returns an - // llsd with no "responses" node. To make the output from an incomplete login symmetrical - // to success, add a data/message and data/reason fields. - LLSD error_response; - error_response["reason"] = mAuthResponse["status"]; - error_response["errorcode"] = mAuthResponse["errorcode"]; - error_response["message"] = mAuthResponse["error"]; - if(mAuthResponse.has("certificate")) - { - error_response["certificate"] = mAuthResponse["certificate"]; - } - sendProgressEvent("offline", "fail.login", error_response); - } - catch (...) { - CRASH_ON_UNHANDLED_EXCEPTION(); - } + // *NOTE: The response from LLXMLRPCListener's Poller::poll method returns an + // llsd with no "responses" node. To make the output from an incomplete login symmetrical + // to success, add a data/message and data/reason fields. + LLSD error_response; + error_response["reason"] = mAuthResponse["status"]; + error_response["errorcode"] = mAuthResponse["errorcode"]; + error_response["message"] = mAuthResponse["error"]; + if(mAuthResponse.has("certificate")) + { + error_response["certificate"] = mAuthResponse["certificate"]; + } + sendProgressEvent("offline", "fail.login", error_response); + } + catch (...) { + CRASH_ON_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << LLCoros::instance().getName() + << "('" << uri << "', " << printable_params << ")")); + } } void LLLogin::Impl::disconnect() From 3d9c39c77cd4e4e8da8abf9234f1c751762985e6 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Sat, 20 Aug 2016 12:53:03 +0300 Subject: [PATCH 230/278] MAINT-6663 [Win LibVLC] test video buttons still appearing in search --- indra/newview/llappviewer.cpp | 2 +- indra/newview/llfloaterwebcontent.cpp | 9 ++++----- indra/newview/llfloaterwebcontent.h | 3 ++- indra/newview/llviewermenu.cpp | 2 +- indra/newview/llweb.cpp | 4 ++-- indra/newview/llweb.h | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 831d968b92..05f2f75a67 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -928,7 +928,7 @@ bool LLAppViewer::init() // Provide the text fields with callbacks for opening Urls LLUrlAction::setOpenURLCallback(boost::bind(&LLWeb::loadURL, _1, LLStringUtil::null, LLStringUtil::null)); - LLUrlAction::setOpenURLInternalCallback(boost::bind(&LLWeb::loadURLInternal, _1, LLStringUtil::null, LLStringUtil::null)); + LLUrlAction::setOpenURLInternalCallback(boost::bind(&LLWeb::loadURLInternal, _1, LLStringUtil::null, LLStringUtil::null, false)); LLUrlAction::setOpenURLExternalCallback(boost::bind(&LLWeb::loadURLExternal, _1, true, LLStringUtil::null)); LLUrlAction::setExecuteSLURLCallback(&LLURLDispatcher::dispatchFromTextEditor); diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index adb3322759..dece3fc1ea 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -55,7 +55,8 @@ LLFloaterWebContent::_Params::_Params() preferred_media_size("preferred_media_size"), trusted_content("trusted_content", false), show_page_title("show_page_title", true), - clean_browser("clean_browser", false) + clean_browser("clean_browser", false), + dev_mode("dev_mode", false) {} LLFloaterWebContent::LLFloaterWebContent( const Params& params ) @@ -74,7 +75,8 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params ) mShowPageTitle(params.show_page_title), mAllowNavigation(true), mCurrentURL(""), - mDisplayURL("") + mDisplayURL(""), + mDevelopMode(params.dev_mode) // if called from "Develop" Menu, set a flag and change things to be more useful for devs { mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this )); mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); @@ -111,9 +113,6 @@ BOOL LLFloaterWebContent::postBuild() // initialize the URL history using the system URL History manager initializeURLHistory(); - // if "Develop" Menu open, sety a flag and change things to be more useful for devs - mDevelopMode = gSavedSettings.getBOOL("QAMode"); - return TRUE; } diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index 1157d0aab8..0bf93504c2 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -58,7 +58,8 @@ public: allow_back_forward_navigation, trusted_content, show_page_title, - clean_browser; + clean_browser, + dev_mode; Optional preferred_media_size; _Params(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index f5b06fbd19..697199df6b 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7906,7 +7906,7 @@ void handle_web_browser_test(const LLSD& param) void handle_web_content_test(const LLSD& param) { std::string url = param.asString(); - LLWeb::loadURLInternal(url); + LLWeb::loadURLInternal(url, LLStringUtil::null, LLStringUtil::null, true); } void handle_show_url(const LLSD& param) diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index b37e41fb85..8026dc3ea8 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -104,10 +104,10 @@ void LLWeb::loadURL(const std::string& url, const std::string& target, const std // static // Explicitly open a Web URL using the Web content floater -void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid) +void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid, bool dev_mode) { LLFloaterWebContent::Params p; - p.url(url).target(target).id(uuid); + p.url(url).target(target).id(uuid).dev_mode(dev_mode); LLFloaterReg::showInstance("web_content", p); } diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index 7c90badbfe..7149ce9baf 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -57,7 +57,7 @@ public: static void loadURL(const std::string& url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null); // load content using built-in browser - static void loadURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null); + static void loadURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null, bool dev_mode = false); /// Returns escaped url (eg, " " to "%20") - used by all loadURL methods static std::string escapeURL(const std::string& url); From c37b822abff1a77150a334711d8484025e8c1436 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Tue, 23 Aug 2016 18:53:27 +0300 Subject: [PATCH 231/278] MAINT-6616 new crash in VOB viewer in snapshot preview --- indra/newview/lltexturectrl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index fd13f60606..ad4f903dff 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -306,7 +306,7 @@ BOOL LLFloaterTexturePicker::handleKeyHere(KEY key, MASK mask) void LLFloaterTexturePicker::onClose(bool app_quitting) { - if (mOnFloaterCloseCallback) + if (mOwner && mOnFloaterCloseCallback) { mOnFloaterCloseCallback(); } From b22fc7f470398817056abd3c0ada256f8039c708 Mon Sep 17 00:00:00 2001 From: pavelkproductengine Date: Thu, 25 Aug 2016 17:48:27 +0300 Subject: [PATCH 232/278] MAINT-6476 VOB - User can add any size image to an Outfit Gallery outfit folders --- indra/llimage/llimagedimensionsinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp index 5bf3f29b3c..a5e546e977 100644 --- a/indra/llimage/llimagedimensionsinfo.cpp +++ b/indra/llimage/llimagedimensionsinfo.cpp @@ -201,7 +201,7 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg() cinfo.out_color_space = JCS_RGB; jpeg_start_decompress (&cinfo); - mHeight = cinfo.output_width; + mWidth = cinfo.output_width; mHeight = cinfo.output_height; jpeg_destroy_decompress(&cinfo); From 534bffb257044c407b8d3d8384ed0223fa9cb709 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Tue, 23 Aug 2016 17:58:36 +0300 Subject: [PATCH 233/278] MAINT-6511 Crash in LLFloaterView::restoreAll - exception handling --- indra/llui/llfloater.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 1f9869fadc..93ee1ceee3 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2320,7 +2320,17 @@ void LLFloaterView::restoreAll() // make sure all subwindows aren't minimized for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { - LLFloater* floaterp = dynamic_cast(*child_it); + LLFloater* floaterp = NULL; + try + { + floaterp = dynamic_cast(*child_it); + } + catch (std::exception e) // See MAINT-6511 + { + LL_WARNS() << "Caught exception: " << e.what() << LL_ENDL; + continue; + } + if (floaterp) { floaterp->setMinimized(FALSE); From 2f85899bfdf780ff7af73ba3fccd0ddfdb15fae8 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 12:02:02 -0400 Subject: [PATCH 234/278] Update to boost build 318979 --- autobuild.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index e9928908be..d6d3d3e2e2 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -106,9 +106,9 @@ archive hash - c296845cad075250c1ae2620f175a957 + 37235e8da6ecd6ebfebf402178893bd5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/Darwin/installer/boost-1.57-darwin-318979.tar.bz2 name darwin @@ -118,9 +118,9 @@ archive hash - fb1537f7ad0b490fcb4f096c15dce9cd + 7b1272f1a762563c923926089fb69ae3 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Linux/installer/boost-1.57-linux-297445.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/Linux/installer/boost-1.57-linux-318979.tar.bz2 name linux @@ -130,9 +130,9 @@ archive hash - 76a607d8a625062b9a63a88b62819894 + 5d9ff9c3d0301aed8480ddafd2716977 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/CYGWIN/installer/boost-1.57-windows-297445.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/CYGWIN/installer/boost-1.57-windows-318979.tar.bz2 name windows From 91501eaa93f422651cb8ff67a6c2b392f162fdca Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 13:44:14 -0400 Subject: [PATCH 235/278] Update to colladadom build 319021 --- autobuild.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index d6d3d3e2e2..34ce5af93c 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -158,9 +158,9 @@ archive hash - 66849777a83cb69cec3c06b07da7cd3d + a3e98849010a229b4ae3255d4030321b url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/Darwin/installer/colladadom-2.3.319021-darwin-319021.tar.bz2 name darwin @@ -170,9 +170,9 @@ archive hash - d627c2a679f3afb8d3e090d42f53cd2e + 1ddd22be69d4f0ff38409fa42e4b38f6 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Linux/installer/colladadom-2.3.297450-linux-297450.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/Linux/installer/colladadom-2.3.319021-linux-319021.tar.bz2 name linux @@ -182,16 +182,16 @@ archive hash - 220897a1893a188aa9d31efb48909878 + c504c44983d5af4c19c8785f392f481b url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/CYGWIN/installer/colladadom-2.3.297450-windows-297450.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/CYGWIN/installer/colladadom-2.3.319021-windows-319021.tar.bz2 name windows version - 2.3.297450 + 2.3.319021 curl From 12379fc8d3a20f17fc89b58ea2161f8bd8071502 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 13:51:45 -0400 Subject: [PATCH 236/278] Update to llceflib build 319030 --- autobuild.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 34ce5af93c..baabb50d12 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1484,11 +1484,11 @@ archive hash - 29a1f64df46094eda0d681821a98d17e + 8be4de49388f3a525b11411de560c95f hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/Darwin/installer/llceflib-1.5.3.311349-darwin-311349.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/319030/arch/Darwin/installer/llceflib-1.5.3.319030-darwin-319030.tar.bz2 name darwin @@ -1498,18 +1498,18 @@ archive hash - 827b7c339a2cd401d9d23f9ee02cb83f + e53aa2036a5a8df90995c59cb616cb02 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/CYGWIN/installer/llceflib-1.5.3.311349-windows-311349.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/319030/arch/CYGWIN/installer/llceflib-1.5.3.319030-windows-319030.tar.bz2 name windows version - 1.5.3.311349 + 1.5.3.319030 llphysicsextensions_source From 1d2360ef7c38c375c72dc3ae39d3636a5b860e01 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 13:53:51 -0400 Subject: [PATCH 237/278] Update to googlemock build 319024 --- autobuild.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index baabb50d12..784b13f0a4 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -840,9 +840,9 @@ archive hash - 022649e284163b8ee23e3c9a81302fa7 + ed2820c2a56943d4fcb58330bd799c74 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Darwin/installer/googlemock-1.7.0.297460-darwin-297460.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/Darwin/installer/googlemock-1.7.0.319024-darwin-319024.tar.bz2 name darwin @@ -852,9 +852,9 @@ archive hash - e08b0e9e269b80b549f6044c4e608fb5 + 92bf278562af22637a1cd9b6d82947f2 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Linux/installer/googlemock-1.7.0.297460-linux-297460.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/Linux/installer/googlemock-1.7.0.319024-linux-319024.tar.bz2 name linux @@ -864,16 +864,16 @@ archive hash - f30de5bf36e8ca8681883fe8fd8e0092 + 3391f911974cf9cf3e850a5d9a05802f url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/CYGWIN/installer/googlemock-1.7.0.297460-windows-297460.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/CYGWIN/installer/googlemock-1.7.0.319024-windows-319024.tar.bz2 name windows version - 1.7.0.297460 + 1.7.0.319024 gperftools From 17382b22e0fff078703a667cfd199db7d079ddbd Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 14:04:36 -0400 Subject: [PATCH 238/278] MAINT-5011: Remove unreferenced param name to avoid fatal warning --- indra/llcommon/llcoros.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index 4ee8e6d796..7f4c1780b8 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -240,7 +240,7 @@ void LLCoros::toplevel(coro::self& self, CoroData* data, const callable_t& calla { callable(); } - catch (const LLContinueError& e) + catch (const LLContinueError&) { LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << data->mName)); } From cc29b44dcfd59aa649bad62772fc3b228be40b9a Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 25 Aug 2016 14:37:46 -0400 Subject: [PATCH 239/278] MAINT-5011: Fix type error surfaced by gcc 4.7. LLView::childFromPoint(), which is declared to return LLView*, contained a code path that could 'return false'. This is blatantly wrong. Why has it compiled on our other compilers so far? --- indra/llui/llview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 62c3f401bf..93a254593c 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -812,7 +812,7 @@ LLView* LLView::childrenHandleHover(S32 x, S32 y, MASK mask) LLView* LLView::childFromPoint(S32 x, S32 y, bool recur) { if (!getVisible()) - return false; + return 0; BOOST_FOREACH(LLView* viewp, mChildList) { From abfe05c1b3d24ed820cf084ece3f3610ec35fa21 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 26 Aug 2016 14:20:11 -0400 Subject: [PATCH 240/278] MAINT-5011: Add comments to LLCoros::toplevel() exception handlers. --- indra/llcommon/llcoros.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index 7f4c1780b8..4db63937aa 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -242,10 +242,15 @@ void LLCoros::toplevel(coro::self& self, CoroData* data, const callable_t& calla } catch (const LLContinueError&) { + // Any uncaught exception derived from LLContinueError will be caught + // here and logged. This coroutine will terminate but the rest of the + // viewer will carry on. LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << data->mName)); } catch (...) { + // Any OTHER kind of uncaught exception will cause the viewer to + // crash, hopefully informatively. CRASH_ON_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << data->mName)); } // This cleanup isn't perfectly symmetrical with the way we initially set From ceb9d3f7f11ee659c73cda3fb52231bb8a44476b Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 26 Aug 2016 15:46:26 -0400 Subject: [PATCH 241/278] MAINT-5011: Fix misleading indentation in WINMAIN(). --- indra/newview/llappviewerwin32.cpp | 46 +++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index a7f248ab5a..af0cd27fd5 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -328,33 +328,33 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, // app cleanup if there was a problem. // #if WINDOWS_CRT_MEM_CHECKS - LL_INFOS() << "CRT Checking memory:" << LL_ENDL; - if (!_CrtCheckMemory()) - { - LL_WARNS() << "_CrtCheckMemory() failed at prior to cleanup!" << LL_ENDL; - } - else - { - LL_INFOS() << " No corruption detected." << LL_ENDL; - } + LL_INFOS() << "CRT Checking memory:" << LL_ENDL; + if (!_CrtCheckMemory()) + { + LL_WARNS() << "_CrtCheckMemory() failed at prior to cleanup!" << LL_ENDL; + } + else + { + LL_INFOS() << " No corruption detected." << LL_ENDL; + } #endif - - gGLActive = TRUE; - viewer_app_ptr->cleanup(); - + gGLActive = TRUE; + + viewer_app_ptr->cleanup(); + #if WINDOWS_CRT_MEM_CHECKS - LL_INFOS() << "CRT Checking memory:" << LL_ENDL; - if (!_CrtCheckMemory()) - { - LL_WARNS() << "_CrtCheckMemory() failed after cleanup!" << LL_ENDL; - } - else - { - LL_INFOS() << " No corruption detected." << LL_ENDL; - } + LL_INFOS() << "CRT Checking memory:" << LL_ENDL; + if (!_CrtCheckMemory()) + { + LL_WARNS() << "_CrtCheckMemory() failed after cleanup!" << LL_ENDL; + } + else + { + LL_INFOS() << " No corruption detected." << LL_ENDL; + } #endif - + } delete viewer_app_ptr; viewer_app_ptr = NULL; From c2c3086d6c153883a43664446ac3f05a11a61a96 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 26 Aug 2016 15:50:37 -0400 Subject: [PATCH 242/278] MAINT-5011: Catch LLContinueError in LLStopWhenHandled::operator(). This means that an exception derived from LLContinueError thrown in an LLEventPump listener won't prevent other listeners on the same LLEventPump from receiving that event. --- indra/llcommon/llevents.h | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h index 8ff337911d..1526128725 100644 --- a/indra/llcommon/llevents.h +++ b/indra/llcommon/llevents.h @@ -95,12 +95,32 @@ struct LLStopWhenHandled result_type operator()(InputIterator first, InputIterator last) const { for (InputIterator si = first; si != last; ++si) - { - if (*si) - { - return true; - } - } + { + try + { + if (*si) + { + return true; + } + } + catch (const LLContinueError&) + { + // We catch LLContinueError here because an LLContinueError- + // based exception means the viewer as a whole should carry on + // to the best of our ability. Therefore subsequent listeners + // on the same LLEventPump should still receive this event. + + // The iterator passed to a boost::signals2 Combiner is very + // clever, but provides no contextual information. We would + // very much like to be able to log the name of the LLEventPump + // plus the name of this particular listener, but alas. + LOG_UNHANDLED_EXCEPTION("LLEventPump"); + } + // We do NOT catch (...) here because we might as well let it + // propagate out to the generic handler. If we were able to log + // context information here, that would be great, but we can't, so + // there's no point. + } return false; } }; From 4c41b1d8ac041834b37fbd956f646749ac4c0325 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 26 Aug 2016 15:56:47 -0400 Subject: [PATCH 243/278] MAINT-5011: Add top-level exception handlers in LLAppViewer::frame(). --- indra/newview/llappviewer.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 766c807169..0c758d73a1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1537,10 +1537,14 @@ bool LLAppViewer::frame() resumeMainloopTimeout(); pingMainloopTimeout("Main:End"); - } + } + } + catch (const LLContinueError&) + { + LOG_UNHANDLED_EXCEPTION(""); } catch(std::bad_alloc) - { + { LLMemory::logMemoryInfo(TRUE) ; //stop memory leaking simulation @@ -1548,7 +1552,7 @@ bool LLAppViewer::frame() LLFloaterReg::findTypedInstance("mem_leaking"); if(mem_leak_instance) { - mem_leak_instance->stop() ; + mem_leak_instance->stop() ; LL_WARNS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ; } else @@ -1559,6 +1563,10 @@ bool LLAppViewer::frame() LL_ERRS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ; } } + catch (...) + { + CRASH_ON_UNHANDLED_EXCEPTION(""); + } if (LLApp::isExiting()) { @@ -1572,7 +1580,7 @@ bool LLAppViewer::frame() catch(std::bad_alloc) { LL_WARNS() << "Bad memory allocation when saveFinalSnapshot() is called!" << LL_ENDL ; - + //stop memory leaking simulation LLFloaterMemLeak* mem_leak_instance = LLFloaterReg::findTypedInstance("mem_leaking"); @@ -1581,12 +1589,16 @@ bool LLAppViewer::frame() mem_leak_instance->stop() ; } } + catch (...) + { + CRASH_ON_UNHANDLED_EXCEPTION("saveFinalSnapshot()"); + } } - + delete gServicePump; - + destroyMainloopTimeout(); - + LL_INFOS() << "Exiting main_loop" << LL_ENDL; } From 0c2442eb684a060d5582c154c95cb995a64ae70c Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Mon, 29 Aug 2016 18:48:47 +0000 Subject: [PATCH 244/278] MAINT-5011: Fix abbreviateFile() test to run under .../indra/ path. This particular test relied on there being exactly one instance of the string "indra" in the source file's __FILE__ path -- which is usually true, but not if the developer clones the viewer source repo under a parent directory whose path itself contains "indra". Fix to handle any number of occurrences. --- indra/llcommon/tests/llerror_test.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp index f51279e817..8bace8ac41 100644 --- a/indra/llcommon/tests/llerror_test.cpp +++ b/indra/llcommon/tests/llerror_test.cpp @@ -237,8 +237,21 @@ namespace tut void ErrorTestObject::test<4>() // file abbreviation { - std::string thisFile = __FILE__; - std::string abbreviateFile = LLError::abbreviateFile(thisFile); + std::string prev, abbreviateFile = __FILE__; + do + { + prev = abbreviateFile; + abbreviateFile = LLError::abbreviateFile(abbreviateFile); + // __FILE__ is assumed to end with + // indra/llcommon/tests/llerror_test.cpp. This test used to call + // abbreviateFile() exactly once, then check below whether it + // still contained the string 'indra'. That fails if the FIRST + // part of the pathname also contains indra! Certain developer + // machine images put local directory trees under + // /ngi-persist/indra, which is where we observe the problem. So + // now, keep calling abbreviateFile() until it returns its + // argument unchanged, THEN check. + } while (abbreviateFile != prev); ensure_ends_with("file name abbreviation", abbreviateFile, From 20cf275d21c0dce569bb3a16393b529c5c9f1c6c Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Mon, 29 Aug 2016 18:51:32 +0000 Subject: [PATCH 245/278] MAINT-5011: Work around gcc 4.7.2 overly (?) picky fatal warning. --- indra/llrender/llimagegl.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index ebed454271..01c1d81823 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -240,6 +240,15 @@ S32 LLImageGL::dataFormatComponents(S32 dataformat) //---------------------------------------------------------------------------- +#if LL_LINUX +// gcc 4.7.2 produces this error for the following function, which nat has +// been unable to diagnose as an actual problem: +// llimagegl.cpp:247:2: error: '.LLTrace::BlockTimer::mStartTime' +// may be used uninitialized in this function [-Werror=uninitialized] +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + static LLTrace::BlockTimerStatHandle FTM_IMAGE_UPDATE_STATS("Image Stats"); // static void LLImageGL::updateStats(F32 current_time) @@ -250,6 +259,11 @@ void LLImageGL::updateStats(F32 current_time) sCurBoundTextureMemory = S32Bytes(0); } +#if LL_LINUX +// In general we do want to know about uninitialized variables! +#pragma GCC diagnostic pop +#endif + //static S32 LLImageGL::updateBoundTexMem(const S32Bytes mem, const S32 ncomponents, S32 category) { From ac1f29a73c8cdaa5bd7bdc47fd4d2157a879f304 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 31 Aug 2016 23:42:24 +0300 Subject: [PATCH 246/278] MAINT-6386 Update first-time Viewer Login screen with new LISI screenshots --- .../windows/first_login_image_left.png | Bin 311306 -> 384997 bytes .../windows/first_login_image_right.png | Bin 329170 -> 340188 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.png index b405a882458d83d6be95c8b23045e4681079a26d..1fa10fde532d08bd105bea355a4bbf233039c86a 100644 GIT binary patch literal 384997 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

|U< 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�s}#UQmu<&-u0ao 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%0Db(XeXUhxE&LfD@<(6v@HZO2ULFwVfrlody>X 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

6Z5XWmZ)i3y>vTC>lsKdF6IkP0yItVKVT$` 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 diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.png index 22a6dd8a53a5c22a7813bb66f9c58a0b06f90370..d764d846b731d03ec54e3bdc5391aea17952eb69 100644 GIT binary patch literal 340188 zcmeFa1yG&K(y+U5cPF?7cXzko?quQa1b3Gp!GgO7NwDA++#$Go@Zb(V+52qcoRj+M z-tX3}zbY@aVDhm1pq;D5a0Co6v}`saKP&ULxXjI0v+J>OP{R?fN%O$vIhu2 zJDwN=Br6s`gk~Hn3NYgVd>By+7XxT80?Z0BCps zqhe?f6#(1=@Vb|j)D;kz3_uq@QRh9TDM#L>ej=6piMO7NOUzFjn$8|dU7enQa##wB z2Av%U3QQ5C?{G`TVfJH1S~(pA0J35+o_c$F?>dZFK0M4GRg0)kx7!N&NMc~H{;)Yx zY9|N)tU7s*JA__=Uq+aGLK3V2WbMqUpW6LkBbFUgKRdg* zu`wh4MOYiyukQ6=+M(a3es6W{&3kuwzS6Qr=Etn-Cjox7(lK}@laDv@4kplGVJlkV zt`6?;4u68=i`R9*vM{WXFP_6|st^9cl)*!l_|&f% zz6#>Awketg$Jrs$cc^|w zQ6tER`a;naNnXXWNir#gs}QM5;-Bz2fO3WCh&ROY^a7au?}D2onBx6DDe`@VuMw#) z;=m0Q&w(2?a$-t}#>`3`b*RSWi)7E<9xXLPnv3Qa>0xa9h7HB?#fp)>yHofhCoN2z z;lM|d5AdbkxRq)jz#7BO4M#q@fTQ|}wZX81y9g5j34|myWHjVvB#Vgf$XHS4U^rmF z0u?)6lEf9gs-|c_x&DG}z|0h)AxTR*g&K{Kp>Yisy;rjBk?Wi8`zl(JVG!=Ku@SCB~B_f6t*dj3wFhOnF5@N2%H`j zMh>RE_uI)x$+oH*)V0)}7_t4Z3DOA^2`{J_REkRqN|s9CR8Lh0RHBRZl)cKuRaunR zi($Sdma3MdE9@!1P&O^*DGDhuEwWV+$n(~`4};X~l7}B?Ci((h2rDTtmhl*#`pL5jS+k$#o1gUEYd9MRZ6GvCIV3F@9nSBoaA7(DGQTM zy~CH#kEqtDUKFs()H50DSe7IvC2EvPmMWG?>@~BO9~7n+G>bKA-ufX5^+>F&&KgOFoDgIU*Dbl=K zXPs=_y4$)tmjaT4nBtY}uIyool5BkeRRNC-k4(?d;84!cR5DvCAJa7RcItNObn0^5 zYb{qT+S;Pp&&E=pHna*f4{Mujg0#3a^EFhpbgRV6(#y!F8p|3BQ3~tj;^ay*rc664 zk8AsCi|cSIH)kN{%WJJ`y?~|$Sf+Jd<(-Fd&2e50UT^RDpb$c45liv4@VyKQL*(Omzlt5 zx%|OfUPRu{v}T)>!H^+Vy==O&F5ji(5_p8gf5GpNxz4}N%dy0~q^Up1(N@=6Hz40> zo1q`HEaF4@X!Pj*I0h*6B?mDD3-c55(+0i0a`z-|jS}FVH@^5Zdmt2rP!Ta0PC=_rD7}4ns|1u~fNIh5}$}Us`cZ?~C&1Gys z#Bo{lMl?}$DbJ=UrJ#{&|jaAF? z-N9+dTKXE?x(C*KhF)Dex9s7Lv!FuEVtQ0s?nFVEP&v-{??TAbMVOJ~CulC@QLt_u z_#LJs3}ftLp)(>n)C6)TlGL*9@AhMx*xbmvSn_E%>jPgF$27?x$SkIEXJDqhA+l!X z<8EdOco!REFI++_8&_+(Yr19fX5fQy(5Htkn}|9Ff&{2O%c__U5SnzbwZaA8RJ16k zsi8iZ8mpVM4u$n|C6;E;3>^$s_0Pv}q#b2G9-wxhuD+|y4}PUihp(~K{K10j6R*A7 zJnT9K1Wm9SPh9^%@ppkmVSEe{r>GWAeMV@s<4|uUV97E2fFea z44TU|z?wm;|r z8wb0GB1Np7uKzlTKhCG36g@?=CxO^Q*z%Bm#F2Ber>(c!qUOK0BR!n%_iI z|E!);!L4t->$J=J5H}&;)0oznQeLlPS%2u>T;pMKx$`1}V|ekb+3gtfacVMyi*K>{ z)ZO;7>+*aVbJ5%3<^AwL?T3Y#qXi#}HkYi^u?2}s z$e@6chuHIIBoT<{%DjH52vNGI;w$}7OBU=MwdRJ?^r;X^7PQcX; zXlQBdL}XxWYHq_va@5#LLS$~lN21Oq%P4CnVr*tE>F!{x>@KHb=x%AqWke#t56kPy z{p7&f*a=AFYHelX$nDBU@|$1or}saK8AynJtKwwIM>Mmk0&ZYD-^vdV&>#z$IZat;^IQ@!a{HBV9LP6#l^+I$jrdZO!riS&e6@r3Ft~^<4F3ulRx~3 z8ao;~nAYNFfV{GF@`k!vX$nZ};cFqn~ zzwt3LWH7cewtg~ke7bq2|9A^_f1E)6H2=qK{Hgx0y>~J<`D<|gVf#b#U(JkN&Hszp z56$mpzlFl@BgFd@f7~Jt#y}@q2NhdeEB@c3?633F)A8v?R1s0Co7))Kx;RqtGCVi= zYrOyRW-JPHGUk7>WT#_fqhn%HVdUgyV&i6EreoybW@P-ElizDT^C9~b`$j+~;6J@E zt1z)}v#~uz_20exqwaG*wnpYAZvP`Mf7Se_4_R4mDH}&8ppBuilqmmG-|5ZGjktl# z?2Jsnr@X+zW@tdi%*bj$XTZv3@Fa3_m>3xwu`{u;{np8Un*WHZ(M0GT>qa(lK#zvOIw_W~bxiWM!c-;qRY-@#Ax(KLw|GjZw<*i zm_Owupw-{%{OF6(Q)5hQPkmuz1JW6Da#k#--q*mhTwPqe>4B@ZMc{j+x#s2e|Pm; zt^e-C(bmMt1?XTbWcm~#|C5>dyVrl3J$KK`@FQ1Sng4$<5RSk%|L=x@lbwx=ot52? zj>UkPi;jc!M^F|soo0XdAh3_1Q7=Ksrw;jbt*Gy~e08XNI5{L!;N3jS{z zx&K){{C_-w{yp>m|2KjD*GBI5nfT9~_(z`o_Z-S=WXNq|>tGFZ;y1Sjni@0M*_iS& z{8ji@wDA75dWhIs**eJD8X5Dm@G|_T;{Ry%^qHx`?;n}+J1R*C6G@4QurqP7v(qut zKP?1*x%peY|LEtBwMOV^?fkJMIQ}!|{I(NILPrC{Z zPJ`c9L?9Cf8=V0=BO}m|>uK|9Z1SIz-0!9TZ1L~?`Pu#Q{@8VKKP`VxsTla%vh#%E z-^%`m;WwSek7dlt`M3HU%#2Uh)872)`j_e7)z3{ee{TAB^>fp|ELCmHo%osm)!MV- zzghj*8gl;@E6Pu&7-RmYu01b$UR%N3)!0fy)ck4l;`n0`X8qBr-;ADX{-dSlf3^IZ z=3kb-58K~P8@~n2@1;*?nWtkE!=LASR@^kSQuAlRHru~KM8IYfgzi|DW&ok{WT+e{~T>ORW=X{=Nf8lxt;rcnBXWC!5o&ou}_zTz1`8?D9!u1Tu&&8kOg8l2sWMiAB z$B|v0o;%KCYz=#QW|_!PQb`s7a3==&K^`I{<()BLJ}b8UWya4*+1?2t;UtD0GsWYhFb5!bRioL;;&<+oZYJGnjyW01N{18{qMg8efM7 z>vTg?>1Mbk=Z2}F-mXjzBe%9Oe$1wRv_k@~8 z)%&pdc+fy$P$%R#WPmh{S%BjNfC-43MHGl!24W@#J;`~L^T2>=E{ucD`EIgcVsFta zgsH(l>VukM-0UNEU~s`GcNQb0Yjb{|zL(2u@p|BVz-=C^FWJ{oEoNk?d`OHmZM?5p zD*&Dmqp~bO3Df(J?V^@qetsN+UCb8UDfG*Ci8gddl;@;Cf-6u4&w z&p;>kUTkC@Vk(iEc-h|`*>-Yxo1jFcSj4MCgUvL>vY@SUf?_Elav!%#o8?y%#o6#c zq5I)#O|)Bq0GNDzUL&yyL9VfYKp-o?3JZ~YBFQfu$$hx;e}6)sxM1suSe6BX0YDY* zKx~Ht2uj%rnnC+Xq6b>8N(+M{^$21MG7%vJ3KzHIn=x|FfWc>F0dk4JRRWl4X?@() z<5m%L@AoAx7}V>XDnCxy&OOXN3^yc~vU>-W}x&nC}Wp&3k$LMvS5lBD?PnMf(S zV)WwnI}z6yxJ@T?fcbYxaHlL^qnIghC&5}sQ6WDCc(d;@t5@SOx;!o!pU}ScF&Q95 zf0-lDxxSvNVkrX6R{%hl(NYytB?TGU4$@stL@8^le$3RFnukTufQ+ii$|hK@SAnNO zg_^$(zQ5~~7ea`i@&#y#(0msK9R#I>u5UwdXfYH5=@5j5hS=6fn{ob}Us&Fh#{=Eq zknW6PfYTB$cHnkrQAGz1|3Y^0b8&el+Dlc1P1Qc!T+hd`DU1l0)?Im3koaH>aq57~ zra__4iKFNVHCQR?(h9yW!`lu{m#1(8Ge*#$$hhR)BK+*I!G{h^Pm3QamOQWLF6F## zQ$F4LoJz~>vRT${fBh<$7a<+tP(Ks6dX|Hd{5JFIooZr;(!e%dthdc}%Tm76k(ANzG@671DKXy62-z?c<6hc@?n;|VK$*mqoOPJ_Odmz66tn+>q_f&?Q=L)$X`lL*KDv$ z-UsbK|A_z=gf#?pbS;xr(b5coyq)INYq60KF^~WufM=E`U^NRp%@-9L4?jW8O-kv; zT23&k5RI5rtdo2F;^AVs{Dr`2PskhIy!e|vZ9?wZ$f?-*R^I0OK?2)n zifIFJo%d?}5a8fMZ0K2ESBML<$OFME!ijMw;%UTTh_~ZJ0sR=HuhAnrNN{0;v#StD z(`9_*skNE;#pe;VVt4l_Uf8xan{>K2yymap>p?Oaw+StA9mkvhjEDOrl&Ye&;EmbL zcR8&0F<&P0cxllnLW5(7d@HD+co86a{eltD2`&1H%HT!(3POTt7dgFx=w)IJC&r{Z1RsD3#%D!umN!6Qu z-7lSgqRH%RbmHA2=O%Zt5V{}{I)GA^Y*Gdl0IDE5ASg|IHBa{yR*_L0nq1%26Fw!! zEHn`DjRb-+3EO+wFLxRF2ZrwVmye8lU@j)3=P!ib*$kOhJWWrA#1 ze(;gdPM8aUQ!%I}(BoV_1T2umC@k52M(8b_{12|`nj3?N-Ul>wUs+v>1e)#__?Gc} zs>wgDpB9WE7$?hI6kdAw)p~n8c22b{9DCTbtOpC=>k3985^Bv@@Hs)RAo3!R3*zvC zAQu4!0b^is`2K)+zqi^~d;`_80gA%#vgkxQ*mznb7Q&PYFlLf|DzIv{{CK;vi7J`B zqW8lhA=)WDZ1K}m`bvs?EkIgAO+M?6FAY^?_w&(_O-_erZ+Vp9clfOL$Gc%C=;xMr zxiZCQ;Tga>i1^;4NBSZwfCTu1NE3_JWGXvZ89kl=Uxp-jR+nOU-Nz850e0}xK;2n- zjfmmTOvWanfuy5a>`B~( zcK+%afJoy=p>uzAGVndZX>>WP+w(P!+RW{1e@K`vRF#j8r@5x{SeX4_+&k~AFpJ?E zl+BKW)d?FuNp9Pp&~kf>j)j%8ehW=m>oXjnPvJcI#N;ThB6oM*p#EUDX@BF;6>CzR zM3T@M55DLE$c^geanWNSf5%i>CxCTDqBrJMp8ORHW9{yXF2nRv16%#puC-|^YoEBH zf8l2z>I3xpEgbSR(Lm?}@m#BYVUMkJhO}!tWm^K>#Rdjatf}*iZ$d}O!mZr9l1}+C zedfy`juGOShKdiD+$kisWp=v+Bw-!uL2;{&gYTGA=f4Z#;?p@%!rX!WdBQ zJ+^Ef&Wjf9#>m>Gv&`&G#+(_?D%|W zxv!{W!#cj&k3AkqRkA5}lmoln=%fQ{2|ADoC}s=?uJX)-K*{DpO{O5u1t%kKD;y46Po0hpidCo?FU! zq~GXmbSa1VI3@4$!u0-l`DQA5*z@kQk?A;{q3zA&(NW8Kc)@z1_h*Y(l8_GLN%cEp zKb(ujK``mPh}$wlhf{Kfp52lJ)ceKGwsiF;k@q;Z+lV@ z_mdfc@X$=q`2}5964tK_ubda?O1E=WuKePvgn7~_`O5h=JQ}&Euw@;@=O~6&*>!H zmz|np`70RT^mF$UK57VEbtPW+4TEj2#;}=qP7m0oxgAb^eaEG^EIBTmUANK}z4_UB z*J#;`14*0H*>$O=6QXbEKic}3@qq+BfS+gkR zq$fL@spsO|oa|lmec=o7q|AM3_Q(No2f5D_?8dG~g^i0n`V3P!N5e0wl(1gy!Oly= zYU^u`R^*V`5eapP4&JhWIJ&c!1GxIr0hFYKUZmVvj;pG%QjPNzhS>75PpFg{ zmqU9vPICgePPjDHMC-DhtEjy&46|kTKI5@hx<9;PKQ9$b(G-qEP)Bg)E62D?$naYs z4JDzxUbn*~FuI6BHdfQ2(rp5@Amq(@FI|qulh{msx4xXE!^F1mgm^X7k#x4&H|xW> z8?|-j@@GTkb?TL$wJ_c5d&dYz$jFj*Ahk0`(AW2A2OdblzP0p$9}gr zG%$ZN*?n0Tg*Q1f^V)_dg}x#@gV*_DrthpjqNn-OHBpsBmsVYq^TkSx;a-1Qw<#&< z<-77?w~E%X>kr1GMv6|IwT^EME$8OuF4N5(?X(@8Q5eFsq_244xAG7~Lg+BI!W1ZR zIQRm{4aO8G(K%!^vIDz@>}H}w*HIO^Vmzdf3tqoZqk(zUcope{^7; z#_TjZNURhTteS*M5tJo21%r;@IggYUxorfyQy$rCqFn6V%Aox1Xyl^MWA3KON#e$d z-Ht_`e{tcpY$g zE`aklB|&wWjVxz}M;Xhf37ZIeOV+yeS-|xRmUp3~ncioMP)EE;r+d~)8KIi72HEiQ zgV*7>O2Hqn$=~&UFi=rcmI7*%`;8J;TWYOIAt#?xy(O-2Rq^NI&+Bcy8gAh!Z~WG6 zdv{jyLT%%w5h)#^ti?)(5)WOIyfMl+IElbC_xU95oNX)1 z`L8GD4<9Pd3m^CErU8?CNCVAv- zd1^LQF8B9%6;KL}d_++FoA^2Kcd<=i9q%vln1c{0U!qgv$1o~u%7!O&g(~2tz2KG+ zr533pwC)Fgh%Rp}$#169)YAlBR=QUVI|MskCRCM{%)$g zL;@=iwtCbvm?162swhvt(Ev9R+6*ux0}G~uInHY(mP0$rdeoIWNb@wd5S`&>b@3o< z`J<2vG3LV1%ETYCVMyb_m9SZ3K3W)`t{xrmolQbLoQ$Sd>1kieH5T3PcAShGIDFfH zd9$}`*$rQDzdrZYa4&=*1*I7{8{gj#*>M*GJi6Ln>30*k)ydJFm9QE)*LnFJ)|(rN z!zJoF31uf~0Tq}wR*@{uhrHDgYYb-6#NSn zq^oN=-+OPe8%EF0w9}{cz3thTy(#FTk8B%OOJ+TLV#`OOn&C(fKPM|xzn47VS|qeu z5H>ts@<-OWKi;WpJx-u$1V!2OmrR#vici}|P4KFZ#~{PzD};8YQsf>XALACxN=S#U zLRRcB9UN8BPP=wHz$Pcx+9mN<0t(^SV)G>b1TKT`Qig_l9No zDp11EOPOkFS@mT?R`Uv4LDpODHeyYYjGzW+yA9!L=;ZJ@$rgJ_j1g4X zb2Kx@*jd#?N|s@?rZAG4I;>|{XfGdDlBahq;1b_X*QOB(+*B+(;MO0mjmi0z!g=aL96!KlLe{rMyWo43{tNAs;w7LYVw&%668l~Bebo$PY zy%%jVuftJTRiGWlSqKTrsFLMOz zg!;RudVM*%4f2&rR|je;T)%M60K0f_{KDZV2T z6N_xgLQ;r8+qRLhkX0i?zlM^5pVr`p{)+#`Zl!n({FsD3^o zgAiW#>n;5I@{s^9_ zoz%Jw7ay~zvH?6PHYX4_-PfQ>?&!oA=HQ$lZ2)0Vf#@JkfG-(p6`Z4rARtuV7a!|e zDSD-a?EWlNq_2M!roM^G zXg@)Ky=2iLNTf3nED1OYgdzlrf2An3m>_Z&v|=EYB9$5?WH<%{8iXclUTML98I>1ALH$eg$Gitbs(dVs2DhLB(f?pIW$Tj z6$v&-*2(0eFKgu3O!dPn;61t5eZ_dkx|ZNfX9+IsM5B#59n#cD*ChFs4>F-J<6id% z>-5a-H8@KW1tAT3g>DQ)C*d zfjYbay>R_JkL$0oGWEsiKf|)$jqZ#)1sx(8j_*D~z(aB6!JdX+lvU0W9?QNwq8h=3%QnA^+#y$bXa zxdsW}D@nI><^=?3a3Yec>qRhMKrvC^XLL|931!{4 z#d{B>0kY%A*=oJz*D08tg-gUM#E8~W&;kJ9qTRliFuKDA@lAXA4H`s}sQ(HK8$fzB zmBX|GZGo-3L{16ZrJD~(iqX; zd+=p#+gkXNii2#~m%dCZ4tRVMf&k>;)?Vl~Y%<@N?ZS!eF&dIlvnF*Mj+93C`)q~8 zNtsXtWbOkA7k4_a{y`eg77` zO+fA4U3O~$4QL=ZZWw5eFJsnm6z5^5kf9_Bh;Wut8?-C5X+z`GpoQnIIu9wxfuk(L zTi1#_D3H4IOg=054~Kh)u<=vLRVFSMd61Au_}m}}kFFCo(WTA+A7ibiVVvB zA)@K-!p?JS*O70h*s;_})$(XH0(Z~9h#QaBrJ&3dk@KTjS0q{F6$tTbP#H)aUu2?9 zx7?^Ez@Z@Q3c=_na7shq>TxbQ05bA)muZp;92x>bFkP#8?;8pMy)p0kRIT6Ml+0{R zqw8XLaKjvUH#Q(q?{WO{$aZknY<2&nAn{E%E6++Ur^_`NPnKW&XhJ@e1m!vr3^a(0 zuP9N^94%;{pq-s=Rsx6uTUZ#GhMr&rG>oV(kpd$C1R>8Kpg2nq3Av8JVgZIvfm&ak z0~wV$S7W<;NP_0?RxpG$gsCmSi6c)DV#(0s2Lr_B9^IW-??WdQ$*AVsRFVs~?-r6o zhJOX{CO`;?*YRIj;S#ijFDL?6CNlfL0wVN|5;U3|0u&#l!#9=;ddb!hZns*ORG9Fv zxHz-vz6!~ti z8UVB;JZjrTFN7gJ=!y>GFmHQNhImOhv=BHc_tXfo0eCT}FCc*k1{sFh7t;yU$!KmL z_Q2^CF&^cHV}4cQr0NUnTUgPEmX`B~PrHF6D=I!5F0+20`p05fT*s?tDG`|OQ|Sm7 zoW~}k!2N_)SBSIlXyJiTf+XVLo4pA{;HY@o^f}tYsKPL>{YRG%@AUN$VGtUAja!=jgIBCg4ug^Is5lVpVV}$Eg7!7(z zYqHq+(z!ie6Gx!}DJJ)NSn(0LBH3w4(D^}$iirsR+TI0S0fZiK>}!zKbGn`n0wjX9 zdy2XeFc)7EBB!Rdc$g_QZjiTgJ!g+C@H`Y75;WIb3EsQfh7Z10G+}`v9d; z;C( zl43fIx)u5r0+lXv2AeO{YA3shNl7rK(Ph$O(l=#gct#= zhxn@iA`sF_neRGn6P9aVRi}np_Qzyjz5Rj}Axu}csIcTA;*QQ4;wSXcXsWYCtMt9a zFr+V6Q&n^GinO708>u+$PLkTNUBSgsquV2WX}$B+v6#zkSh#4IIF+iqJ6&rRnHpJd zId>@5t5f{>qhX_(Y~opgr{(j6$Fd3nvOaAPUWglxlqz;Wn40uBwPMF-!JR@+_`=00 ziI65^Z{TjZVqddzBg52o0ks^`e0BSXXY){pE!#m$J6%x6<5tSB0&&-=#vTP8_I%>g>BBdfXQu9t>pEAwwK}9HJ)C4Oq{3?N*KG zXx25OUa0XzfLWb#WN5tOU2=~kHQ5ZdGUu*7xkw;vTJ>1*`pkJU_+j!8BcfE_=4L;Z z?UlYYmzU+q%Ia)Tk9Q@-ekKUy{q(e=VNOY*ZRLBM8f3jXqvR5WlDO&CtLDc%TPN?` zoh{NbC_mbPeamwi)>h}7S-U1iX53MdW5kga#JGu~CfzDdxySS*)^^d{d{FE1V6 zY3cqdpp%CmVfi^6Th-TJha2KdSRy8I5*qu z)k#{M!C%(Z;oY6r0vE>98;rcKPu!}ohKu>U55JZYrp=!yKITs(8IR-4r}i};yxYq3 zC^eo5_gqkC6)5Fux*qKBo96ZD+PZaVJvTVq3mV%eUDj|rz}F|z4}-o;^Kh9Q*5B$F zlRP@(p`I?AnPYzRlXV)~ry{hqpyN4-Cm06eCg_Dn5Cp1~r=nE>SF0F~rq=R7J{FR# zZk=vrUKrcfo1m0u#|yuGWo}ufO)H?Yt3iTh^Jg-c6nY#s*jwMC9R&{$ z>t4uj3zPP7yKHXJB^&hBvfb%N)#YE*$vHxSV)E@%s(Tu_ zvRF4k3dAA>`BLvL(4N;6>b!CI!|PNqst z3-tyculLWgty}u4B21ESrR^;2>freW@KbUo4<1j)j&#phne$w7T2>2gx|TI5^Sj05 zI6&XD=u#gR@_^Mx26ZTdGHNi{CMpj;UL96MZm2d`&-+=La+onnn~VA1Q0(^bTa+XO zUE~iGUVU{)4OnAC^T9FPFPV%0$?qpwl{9iXZn~nl`7Uw`Ct_V$a7SJ@fPh-7;Yj0%fE!z#+&ly> zjH1;y@vMqcQke=(HLsQTRdyCratY#SO-90=x{GHQ-nn&Pt#><1P!**p4M5JqqH)`l zn(&kty_kB-ZWK7|hxZour_mCEXC$brN^#6Wm07z|G#q_c(kw3xVYE9dw?9`I>lad7 z&s{qYW^ukYhI;Aq=~2f=E>nHtZVk;5L_Da)e~hC4?x5NFRmLW{teEJ_VRSh3;O)9ZzK-74_KHaHgCJ$8lF5g{FyL9(cWY|zWZU`Pu z83*N~Nl+USs9Wx*8R_-JR@o`8r|HhuEi|pVhZODvFHdFc6S`g2oRhzeXz@BKyW~9^ z@L-=3U*m62N!Co$M?ye=Q*}UX#D|hklgp?2H0TPgMoVpJ=?wLOR!OwinVcWt!#trm z<(5H-5DHfb>D#_{S}VwEk}Cr z{Lu7OLCoy<18ON(B#Gt3sj0fL$X(A1!l5@q@AXh`_cz)Ci>8tY_&xLFWxoozFnoGl zY!?y2?XQn_Q(0Hxs_5l;uqH)M7GnY11EKJ~l8h2Ql+aKax@Qg4mkCnoa|RvwfW4y< z$xVRiBX3Rj<+sIB9X&G}9QVWfDIWUfjRbj@Y|o3akcXv%IS*d>H-~0ofyf?a7FOp0 z(+j7M%Xenm{#RhV>#g(S%+5Kr4&DJM`GM${cr~e7b7n+oeNOu9wp;Z;$Lo#;|5D5o zh*aWNB_?C%;5D)m4ijL6rkEY$S>-vF{33-GWZzC-2DCi=F2=fZQoQOH_STQhUX;5I zO-@^pt7Gh6;wSLK#ZS_^UTaHCCFc0V$2zxOtz0z{QitVqeSCk>@i97Sq=-#xF8EF| zW1m1$)F5;>uC#yn4Ptd|4MO23mcl7>NutDjZ`u4%>g-U9poDnbvh(7HtaeZL-U=n% z31=}j_{l;X+=K?|oY-&|7Xlsr(xwJ?EsM%h7e<~^dTz!+M11`BY7rjdVq%*66J9+P zn*8;3E}@?p?GMxO;|fCMeOOHo>!2Ezv^GG8jGJLFHV^Izpm;Dq8{TUc95{nUUw8pkBSznj;P4vBuiH0H zFVVk4!22km9Ba_xortmJ?O1$`2`=vjgH<~B%?t!H=yJMFH@&>;9GcV>`BYbGIcBUb zCx@yF=Vd(E^fGgnr;%7KS;a3gt02kY5f6!ugRml0rTMCnrIFuauH~RO0j~9YfP+Aj zGk^bjx)ye4(eZYuI97;4C|5X(C|jdYh#oGU&is;Y8+ zA#zwH`a8gQc$YyNC9(9wx%`}MV~)L1<@RP7VIy?&WzXRezk^#ddmN;eWY(wC?`jTh zhxOSHv5o8ttj%xMMlv2X!U8Ka_zq540vH5N<(zK7OP>BG(Olq$U4|Ga$ih_Q@dnG6JNn~#(e_3c)AiDV+$ z7kEu(Y9jYvEduvFTHXv5gUNC%Hg))|NcJ2CODVc9PQFcEt&Me>mDlHs$7S>4KbN%B zpFRZhxOlYt0z+WNjeUl}x`8HYSKuds01{pRCN7B`+zTz^mBxetHh~Z>go~|$;0EfC zIKj3?xq$JeQFbqeviBXMEADG(x2~E~3YSX)=p+@n@(*sCxfEg%KCVS&fev)22h_OV z^nGrHJ*E{*)mNwG7xo!>P-Pz6j>2;9x9BWQ(|9<}7A!+5TG4NbbFMneOT;}D@g2&c z4c-E%rM~5gP6#=Wd@M1;o`s#t`%VnOY8R+LPC-57{s!QQ>ftX{vOjtv`({HVHgt?_blRy1W6|!?g{wUf(!l=XPRW1)@S;q@+i`xnLW9XL zr{A63hq>CphIAsqcMvlO+ zkr{w?w`XO{ccf}jXT~BQZ3_@C{W@`b%RvsX07B!FGg1HM+CTHL=S8%a7jeVd@NG^u zD%kN`jt}$^i;LwFE_#i0=qW%pL4prP43Fk>8k#7%u*gZJlnTTC-`}SqC6!)cAWb0$nWy^U@M3~CSyK7{_ z@eqtuXn9qHkx9lrnzYZ@31aZzB{3=>+Qiv{&}5*kaW(fSpd~1b*rzBP()1{?k`d;^ z!1Av^b9*2OdABZ-6g#g4!iJHv=t1RbI^Fze?qe+u)2*fY&>t z&z>6^G&qWBL)FPZa8SG=xD=$+6*25SD#{4*&&cfytKmX{0RTsww(8z`F+lyNK*0jL5CMfjZ@yo( zAsuOXoH;qVk$7(QTO8tYpTjWfCUMalcYs$EMb%=m?xvKRZinnsnwUhDuGo)!(s{uZ zrEYgpPWrjiN`i5k&b6d+s41w8#)NjnDX$ZSfwB4VR3|egj^xWlFzM_dW?D)j_ikL4xg~{Nw5BYkp8+^!z6}cWF_;J^Wj_dgqMMV zx!r9VTdfL6`qs3afZZFS;RjAdnL|KCPqrg7Z_BM0svtN#xQHXO-UlEeOLjLc$>y3& zK>J3hXcjgcjQvp7zn&IhPg$N*FLbiW16pcvMs+ZPo?JT)$Em_R==YW)i=T`7(zK3cePh=M1G`#@G+wPxg7{Y z&~626vA!U(V58e~eD8%$3vGpmJ=`t=9@7Z@OmA`?b$GzdRvnu2$G#|;anqHJCDC=4 zSsO@!>FGo{1TfYKUb{@7%0|3?n4CnbYLpo3^g$L~r3*ROVLxw`hIyAZ1ga$C;t&hI zLWHm4X$}R=K?ETS)&flo;3ahzJMoEOOc$_%!EP7WVBoHadIY8bxq={-K^H)hf)DQ_ zTS_3Ow{jx`no~k4z~eq~O7?|te}5b>=5!b_f9TM=KGc^jL2G}&;q;Un26JE!JP}C+ z(8eO8fnO1iO0~mX_o5o?}~Dwa`}z0|3Sephgb7uXi}K z`ab|iK)An9Rk3yvUR49dK_USdmvjcO_Y;}5A|I0q7!Q{*fGNJiCi_GmlnuPb9lh>e_3t_b~K?c z|5Q`8vs2$;uxJtQ9>gEt%-=qQLS7ge#W`V^Od{KsZm+m-k=)schPsL4{QaU7=TfZX zhg+clDI~JdqE8JY;)SVTNeuY>YD@l$P{|oO5;`x7qYrO@0VH5C&B~hk7r+$QEI=SY z2oM1z05G^ckWRsuKE^JrXA=HhJ;oU%Y;m|l{ljkB(+`?5ZR-FG1fDh#010A-Wu_2t zyCC3)-d@mLu%H2MS!EyXRI2j$$suy}5-V%r=MJfF?u1njlmetpy&k}HIz9;fd+OfV8B5^o28R#;o%YZm2>8^y2oM57AY}li@E;onje*BH zQnNdUU54c>o|orHFqs|e?YsH%bq1rqZ>e+nkj+8+hkXrU+}YVX7@IuYolvAdiDYH^8f(+ z3IKq6X7z~a>U7#|0bT#tFs5FFDVn1F073|zH;wSwsfGWpK0nv(15Hn;sqZy_CB6fP zj`bDgxVpyU4D30j5toY;g>!}{Cy1aXm)W!#i)SuhSz20J`2Ij;!UCd$FaZ%D7#IS~ zfN|(e!Tn1*3kv9OU+Ll;Gi(%im9Zq7oJ^P!WtkNsK9^U?CgW@Bj2B04pE52&5;y=C zKoBqvfC0(rq$y`80T`yG=J3y)jpWQJ2S7+Eq_Am@ABZ+Xs+q}G(_TOFtgnomVU|&J zmS>6pBn2#CTC*+z2p|a<0rSGMzd14%jooz9!sFYAUjD(l%fIm2M?Z2&G&-_=Y3{%% z&rTSEC48Ea=Pb=Rd!|B|0ePWELl ztoFX!nmTsq^e4CGwT=cZU0Oam*!$@7$IHqJM<%t+cfwFV7#!RPMv~LyGr_0H6H^49 zsclinb1Iv2QVoN@_kWn;MoA7d5(26LQ2>#d-$B#9CLdNF2m!EZ8U#TwZLfp?$>~Lh z>2$mh27-YC00N`JoOkj3{D4Q*oNa&3Ub7+B=7y$=dF7E`{Pwx4wyah3yu*i1ExCH( zv7WDd`_pw@?L8xj+?bI7X62Q;K4^(uxuW8Mhj;z{7t0PG-f=2rM`IHakFEzjeeI3q zxxB8zv!i9~ftR$WE;9W(iG*-_``|K<)mcbKv&07Qc)_j173JpPLB;EWp(N>?1cy!2 zzW9{I5}rPu2r?6$nO$P~uqZ)F;8R4hf)J=Kzyv6rX0rhTGDEdSGo0BER~(rM-&APO z%+UbL=`bNIC;>`gEGMs^tSH~(j)X&*k-`ET0h|FX^9tR~6^bziKoVhemWxCH1R@|Q$SKaNf`NS)F9I;-9fT#q zprNxBEJmOza3WZ?V`oQ0UCG1uU%KX-`|ta7)eDUYJL|l#eQ58&)A!!7luGiYo0oNs zjQ91OOk3jPw=NuZc+0NlOqOMhv@g$J5bze3y9+p`Mt@;`Fc9({JQX8~`tlPu{Pfv9 zr%sQSmljR7M2TKfH7i{j7WukOIpiwb7vxieu>qLGAV7-qjw2jk%A5uSFhB~D=1fJ3 zX1v6hlt@Y`g=A82ZZl59T)3G)Lb^4Z2aL&buvYbw1ODlYULYn$Zh)RJ%aeeJ4(&f&h5b82D@eatj!D)bLdwHF25 zL1p|DN>y3NscGRT_iKcd(KVGz$%*t}9f(Y)O{`)9Od=qFhok25r4iK?D2cfL`269@vRvv@GfCU+rO2kG zWx;6Qgg4LIuo$oO-gs()OeJ!QO_z_9NB}Sy(y27rjGfl`6{UTy>O@Kjl1Ra%5JGTn z)2IcC1U$t;pSG>}Hysi5Z-01BK}n#_O*kS8szOxNQsa^l8jYvI0S|?cMyb!G#WS2> zreRuKq)AXl#^b6_%Z_I(LxifdOu{nEtS(*ta9|=f;qkbFIh<;4O#_4!e~2iA)f5&S z810;0TNLzp@;tr*zc_R{xvJRzmlO2gj`M%jh&(sJPa7h2BOnMQ2cm#uPv<;E2jDP8 z(8dA?0mlKXf^dKmKnNHBk-!)z3NRa_3KW2Yg_Tc-5vh}hxWv6)090T7S{m;MKp zs^Hi$uttzZkYgc{MG6MYK#>3(r~@tqFbA*z11JoH0aSon1(5{>1C^i(KsJOh=mO&7 zV5H!+!IH$8*PBlcUa@KE>ZNtBw?qR0_3AYRNfl+J(%2Kpx8J>ZdEUd%ygF}Q!wcIF ztzLHFwU=%vugkA23s%$wYO0DC*O!`w8*{Xgr(SIh6&C2KsEEYg{NPBqqIA&qd2$}Q zdHpAM_eiATC+}PHLE}Jvp1xvX04w#AgHYs$gPj6} z0CqqHkOCA5V(QTlXablCL;~j0wk76LS{yfo8DkJj0+J9*z~mSp08N9e2_V5Tz&1fp zh{Yk9fMgP~CS)8?bg=mJxzBOHbRcDcVS!CxU=$ny!`)C`0(s$Fuirnb5Oz1U3e%9- ze)`Ss-@P^v3Bvq^+m|g{-*S9(^|HCdwo39tz2RpH?k*YLuPl9F-4l;yF4ur)X0Clr=N*4t`}rbE^c zHi!N`cd+7)G>0q#p@6}_0m#I`5MW6lZm?}&7BB>yfj}Sxa10s&prB~rFo=$Tu)xfM z6hJfSmQO98-O@W5OK05mC=xPCy*d5u;inIm1#`gUARWk>kj;X_LBo*BLL>r1;}8zP z&;aD*L398j#V|1r`C;fDfNTaLg@Al;`Y2pdq*4W27Hw|pw=CiDurVj;!y8XD?H`BB zt}N;D^`QataUmVQanrO52<|WHk^tSI! zDQ*{W{_w)->Lu0Dtcs+x1Xlp-xh3v_;arazE}{oszdhc4x@!Hzq0?(FUQ_<7``%lA zgDJTl48g=Wm=<6PI0LE*jsc8=M+YYfhyruKaloqq&xMgF_}yR`FqsB#K2Qc7oj}VY zxy{|sa`HgM(1Rdo1B-%#AT2p8qHfxT!l*4 zph^9una+K!M>AHW=W_>Zi&rPd2c3yyK6_2~o6q_d%xwXM=Xrxi)1fk7Qeu){T0Gea zTF{P;j0nJvU}3kcpCvRTQAQ+eyU;``% z93gUiI87m)1kQoz01g-ih%odv38Y{n1Bd`optlpS27&C3vNhp-~AQT;Vb8vg#ndSv0g-^H<4~GJyBNpP2wt+cz{z_-ns?}lb$~_Ov zMUr9;m}VR^acU&?gLv(mA9;J^FaFR_U_yjU-6v+3-nSL_6uY0F5Yk5Xb*DAxO7hKmjlKy%@Zjo)J zM$TAceatXr%8^FOGAE2HV;BBp&a*|z$;`Nwic1^2JrH31Aw7g8hIoucyVDs17>8^c z#`@AE7P{)1P2vA{a{iX}#igDVRn0((aq>UGt?atH;v`FOh?j zY3%auKb={=xN^9^CR_5$@v)+L;uGP#9-oTFvmT_<1w~6zbx&-H{Nhu$-}m4XPh&q? z`BC$Y`=7ew-l2EXo;sYfoW@o1edT!4G#G z+H=^~+ZXXD(6alR8*BXUq+jfMC(F!RoW$o>7Nq;Lt5wf2>~{R4pF!0htGoZsjci#@vHebC?18Pkq;ihQ z%Bddy}i8%9n*&f?ESnH8hbr)7y5WE1ly}OCq`5rw=Z0mmR*W z=jHyk|9A2;^{cJEcw6Hc%l6cc4W78J_O9=ED~gLptuuu$J*U;K&AKbtYxjn~dFMSN z6a4en-1FY)UGZdE)%54#R-~Q2M%w%rQutrA( zKXazz^5@?jsIJewZfTNW$2K~BIkW9V9>W|7j({D$ofxt)uEP7*PMY=6s^1Mu1jy|y9oV!$Lam!!=s@b*EJVc zKlAQzI^#IDuq@&W(3>tUoL$O2B*xs8E?W7-%ZHOm20`fW!Z-RUa;z-)TbVQbK9aXxHbFnjURcs|Ku*~;ErVn!oH!WKhX2lfsRqDEabU* zy;e&STux9{YPh(uTLnn(I~ zJfb_3dci!i_L~0RmwXQVpSy0|jrV-xStfQ2WQpdje&*GaA72k29G{3pWKEvi|5C=ZDNaeQ5Y1;>ulM(t{pqhe$MMRi zzF27RVuZ5<5AalH_jt(XE>BxoBPA41(5q4qiC6b_qX&QRP;PO>(wdy%3=ezghQ-cH z`>2@~R(8Crz488ASKs{go%0&ze(m;RBc4NC$VG;@GK(`^%8-;Dlq_$u`C_!)z0bBye_d1@`yQLLuyo>25r}cUO!1M|VytS|OJGh#7y}zx0Ay?bW?)vqSKw?X91` zanteE0d&`cUw`oKPvp6qOi@o&&{X`!j^nBpN-GeLMGHgjGwprUv-tLHj$zn@_=F8y z6ezxYVDC7r+NF&%5dr2XRIz#RkFWh{X?<-h7F$-S2g__Ek}od3zO8*k=UV;j(030#JZSaMvJ~kldg-R$pKd+<-tiunNN%}!V3fuz3GT zePVo!YwG(4nlD&htvU{)W%MM}PC1mtH+~>osey-t6&c*ktJjJk~lTy>3aC=nS zN=WIE3?DkYW6`4J`%ZS3>m-NTvw4(YTGJTsYdA~gYa8apJaYbT?_m&pUI^Nbh5u75ds+2S0krB139h*9?d(-+r(RegCm1-5&4w_~=L07MB!ZFYCGc zcfo7cRS=q;i2EXXYUNxqIdTeeE_v^RJ)Uscub`TPbD_54@dHDsV*#^oIX&e-armJNZ_uA5$|>h<^<_8mXf)|VI= zk5L4GtWR&7OKFLa2GRp7yk=8t^Pvw~Q?#y3t1d2ldPnDkrEh=!z?;L7 z_r9_9+RuMw)1}MuoSbwhHyCt$!3HMLjaSdMS^3o)a(@2D#%nIC{n77sfBvIOnp;Mj z1`~I0UF#1Vvz=BWYxzA+maTMTAu~#W^k(JkQ1F=K6W4ECJ(3)JV|VZM7v<|}9Y-fX zs{oPAqzAF0VWn7A%K^PF)kQ!H01W^d!E!I44UT4bT^}*IFf$oSsKo|#90nJc_JpcA zSWViQbW`i#y*IDy>uAX-ToB4FHj<1pA&q^V!$+Td#kFq!D28BGp!v1_qm50E{zp!- zuS4;8RE3%{ECF*iX&a~AVXp_fBc;WR*`3`ZT`g@lZM`Do&OHA6Ki5^29X)ge{rZun zX9EjHWAN5}KmBd|yN`bL;a%TmKYL~@Ga*j5o%-=NKeMX#lrfId+Hze>VgMkNKv1D$ z4APXLR3hQ=wtnZ2OXigLFR1soM|-;a4LhBxn>QQVrbg3a+~*gvZ-Q@IUG?sP)`J~g zSFBzp8RL==VlgQ)rrV`W5I|WYYiDfml}eBZq#}nL2TR9|McfpeJHD(#RU-593QBUQ zO_U?8(df9**mPpsrHhVt3}3K#UjIOJenn2psiqXwmewup?(W#UI98e4oo1K2a{Gnh z1t)45Nj+~VB1~i^g|?j1K0fxIV+mw=ye{LDkL7A;#Z*3}O;V6@e}>0c1#^LZD1~B9+eWZtPh&r-WLm&wk?G>MTn6$f8VL1W9{h^hYOnHO_H;U)7TESnlNX>~#5RD0K*H-7BU@xxA% zkJ!jht)ad&`aui)7kMFI62u>P&doTTm7xhxBfFw^fSdn)pB zl^5pb7B@I79t>)0=9e@y%#Oy#=2utkI@%v}shz`iZp2qvpfz_VO7e?e+kGr$X%dWC zdG6hoH6I}YQakd8dF=9XMGCK(DAF+D%ku{-$qv!j3B1Ksa?bQfAoADSGT zxM)eyDE6_5)X=0X$|V*jAV|`fOs4F4vkOZKBS()9e(b8+y~oERer4aDLswtCs@ntnKXD%P4^4Ulg`Ak7NW>7K!G&l0&(iqNSfKY1cwn~ zI35CVhZ7spE+ja((pilvlNh+bd4SSR*47k*qmT_IwgEA!pmC)5nG%t9Hp5X!fxE9; z%pBO?lhBwmF&;hL8*8WvY;PR!P^lw-o*#F`WS*K16@-(cu`}IezKmm_8I@q&r^<2Qp(D2anPyG55pS@!umfC#rysBCAcI-JaZbjBF#KH!u z_z*$TO6YDsk!glqSS6ToNfg2ZJuF8IM#}?>-pa zSR38hCN5l7gXY~GE??ykLC);gpI?1IFACkVuVU?ns!Q;HeeY+xhDM`9EuHs& z&zrrxEFZUa4WH#xj zO2sb)m$pP2Aj<)4TaFi@I3OJ`0nQ|$;A9ZeKw3gFNdw5SBqmINf-<%sia;C%Da|s6 zIoPks9)|pm2)gYPj#|Nqs%1|zRBWp5Af!#MSki@27LW&Hhaw~EFzmp1oW1&fd&r0H zxoP9XSbxG&e*OBcs2I&nuUEe%~%UtYK1o`qZ1)>Y?y_4bV~{SGd>-4*Q~PK^## z)m21?I!?!2q-N=cc^_|9j@-KWJMaJcaV1ccSdhQ=`m*bgH*d!WE$K|g7UrszRhO+< z{Ql815B~6l?fbfp9qZb%2w%SGs)GmKnm?z)woHuhm8)vIM$D6qt<|}B{o17(N@ALW zg@X_w+$Oq;5nzHb(I_zq4J#C3z$%uCLN!%Klu||4h(-}rT%cmrLkZD>I`vS+Q54FF zN|8#baO-(U^QzL~dZo+hQ#3!PC0;yCPzZ=06RN2eK{+}xEgZlCdnrRoQPAsNI4|Gl z^}cerxBcZ;*Kgern-rT@&0V)*{pe_uB9Jejt=_Wem;d$bGmqU}UF?}%F92zYbboD8 zrhQ1(ib_n{yB>?ivg`yc!Iwg2_xtKLB1zU!A=ci;2zw6*uyZ`N=8Rv@H1f4x1PqE( zDl;6K?^dzGxn%vwT_gFZLc=;3pnEaL7;&WN3YM4%2?PV9R5Lju5+iPcE;Z07fFwkM zlg^lL?LLvnCT_dx!be_cxphlr*y|mO#XGtak|Kj!wbhmN#kqS<4lXNKq#1AP>^Lyw zxoh(x`pk=m@40PFY|;{pec^^nl^~4foO<+uM}GU(iJXYm-PBP$XU-){=REP;F2C;o z{gd~W=H|C`_Uvx%Zap<{?~U_YJ5L?!!PIr?$G_b3nd{cvc*zBVr)=!O2m#kk6xAFC z)U6Q$m|_V+rV(9CF~X9XPD1|S$v?3zOS7!u(2DmK>w7)fDaSJ?Zp zix(iOHVqkJXV|ONf8uMefB!R!J5$l;pL~1GhQ;a0%;7dtk>ew_r+E~4Bl9kFcRah} z1GN5{JA8pqz^}Mfb+B&~xkGt*?nsanhXbpZR~HqPb+?@fhh16A`Nk7FZ@FsK(Bwoz z-JFSNU#UM^T2YzE@SP_UmoA%Sq%scIR3A`IElhDbF1;R*QboiT1RSX-acXOZuBZ;j z1ltamRJt%@LUX{HLRUDZgd#36<_ZFVfpNzmR0`w*jzCyIG{RDx1cXW`&q#+0C4h)6 zZNe3V4Fql%awGr~+(HCl!a1TA*Hvs0#*r8mG#?`~&Z+~X(=@>4^7l**@7mvc+q$x^ z{j&My4>uUwjOlZ&G%Z2I)>pd2;{n5!7wc= zFANY;Q(X|yG=$tlv3~O6@u~IxsM*>&r&WM$+o>i);&R2f=!M8uP zw6%To>DLc0TeAEUTbDcLm=^E-#jd_JD^};yEJsoiAQYF-sIYVlCMHq{6A=jYITL!2y z1K5XQQV}?jh>QH$(%{%_Dp)Zxj49rHT}~tnsSuw+la?7K853(D{g@gmqAX*$v|BD5q{e8zo_p)``W-uf-{o0nejfa0i}5YAp8Q z4U3mq#0lx>M-RVr!}XgHqJRye>KKTWCc>KII0UHfMy5>wkcNaIG(yq>T!1yn1toDQ zsgQn`7$k4yoeGRp9RA2banG?FM3`Pxm;$-uPXXTQ-uFkAVh1;hyTY!oY5<++hNfAIccPWUu z-CksOS~%d&L=&DmAI);^RWzV15%5Ql;s`+%ZaJ59e$2e3hcL_`WHqyUg0Y#=I;3fhKGO3JoVZfFYB08YuhYU*!ryuL(nM_IoWHU&BX=Y-e1pl^w@S3$1shIiy zNqg@&xvP5r|9#4*PTkp^?R_`dY&M(TLlP1o0YV2s6fA((0xEj#Uev326|vllf)xuY z2ug=gLm-e4LPC1kWP5MZXFm0m-ygdhLecyEet(nsV;+;4*_rb>=Y8Jiea`FoLRIUx z&3Lz>_Z(+>KPBt`4io-=dENWo3=^$b6J9+}ef5aDsEJgUDm(Xku7o%DSd-)KyN;2` z|NR`kUkLyhOCjH1CHOBjzv2wH(f_OO{`Ncc z5LvV`uzH~(0M1_#k_e6D+2J0Z&&Xs}qnesePaUBZTo4RIAkPfbLPh{bW|TyuO5XAT zK_MaD#_CE8?@*p1km&tnzi3JTAkgUp%o4z-2pb3}!c(4fr)9qwD1Qf@@4XaZn6c@V z?-qnffe{k#f2H50k`?dMkWvN1M5Ptl;&$`m6&eQx1j{<`#7?KU3Qdl9#c>09(ic8K z5Dd}QrJ-cPv2voSN{>g#MAp{`T|S@0g5<=o|Bnarsd4WeawaT=2bdy)q=eH))!#>V zi)SosB}kBn0#T7vrVmL@e|H2(AVJ<%Exz4P#k;zdM0i@0@eZ}k6m}T>Z`#iH5j6!P zYA_&M76xwnuwGZ9WD24vfB|SMh~_pU8(gLF-$TkZEQMawNqH zOlgSeE9Owg7uhU6H6o*>s%=TnmH>b?TvVi5Ss@JRTK)_O5(9!6?KnOy&4jl#(g;Zb za>^l+V#KH1Kb7gug#=I}r_Mm*GX@m$LE^W6;ncZb3uJ{=gdl? zK>QtdAk&|K2%i1~GW8^Y+R$nSqc~oq-utvrbW34A(Xr z-513_w?rqRxh)Wj$_*?nSd|xD zu{Tcotrhf%J@ERrtmLOBEBOxj{gj0JOilXK4<{1jluIfAFpv(a+;9qzHY2^qr+t+F zsr3H6VMl`emstXWe-hmR03cqcMRn-va>}apT$askH(HzE#3^>odCI9Fbi+m*4Um65 z_Y3hh4E??Tdt!v$^R(A_QVeu+%i`}2lxLCz-j?3W89#=p$Ra>;5Ha28>FzT_JRvh^fAoH-m%@dh(;6~B0F)wy z04GSD>RAXO0ie#9Ge`^o)2<5QJyX~F>dVDH?N;dRi#q)!rQ{w+5Q?GXQhf78+Tyul zV>^x+xMn%#98Qf1sv#l3Vlt@wU*>8Ejtq#=toYt9N&hKVQI&TN_?ejn&3vabsVmb7 z7a@d8f~Q&XoKPY#5CRy3oW|r&3v&d3#E9^JF}URWw9b?u7^4{vh0`_)XRHNqWiy@Z z^IQ+LuO@S5L1`4i0cF{fH9mL<;|t!Og@5~ zVF$c)oZa|YPmLnUxfW30(;xBM$u*wVjn4#JDFvR%+9^T;xB$SCc&K5^C`bBfB>aqQ z{)|-)K21zV?;E_PLENWbhTg3_e_KX`Kr+ySsId|1YD94{zGfwEDn&v7XMkoz#8W>y zUEpDpyzda3%uAi3o&-P84OGRKEQAvycvhMCH$ZDNQ3Kr`KOrjhvjjzo<4>4l(>n9Q^znx+&0p2|PoiBuOZ z01{2D^v_@LwjGnUggKQ^$m3PBK>Q!9z9%gCOy7+`9o#Q@IW~6M}&dNI+6b0Z0(Zq_k1XwaKZTHPcdf+Fj#+ zyS;0GoSA9hnW%}*Ox#aPI>mHKRZ#_(tYeGn0d-U1>lP0ECbN z1DC?0n9f{sG!yX%ye~22eP^T7#1Q$OK>qf72uv*=rpLnc+Jg-C!mmdOq0rtYC-Snr zMlPwBLi``kcM^tjFp(gNfg}SEz!B>0!oeaqah$GL!m*42ygNemqM2-=tO zIrZ?wbA);Cu9KWO-tn{|Se}lzk^@zYGnW4EWj9StxHF%N6p-xwTaBu3dwNI$==96T z+fNcXef>Cqq@d0W>)`|{S^c#&BX>{^y^~ds%BM2moD1LKewAx92?ssW(@9FPKxgXF*&a0W;Pl|Up4mJ8gT7Rpb_3MBzb&LCjC z&8|W44u>atMmJI4gI77td!T2Owp0KBGTl$7Eo;ckLRG;)D2SONn}K0ZH$8g}*N7zl zGF>0af@I{8eab8QA(sOIU`9Z25cnM!9HC72g0!V5$pM#uO8}gk}0Ra)F$-YK73E609;NxNK8-HQ)@0ZClefcdkbN%$N$j^92L|0P|_VC}uDLu&53`RD1Vx`|RdJq4IA>kf$!+iHwZ-D>YE&$%&5rZQtaM8TvI{j zmG?C_FS@_yvZFl^Q$Zq-J|F@dgY@6ducq9(rd;8)0E9zOT>_sxo7Kcv-U3ABv0?SU z9wH3Da{yzI)74A~rzuB5NZ^uLRMi0yc$=v5UPC-I12K9}!{IZe>r>0=>FOB)hr=z6 zpL*)p`diPP{l=m0y}fl6&u|vz%$3Rb6VWepu`A# z2GiqFLLj181x8t3VimAJ7@xJGLIP;Prmb%bp4;}yhued{d-&LGm%j0d=YA1WK>?5y z1OhAoQD6+Dgm45dTm+3}d|uo$4J3fS)vLv$@WMX&@M|DBM1qi!AQ>q7Oi^NH?JF?= z2T1{K`F;`+9ZkWrFanB^hu|IXtLcmapI(ZeF0&B82nYg!KuRDKumB0b1$^z?;jV$s zop1Fb98gu{f&)G(DUA&Ek5j5N)RjoVQ`wwpYL}hW)HPQ1NLQ>T1_cYwYln$EByy0* z1M`3?aO4k;2NASy{0yz${oF7H*A6=$*;ov;-P=hW0zeeievh z(R*saQ_&g|kN}v1o8gO(3Tmh~RSb>rtWNipV9XSz1enCo2aK#hi_>sYRb88x_;;+AP zs$ofEYeig=z#pGHfOdDrYpypa2yeQkU9cb+24FC?HgOn09yA4T^leCi#Q$_#3W=Gp zD1mXHsy@xndIz=Vy_pmSDbGL=py?4O0Wg}L7V!+n2I+vVzV1>uwr~G&t|W859Oxcd zFuyLOqN?gpLdh}T@<3LVg*rOM88J;ohIPOIpo8=wh#{y?(<+Kh03Mh#t7!XMHAPy+ zXMQ5(U9zdYXJFFu{DNn{abRG0Jf^D?AGmPgBf0rSNstmi10ew<5CWbLDgjpjlG9^F zNYG~1OmEkDFmUlcr~<$sIe-AlfSNNs>&(VNr;%M}5;CW2`G5&X2}FXJGW0`02@niI z0z!ZZUD-~8onC#TGsTQxq`rzm7>wExprtqm*a z>p#D@qM?KfqBx^D+jku|RumCVmPX2u68Pd%Bjv3tUwGjuQ}LSHYcpeh$E(L&pYVrdWUCD@Wo#a>aCy00ce&rGPOI4r0o*4*`g2u*%d1&gsrE z#Vi0Zv#fh3Kbi)1RC{Y@7zsAOb{yB-06mM1Ux00_M$c{rH`) z{P{Zv9#^p{rI*vLxM1FBJiM`UFd2p1x-E+$#?bop3ketV8e?ztWgh?Qi?`l%)-AU^ z`P4l(cw;bWf$$;k0h%g9=^*(`p8{ZVdMn45?_Tb3c%Q9RIfG^6KG1*;n7$3qdM9XX zW+5G^Q}UgTUqw|7Y}^arVIv|EE(w{+-&UF6~Ff$lW zKRCT>Gg|S zH!MAqK`V~kd7S3jMtwx zGCgUJTgb*_&p726qyjNC15unZzUIKEO88=WkOBakTA_)zhanRn1qci@q=TXYA!m^6 z-ci_jJ58q&1fD5g<1>nc2(XkY0t_G&P(Tm_fiO}unsWVg0TpY45a!58*dzqU{`5b8 zzVf0rB#|$1VmxOAh@a{zs+#@v|GEF8n;SJ0)LoUz1Ir|O=7B`|n5 zSod^{o|+aVpKdHJKnm~yXjlbJl?V%r0b#6S!6ZTmoo=tG3LaK~Fd?QQx&%tVmp}=S znFBZkA%zR10AYYsX(CW{o=N)%qawx zb!ll>!I5aBfN+k<5|jH>3IK)>pJG7@5CBX7!oWF54j6#XtgJYk0RlXuV{Frve`$NCF@Vf&d5=Faa(=!*54JM5H1FCID!98%V04BOnrg zaN{C{($#I%I}QyD4cTF{sDO0gdMCP$mP8cKNe}lXK7Zo}$CG*6X599YLgur%v82si zS8BLCVwOY$9@WYX&D7P}uo;Qdo*lj6fEjFC7OYR@9PfdvjqCr87F9(%CMK>udr3gB zAVCO#D|~A0O!73hpg-c*^8PHpARRB14hQv@&7=YM=|cP1xa+1q*Fe{Q+( z{LW~)=Q41(Uyf9&${hoNx<29Ky8UBe|UNOoox+4kW5UCDFgt9 z6o7#PFgnv52qXeYz~zWa$&sK^_)}Yl7|>~>PC4DHI0%8I;8Foe4JIi@CYD%A&j(ZC zTw;|-Utk4`Gw6x}d(&mqDabU;AT7129G3tRATXi;5=pEAHA*77j7QU&%;%GEU^Kn9 zy`(!uC!Fm9$clwcTh;`IGJddB86WjU7EDv*+yav|910m%&aDX@>PUJbMN~bL!eg01 zT|*bHSQOn9eWj!4N8f!FOrxZF)(^H|PH0haw7x2jkTeY!kaVFqYE0&GnQW%ui29cJ z`Rz@Ae5SLa(%i71;kSR>);zDIBoIkBc2toSRWanzLj(DN(aev(aD8C_Pfg_rK;Y^8 zd5T$h8bit@QeY~~BP1m!l5ossevm*Qr4&qnltOSOxZ_&%%^^aSsbeizCkPPsB+?L^ z$^4rdc2g;@PUV@*KM9~w2?!J-$^zgp2&poJAw=;g@}m)TaA0D`2+C%Su`Vl<&%V-u zos_E!URGX4LBk3eNz*)cJcM=~83-5wm-`g5rlDH4X9Ji7IgUfIGMOH|cHMF!JHe+R zE$D!9^h8Q4vJn$*o{^)O0QKr;H4vg?yXkOVo=RaA0RVVxnj@*qF#pat;q>n1^BK%P z2~uJ}Ob97K2=F~Z$6X-&?Ii180{{Nm#sv}>upq}$(MBa*TpcTbW!APrni(>b zL?$hf3&Njz!_iBq<1XSm~AUPz=1ii(jWh++~CnknBc_Hf3x2a~x4 zje#_?io-?YzIY$%_y6zP>FrjkoHlTtxdQo^+r*$lqr`Hdsx*A=vPwkhiusiugPIC+Fag4~P3HN&{h5z!*>SwPraJ0N z772!}tcR$uJrOmLAJo-SN^_PMj)X87OfjTrKFir|c6ME@X{aEr`Sp6nr^Q9}y**=< z#bz#R6>~5M00GI~yBi1yzoTo7!_>K#zGKZ6G=b z2~+{@0TAE}2n9+(762*07*GnX1w;bJfPGK`AQ=!1m^1AhATbaHh!2q>a2f2GtY2K) zq8nt#{=OHsAANdcPBbVh!t~Zj5WfrsdMUxFEC2?Q0flK?Cnlgs01V6q zQ=K`8%z?~|O$|dX3sx42VsPp(j6~qu*A`1-aJlX>W1A?^Ct zt|`(Ww0_m%gQwyx3;vsXgWvnw#{k(9-=yx)7uw zB&aZbb=9fD76#u1b;bgKNB|684yX7b z7y}7|M8KvFC%V)7VR$9a76-9c8Al`IPG{Qj1kxHHoQ7Nh za2RqnL`z|81Y!h00mlQ*fXnF<{uqPnL&yM42UkoxZ!rKQfodQTATdpB_Z*N6C;^;K zLH__G9Z&(r^Wa+3>qa90K%tNYD+>w+NZ?H_*m3m_eVg=U5x z-}x36#Pj`qJwHCtowE&?OhI~}>#3jJern{#i7ccuz$MrPa9!{jI1KU@_%8GfK{^e| zNysO`^&m9?J_F{1^g$|+$$;;HqCy}Dssi||(!-xz)BBOu-mG=+hVmW1`Pi>A31AX( z7Jv$x36_AI4Xy_+0w)hrPJdi32UtSJ2iE~EA)f<8A(4Ve7&>}kA`8Qr66Si0bIy5V z9p)ea$#Hg=6`bA2(!YNE*Cm=qG($5~Kyk}k+Ef+(>b@^5yd?j9IS=& zzkVBQ{K?XlUcm;2flCky2n>ZhI2LdYo&+NV977-q9tOt&qQb-|cmf;_sWcD@0w9%! zi4-K#fL#KV5XZ5$%s#KI2EUZ3TG{+oauNU_H3s8jVCNy71VModNMs?C2Ty=&!(;-? z2qec~A_2Y+KAA3x4Ua&7FErJHqNxP|G#JUGGXccF6Cmt#_IsWLm&u7Sp&*wkoRU;P z^8!}3qc77#e${gVV#^YjKHhwIhuu4@-28G&L?uU#zUsS(dj&&+t})N^cb$k4gaj}w zcz{j%)D01)2M|eMKGs!U$ae1tZGYlKVO;G`o|n%BJ09s7ccm{ETsf>1=Xvqc+V7it zpM_P+6NzU!vbnq`AnibU5^@Dd7a)~{tOYq6Y#%Z%*bI^*Ffa(oEN}!l4^lZ8?uXG4 zh?GGh4K6@;7vOdCt0q#`?t}dkN$>Jiv+w%Gml}#<3)<`2%%`f*6W6W#6eWo4|yAG3le$o5aey}1*kG-`JkxQ;Gs)1S!l1ebKK?Gblxu11*qVXOH>+% zsyTH;Dt~_Mu!^PNvb3tK*ch)aTKt=(JqtGkm+2P=ywNBB$KCe3Vv$PT>^zcn$m1`* zD7}Naq67^I3Lu{@-E0>o96(rtFu?X1QIKnzbkoNjC+DXR(d~L2E%vopJaq2&i{rtG z1PBjY4*5K|E_f1r0qGoo$E`f%EXY`(5y%z5;UF>Ovye;ylaNY4Ee{s=I0YQjf{Ec%^ zK*_rvgd@;gzA~2wO$Dv+$;|j2>1|DY``)xtnP0y+i%O&5+CEl8WSoJJ%>Tq!qsLx; zqq}pmIUH56j|3l^^h#@2ec7vvN7Q-ka@>w5H_Q1yNIrMg*q+zvZf8G2*`;$@LTc3I zx+4KRZ{Xyy7oV&T6g$YzNe7g|xX$`*CKUpY{cTI?uVp*E;f>FCY1)GE!-W&iI(Y_7 zO_0g3$$kf6&@`ABk(haP!?%6xI34dV=sJYL(0K$J&i*@h<#@M+2!!L1Npsr+RR@Y7 zG3erBJp;e%I*(_|51bf(YDdQ#dwUX->5I=>^_3rAtz_ugKVH0dsHj*^U4ee5R1G|N z|KZ@}uvJZhY1#QIkXV#301# zmmGZTKRH4GU=>(mObWpPAV2O7p0dpn4Il3AB)Ib@&n+9z4}b8Yw)56DVm*Wfz5A+% zE-3%;BOm?!%C_=Y1+JN#m@ujPI?wcDpe9Cbv4OkVtHYEVDs=tYwujMa87o@;c74v4EB#E z_w2WRe#OtO|J%Yp|L82hlV-#@cE!P~?^uY13a(8_Fr?bP3sS1#>d1q4hG%~s_D&v> zw$s|ustDK90z?W->EOxO!=ENy6aBdZMm%u&;CN>I*mqFW#Mq&Rs$%L|E+rgsY7NOx z4)$_jB5V5&>Ys#g>DaRHO@)N5s>l(v>j-l5zCG#Cpi0A9Sbc(`#h*`4d>nP#AHVgI zF{`I{I9D7gB(e$GI{CmIj~yMp^xtpdyAEY)B8x9Pr|$drzgk?M|L;%qJUZ}JWn(DS zv$QjL>{oxBGv4*N&qtRhbA3o>FCW!<4?Oel-#T~mxpTkr<44MbK*9+dH9Ce!u=0v$ z+6qToKG}Ku-+uiksf9d?*?!RV{KeOZ_1|8x?`zL|Xvf*%Xf#r-{PKYuLqkEct=sad^ZvF44X zE9S?NBlZ)?E4Q8~vhdJ{&QCf=_m$FtAMHJ7!J?Ys#PNXQ_4J-tc=n=!9lL9jx7&f= zpE!7B(}gcTb7{+YH(rKw->1#j@$?X`LaEFpBv$c(64pEsdgfP$?u=&7$vEENSSDG( zA>Z3{{>sXVV3c$%Z#}Dimf;r$FI~6L(HE5!UT+V)x#FxFE;;MtAm41Hvo@{OOGEq1 z<3?j_a{V$aqx1jq(%2XOwxKe75wupB~=5x}~^pJQXxG zX?wp3zkaZB+pE0u<+sN7?dZ5>g_7X0@l>uPq#ZqFXIysUrn05;TAOOh>KaH(t20YK zEd1B5S{%51f#@0QRRYQln<^gO{+qi#deP&%_I}~2sylzR{|`5N*PUD6T0O6G@}WTX zg+Dy_hoD*Ade%Q`ul>_6HmJ}3_J*L^OVo{h1?{y}4Qr}>GhTX0eU(0UR-hk}bqd13 ztAco5b2t)8zw+|4C>Y=K`tfWMkW5^=POmRl%Zkb6o2na|n-6!Ix84`gjYvu9B9HY~ z6=kkC2W{IkT%^y|u~J#C61CWn_HVDNef3uv^r?H__?bR%l3uo~DeXrn$(NMWJ%9Aj zUB7#zKX?4qs@r=H8W(PsflXHTez;)P$5Jf&;P8`kj2ekBU{V^>i?zB(UOBLOZdpal z{PH!e55CeC+B1X?tw?7L^RE&Jj}SA1^M7rwdm_vVD2 zXiD7C@WXFk_3ipdcU#@bn>Q~R9k^%QUaSHvt*>bw2s^XMsl$WaU0s`&*RkQus@47e z>;)5j<#P;i!=-n|&skj`U5Su8Z(h^+t7jEQ11J03d!O2QpewSvEfm6q3)WPwZSx;_ zbl+e9e&8!NEkAF4Q9#27jt?kC^ivmK<5ZM&yg3kCkZTNkp5^b}>-J7gXeLJ&{C@uB z=1;?g>fP=OZi0Sf%fkI9Cy)0`N|qHOl(od%+3?kCm~V%v65!_QgU335{qXMfix*zJ z)>bsda~de+iaw;+}e`A~h+YQ@R3DrM0~?2**gqFp~a z5(@M@zDx9vcT*f#(xf((yNOBiY9}5Xow$6%tnaxce!I5l=4pjH^+Q_s9?xm?FER#tb}b^rDs zrNwjp{N<0tW_26ETq;L#zWh%Qk=uXy`M>dosHJo$z*IXdbgXL(a}VZ(7jRS+Oh z^t>NEHrms(=%%jM@2ssodoq;`mK52ta`eY@pIkY=WilZFsYow2@Ijx)D6O@;JxDI- z>pStczdqB4+y3y?G8}4Ug+82mB7`TODcn)2jA$HTVn>bWzMhf&JGWi5l}RHE}W<;EZOJ@ezZ?P<{s z6AuZyD&G9o=)O5EIlw+ey*>{zPnCuLLB>K26%|G0`R5z8)k|O4_hx&wAZiN@&f$^P z2J>L8{__5j^&zdGs;WlZd2`#24@?G#5{rju@94NzUz^PpI{I^gP>^NNc=uSrvui6t zhN_ZC-GBf0lY>Kv|Ge!MO(C2e^n9JjqqYbuilL$qV<&)B`zZ3#PT$J)*F6`lt+mi! zBwc3-f;5A_{IR*uefrf~K5@|!<#V&kn}6}(6Mu<3bXm>g69q_3ww*8U2?nGI@VSjg z;QZ!HV66^sNtj2V`%0(_*hSzcF5XbLr!VCAtRklDUVZ9t_ahhIwd9<&Z+=NxQS?Mr z)whO!SvGXj^WPi);hGEEyC2?l_sDPOUw6^MKPYc(f4y^V;|F~&PYjo!QpGety$KZE zx3WlyWb;jP>MFbU1z&h=AQi0mK;2#}G7vGnOv%}^pH)MpM>~phuJ!7HJ=K+sWko6( z1)R!T z^Mc0%in0;NQfpFOe^%v%n-(^Q7Y3Ae`=W=w`Sae15juG)*l_*Gb;sx3^_iP5xx};M z+nr3NzUc8^ezneWVZ0+d#(M)A%YZ7N8c;IAuqGDjPCyy!4`fb(usE#*#|;HjD)J!5A7c4eW~Z6FW&IM zNGN~*4ry@qr*|hMPH!}xz{ykFV3*rYg&!{XHfI3HN zzx|V6O=iU6=DH2-vumni$d#m_v6)h{KZ$R=xOmwtZSTp!#?n$Xu0_LoLvh8=|FEsI zw{P=`sBTmey`G@7qL)y3fLoyGt_tJ681k8^YV^Jb9z1o5-SxRo4{Te~$$tC#i?u9? zMt77$j;y(@`y1cfRfR79*!&ISYPRQvIh&jRt$6tABmU#w;W9giL(%AhmW-RPN7=ko zIQB^c+Y4i|K09yWphqqo0bkH z)O^boKe#S$iQ8*`GpG72D^vOAwpW)fs;rDDfoP-c6quJms2Sk|#!NHoI4^a1AP{1` z&#F{Q^=vt3?P3bS3n>A^6l%^t+{e#F~VV@ z;NvIX?9OA|vOKNQ^jTI3J^A$ZKmH)$SsOeVadL-=vH;O$s^);50usPTB2wzv6PUDv z*gr8z_Z%Ne8>Bcm3ZVea=Dp#$`<#m$torV9)a}B){~9=6n8r7@7Na6tB}`$wKbG<6f*Yf9oh15WY(NHXyhM%c%!J?6vfeiM$N9tR2dD% zO0{{leJ>q|Km5XObmt#`y=Zpx!rBR{P{nK^DD%i`$*`nYI-y|EgS&gy*IOkutJ-I~ zK&p{ABt=2uGVWC>`1MFM<+}+E7h`pYVCN*Qf=T8C)WlHViJ$%c@Pb9HH8mC9@L)gq zDzbDX4k&lo{EIhkT|Su_m~-fp6Ic8(mMJ?m+&`~16w<}8OK=7g48;xJsn>$B#g^tE zgG$Q-H7bsEnJ6>y*Q(=pJ+qs(p4uM#UZOL&WnSw?TE6$Uon4Eo&4RBpmg^p~fA;y+ zJ9ZvgzN|hNs+26m>2XTBB)b%_ZZl+Rue&*0Q;{TtL9_9bKRvOmzNUTt9B;B?*{rdr zUJaX39jQUEMovtkaL~x)*he;2ZhNEfmnXNP-#qY_HS1P1XvZZLf@^9~?6Dn*K*3K6 z)Eo~bENe9BL__A%Mawmk3ZRo5Nsw~|DZ<{L2wm^_hGCRg_Fk%_e6~a(z`@s$=0cVz zHATj$yMDh_=xwu%;b>WN-lwA}Dw7lOP}Pgw&xU9DF?{roCtnK$^5Ig*OhBQaRJQqD z2lQarDXsw4txc+|td=)g*R9e&JXdW?SYwva*)*$qG?yLd%J1(i{MW7LNC=H35*Q(7 zr|ah0D9>Hi05~mqsqfjU&VX-I&2lFnBjgAI6Yw(O4o0Gl3s-&g&Yyg}xTr3dFRWWc z88f!;>`M5u$drm18XHPPij==@9sSKW(ETsez4XfSw7FV;z^(t6(taQ~J<63q6p=bBb zt0@6BNQGx{Q92e@%}Qn;BoqTSLV?2)pVXCc$1PJZ=jePz9Vp~=U2nMl%lCc$%O79V zy6~-Ihu1Gwd7+Px2n$9a>vE!WcP1JuG{7RANg%&bkdWdgY2HCq^)18J>T34mT&~0) z9F{zaJqzpcTsoP|Ro`@F+q1j%Xr$K3SwDPCeB#>Ds%U|z4crDndfh?*;X^qurcjf6 zj)~NQyIK#tL7_9K`3gB((jVi+BVnNdfL7ilLtld2wUsS7kT&(eT(bd0ZBvAm;ebUXq7b)dv)OB?U zVMW6r>Q#jRiBU9$(H!aLxJv=I>A3Q_7dsfHilVEkUR_M$MMDY=5G`787=d9%8VMv2 zEkhKk)I_Y`2v%V_sbE6rYeFuTY*>gg747roa^MPQ9h|2KIv{W(Cgmpv(mg{~Hg9M0 zb^+9jSI@$lK|vP;N&i47q7wRoMn|?EuKneoURttn+25aep|Q5�mK7hbGJbFD+>Z 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 z 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

Xo>+nTx`HJGS|5nK7+E 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%0A&yk*__ODZ!lbt<~`cs8mjn{ajgLC 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 From 8118762c124d2de8db40836a28b8bf12ecbefbf7 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 31 Aug 2016 17:16:43 -0400 Subject: [PATCH 247/278] MAINT-5011: Add log tag to LOG_UNHANDLED_EXCEPTION() log messages. --- indra/llcommon/llexception.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp index 791b115a8c..1c39c0f827 100644 --- a/indra/llcommon/llexception.cpp +++ b/indra/llcommon/llexception.cpp @@ -29,8 +29,8 @@ void log_unhandled_exception_(LLError::ELevel level, { // log same message but allow caller-specified severity level // lllog() is the macro underlying LL_ERRS(), LL_WARNS() et al. - lllog(level, false) << file << "(" << line << "): Unhandled exception caught in " - << pretty_function; + lllog(level, false, "LLException") + << file << "(" << line << "): Unhandled exception caught in " << pretty_function; if (! context.empty()) { LL_CONT << ": " << context; From 3ce48210ff9d78e172d3357013fd80a1ecc3e62a Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 31 Aug 2016 17:17:48 -0400 Subject: [PATCH 248/278] Backed out changeset 4cf5551a22a6 - revert to boost 297445 --- autobuild.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index d6d3d3e2e2..e9928908be 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -106,9 +106,9 @@ archive hash - 37235e8da6ecd6ebfebf402178893bd5 + c296845cad075250c1ae2620f175a957 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/Darwin/installer/boost-1.57-darwin-318979.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2 name darwin @@ -118,9 +118,9 @@ archive hash - 7b1272f1a762563c923926089fb69ae3 + fb1537f7ad0b490fcb4f096c15dce9cd url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/Linux/installer/boost-1.57-linux-318979.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Linux/installer/boost-1.57-linux-297445.tar.bz2 name linux @@ -130,9 +130,9 @@ archive hash - 5d9ff9c3d0301aed8480ddafd2716977 + 76a607d8a625062b9a63a88b62819894 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/318979/arch/CYGWIN/installer/boost-1.57-windows-318979.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/CYGWIN/installer/boost-1.57-windows-297445.tar.bz2 name windows From b32ae58e4caf702d318f844718bab1389cfdd6c4 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 31 Aug 2016 17:19:31 -0400 Subject: [PATCH 249/278] Backed out changeset c494a6e0b619 - revert to colladadom 297450 --- autobuild.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 34ce5af93c..d6d3d3e2e2 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -158,9 +158,9 @@ archive hash - a3e98849010a229b4ae3255d4030321b + 66849777a83cb69cec3c06b07da7cd3d url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/Darwin/installer/colladadom-2.3.319021-darwin-319021.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2 name darwin @@ -170,9 +170,9 @@ archive hash - 1ddd22be69d4f0ff38409fa42e4b38f6 + d627c2a679f3afb8d3e090d42f53cd2e url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/Linux/installer/colladadom-2.3.319021-linux-319021.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Linux/installer/colladadom-2.3.297450-linux-297450.tar.bz2 name linux @@ -182,16 +182,16 @@ archive hash - c504c44983d5af4c19c8785f392f481b + 220897a1893a188aa9d31efb48909878 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/lindenlab_3p-colladadom/rev/319021/arch/CYGWIN/installer/colladadom-2.3.319021-windows-319021.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/CYGWIN/installer/colladadom-2.3.297450-windows-297450.tar.bz2 name windows version - 2.3.319021 + 2.3.297450 curl From 6076f69591089608fd6c4156bc3c159f2a462b38 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 31 Aug 2016 17:20:45 -0400 Subject: [PATCH 250/278] Backed out changeset 538a5b77f08e - revert to llceflib 311349 --- autobuild.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index baabb50d12..34ce5af93c 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1484,11 +1484,11 @@ archive hash - 8be4de49388f3a525b11411de560c95f + 29a1f64df46094eda0d681821a98d17e hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/319030/arch/Darwin/installer/llceflib-1.5.3.319030-darwin-319030.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/Darwin/installer/llceflib-1.5.3.311349-darwin-311349.tar.bz2 name darwin @@ -1498,18 +1498,18 @@ archive hash - e53aa2036a5a8df90995c59cb616cb02 + 827b7c339a2cd401d9d23f9ee02cb83f hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/319030/arch/CYGWIN/installer/llceflib-1.5.3.319030-windows-319030.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/311349/arch/CYGWIN/installer/llceflib-1.5.3.311349-windows-311349.tar.bz2 name windows version - 1.5.3.319030 + 1.5.3.311349 llphysicsextensions_source From 3d0383fd14703d7c9786659a589b83f779dc4d52 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 31 Aug 2016 17:21:53 -0400 Subject: [PATCH 251/278] Backed out changeset 8c0e52a212bb - revert to googlemock 297460 --- autobuild.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 784b13f0a4..baabb50d12 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -840,9 +840,9 @@ archive hash - ed2820c2a56943d4fcb58330bd799c74 + 022649e284163b8ee23e3c9a81302fa7 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/Darwin/installer/googlemock-1.7.0.319024-darwin-319024.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Darwin/installer/googlemock-1.7.0.297460-darwin-297460.tar.bz2 name darwin @@ -852,9 +852,9 @@ archive hash - 92bf278562af22637a1cd9b6d82947f2 + e08b0e9e269b80b549f6044c4e608fb5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/Linux/installer/googlemock-1.7.0.319024-linux-319024.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Linux/installer/googlemock-1.7.0.297460-linux-297460.tar.bz2 name linux @@ -864,16 +864,16 @@ archive hash - 3391f911974cf9cf3e850a5d9a05802f + f30de5bf36e8ca8681883fe8fd8e0092 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-google-mock/rev/319024/arch/CYGWIN/installer/googlemock-1.7.0.319024-windows-319024.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/CYGWIN/installer/googlemock-1.7.0.297460-windows-297460.tar.bz2 name windows version - 1.7.0.319024 + 1.7.0.297460 gperftools From 81b683f83b759e78d1e0b598e412d86991791d39 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Thu, 1 Sep 2016 16:40:41 +0300 Subject: [PATCH 252/278] MAINT-6686 FIXED [VOB] Outfit Snapshot floater should be resized independently of general Snapshot floater --- indra/newview/app_settings/settings.xml | 11 ++++++++++ indra/newview/llfloateroutfitsnapshot.cpp | 9 ++++++++ indra/newview/llfloateroutfitsnapshot.h | 2 ++ indra/newview/llfloatersnapshot.cpp | 21 ++++++++++++------- indra/newview/llfloatersnapshot.h | 5 +++++ .../xui/en/floater_outfit_snapshot.xml | 8 +++---- 6 files changed, 45 insertions(+), 11 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 64e4bd2074..2d3c885522 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -137,6 +137,17 @@ Value 1 + AdvanceOutfitSnapshot + + Comment + Display advanced parameter settings in outfit snaphot interface + Persist + 1 + Type + Boolean + Value + 1 + AgentPause Comment diff --git a/indra/newview/llfloateroutfitsnapshot.cpp b/indra/newview/llfloateroutfitsnapshot.cpp index ca5a2fdad5..d80793f9e4 100644 --- a/indra/newview/llfloateroutfitsnapshot.cpp +++ b/indra/newview/llfloateroutfitsnapshot.cpp @@ -246,6 +246,8 @@ BOOL LLFloaterOutfitSnapshot::postBuild() getChild("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); childSetCommitCallback("auto_snapshot_check", ImplBase::onClickAutoSnap, this); + getChild("retract_btn")->setCommitCallback(boost::bind(&LLFloaterOutfitSnapshot::onExtendFloater, this)); + getChild("extend_btn")->setCommitCallback(boost::bind(&LLFloaterOutfitSnapshot::onExtendFloater, this)); // Filters LLComboBox* filterbox = getChild("filters_combobox"); @@ -277,6 +279,7 @@ BOOL LLFloaterOutfitSnapshot::postBuild() impl->mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); impl->updateControls(this); + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceOutfitSnapshot")); impl->updateLayout(this); previewp->mKeepAspectRatio = FALSE; @@ -300,6 +303,7 @@ void LLFloaterOutfitSnapshot::onOpen(const LLSD& key) gSnapshotFloaterView->adjustToFitScreen(this, FALSE); impl->updateControls(this); + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceOutfitSnapshot")); impl->updateLayout(this); LLPanel* snapshot_panel = getChild("panel_outfit_snapshot_inventory"); @@ -308,6 +312,11 @@ void LLFloaterOutfitSnapshot::onOpen(const LLSD& key) } +void LLFloaterOutfitSnapshot::onExtendFloater() +{ + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceOutfitSnapshot")); +} + // static void LLFloaterOutfitSnapshot::update() { diff --git a/indra/newview/llfloateroutfitsnapshot.h b/indra/newview/llfloateroutfitsnapshot.h index 04623acf0f..bee386ec63 100644 --- a/indra/newview/llfloateroutfitsnapshot.h +++ b/indra/newview/llfloateroutfitsnapshot.h @@ -50,6 +50,8 @@ public: static void update(); + void onExtendFloater(); + static LLFloaterOutfitSnapshot* getInstance(); static LLFloaterOutfitSnapshot* findInstance(); /*virtual*/ void saveTexture(); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index f6d20c84d0..664668f2f7 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -158,8 +158,6 @@ void LLFloaterSnapshotBase::ImplBase::updateLayout(LLFloaterSnapshotBase* floate { LLSnapshotLivePreview* previewp = getPreviewView(); - BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot"); - //BD - Automatically calculate the size of our snapshot window to enlarge // the snapshot preview to its maximum size, this is especially helpfull // for pretty much every aspect ratio other than 1:1. @@ -175,16 +173,16 @@ void LLFloaterSnapshotBase::ImplBase::updateLayout(LLFloaterSnapshotBase* floate } S32 floater_width = 224.f; - if(advanced) + if(mAdvanced) { floater_width = floater_width + panel_width; } LLUICtrl* thumbnail_placeholder = floaterp->getChild("thumbnail_placeholder"); - thumbnail_placeholder->setVisible(advanced); + thumbnail_placeholder->setVisible(mAdvanced); thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight()); - floaterp->getChild("image_res_text")->setVisible(advanced); - floaterp->getChild("file_size_label")->setVisible(advanced); + floaterp->getChild("image_res_text")->setVisible(mAdvanced); + floaterp->getChild("file_size_label")->setVisible(mAdvanced); if(!floaterp->isMinimized()) { floaterp->reshape(floater_width, floaterp->getRect().getHeight()); @@ -996,7 +994,9 @@ BOOL LLFloaterSnapshot::postBuild() getChild("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); childSetCommitCallback("auto_snapshot_check", ImplBase::onClickAutoSnap, this); - + + getChild("retract_btn")->setCommitCallback(boost::bind(&LLFloaterSnapshot::onExtendFloater, this)); + getChild("extend_btn")->setCommitCallback(boost::bind(&LLFloaterSnapshot::onExtendFloater, this)); // Filters LLComboBox* filterbox = getChild("filters_combobox"); @@ -1038,6 +1038,7 @@ BOOL LLFloaterSnapshot::postBuild() impl->mPreviewHandle = previewp->getHandle(); previewp->setContainer(this); impl->updateControls(this); + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceSnapshot")); impl->updateLayout(this); @@ -1110,12 +1111,18 @@ void LLFloaterSnapshot::onOpen(const LLSD& key) gSnapshotFloaterView->adjustToFitScreen(this, FALSE); impl->updateControls(this); + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceSnapshot")); impl->updateLayout(this); // Initialize default tab. getChild("panel_container")->getCurrentPanel()->onOpen(LLSD()); } +void LLFloaterSnapshot::onExtendFloater() +{ + impl->setAdvanced(gSavedSettings.getBOOL("AdvanceSnapshot")); +} + //virtual void LLFloaterSnapshotBase::onClose(bool app_quitting) { diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 44f77a92ec..4bcfa674fa 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -116,6 +116,8 @@ public: virtual EStatus getStatus() const { return mStatus; } virtual void setNeedRefresh(bool need); + void setAdvanced(bool advanced) { mAdvanced = advanced; } + virtual LLSnapshotModel::ESnapshotLayerType getLayerType(LLFloaterSnapshotBase* floater) = 0; virtual void checkAutoSnapshot(LLSnapshotLivePreview* floater, BOOL update_thumbnail = FALSE); void setWorking(bool working); @@ -129,6 +131,7 @@ public: LLHandle mPreviewHandle; bool mAspectRatioCheckOff; bool mNeedRefresh; + bool mAdvanced; EStatus mStatus; }; @@ -146,6 +149,8 @@ public: static void update(); + void onExtendFloater(); + static LLFloaterSnapshot* getInstance(); static LLFloaterSnapshot* findInstance(); /*virtual*/ void saveTexture(); diff --git a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml index 5941471907..15c480f144 100644 --- a/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_outfit_snapshot.xml @@ -50,8 +50,8 @@ width="167" />