summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llmessage/llcachename.cpp7
-rw-r--r--indra/llui/llfloater.cpp37
-rw-r--r--indra/llui/llfloater.h1
-rw-r--r--indra/llwindow/lldxhardware.cpp37
-rw-r--r--indra/llwindow/lldxhardware.h7
-rw-r--r--indra/llwindow/llwindow.h2
-rw-r--r--indra/llwindow/llwindowheadless.h2
-rw-r--r--indra/llwindow/llwindowmacosx.cpp2
-rw-r--r--indra/llwindow/llwindowmacosx.h2
-rw-r--r--indra/llwindow/llwindowmesaheadless.h2
-rw-r--r--indra/llwindow/llwindowsdl.cpp2
-rw-r--r--indra/llwindow/llwindowsdl.h2
-rw-r--r--indra/llwindow/llwindowwin32.cpp17
-rw-r--r--indra/llwindow/llwindowwin32.h2
-rw-r--r--indra/newview/app_settings/settings.xml43
-rw-r--r--indra/newview/llagent.cpp2
-rw-r--r--indra/newview/llappviewerwin32.cpp4
-rw-r--r--indra/newview/llcallingcard.cpp13
-rw-r--r--indra/newview/llfirstuse.cpp15
-rw-r--r--indra/newview/llfirstuse.h1
-rw-r--r--indra/newview/llfloatercamera.cpp163
-rw-r--r--indra/newview/llfloatercamera.h62
-rw-r--r--indra/newview/llfloatersettingsdebug.cpp8
-rw-r--r--indra/newview/llfloatervoicedevicesettings.cpp323
-rw-r--r--indra/newview/llfloatervoicedevicesettings.h82
-rw-r--r--indra/newview/llpanellogin.cpp48
-rw-r--r--indra/newview/llpanellogin.h1
-rw-r--r--indra/newview/llpreviewtexture.cpp35
-rw-r--r--indra/newview/llpreviewtexture.h4
-rw-r--r--indra/newview/llstartup.cpp10
-rw-r--r--indra/newview/lltoolpie.cpp13
-rw-r--r--indra/newview/llviewermenu.cpp1
-rw-r--r--indra/newview/llviewerwindow.cpp17
-rw-r--r--indra/newview/macview_Prefix.h1
-rwxr-xr-xindra/newview/viewer_manifest.py26
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 << "&region=" << curl_region <<
- "&grid=" << gGridInfo[gGridChoice].mLabel << "&channel=" << curl_channel <<
- "&version=" << curl_version;
+ "&lastname=" << lastname << "&location=" << location << "&region=" << 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: