diff options
35 files changed, 852 insertions, 142 deletions
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp index 274bf5cc04..d482011194 100644 --- a/indra/llmessage/llcachename.cpp +++ b/indra/llmessage/llcachename.cpp @@ -43,9 +43,10 @@ #include "message.h" // Constants -const char* CN_WAITING = "(waiting)"; -const char* CN_NOBODY = "(nobody)"; -const char* CN_NONE = "(none)"; +// probably need a setUIString() call in the interface +const char* const CN_WAITING = "(Loading...)"; // *TODO: translate +const char* const CN_NOBODY = "(nobody)"; // *TODO: translate +const char* const CN_NONE = "(none)"; // *TODO: translate // llsd serialization constants static const std::string AGENTS("agents"); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index f8882c5ebf..a6c35b67a8 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -130,8 +130,9 @@ LLFloaterView* gFloaterView = NULL; LLFloater::LLFloater() : //FIXME: we should initialize *all* member variables here mResizable(FALSE), - mDragOnLeft(FALSE) - + mDragOnLeft(FALSE), + mMinWidth(0), + mMinHeight(0) { // automatically take focus when opened mAutoFocus = TRUE; @@ -2329,7 +2330,9 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list) LLMultiFloater::LLMultiFloater() : mTabContainer(NULL), mTabPos(LLTabContainer::TOP), - mAutoResize(TRUE) + mAutoResize(TRUE), + mOrigMinWidth(0), + mOrigMinHeight(0) { } @@ -2337,7 +2340,9 @@ LLMultiFloater::LLMultiFloater() : LLMultiFloater::LLMultiFloater(LLTabContainer::TabPosition tab_pos) : mTabContainer(NULL), mTabPos(tab_pos), - mAutoResize(TRUE) + mAutoResize(TRUE), + mOrigMinWidth(0), + mOrigMinHeight(0) { } @@ -2346,7 +2351,9 @@ LLMultiFloater::LLMultiFloater(const LLString &name) : LLFloater(name), mTabContainer(NULL), mTabPos(LLTabContainer::TOP), - mAutoResize(FALSE) + mAutoResize(FALSE), + mOrigMinWidth(0), + mOrigMinHeight(0) { } @@ -2358,7 +2365,9 @@ LLMultiFloater::LLMultiFloater( LLFloater(name, rect, name), mTabContainer(NULL), mTabPos(LLTabContainer::TOP), - mAutoResize(auto_resize) + mAutoResize(auto_resize), + mOrigMinWidth(0), + mOrigMinHeight(0) { mTabContainer = new LLTabContainer("Preview Tabs", LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0), @@ -2382,7 +2391,9 @@ LLMultiFloater::LLMultiFloater( LLFloater(name, rect_control, name), mTabContainer(NULL), mTabPos(tab_pos), - mAutoResize(auto_resize) + mAutoResize(auto_resize), + mOrigMinWidth(0), + mOrigMinHeight(0) { mTabContainer = new LLTabContainer("Preview Tabs", LLRect(LLPANEL_BORDER_WIDTH, getRect().getHeight() - LLFLOATER_HEADER_SIZE, getRect().getWidth() - LLPANEL_BORDER_WIDTH, 0), @@ -2756,6 +2767,9 @@ void LLMultiFloater::setCanResize(BOOL can_resize) BOOL LLMultiFloater::postBuild() { + // remember any original xml minimum size + getResizeLimits(&mOrigMinWidth, &mOrigMinHeight); + if (mTabContainer) { return TRUE; @@ -2773,10 +2787,11 @@ BOOL LLMultiFloater::postBuild() void LLMultiFloater::updateResizeLimits() { - S32 new_min_width = 0; - S32 new_min_height = 0; - S32 tab_idx; - for (tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx) + // initialize minimum size constraint to the original xml values. + S32 new_min_width = mOrigMinWidth; + S32 new_min_height = mOrigMinHeight; + // possibly increase minimum size constraint due to children's minimums. + for (S32 tab_idx = 0; tab_idx < mTabContainer->getTabCount(); ++tab_idx) { LLFloater* floaterp = (LLFloater*)mTabContainer->getPanelByIndex(tab_idx); if (floaterp) diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 360d8093e5..e722d5ad07 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -411,6 +411,7 @@ protected: LLTabContainer::TabPosition mTabPos; BOOL mAutoResize; + S32 mOrigMinWidth, mOrigMinHeight; // logically const but initialized late }; // visibility policy specialized for floaters diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index ab43e6d7d9..be8416cc23 100644 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -233,9 +233,10 @@ LLDXHardware::LLDXHardware() void LLDXHardware::cleanup() { - for_each(mDevices.begin(), mDevices.end(), DeletePairedPointer()); + // for_each(mDevices.begin(), mDevices.end(), DeletePairedPointer()); } +/* LLString LLDXHardware::dumpDevices() { if (gWriteDebug) @@ -284,6 +285,7 @@ LLDXDevice *LLDXHardware::findDevice(const std::string &vendor, const std::strin return NULL; } +*/ BOOL LLDXHardware::getInfo(BOOL vram_only) { @@ -296,7 +298,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) IDxDiagProvider *dx_diag_providerp = NULL; IDxDiagContainer *dx_diag_rootp = NULL; IDxDiagContainer *devices_containerp = NULL; - IDxDiagContainer *system_device_containerp= NULL; + // IDxDiagContainer *system_device_containerp= NULL; IDxDiagContainer *device_containerp = NULL; IDxDiagContainer *file_containerp = NULL; IDxDiagContainer *driver_containerp = NULL; @@ -362,15 +364,18 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) } // Get the English VRAM string - std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish"); + { + std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish"); - // We don't need the device any more - SAFE_RELEASE(device_containerp); + // We don't need the device any more + SAFE_RELEASE(device_containerp); + + // Dump the string as an int into the structure + char *stopstring; + mVRAM = strtol(ram_str.c_str(), &stopstring, 10); + llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl; + } - // Dump the string as an int into the structure - char *stopstring; - mVRAM = strtol(ram_str.c_str(), &stopstring, 10); - llinfos << "VRAM Detected: " << mVRAM << " DX9 string: " << ram_str << llendl; if (vram_only) { @@ -378,6 +383,11 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) goto LCleanup; } + + /* for now, we ONLY do vram_only the rest of this + is commented out, to ensure no-one is tempted + to use it + // Now let's get device and driver information // Get the IDxDiagContainer object called "DxDiag_SystemDevices". // This call may take some time while dxdiag gathers the info. @@ -504,11 +514,12 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) } SAFE_RELEASE(device_containerp); } + */ } - dumpDevices(); - ok = TRUE; - + // dumpDevices(); + ok = TRUE; + LCleanup: if (!ok) { @@ -526,7 +537,7 @@ LCleanup: CoUninitialize(); return ok; -} + } LLSD LLDXHardware::getDisplayInfo() { diff --git a/indra/llwindow/lldxhardware.h b/indra/llwindow/lldxhardware.h index e2a255da76..e174b322b0 100644 --- a/indra/llwindow/lldxhardware.h +++ b/indra/llwindow/lldxhardware.h @@ -85,6 +85,7 @@ class LLDXHardware { public: LLDXHardware(); + void setWriteDebugFunc(void (*func)(const char*)); void cleanup(); @@ -100,12 +101,12 @@ public: // Empty strings indicate that you don't care. // You can separate multiple devices with '|' chars to indicate you want // ANY of them to match and return. - LLDXDevice *findDevice(const std::string &vendor, const std::string &devices); + // LLDXDevice *findDevice(const std::string &vendor, const std::string &devices); - LLString dumpDevices(); + // LLString dumpDevices(); public: typedef std::map<std::string, LLDXDevice *> device_map_t; - device_map_t mDevices; + // device_map_t mDevices; protected: S32 mVRAM; }; diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index b2e9c5b51d..6b9414a301 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -154,7 +154,7 @@ public: virtual BOOL getSize(LLCoordWindow *size) = 0; virtual BOOL setPosition(LLCoordScreen position) = 0; virtual BOOL setSize(LLCoordScreen size) = 0; - virtual BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) = 0; + virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0; virtual BOOL setCursorPosition(LLCoordWindow position) = 0; virtual BOOL getCursorPosition(LLCoordWindow *position) = 0; virtual void showCursor() = 0; diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h index b7e6644674..a138814241 100644 --- a/indra/llwindow/llwindowheadless.h +++ b/indra/llwindow/llwindowheadless.h @@ -50,7 +50,7 @@ public: /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; - /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; + /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;}; /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; /*virtual*/ void showCursor() {}; diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index ad8a284930..9daedef1f1 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -835,7 +835,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits // changing fullscreen resolution, or switching between windowed and fullscreen mode. -BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) +BOOL LLWindowMacOSX::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp) { BOOL needsRebuild = FALSE; BOOL result = true; diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 86b88daa3c..58bcd91381 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -59,7 +59,7 @@ public: /*virtual*/ BOOL getSize(LLCoordWindow *size); /*virtual*/ BOOL setPosition(LLCoordScreen position); /*virtual*/ BOOL setSize(LLCoordScreen size); - /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); + /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL); /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); /*virtual*/ void showCursor(); diff --git a/indra/llwindow/llwindowmesaheadless.h b/indra/llwindow/llwindowmesaheadless.h index 8de92bbe0e..4ed88d7b81 100644 --- a/indra/llwindow/llwindowmesaheadless.h +++ b/indra/llwindow/llwindowmesaheadless.h @@ -54,7 +54,7 @@ public: /*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;}; /*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;}; /*virtual*/ BOOL setSize(LLCoordScreen size) {return FALSE;}; - /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) {return FALSE;}; + /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;}; /*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;}; /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;}; /*virtual*/ void showCursor() {}; diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 122b57a497..5597ff4334 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -765,7 +765,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B // changing fullscreen resolution, or switching between windowed and fullscreen mode. -BOOL LLWindowSDL::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) +BOOL LLWindowSDL::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp) { const BOOL needsRebuild = TRUE; // Just nuke the context and start over. BOOL result = true; diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 4d4d36e30a..51d34eb96f 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -66,7 +66,7 @@ public: /*virtual*/ BOOL getSize(LLCoordWindow *size); /*virtual*/ BOOL setPosition(LLCoordScreen position); /*virtual*/ BOOL setSize(LLCoordScreen size); - /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); + /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL); /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); /*virtual*/ void showCursor(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 5239da1712..c9554ce7fe 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -651,9 +651,10 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, //----------------------------------------------------------------------- // Create GL drawing context //----------------------------------------------------------------------- - if (!switchContext(mFullscreen, LLCoordScreen(window_rect.right - window_rect.left, // width - window_rect.bottom - window_rect.top), // height - TRUE)) + LLCoordScreen windowPos(x,y); + LLCoordScreen windowSize(window_rect.right - window_rect.left, + window_rect.bottom - window_rect.top); + if (!switchContext(mFullscreen, windowSize, TRUE, &windowPos)) { return; } @@ -928,7 +929,7 @@ BOOL LLWindowWin32::setSize(const LLCoordScreen size) } // changing fullscreen resolution -BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync) +BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp) { GLuint pixel_format; DEVMODE dev_mode; @@ -1050,10 +1051,10 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disa else { mFullscreen = FALSE; - window_rect.left = (long) 0; - window_rect.right = (long) width; // Windows GDI rects don't include rightmost pixel - window_rect.top = (long) 0; - window_rect.bottom = (long) height; + window_rect.left = (long) (posp ? posp->mX : 0); + window_rect.right = (long) width + window_rect.left; // Windows GDI rects don't include rightmost pixel + window_rect.top = (long) (posp ? posp->mY : 0); + window_rect.bottom = (long) height + window_rect.top; // Window with an edge dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; dw_style = WS_OVERLAPPEDWINDOW; diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index e8eed55aee..f6e40a1c7f 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -59,7 +59,7 @@ public: /*virtual*/ BOOL getSize(LLCoordWindow *size); /*virtual*/ BOOL setPosition(LLCoordScreen position); /*virtual*/ BOOL setSize(LLCoordScreen size); - /*virtual*/ BOOL switchContext(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync); + /*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL); /*virtual*/ BOOL setCursorPosition(LLCoordWindow position); /*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); /*virtual*/ void showCursor(); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7e687a5e64..93c06a474c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2224,6 +2224,28 @@ <integer>0</integer> </array> </map> + <key>FloaterActiveSpeakersSortColumn</key> + <map> + <key>Comment</key> + <string>Column name to sort on</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>speaker_name</string> + </map> + <key>FloaterActiveSpeakersSortAscending</key> + <map> + <key>Comment</key> + <string>Whether to sort up or down</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>FloaterAudioVolumeRect</key> <map> <key>Comment</key> @@ -2304,7 +2326,7 @@ <integer>0</integer> </array> </map> - <key>FloaterCameraRect2</key> + <key>FloaterCameraRect3</key> <map> <key>Comment</key> <string>Rectangle for camera control window</string> @@ -2314,10 +2336,10 @@ <string>Rect</string> <key>Value</key> <array> - <integer>166</integer> - <integer>128</integer> - <integer>342</integer> + <integer>0</integer> <integer>64</integer> + <integer>176</integer> + <integer>0</integer> </array> </map> <key>FloaterChatRect</key> @@ -6062,6 +6084,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>ShowActiveSpeakers</key> + <map> + <key>Comment</key> + <string>Display active speakers list on login</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>ShowAxes</key> <map> <key>Comment</key> @@ -6082,7 +6115,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>ShowChatHistory</key> <map> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index a9d4e8a2f6..d00dfef478 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -58,7 +58,6 @@ #include "imageids.h" #include "llbox.h" #include "llbutton.h" -#include "llcameraview.h" #include "llcallingcard.h" #include "llchatbar.h" #include "llconsole.h" @@ -69,6 +68,7 @@ #include "llfloateractivespeakers.h" #include "llfloateravatarinfo.h" #include "llfloaterbuildoptions.h" +#include "llfloatercamera.h" #include "llfloaterchat.h" #include "llfloatercustomize.h" #include "llfloaterdirectory.h" diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index fb726e7c97..143c9cece4 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -320,6 +320,10 @@ bool LLAppViewerWin32::initHardwareTest() { BOOL vram_only = !gSavedSettings.getBOOL("ProbeHardwareOnStartup"); + // per DEV-11631 - disable hardware probing for everything + // but vram. + vram_only = TRUE; + LLSplashScreen::update("Detecting hardware..."); llinfos << "Attempting to poll DirectX for hardware info" << llendl; diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 0e0880959e..11d4f4c651 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -60,6 +60,8 @@ #include "llviewerobjectlist.h" #include "llviewerwindow.h" #include "llvoavatar.h" +#include "llimview.h" +#include "llimpanel.h" ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs @@ -671,7 +673,18 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online) } if(notify) { + // Popup a notify box with online status of this agent LLNotifyBox::showXml(online ? "FriendOnline" : "FriendOffline", args); + + // If there's an open IM session with this agent, send a notification there too. + LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id); + LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id); + if (floater) + { + LLUIString notifyMsg = LLNotifyBox::getTemplateMessage((online ? "FriendOnline" : "FriendOffline"),args); + if (!notifyMsg.empty()) + floater->addHistoryLine(notifyMsg,gSavedSettings.getColor4("SystemChatColor")); + } } mModifyMask |= LLFriendObserver::ONLINE; diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index b00450eec6..c07319e224 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -38,7 +38,6 @@ // viewer includes #include "llnotify.h" -#include "llfloatervoicewizard.h" #include "llviewercontrol.h" #include "llui.h" #include "llappviewer.h" @@ -255,20 +254,6 @@ void LLFirstUse::useSculptedPrim() } // static -void LLFirstUse::useVoice() -{ - if (!gSavedSettings.getBOOL("CmdLineDisableVoice")) - { - if (gSavedSettings.getWarning("FirstVoice")) - { - gSavedSettings.setWarning("FirstVoice", FALSE); - - LLFloaterVoiceWizard::showInstance(); - } - } -} - -// static void LLFirstUse::useMedia() { if (gSavedSettings.getWarning("FirstMedia")) diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h index 5510ce02b9..92c3da6f44 100644 --- a/indra/newview/llfirstuse.h +++ b/indra/newview/llfirstuse.h @@ -104,7 +104,6 @@ public: static void useFlexible(); static void useDebugMenus(); static void useSculptedPrim(); - static void useVoice(); static void useMedia(); protected: diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp new file mode 100644 index 0000000000..6bc14b331b --- /dev/null +++ b/indra/newview/llfloatercamera.cpp @@ -0,0 +1,163 @@ +/** + * @file llfloatercamera.cpp + * @brief Container for camera control buttons (zoom, pan, orbit) + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatercamera.h" + +// Library includes +#include "lluictrlfactory.h" + +// Viewer includes +#include "lljoystickbutton.h" +#include "llviewercontrol.h" + +// Constants +const F32 CAMERA_BUTTON_DELAY = 0.0f; + +// Globals +LLFloaterCamera* gFloaterCamera = NULL; + + +// +// Member functions +// + +LLFloaterCamera::LLFloaterCamera(const std::string& name) +: LLFloater(name) // uses "FloaterCameraRect3" +{ + setIsChrome(TRUE); + + // For now, only used for size and tooltip strings + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_camera.xml"); + + S32 top = getRect().getHeight(); + S32 bottom = 0; + S32 left = 16; + + const S32 ROTATE_WIDTH = 64; + mRotate = new LLJoystickCameraRotate("cam rotate stick", + LLRect( left, top, left + ROTATE_WIDTH, bottom ), + "cam_rotate_out.tga", + "cam_rotate_in.tga" ); + mRotate->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); + mRotate->setHeldDownDelay(CAMERA_BUTTON_DELAY); + mRotate->setToolTip( getString("rotate_tooltip") ); + mRotate->setSoundFlags(MOUSE_DOWN | MOUSE_UP); + addChild(mRotate); + + left += ROTATE_WIDTH; + + const S32 ZOOM_WIDTH = 16; + mZoom = new LLJoystickCameraZoom( + "zoom", + LLRect( left, top, left + ZOOM_WIDTH, bottom ), + "cam_zoom_out.tga", + "cam_zoom_plus_in.tga", + "cam_zoom_minus_in.tga"); + mZoom->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); + mZoom->setHeldDownDelay(CAMERA_BUTTON_DELAY); + mZoom->setToolTip( getString("zoom_tooltip") ); + mZoom->setSoundFlags(MOUSE_DOWN | MOUSE_UP); + addChild(mZoom); + + left += ZOOM_WIDTH; + + const S32 TRACK_WIDTH = 64; + mTrack = new LLJoystickCameraTrack("cam track stick", + LLRect( left, top, left + TRACK_WIDTH, bottom ), + "cam_tracking_out.tga", + "cam_tracking_in.tga"); + mTrack->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); + mTrack->setHeldDownDelay(CAMERA_BUTTON_DELAY); + mTrack->setToolTip( getString("move_tooltip") ); + mTrack->setSoundFlags(MOUSE_DOWN | MOUSE_UP); + addChild(mTrack); +} + + +LLFloaterCamera::~LLFloaterCamera() +{ + // children all deleted by LLView destructor + gFloaterCamera = NULL; +} + +// virtual +void LLFloaterCamera::onClose(bool app_quitting) +{ + LLFloater::onClose(app_quitting); + + if (!app_quitting) + { + gSavedSettings.setBOOL("ShowCameraControls", FALSE); + } +} + +// +// Static member functions +// + +// static +void LLFloaterCamera::show(void*) +{ + if(!gFloaterCamera) + { + gFloaterCamera = new LLFloaterCamera("camera floater"); + } + gFloaterCamera->open(); /* Flawfinder: ignore */ + gSavedSettings.setBOOL("ShowCameraControls", TRUE); +} + +// static +void LLFloaterCamera::toggle(void*) +{ + if (gFloaterCamera) + { + gFloaterCamera->close(); + } + else + { + show(NULL); + } +} + +// static +BOOL LLFloaterCamera::visible(void*) +{ + if (gFloaterCamera) + { + return gFloaterCamera->getVisible(); + } + else + { + return FALSE; + } +} diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h new file mode 100644 index 0000000000..fac4d2f191 --- /dev/null +++ b/indra/newview/llfloatercamera.h @@ -0,0 +1,62 @@ +/** + * @file llfloatercamera.h + * @brief Container for camera control buttons (zoom, pan, orbit) + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLFLOATERCAMERA_H +#define LLFLOATERCAMERA_H + +#include "llfloater.h" + +class LLJoystickCameraRotate; +class LLJoystickCameraZoom; +class LLJoystickCameraTrack; + +class LLFloaterCamera + : public LLFloater +{ +public: + LLFloaterCamera(const std::string& name); + ~LLFloaterCamera(); + + /*virtual*/ void onClose(bool app_quitting); + + static void show(void*); + static void toggle(void*); + static BOOL visible(void*); + +public: + LLJoystickCameraRotate* mRotate; + LLJoystickCameraZoom* mZoom; + LLJoystickCameraTrack* mTrack; +}; + +extern LLFloaterCamera *gFloaterCamera; + +#endif diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index bb44304ae6..2b7d10a7a9 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -235,12 +235,16 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) spinner4->setVisible(FALSE); color_swatch->setVisible(FALSE); childSetVisible("val_text", FALSE); - childSetVisible("boolean_combo", FALSE); mComment->setText(LLString::null); if (controlp) { eControlType type = controlp->type(); + + //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame + childSetVisible("boolean_combo", type == TYPE_BOOLEAN); + + mComment->setText(controlp->getComment()); spinner1->setMaxValue(F32_MAX); spinner2->setMaxValue(F32_MAX); @@ -304,8 +308,6 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) } break; case TYPE_BOOLEAN: - childSetVisible("boolean_combo", TRUE); - if (!childHasFocus("boolean_combo")) { if (sd.asBoolean()) diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp new file mode 100644 index 0000000000..699f89c944 --- /dev/null +++ b/indra/newview/llfloatervoicedevicesettings.cpp @@ -0,0 +1,323 @@ +/** + * @file llfloatervoicedevicesettings.cpp + * @author Richard Nelson + * @brief Voice communication set-up + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatervoicedevicesettings.h" + +// Viewer includes +#include "llagent.h" +#include "llbutton.h" +#include "llcombobox.h" +#include "llfocusmgr.h" +#include "lliconctrl.h" +#include "llprefsvoice.h" +#include "llsliderctrl.h" +#include "llviewercontrol.h" +#include "llvoiceclient.h" +#include "llimpanel.h" + +// Library includes (after viewer) +#include "lluictrlfactory.h" + + +LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() +{ + mCtrlInputDevices = NULL; + mCtrlOutputDevices = NULL; + mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); + mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); + mDevicesUpdated = FALSE; + + // grab "live" mic volume level + mMicVolume = gSavedSettings.getF32("AudioLevelMic"); + + // ask for new device enumeration + // now do this in onOpen() instead... + //gVoiceClient->refreshDeviceLists(); +} + +LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings() +{ +} + +BOOL LLPanelVoiceDeviceSettings::postBuild() +{ + LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider"); + // set mic volume tuning slider based on last mic volume setting + volume_slider->setValue(mMicVolume); + + childSetCommitCallback("voice_input_device", onCommitInputDevice, this); + childSetCommitCallback("voice_output_device", onCommitOutputDevice, this); + + return TRUE; +} + +void LLPanelVoiceDeviceSettings::draw() +{ + // let user know that volume indicator is not yet available + childSetVisible("wait_text", !gVoiceClient->inTuningMode()); + + LLPanel::draw(); + + F32 voice_power = gVoiceClient->tuningGetEnergy(); + S32 discrete_power = 0; + + if (!gVoiceClient->inTuningMode()) + { + discrete_power = 0; + } + else + { + discrete_power = llmin(4, llfloor((voice_power / LLVoiceClient::OVERDRIVEN_POWER_LEVEL) * 4.f)); + } + + if (gVoiceClient->inTuningMode()) + { + for(S32 power_bar_idx = 0; power_bar_idx < 5; power_bar_idx++) + { + LLString view_name = llformat("%s%d", "bar", power_bar_idx); + LLView* bar_view = getChild<LLView>(view_name); + if (bar_view) + { + if (power_bar_idx < discrete_power) + { + LLColor4 color = (power_bar_idx >= 3) ? gSavedSettings.getColor4("OverdrivenColor") : gSavedSettings.getColor4("SpeakingColor"); + gl_rect_2d(bar_view->getRect(), color, TRUE); + } + gl_rect_2d(bar_view->getRect(), LLColor4::grey, FALSE); + } + } + } +} + +void LLPanelVoiceDeviceSettings::apply() +{ + std::string s; + if(mCtrlInputDevices) + { + s = mCtrlInputDevices->getSimple(); + gSavedSettings.setString("VoiceInputAudioDevice", s); + } + + if(mCtrlOutputDevices) + { + s = mCtrlOutputDevices->getSimple(); + gSavedSettings.setString("VoiceOutputAudioDevice", s); + } + + // assume we are being destroyed by closing our embedding window + gSavedSettings.setF32("AudioLevelMic", mMicVolume); +} + +void LLPanelVoiceDeviceSettings::cancel() +{ + gSavedSettings.setString("VoiceInputAudioDevice", mInputDevice); + gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice); + + if(mCtrlInputDevices) + mCtrlInputDevices->setSimple(mInputDevice); + + if(mCtrlOutputDevices) + mCtrlOutputDevices->setSimple(mOutputDevice); +} + +void LLPanelVoiceDeviceSettings::refresh() +{ + //grab current volume + LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider"); + // set mic volume tuning slider based on last mic volume setting + mMicVolume = (F32)volume_slider->getValue().asReal(); + gVoiceClient->tuningSetMicVolume(mMicVolume); + + // Fill in popup menus + mCtrlInputDevices = getChild<LLComboBox>("voice_input_device"); + mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device"); + + if(!gVoiceClient->deviceSettingsAvailable()) + { + // The combo boxes are disabled, since we can't get the device settings from the daemon just now. + // Put the currently set default (ONLY) in the box, and select it. + if(mCtrlInputDevices) + { + mCtrlInputDevices->removeall(); + mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM ); + mCtrlInputDevices->setSimple(mInputDevice); + } + if(mCtrlOutputDevices) + { + mCtrlOutputDevices->removeall(); + mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM ); + mCtrlOutputDevices->setSimple(mOutputDevice); + } + } + else if (!mDevicesUpdated) + { + LLVoiceClient::deviceList *devices; + + LLVoiceClient::deviceList::iterator iter; + + if(mCtrlInputDevices) + { + mCtrlInputDevices->removeall(); + mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM ); + + devices = gVoiceClient->getCaptureDevices(); + for(iter=devices->begin(); iter != devices->end(); iter++) + { + mCtrlInputDevices->add( *iter, ADD_BOTTOM ); + } + + if(!mCtrlInputDevices->setSimple(mInputDevice)) + { + mCtrlInputDevices->setSimple(getString("default_text")); + } + } + + if(mCtrlOutputDevices) + { + mCtrlOutputDevices->removeall(); + mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM ); + + devices = gVoiceClient->getRenderDevices(); + for(iter=devices->begin(); iter != devices->end(); iter++) + { + mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); + } + + if(!mCtrlOutputDevices->setSimple(mOutputDevice)) + { + mCtrlOutputDevices->setSimple(getString("default_text")); + } + } + mDevicesUpdated = TRUE; + } +} + +void LLPanelVoiceDeviceSettings::onOpen() +{ + mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); + mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); + mMicVolume = gSavedSettings.getF32("AudioLevelMic"); + mDevicesUpdated = FALSE; + + // ask for new device enumeration + gVoiceClient->refreshDeviceLists(); + + // put voice client in "tuning" mode + gVoiceClient->tuningStart(); + LLVoiceChannel::suspend(); +} + +void LLPanelVoiceDeviceSettings::onClose(bool app_quitting) +{ + gVoiceClient->tuningStop(); + LLVoiceChannel::resume(); +} + +// static +void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data) +{ + gSavedSettings.setString("VoiceInputAudioDevice", ctrl->getValue().asString()); +} + +// static +void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data) +{ + gSavedSettings.setString("VoiceOutputAudioDevice", ctrl->getValue().asString()); +} + +// +// LLFloaterVoiceDeviceSettings +// + +LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed) : LLFloater("floater_device_settings"), mDevicePanel(NULL) +{ + mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this); + // do not automatically open singleton floaters (as result of getInstance()) + BOOL no_open = FALSE; + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", &mFactoryMap, no_open); + center(); +} + +void LLFloaterVoiceDeviceSettings::onOpen() +{ + if(mDevicePanel) + { + mDevicePanel->onOpen(); + } + + LLFloater::onOpen(); +} + +void LLFloaterVoiceDeviceSettings::onClose(bool app_quitting) +{ + if(mDevicePanel) + { + mDevicePanel->onClose(app_quitting); + } + + setVisible(FALSE); +} + +void LLFloaterVoiceDeviceSettings::apply() +{ + if (mDevicePanel) + { + mDevicePanel->apply(); + } +} + +void LLFloaterVoiceDeviceSettings::cancel() +{ + if (mDevicePanel) + { + mDevicePanel->cancel(); + } +} + +void LLFloaterVoiceDeviceSettings::draw() +{ + if (mDevicePanel) + { + mDevicePanel->refresh(); + } + LLFloater::draw(); +} + +// static +void* LLFloaterVoiceDeviceSettings::createPanelVoiceDeviceSettings(void* user_data) +{ + LLFloaterVoiceDeviceSettings* floaterp = (LLFloaterVoiceDeviceSettings*)user_data; + floaterp->mDevicePanel = new LLPanelVoiceDeviceSettings(); + return floaterp->mDevicePanel; +} diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h new file mode 100644 index 0000000000..45a209b24b --- /dev/null +++ b/indra/newview/llfloatervoicedevicesettings.h @@ -0,0 +1,82 @@ +/** + * @file llpanelvoicedevicesettings.h + * @author Richard Nelson + * @brief Voice communication set-up wizard + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERVOICEDEVICESETTINGS_H +#define LL_LLFLOATERVOICEDEVICESETTINGS_H + +#include "llfloater.h" + +class LLPrefsVoiceLogic; + +class LLPanelVoiceDeviceSettings : public LLPanel +{ +public: + LLPanelVoiceDeviceSettings(); + ~LLPanelVoiceDeviceSettings(); + + /*virtual*/ void draw(); + /*virtual*/ BOOL postBuild(); + void apply(); + void cancel(); + void refresh(); + void onOpen(); + void onClose(bool app_quitting); + +protected: + static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data); + static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data); + + F32 mMicVolume; + std::string mInputDevice; + std::string mOutputDevice; + class LLComboBox *mCtrlInputDevices; + class LLComboBox *mCtrlOutputDevices; + BOOL mDevicesUpdated; +}; + +class LLFloaterVoiceDeviceSettings : public LLFloater, public LLFloaterSingleton<LLFloaterVoiceDeviceSettings> +{ +public: + LLFloaterVoiceDeviceSettings(const LLSD& seed); + /*virtual*/ void onOpen(); + /*virtual*/ void onClose(bool app_quitting); + /*virtual*/ void draw(); + void apply(); + void cancel(); + +protected: + static void* createPanelVoiceDeviceSettings(void* user_data); + + LLPanelVoiceDeviceSettings* mDevicePanel; +}; + +#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 4047cd022f..5fa49e0e8b 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -404,6 +404,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, combo->setCommitCallback( &LLPanelGeneral::set_start_location ); + childSetCommitCallback("server_combo", onSelectServer, this); + childSetAction("connect_btn", onClickConnect, this); setDefaultBtn("connect_btn"); @@ -909,6 +911,7 @@ void LLPanelLogin::loadLoginPage() first_query_delimiter = "?"; } + // Language LLString language(gSavedSettings.getString("Language")); if(language == "default") { @@ -916,11 +919,37 @@ void LLPanelLogin::loadLoginPage() } oStr << first_query_delimiter<<"lang=" << language; + // First Login? if (gSavedSettings.getBOOL("FirstLoginThisInstall")) { oStr << "&firstlogin=TRUE"; } + // Channel and Version + LLString version = llformat("%d.%d.%d (%d)", + LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD); + + char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0); + char* curl_version = curl_escape(version.c_str(), 0); + + oStr << "&channel=" << curl_channel; + oStr << "&version=" << curl_version; + + curl_free(curl_channel); + curl_free(curl_version); + + // Grid + LLString grid; + S32 grid_index; + getServer( grid, grid_index ); + if( grid_index != (S32)GRID_INFO_OTHER ) + { + grid = gGridInfo[grid_index].mLabel; + } + + char* curl_grid = curl_escape(grid.c_str(), 0); + oStr << "&grid=" << curl_grid; + curl_free(curl_grid); #if USE_VIEWER_AUTH LLURLSimString::sInstance.parse(); @@ -970,22 +999,12 @@ void LLPanelLogin::loadLoginPage() lastname = gSavedSettings.getString("LastName"); } - LLString version = llformat("%d.%d.%d (%d)", - LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD); - char* curl_region = curl_escape(region.c_str(), 0); - char* curl_channel = curl_escape(gChannelName.c_str(), 0); - char* curl_version = curl_escape(version.c_str(), 0); oStr <<"firstname=" << firstname << - "&lastname=" << lastname << "&location=" << location << "®ion=" << curl_region << - "&grid=" << gGridInfo[gGridChoice].mLabel << "&channel=" << curl_channel << - "&version=" << curl_version; + "&lastname=" << lastname << "&location=" << location << "®ion=" << curl_region; curl_free(curl_region); - curl_free(curl_channel); - curl_free(curl_version); - if (!password.empty()) { @@ -1147,3 +1166,10 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) sCapslockDidNotification = TRUE; } } + +// static +void LLPanelLogin::onSelectServer(LLUICtrl*, void*) +{ + // grid changed so show new splash screen (possibly) + loadLoginPage(); +} diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index ac6e3b0426..a13431d683 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -112,6 +112,7 @@ private: virtual void onNavigateComplete( const EventType& eventIn ); static void onClickForgotPassword(void*); static void onPassKey(LLLineEditor* caller, void* user_data); + static void onSelectServer(LLUICtrl*, void*); private: LLPointer<LLUIImage> mLogoImage; diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 392c9724a0..bdcde60f46 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -193,7 +193,7 @@ void LLPreviewTexture::init() void LLPreviewTexture::draw() { - updateAspectRatio(); + updateDimensions(); LLPreview::draw(); @@ -377,7 +377,7 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success, // It takes a while until we get height and width information. // When we receive it, reshape the window accordingly. -void LLPreviewTexture::updateAspectRatio() +void LLPreviewTexture::updateDimensions() { if (!mImage) return; @@ -386,24 +386,21 @@ void LLPreviewTexture::updateAspectRatio() // Attempt to make the image 1:1 on screen. // If that fails, cut width by half. S32 client_width = image_width; + S32 client_height = image_height; S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE; S32 vert_pad = PREVIEW_HEADER_SIZE + 2 * CLIENT_RECT_VPAD + LLPANEL_BORDER_WIDTH; - S32 screen_width = gViewerWindow->getWindowWidth(); - S32 max_client_width = screen_width - horiz_pad; + S32 max_client_width = gViewerWindow->getWindowWidth() - horiz_pad; S32 max_client_height = gViewerWindow->getWindowHeight() - vert_pad; - F32 inv_aspect_ratio = (F32) image_height / (F32) image_width; - while ((client_width > max_client_width) || ( llround(client_width * inv_aspect_ratio) > max_client_height ) ) + while ((client_width > max_client_width) || + (client_height > max_client_height ) ) { client_width /= 2; + client_height /= 2; } S32 view_width = client_width + horiz_pad; - - // Adjust the height based on the width computed above. - S32 client_height = llround(client_width * inv_aspect_ratio); S32 view_height = client_height + vert_pad; - // set text on dimensions display (should be moved out of here and into a callback of some sort) childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->mFullWidth)); @@ -459,26 +456,20 @@ void LLPreviewTexture::updateAspectRatio() else { client_width = getRect().getWidth() - horiz_pad; - client_height = llround(client_width * inv_aspect_ratio); + client_height = getRect().getHeight() - vert_pad; } + S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height + - CLIENT_RECT_VPAD - info_height - CLIENT_RECT_VPAD - PREVIEW_HEADER_SIZE; + S32 max_width = getRect().getWidth() - horiz_pad; - S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height - - CLIENT_RECT_VPAD - info_height - CLIENT_RECT_VPAD - PREVIEW_HEADER_SIZE; - max_height = llmax(max_height, 1); - - if (client_height > max_height) - { - F32 aspect_ratio = (F32) image_width / (F32) image_height; - client_height = max_height; - client_width = llround(client_height * aspect_ratio); - } + client_height = llclamp(client_height, 1, max_height); + client_width = llclamp(client_width, 1, max_width); LLRect window_rect(0, getRect().getHeight(), getRect().getWidth(), 0); window_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD); window_rect.mBottom += PREVIEW_BORDER + button_height + CLIENT_RECT_VPAD + info_height + CLIENT_RECT_VPAD; - // try to keep aspect ratio when hosted, as hosting view can resize without user input mClientRect.setLeftTopAndSize(window_rect.getCenterX() - (client_width / 2), window_rect.mTop, client_width, client_height); } diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h index 8ed5210c46..a897dcadef 100644 --- a/indra/newview/llpreviewtexture.h +++ b/indra/newview/llpreviewtexture.h @@ -78,11 +78,11 @@ public: protected: void init(); - void updateAspectRatio(); virtual const char *getTitleName() const { return "Texture"; } -protected: +private: + void updateDimensions(); LLUUID mImageID; LLPointer<LLViewerImage> mImage; BOOL mLoadingFullImage; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index daaa117a9c..1533ccf659 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -48,7 +48,6 @@ #include "audiosettings.h" #include "llares.h" #include "llcachename.h" -#include "llcameraview.h" #include "llviewercontrol.h" #include "lldir.h" #include "llerrorcontrol.h" @@ -91,6 +90,7 @@ #include "llfeaturemanager.h" #include "llfirstuse.h" #include "llfloateractivespeakers.h" +#include "llfloatercamera.h" #include "llfloaterchat.h" #include "llfloatergesture.h" #include "llfloaterhud.h" @@ -1591,6 +1591,11 @@ BOOL idle_startup() LLFloaterMove::show(NULL); } + if (gSavedSettings.getBOOL("ShowActiveSpeakers")) + { + LLFloaterActiveSpeakers::showInstance(); + } + if (!gNoRender) { // Move the progress view in front of the UI @@ -2281,9 +2286,6 @@ BOOL idle_startup() // On first start, ask user for gender dialog_choose_gender_first_start(); - // setup voice - LLFirstUse::useVoice(); - // Start automatic replay if the flag is set. if (gSavedSettings.getBOOL("StatsAutoRun")) { diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 16ab3c0944..315136ed36 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -194,8 +194,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) // nothing break; case CLICK_ACTION_SIT: - handle_sit_or_stand(); - return TRUE; + if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // agent not already sitting + { + handle_sit_or_stand(); + return TRUE; + } // else nothing (fall through to touch) + case CLICK_ACTION_PAY: if (object && object->flagTakesMoney() || parent && parent->flagTakesMoney()) @@ -436,7 +440,10 @@ ECursorType cursor_from_object(LLViewerObject* object) switch(click_action) { case CLICK_ACTION_SIT: - cursor = UI_CURSOR_TOOLSIT; + if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->mIsSitting)) // not already sitting? + { + cursor = UI_CURSOR_TOOLSIT; + } break; case CLICK_ACTION_BUY: cursor = UI_CURSOR_TOOLBUY; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index a1181ccf3a..f4cf31273f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -92,6 +92,7 @@ #include "llfloaterbuycontents.h" #include "llfloaterbuycurrency.h" #include "llfloaterbuyland.h" +#include "llfloatercamera.h" #include "llfloaterchat.h" #include "llfloatercustomize.h" #include "llfloaterdaycycle.h" diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index afd1e48921..4068933fe1 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -76,7 +76,6 @@ #include "llagent.h" #include "llalertdialog.h" #include "llbox.h" -#include "llcameraview.h" #include "llchatbar.h" #include "llconsole.h" #include "llviewercontrol.h" @@ -95,6 +94,7 @@ #include "llfloateractivespeakers.h" #include "llfloaterbuildoptions.h" #include "llfloaterbuyland.h" +#include "llfloatercamera.h" #include "llfloaterchat.h" #include "llfloaterchatterbox.h" #include "llfloatercustomize.h" @@ -1750,6 +1750,19 @@ void adjust_rect_top_left(const LLString& control, const LLRect& window) } } +void adjust_rect_top_center(const LLString& control, const LLRect& window) +{ + LLRect r = gSavedSettings.getRect(control); + if (r.mLeft == 0 && r.mBottom == 0) + { + r.setLeftTopAndSize( window.getWidth()/2 - r.getWidth()/2, + window.getHeight(), + r.getWidth(), + r.getHeight() ); + gSavedSettings.setRect(control, r); + } +} + void adjust_rect_top_right(const LLString& control, const LLRect& window) { LLRect r = gSavedSettings.getRect(control); @@ -1808,7 +1821,7 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window) adjust_rect_bottom_center("FloaterMoveRect2", window); - adjust_rect_bottom_center("FloaterCameraRect2", window); + adjust_rect_top_center("FloaterCameraRect3", window); adjust_rect_top_left("FloaterCustomizeAppearanceRect", window); diff --git a/indra/newview/macview_Prefix.h b/indra/newview/macview_Prefix.h index eb394dc557..ac19cd924e 100644 --- a/indra/newview/macview_Prefix.h +++ b/indra/newview/macview_Prefix.h @@ -58,7 +58,6 @@ #include "llbox.h" #include "llbutton.h" -#include "llcameraview.h" #include "llconsole.h" #include "lldrawable.h" #include "llfirstuse.h" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 71509f50f5..e73d278043 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -127,26 +127,6 @@ class ViewerManifest(LLManifest): return " ".join((channel_flags, grid_flags)).strip() - def login_url(self): - """ Convenience function that returns the appropriate login url for the grid""" - if(self.args.get('login_url')): - return self.args['login_url'] - else: - if(self.default_grid()): - if(self.default_channel()): - # agni release - return 'http://secondlife.com/app/login/' - else: - # first look (or other) on agni - return 'http://secondlife.com/app/login/%s/' % self.channel_lowerword() - else: - # beta grid - return 'http://secondlife.com/app/login/beta/' - - def replace_login_url(self): - # set the login page to point to a url appropriate for the type of client - self.replace_in("skins/xui/en-us/panel_login.xml", searchdict={'http://secondlife.com/app/login/':self.login_url()}) - class WindowsManifest(ViewerManifest): def final_exe(self): @@ -229,7 +209,6 @@ class WindowsManifest(ViewerManifest): # pull in the crash logger and updater from other projects self.path(src="../win_crash_logger/win_crash_logger.exe", dst="win_crash_logger.exe") self.path(src="../win_updater/updater.exe", dst="updater.exe") - self.replace_login_url() def nsi_file_commands(self, install=True): def wpath(path): @@ -387,9 +366,6 @@ class DarwinManifest(ViewerManifest): # command line arguments for connecting to the proper grid self.put_in_file(self.flags_list(), 'arguments.txt') - # set the proper login url - self.replace_login_url() - self.end_prefix("Resources") self.end_prefix("Contents") @@ -471,8 +447,6 @@ class LinuxManifest(ViewerManifest): # Create an appropriate gridargs.dat for this package, denoting required grid. self.put_in_file(self.flags_list(), 'gridargs.dat') - # set proper login url - self.replace_login_url() # stripping all the libs removes a few megabytes from the end-user package for s,d in self.file_list: |