summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcharacter/llmultigesture.cpp4
-rw-r--r--indra/llcommon/llapp.cpp47
-rw-r--r--indra/llcommon/llfasttimer_class.cpp3
-rw-r--r--indra/llrender/llimagegl.cpp6
-rw-r--r--indra/llui/llaccordionctrl.h2
-rw-r--r--indra/llui/llaccordionctrltab.cpp27
-rw-r--r--indra/llui/llaccordionctrltab.h4
-rw-r--r--indra/llui/lltextbase.cpp39
-rw-r--r--indra/llui/lltextbase.h7
-rw-r--r--indra/newview/app_settings/settings.xml48
-rw-r--r--indra/newview/llagentcamera.cpp3
-rw-r--r--indra/newview/llagentwearables.cpp30
-rw-r--r--indra/newview/llagentwearables.h16
-rw-r--r--indra/newview/llagentwearablesfetch.cpp1
-rw-r--r--indra/newview/llappearancemgr.cpp60
-rw-r--r--indra/newview/llappearancemgr.h6
-rw-r--r--indra/newview/llappviewer.cpp12
-rw-r--r--indra/newview/llavataractions.cpp5
-rw-r--r--indra/newview/llavatariconctrl.cpp5
-rw-r--r--indra/newview/llchatbar.cpp1
-rw-r--r--indra/newview/llchathistory.cpp5
-rw-r--r--indra/newview/llcofwearables.cpp4
-rw-r--r--indra/newview/llcolorswatch.cpp6
-rw-r--r--indra/newview/lldrawable.cpp7
-rw-r--r--indra/newview/llfeaturemanager.cpp4
-rw-r--r--indra/newview/llfloaterbuycurrencyhtml.cpp2
-rw-r--r--indra/newview/llfloaterhardwaresettings.cpp7
-rw-r--r--indra/newview/llfloaterpreference.cpp27
-rw-r--r--indra/newview/llgiveinventory.cpp4
-rw-r--r--indra/newview/llimview.cpp12
-rw-r--r--indra/newview/llinventorybridge.cpp16
-rw-r--r--indra/newview/llinventorybridge.h1
-rw-r--r--indra/newview/llinventoryfunctions.cpp35
-rw-r--r--indra/newview/llinventoryfunctions.h25
-rw-r--r--indra/newview/llinventoryitemslist.cpp22
-rw-r--r--indra/newview/llinventoryitemslist.h7
-rw-r--r--indra/newview/llinventoryobserver.cpp8
-rw-r--r--indra/newview/llnearbychatbar.cpp1
-rw-r--r--indra/newview/llnotificationtiphandler.cpp7
-rw-r--r--indra/newview/lloutfitslist.cpp170
-rw-r--r--indra/newview/lloutfitslist.h33
-rw-r--r--indra/newview/llpaneleditwearable.cpp16
-rw-r--r--indra/newview/llpaneleditwearable.h4
-rw-r--r--indra/newview/llpanellogin.cpp5
-rw-r--r--indra/newview/llpanelobjectinventory.cpp33
-rw-r--r--indra/newview/llpaneloutfitedit.cpp25
-rw-r--r--indra/newview/llpaneloutfitedit.h1
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp25
-rw-r--r--indra/newview/llpaneloutfitsinventory.h2
-rw-r--r--indra/newview/llpaneltopinfobar.cpp35
-rw-r--r--indra/newview/llpaneltopinfobar.h5
-rw-r--r--indra/newview/llpreviewgesture.cpp52
-rw-r--r--indra/newview/llpreviewgesture.h8
-rw-r--r--indra/newview/llselectmgr.h15
-rw-r--r--indra/newview/llsidepanelappearance.cpp8
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp27
-rw-r--r--indra/newview/llsidepaneltaskinfo.h4
-rw-r--r--indra/newview/llstartup.cpp12
-rw-r--r--indra/newview/llstartup.h3
-rw-r--r--indra/newview/lltoastalertpanel.cpp83
-rw-r--r--indra/newview/lltoolbar.cpp27
-rw-r--r--indra/newview/lltoolgrab.cpp22
-rw-r--r--indra/newview/llviewercontrol.cpp12
-rw-r--r--indra/newview/llviewermenu.cpp59
-rw-r--r--indra/newview/llviewermenu.h1
-rw-r--r--indra/newview/llviewermessage.cpp23
-rw-r--r--indra/newview/llviewerwindow.cpp280
-rw-r--r--indra/newview/llviewerwindow.h18
-rw-r--r--indra/newview/llvoavatar.cpp2
-rw-r--r--indra/newview/llvovolume.cpp8
-rw-r--r--indra/newview/llwearableitemslist.cpp13
-rw-r--r--indra/newview/llwearableitemslist.h8
-rw-r--r--indra/newview/llworldmapmessage.cpp3
-rw-r--r--indra/newview/skins/default/textures/textures.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_camera.xml27
-rw-r--r--indra/newview/skins/default/xui/de/floater_incoming_call.xml8
-rw-r--r--indra/newview/skins/default/xui/de/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_effect.xml29
-rw-r--r--indra/newview/skins/default/xui/de/inspect_object.xml8
-rw-r--r--indra/newview/skins/default/xui/de/menu_cof_attachment.xml4
-rw-r--r--indra/newview/skins/default/xui/de/menu_cof_body_part.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_cof_clothing.xml7
-rw-r--r--indra/newview/skins/default/xui/de/menu_cof_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_hide_navbar.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_outfit_gear.xml26
-rw-r--r--indra/newview/skins/default/xui/de/menu_outfit_tab.xml9
-rw-r--r--indra/newview/skins/default/xui/de/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml19
-rw-r--r--indra/newview/skins/default/xui/de/menu_wearable_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml104
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_shape.xml18
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_wearable.xml7
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfit_edit.xml23
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfits_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/de/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/de/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_voice_effect.xml15
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_inventory.xml9
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml64
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_critical.xml14
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_browser.xml10
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_gesture.xml76
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_effect.xml60
-rw-r--r--indra/newview/skins/default/xui/en/inspect_object.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_outfit_tab.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_topinfobar.xml51
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_wearable.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml16
-rw-r--r--indra/newview/skins/default/xui/en/panel_voice_effect.xml6
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml89
-rw-r--r--indra/newview/skins/default/xui/it/floater_camera.xml27
-rw-r--r--indra/newview/skins/default/xui/it/floater_incoming_call.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_snapshot.xml23
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_effect.xml29
-rw-r--r--indra/newview/skins/default/xui/it/inspect_object.xml9
-rw-r--r--indra/newview/skins/default/xui/it/menu_cof_attachment.xml4
-rw-r--r--indra/newview/skins/default/xui/it/menu_cof_body_part.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_cof_clothing.xml7
-rw-r--r--indra/newview/skins/default/xui/it/menu_cof_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_hide_navbar.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_outfit_gear.xml26
-rw-r--r--indra/newview/skins/default/xui/it/menu_outfit_tab.xml9
-rw-r--r--indra/newview/skins/default/xui/it/menu_save_outfit.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml17
-rw-r--r--indra/newview/skins/default/xui/it/menu_wearable_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml98
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_shape.xml13
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_wearable.xml9
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfit_edit.xml18
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfits_inventory.xml3
-rw-r--r--indra/newview/skins/default/xui/it/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_voice_effect.xml15
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml48
145 files changed, 1733 insertions, 1072 deletions
diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp
index 05d1bc0cd9..ee60430d97 100644
--- a/indra/llcharacter/llmultigesture.cpp
+++ b/indra/llcharacter/llmultigesture.cpp
@@ -498,6 +498,10 @@ std::vector<std::string> LLGestureStepWait::getLabel() const
strings.push_back("until animations are done");
// label += "until animations are done";
}
+ else
+ {
+ strings.push_back("");
+ }
return strings;
}
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index eedec0b24e..0447ca93f5 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -32,6 +32,12 @@
#include <cstdlib>
+#ifdef LL_DARWIN
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/sysctl.h>
+#endif
+
#include "linden_common.h"
#include "llapp.h"
@@ -306,7 +312,42 @@ void LLApp::setupErrorHandling()
setup_signals();
// Add google breakpad exception handler configured for Darwin/Linux.
- if(mExceptionHandler == 0)
+ bool installHandler = true;
+#ifdef LL_DARWIN
+ // For the special case of Darwin, we do not want to install the handler if
+ // the process is being debugged as the app will exit with value ABRT (6) if
+ // we do. Unfortunately, the code below which performs that test relies on
+ // the structure kinfo_proc which has been tagged by apple as an unstable
+ // API. We disable this test for shipping versions to avoid conflicts with
+ // future releases of Darwin. This test is really only needed for developers
+ // starting the app from a debugger anyway.
+ #ifndef LL_RELEASE_FOR_DOWNLOAD
+ int mib[4];
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+
+ struct kinfo_proc info;
+ memset(&info, 0, sizeof(info));
+
+ size_t size = sizeof(info);
+ int result = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
+ if((result == 0) || (errno == ENOMEM))
+ {
+ // P_TRACED flag is set, so this process is being debugged; do not install
+ // the handler
+ if(info.kp_proc.p_flag & P_TRACED) installHandler = false;
+ }
+ else
+ {
+ // Failed to discover if the process is being debugged; default to
+ // installing the handler.
+ installHandler = true;
+ }
+ #endif
+#endif
+ if(installHandler && (mExceptionHandler == 0))
{
std::string dumpPath = "/tmp/";
mExceptionHandler = new google_breakpad::ExceptionHandler(dumpPath, 0, &unix_post_minidump_callback, 0, true);
@@ -364,7 +405,7 @@ void LLApp::setError()
void LLApp::setMiniDumpDir(const std::string &path)
{
- llassert(mExceptionHandler);
+ if(mExceptionHandler == 0) return;
#ifdef LL_WINDOWS
wchar_t buffer[MAX_MINDUMP_PATH_LENGTH];
mbstowcs(buffer, path.c_str(), MAX_MINDUMP_PATH_LENGTH);
@@ -376,7 +417,7 @@ void LLApp::setMiniDumpDir(const std::string &path)
void LLApp::writeMiniDump()
{
- llassert(mExceptionHandler);
+ if(mExceptionHandler == 0) return;
mExceptionHandler->WriteMinidump();
}
diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index 20727dd76e..dfbae09864 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -238,7 +238,8 @@ U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
#else // windows or x86-mac or x86-linux or x86-solaris
U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
{
- static U64 sCPUClockFrequency = U64(LLProcessorInfo().getCPUFrequency());
+ //getCPUFrequency returns MHz and sCPUClockFrequency wants to be in Hz
+ static U64 sCPUClockFrequency = U64(LLProcessorInfo().getCPUFrequency()*1000000.0);
// we drop the low-order byte in our timers, so report a lower frequency
return sCPUClockFrequency >> 8;
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 2f02ccf30b..e22f8d2ddc 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1813,7 +1813,8 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
{
LL_WARNS_ONCE("render") << "Ugh, non-finite u/v in mask pick" << LL_ENDL;
u = v = 0.f;
- llassert(false);
+ // removing assert per EXT-4388
+ // llassert(false);
}
if (LL_UNLIKELY(u < 0.f || u > 1.f ||
@@ -1821,7 +1822,8 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
{
LL_WARNS_ONCE("render") << "Ugh, u/v out of range in image mask pick" << LL_ENDL;
u = v = 0.f;
- llassert(false);
+ // removing assert per EXT-4388
+ // llassert(false);
}
S32 x = llfloor(u * mPickMaskWidth);
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
index 3ad5274085..b5fdf796cd 100644
--- a/indra/llui/llaccordionctrl.h
+++ b/indra/llui/llaccordionctrl.h
@@ -138,6 +138,8 @@ public:
*/
const LLAccordionCtrlTab* getExpandedTab() const;
+ const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; }
+
private:
void initNoTabsWidget(const LLTextBox::Params& tb_params);
void updateNoTabsHelpTextVisibility();
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 54bb328a18..20e4b7867c 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -76,6 +76,8 @@ public:
std::string getTitle();
void setTitle(const std::string& title, const std::string& hl);
+ void setTitleFontStyle(std::string style);
+
void setSelected(bool is_selected) { mIsSelected = is_selected; }
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
@@ -102,6 +104,9 @@ private:
LLPointer<LLUIImage> mImageHeaderPressed;
LLPointer<LLUIImage> mImageHeaderFocused;
+ // style saved when applying it in setTitleFontStyle
+ LLStyle::Params mStyleParams;
+
LLUIColor mHeaderBGColor;
bool mNeedsHighlight;
@@ -170,12 +175,23 @@ void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitle(const std::string& t
{
LLTextUtil::textboxSetHighlightedVal(
mHeaderTextbox,
- LLStyle::Params(),
+ mStyleParams,
title,
hl);
}
}
+void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitleFontStyle(std::string style)
+{
+ if (mHeaderTextbox)
+ {
+ std::string text = mHeaderTextbox->getText();
+ mStyleParams.font(mHeaderTextbox->getDefaultFont());
+ mStyleParams.font.style(style);
+ mHeaderTextbox->setText(text, mStyleParams);
+ }
+}
+
void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::draw()
{
S32 width = getRect().getWidth();
@@ -495,6 +511,15 @@ void LLAccordionCtrlTab::setTitle(const std::string& title, const std::string& h
}
}
+void LLAccordionCtrlTab::setTitleFontStyle(std::string style)
+{
+ LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
+ if (header)
+ {
+ header->setTitleFontStyle(style);
+ }
+}
+
boost::signals2::connection LLAccordionCtrlTab::setFocusReceivedCallback(const focus_signal_t::slot_type& cb)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 7bf7eeef8f..e17ecc5319 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -37,6 +37,7 @@
#include "llrect.h"
#include "lluictrl.h"
#include "lluicolor.h"
+#include "llstyle.h"
class LLUICtrlFactory;
class LLUIImage;
@@ -120,6 +121,9 @@ public:
// Set text and highlight substring in LLAccordionCtrlTabHeader
void setTitle(const std::string& title, const std::string& hl = LLStringUtil::null);
+ // Set text font style in LLAccordionCtrlTabHeader
+ void setTitleFontStyle(std::string style);
+
boost::signals2::connection setFocusReceivedCallback(const focus_signal_t::slot_type& cb);
boost::signals2::connection setFocusLostCallback(const focus_signal_t::slot_type& cb);
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 3c6c7d3e82..2d0d5c12cb 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -152,6 +152,7 @@ LLTextBase::Params::Params()
bg_writeable_color("bg_writeable_color"),
bg_focus_color("bg_focus_color"),
allow_scroll("allow_scroll", true),
+ plain_text("plain_text",false),
track_end("track_end", false),
read_only("read_only", false),
v_pad("v_pad", 0),
@@ -200,6 +201,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
mSelectionStart( 0 ),
mSelectionEnd( 0 ),
mIsSelecting( FALSE ),
+ mPlainText ( p.plain_text ),
mWordWrap(p.wrap),
mUseEllipses( p.use_ellipses ),
mParseHTML(p.allow_html),
@@ -1614,7 +1616,7 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para
part = (S32)LLTextParser::MIDDLE;
}
std::string subtext=text.substr(0,start);
- appendAndHighlightTextImpl(subtext, part, style_params);
+ appendAndHighlightText(subtext, part, style_params);
}
// output an optional icon before the Url
@@ -1635,11 +1637,11 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para
// output the styled Url (unless we've been asked to suppress hyperlinking)
if (match.isLinkDisabled())
{
- appendAndHighlightTextImpl(match.getLabel(), part, style_params);
+ appendAndHighlightText(match.getLabel(), part, style_params);
}
else
{
- appendAndHighlightTextImpl(match.getLabel(), part, link_params);
+ appendAndHighlightText(match.getLabel(), part, link_params);
// set the tooltip for the Url label
if (! match.getTooltip().empty())
@@ -1667,11 +1669,11 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para
if (part != (S32)LLTextParser::WHOLE)
part=(S32)LLTextParser::END;
if (end < (S32)text.length())
- appendAndHighlightTextImpl(text, part, style_params);
+ appendAndHighlightText(text, part, style_params);
}
else
{
- appendAndHighlightTextImpl(new_text, part, style_params);
+ appendAndHighlightText(new_text, part, style_params);
}
}
@@ -1682,23 +1684,7 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c
if(prepend_newline)
appendLineBreakSegment(input_params);
- std::string::size_type start = 0;
- std::string::size_type pos = new_text.find("\n",start);
-
- while(pos!=-1)
- {
- if(pos!=start)
- {
- std::string str = std::string(new_text,start,pos-start);
- appendTextImpl(str,input_params);
- }
- appendLineBreakSegment(input_params);
- start = pos+1;
- pos = new_text.find("\n",start);
- }
-
- std::string str = std::string(new_text,start,new_text.length()-start);
- appendTextImpl(str,input_params);
+ appendTextImpl(new_text,input_params);
}
void LLTextBase::needsReflow(S32 index)
@@ -1718,6 +1704,10 @@ void LLTextBase::appendLineBreakSegment(const LLStyle::Params& style_params)
void LLTextBase::appendImageSegment(S32 highlight_part, const LLStyle::Params& style_params)
{
+ if(getPlainText())
+ {
+ return;
+ }
segment_vec_t segments;
LLStyleConstSP sp(new LLStyle(style_params));
segments.push_back(new LLImageTextSegment(sp, getLength(),*this));
@@ -1797,13 +1787,10 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig
}
}
-void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& style_params)
+void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params)
{
if (new_text.empty()) return;
- if(prepend_newline)
- appendLineBreakSegment(style_params);
-
std::string::size_type start = 0;
std::string::size_type pos = new_text.find("\n",start);
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 89ce5cdc8e..92876e20d6 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -86,6 +86,7 @@ public:
track_end,
read_only,
allow_scroll,
+ plain_text,
wrap,
use_ellipses,
allow_html,
@@ -177,6 +178,9 @@ public:
void setReadOnly(bool read_only) { mReadOnly = read_only; }
bool getReadOnly() { return mReadOnly; }
+ void setPlainText(bool value) { mPlainText = value;}
+ bool getPlainText() const { return mPlainText; }
+
// cursor manipulation
bool setCursor(S32 row, S32 column);
bool setCursorPos(S32 cursor_pos, bool keep_cursor_offset = false);
@@ -274,7 +278,7 @@ protected:
S32 insertStringNoUndo(S32 pos, const LLWString &wstr, segment_vec_t* segments = NULL); // returns num of chars actually inserted
S32 removeStringNoUndo(S32 pos, S32 length);
S32 overwriteCharNoUndo(S32 pos, llwchar wc);
- void appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& stylep);
+ void appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep);
// manage segments
@@ -366,6 +370,7 @@ protected:
bool mReadOnly;
bool mBGVisible; // render background?
bool mClipPartial; // false if we show lines that are partially inside bounding rect
+ bool mPlainText; // didn't use Image or Icon segments
S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes
// support widgets
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4a23513aea..5eff08c6ed 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2841,6 +2841,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>FeatureManagerHTTPTable</key>
+ <map>
+ <key>Comment</key>
+ <string>Base directory for HTTP feature/gpu table fetches</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://viewer-settings.secondlife.com</string>
+ </map>
<key>FPSLogFrequency</key>
<map>
<key>Comment</key>
@@ -3589,17 +3600,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>FullScreen</key>
- <map>
- <key>Comment</key>
- <string>Run SL in fullscreen mode</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>FullScreenAspectRatio</key>
<map>
<key>Comment</key>
@@ -3609,7 +3609,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>1.33329999447</real>
+ <real>3</real>
</map>
<key>FullScreenAutoDetectAspectRatio</key>
<map>
@@ -3620,29 +3620,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
- </map>
- <key>FullScreenHeight</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in height</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>768</integer>
- </map>
- <key>FullScreenWidth</key>
- <map>
- <key>Comment</key>
- <string>Fullscreen resolution in width</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1024</integer>
+ <integer>0</integer>
</map>
<key>GesturesMarketplaceURL</key>
<map>
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index c6ca9c5e3a..9cf0a659c1 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2084,6 +2084,9 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate)
// visibility changes at end of animation
gViewerWindow->getWindow()->resetBusyCount();
+ // Menus should not remain open on switching to mouselook...
+ LLMenuGL::sMenuContainer->hideMenus();
+
// unpause avatar animation
gAgent.unpauseAnimation();
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 557b3b0a77..5728256dba 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -47,6 +47,7 @@
#include "llinventorypanel.h"
#include "llmd5.h"
#include "llnotificationsutil.h"
+#include "lloutfitobserver.h"
#include "llpaneloutfitsinventory.h"
#include "llsidepanelappearance.h"
#include "llsidetray.h"
@@ -166,6 +167,7 @@ struct LLAgentDumper
LLAgentWearables::LLAgentWearables() :
mWearablesLoaded(FALSE)
+, mCOFChangeInProgress(false)
{
}
@@ -178,6 +180,14 @@ void LLAgentWearables::cleanup()
{
}
+// static
+void LLAgentWearables::initClass()
+{
+ // this can not be called from constructor because its instance is global and is created too early.
+ // Subscribe to "COF is Saved" signal to notify observers about this (Loading indicator for ex.).
+ LLOutfitObserver::instance().addCOFSavedCallback(boost::bind(&LLAgentWearables::notifyLoadingFinished, &gAgentWearables));
+}
+
void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar)
{
if (avatar)
@@ -920,13 +930,19 @@ BOOL LLAgentWearables::isWearingItem(const LLUUID& item_id) const
// static
// ! BACKWARDS COMPATIBILITY ! When we stop supporting viewer1.23, we can assume
// that viewers have a Current Outfit Folder and won't need this message, and thus
-// we can remove/ignore this whole function.
+// we can remove/ignore this whole function. EXCEPT gAgentWearables.notifyLoadingStarted
void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgsys, void** user_data)
{
// We should only receive this message a single time. Ignore subsequent AgentWearablesUpdates
// that may result from AgentWearablesRequest having been sent more than once.
if (mInitialWearablesUpdateReceived)
return;
+
+ // notify subscribers that wearables started loading. See EXT-7777
+ // *TODO: find more proper place to not be called from deprecated method.
+ // Seems such place is found: LLInitialWearablesFetch::processContents()
+ gAgentWearables.notifyLoadingStarted();
+
mInitialWearablesUpdateReceived = true;
LLUUID agent_id;
@@ -1208,7 +1224,7 @@ void LLAgentWearables::createStandardWearablesAllDone()
mWearablesLoaded = TRUE;
checkWearablesLoaded();
- mLoadedSignal();
+ notifyLoadingFinished();
updateServer();
@@ -1460,7 +1476,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
// Start rendering & update the server
mWearablesLoaded = TRUE;
checkWearablesLoaded();
- mLoadedSignal();
+ notifyLoadingFinished();
queryWearableCache();
updateServer();
@@ -1945,7 +1961,7 @@ void LLAgentWearables::updateWearablesLoaded()
mWearablesLoaded = (itemUpdatePendingCount()==0);
if (mWearablesLoaded)
{
- mLoadedSignal();
+ notifyLoadingFinished();
}
}
@@ -2111,7 +2127,13 @@ boost::signals2::connection LLAgentWearables::addLoadedCallback(loaded_callback_
void LLAgentWearables::notifyLoadingStarted()
{
+ mCOFChangeInProgress = true;
mLoadingStartedSignal();
}
+void LLAgentWearables::notifyLoadingFinished()
+{
+ mCOFChangeInProgress = false;
+ mLoadedSignal();
+}
// EOF
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 3295544e04..8122971db6 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -33,9 +33,13 @@
#ifndef LL_LLAGENTWEARABLES_H
#define LL_LLAGENTWEARABLES_H
+// libraries
#include "llmemory.h"
+#include "llui.h"
#include "lluuid.h"
#include "llinventory.h"
+
+// newview
#include "llinventorymodel.h"
#include "llviewerinventory.h"
#include "llvoavatardefines.h"
@@ -47,7 +51,7 @@ class LLInitialWearablesFetch;
class LLViewerObject;
class LLTexLayerTemplate;
-class LLAgentWearables
+class LLAgentWearables : public LLInitClass<LLAgentWearables>
{
//--------------------------------------------------------------------
// Constructors / destructors / Initializers
@@ -61,6 +65,9 @@ public:
void createStandardWearables(BOOL female);
void cleanup();
void dump();
+
+ // LLInitClass interface
+ static void initClass();
protected:
void createStandardWearablesDone(S32 type, U32 index/* = 0*/);
void createStandardWearablesAllDone();
@@ -75,6 +82,7 @@ public:
BOOL isWearableCopyable(LLWearableType::EType type, U32 index /*= 0*/) const;
BOOL areWearablesLoaded() const;
+ bool isCOFChangeInProgress() const { return mCOFChangeInProgress; }
void updateWearablesLoaded();
void checkWearablesLoaded() const;
bool canMoveWearable(const LLUUID& item_id, bool closer_to_body);
@@ -233,6 +241,7 @@ public:
boost::signals2::connection addLoadedCallback(loaded_callback_t cb);
void notifyLoadingStarted();
+ void notifyLoadingFinished();
private:
loading_started_signal_t mLoadingStartedSignal; // should be called before wearables are changed
@@ -249,6 +258,11 @@ private:
static BOOL mInitialWearablesUpdateReceived;
BOOL mWearablesLoaded;
std::set<LLUUID> mItemsAwaitingWearableUpdate;
+
+ /**
+ * True if agent's outfit is being changed now.
+ */
+ BOOL mCOFChangeInProgress;
//--------------------------------------------------------------------------------
// Support classes
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp
index ef0b97d376..931aba1d41 100644
--- a/indra/newview/llagentwearablesfetch.cpp
+++ b/indra/newview/llagentwearablesfetch.cpp
@@ -121,6 +121,7 @@ void LLInitialWearablesFetch::processContents()
LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true);
if (wearable_array.count() > 0)
{
+ gAgentWearables.notifyLoadingStarted();
LLAppearanceMgr::instance().updateAppearanceFromCOF();
}
else
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 52a5587a16..405cc5b282 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -177,7 +177,13 @@ class LLUpdateDirtyState: public LLInventoryCallback
{
public:
LLUpdateDirtyState() {}
- virtual ~LLUpdateDirtyState(){ LLAppearanceMgr::getInstance()->updateIsDirty(); }
+ virtual ~LLUpdateDirtyState()
+ {
+ if (LLAppearanceMgr::instanceExists())
+ {
+ LLAppearanceMgr::getInstance()->updateIsDirty();
+ }
+ }
virtual void fire(const LLUUID&) {}
};
@@ -923,6 +929,14 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
{
if (item_id_to_wear.isNull()) return false;
+ // *TODO: issue with multi-wearable should be fixed:
+ // in this case this method will be called N times - loading started for each item
+ // and than N times will be called - loading completed for each item.
+ // That means subscribers will be notified that loading is done after first item in a batch is worn.
+ // (loading indicator disappears for example before all selected items are worn)
+ // Have not fix this issue for 2.1 because of stability reason. EXT-7777.
+ gAgentWearables.notifyLoadingStarted();
+
LLViewerInventoryItem* item_to_wear = gInventory.getItem(item_id_to_wear);
if (!item_to_wear) return false;
@@ -1060,7 +1074,7 @@ void LLAppearanceMgr::takeOffOutfit(const LLUUID& cat_id)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
- LLFindWorn collector;
+ LLFindWearablesEx collector(/*is_worn=*/ true, /*include_body_parts=*/ false);
gInventory.collectDescendentsIf(cat_id, cats, items, FALSE, collector);
@@ -1216,6 +1230,34 @@ bool LLAppearanceMgr::getCanRemoveOutfit(const LLUUID& outfit_cat_id)
return true;
}
+// static
+bool LLAppearanceMgr::getCanRemoveFromCOF(const LLUUID& outfit_cat_id)
+{
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false);
+ gInventory.collectDescendentsIf(outfit_cat_id,
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_worn);
+ return items.size() > 0;
+}
+
+// static
+bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id)
+{
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
+ gInventory.collectDescendentsIf(outfit_cat_id,
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ not_worn);
+ return items.size() > 0;
+}
+
void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category)
{
LLInventoryModel::cat_array_t cats;
@@ -1330,9 +1372,12 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append)
// - Body parts: always include COF contents as a fallback in case any
// required parts are missing.
+ // Preserve body parts from COF if appending.
LLInventoryModel::item_array_t body_items;
getDescendentsOfAssetType(cof, body_items, LLAssetType::AT_BODYPART, false);
getDescendentsOfAssetType(category, body_items, LLAssetType::AT_BODYPART, false);
+ if (append)
+ reverse(body_items.begin(), body_items.end());
// Reduce body items to max of one per type.
removeDuplicateItems(body_items);
filterWearableItems(body_items, 1);
@@ -2111,6 +2156,8 @@ bool LLAppearanceMgr::updateBaseOutfit()
}
setOutfitLocked(true);
+ gAgentWearables.notifyLoadingStarted();
+
const LLUUID base_outfit_id = getBaseOutfitUUID();
if (base_outfit_id.isNull()) return false;
@@ -2270,6 +2317,7 @@ public:
}
LLAppearanceMgr::getInstance()->updateIsDirty();
+ gAgentWearables.notifyLoadingFinished(); // New outfit is saved.
LLAppearanceMgr::getInstance()->updatePanelOutfitName("");
}
@@ -2285,6 +2333,8 @@ LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, b
{
if (!isAgentAvatarValid()) return LLUUID::null;
+ gAgentWearables.notifyLoadingStarted();
+
// First, make a folder in the My Outfits directory.
const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
LLUUID folder_id = gInventory.createNewCategory(
@@ -2491,7 +2541,9 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
if (mAttachmentInvLinkEnabled)
{
- LLAppearanceMgr::addCOFItemLink(item_id, false); // Add COF link for item.
+ // we have to pass do_update = true to call LLAppearanceMgr::updateAppearanceFromCOF.
+ // it will trigger gAgentWariables.notifyLoadingFinished()
+ LLAppearanceMgr::addCOFItemLink(item_id, true); // Add COF link for item.
}
else
{
@@ -2521,7 +2573,7 @@ void LLAppearanceMgr::linkRegisteredAttachments()
++it)
{
LLUUID item_id = *it;
- addCOFItemLink(item_id, false);
+ addCOFItemLink(item_id, true);
}
mRegisteredAttachments.clear();
}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index e42f9f7d6f..8ded32a53d 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -75,6 +75,12 @@ public:
// Determine whether a given outfit can be removed.
bool getCanRemoveOutfit(const LLUUID& outfit_cat_id);
+ // Determine whether we're wearing any of the outfit contents (excluding body parts).
+ static bool getCanRemoveFromCOF(const LLUUID& outfit_cat_id);
+
+ // Determine whether we can add anything (but body parts) from the outfit contents to COF.
+ static bool getCanAddToCOF(const LLUUID& outfit_cat_id);
+
// Copy all items in a category.
void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index fc6272f1fc..6f0d434524 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2381,16 +2381,9 @@ bool LLAppViewer::initWindow()
LLNotificationsUI::LLNotificationManager::getInstance();
- if (gSavedSettings.getBOOL("FullScreen"))
- {
- // request to go full screen... which will be delayed until login
- gViewerWindow->toggleFullscreen(FALSE);
- }
-
if (gSavedSettings.getBOOL("WindowMaximized"))
{
gViewerWindow->mWindow->maximize();
- gViewerWindow->getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio"));
}
if (!gNoRender)
@@ -2464,11 +2457,10 @@ void LLAppViewer::cleanupSavedSettings()
}
}
- // save window position if not fullscreen
+ // save window position if not maximized
// as we don't track it in callbacks
- BOOL fullscreen = gViewerWindow->mWindow->getFullscreen();
BOOL maximized = gViewerWindow->mWindow->getMaximized();
- if (!fullscreen && !maximized)
+ if (!maximized)
{
LLCoordScreen window_pos;
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2dafe295fe..5bc3b3ac8d 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -550,11 +550,10 @@ namespace action_give_inventory
// iterate through avatars
for(S32 i = 0; i < count; ++i)
{
- const std::string& avatar_name = LLShareInfo::instance().mAvatarNames[i];
const LLUUID& avatar_uuid = LLShareInfo::instance().mAvatarUuids[i];
- // Start up IM before give the item
- const LLUUID session_id = gIMMgr->addSession(avatar_name, IM_NOTHING_SPECIAL, avatar_uuid);
+ // We souldn't open IM session, just calculate session ID for logging purpose. See EXT-6710
+ const LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, avatar_uuid);
uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 87b8d807c4..abb79b53a7 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -244,7 +244,10 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
LLIconCtrl::setValue(value);
}
- gCacheName->get(mAvatarId, FALSE, boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3, _4));
+ if (gCacheName)
+ {
+ gCacheName->get(mAvatarId, FALSE, boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3, _4));
+ }
}
bool LLAvatarIconCtrl::updateFromCache()
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index 67d5d21b2a..cd279fa10a 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -149,7 +149,6 @@ BOOL LLChatBar::handleKeyHere( KEY key, MASK mask )
{
BOOL handled = FALSE;
- // ALT-RETURN is reserved for windowed/fullscreen toggle
if( KEY_RETURN == key )
{
if (mask == MASK_CONTROL)
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 18c69b5130..ab97dbb695 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -557,6 +557,11 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
{
bool use_plain_text_chat_history = args["use_plain_text_chat_history"].asBoolean();
+ if(mEditor)
+ {
+ mEditor->setPlainText(use_plain_text_chat_history);
+ }
+
if (!mEditor->scrolledToEnd() && chat.mFromID != gAgent.getID() && !chat.mFromName.empty())
{
mUnreadChatSources.insert(chat.mFromName);
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 46d2e0a5db..aa8cc01f7d 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -208,7 +208,7 @@ protected:
}
else if ("edit" == param)
{
- return gAgentWearables.isWearableModifiable(selected_id);
+ return mUUIDs.size() == 1 && gAgentWearables.isWearableModifiable(selected_id);
}
return true;
}
@@ -264,7 +264,7 @@ protected:
if ("edit" == param)
{
- return gAgentWearables.isWearableModifiable(selected_id);
+ return mUUIDs.size() == 1 && gAgentWearables.isWearableModifiable(selected_id);
}
return true;
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index d079da3b36..b83e4fe830 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -338,7 +338,11 @@ void LLColorSwatchCtrl::showPicker(BOOL take_focus)
if (!pickerp)
{
pickerp = new LLFloaterColorPicker(this, mCanApplyImmediately);
- //gFloaterView->getParentFloater(this)->addDependentFloater(pickerp);
+ LLFloater* parent = gFloaterView->getParentFloater(this);
+ if (parent)
+ {
+ parent->addDependentFloater(pickerp);
+ }
mPickerHandle = pickerp->getHandle();
}
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index ed6a791e7f..4f56d6395f 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -1366,10 +1366,11 @@ void LLSpatialBridge::move(LLDrawable *drawablep, LLSpatialGroup *curp, BOOL imm
BOOL LLSpatialBridge::updateMove()
{
- llassert(mDrawable);
- llassert(mDrawable->getRegion());
+ llassert_always(mDrawable);
+ llassert_always(mDrawable->mVObjp);
+ llassert_always(mDrawable->getRegion());
LLSpatialPartition* part = mDrawable->getRegion()->getSpatialPartition(mPartitionType);
- llassert(part);
+ llassert_always(part);
mOctree->balance();
if (part)
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 4fdb010162..f32fcd6b7f 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -496,11 +496,11 @@ private:
void fetch_table(std::string table)
{
- const std::string base = "http://viewer-settings.s3.amazonaws.com/";
+ const std::string base = gSavedSettings.getString("FeatureManagerHTTPTable");
const std::string filename = llformat(table.c_str(), LLVersionInfo::getVersion().c_str());
- const std::string url = base + filename;
+ const std::string url = base + "/" + filename;
const std::string path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename);
diff --git a/indra/newview/llfloaterbuycurrencyhtml.cpp b/indra/newview/llfloaterbuycurrencyhtml.cpp
index 7f41a64064..d45df37092 100644
--- a/indra/newview/llfloaterbuycurrencyhtml.cpp
+++ b/indra/newview/llfloaterbuycurrencyhtml.cpp
@@ -91,7 +91,7 @@ void LLFloaterBuyCurrencyHTML::navigateToFinalURL()
llinfos << "Buy currency HTML prased URL is " << buy_currency_url << llendl;
// kick off the navigation
- mBrowser->navigateTo( buy_currency_url );
+ mBrowser->navigateTo( buy_currency_url, "text/html" );
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index b2564eb2b6..480e4ce3a4 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -143,10 +143,9 @@ void LLFloaterHardwareSettings::apply()
LLWindow* window = gViewerWindow->getWindow();
LLCoordScreen size;
window->getSize(&size);
- gViewerWindow->changeDisplaySettings(window->getFullscreen(),
- size,
- gSavedSettings.getBOOL("DisableVerticalSync"),
- logged_in);
+ gViewerWindow->changeDisplaySettings(size,
+ gSavedSettings.getBOOL("DisableVerticalSync"),
+ logged_in);
}
else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
{
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 32ee9a073c..1d7fc9c991 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -465,8 +465,6 @@ void LLFloaterPreference::apply()
gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility);
}
}
-
- applyResolution();
}
void LLFloaterPreference::cancel()
@@ -1298,31 +1296,6 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b
}
}
-void LLFloaterPreference::applyResolution()
-{
- gGL.flush();
-
- // Screen resolution
- S32 num_resolutions;
- LLWindow::LLWindowResolution* supported_resolutions =
- gViewerWindow->getWindow()->getSupportedResolutions(num_resolutions);
- S32 resIndex = getChild<LLComboBox>("fullscreen combo")->getCurrentIndex();
- if (resIndex == -1)
- {
- // use highest resolution if nothing selected
- resIndex = num_resolutions - 1;
- }
- gSavedSettings.setS32("FullScreenWidth", supported_resolutions[resIndex].mWidth);
- gSavedSettings.setS32("FullScreenHeight", supported_resolutions[resIndex].mHeight);
-
- gViewerWindow->requestResolutionUpdate(gSavedSettings.getBOOL("FullScreen"));
-
- send_agent_update(TRUE);
-
- // Update enable/disable
- refresh();
-}
-
void LLFloaterPreference::onChangeMaturity()
{
U8 sim_access = gSavedSettings.getU32("PreferredMaturity");
diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp
index aebf1b4c26..6470e9d6fe 100644
--- a/indra/newview/llgiveinventory.cpp
+++ b/indra/newview/llgiveinventory.cpp
@@ -300,15 +300,15 @@ void LLGiveInventory::logInventoryOffer(const LLUUID& to_agent, const LLUUID &im
// compute id of possible IM session with agent that has "to_agent" id
LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, to_agent);
// If this item was given by drag-and-drop into an IM panel, log this action in the IM panel chat.
+ LLSD args;
+ args["user_id"] = to_agent;
if (im_session_id.notNull())
{
- LLSD args;
gIMMgr->addSystemMessage(im_session_id, "inventory_item_offered", args);
}
// If this item was given by drag-and-drop on avatar while IM panel was open, log this action in the IM panel chat.
else if (LLIMModel::getInstance()->findIMSession(session_id))
{
- LLSD args;
gIMMgr->addSystemMessage(session_id, "inventory_item_offered", args);
}
// If this item was given by drag-and-drop on avatar while IM panel wasn't open, log this action to IM history.
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 2c1983b6d2..ddfcd68e38 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2311,12 +2311,20 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess
}
else // going to IM session
{
+ message = LLTrans::getString(message_name + "-im");
+ message.setArgs(args);
if (hasSession(session_id))
{
- message = LLTrans::getString(message_name + "-im");
- message.setArgs(args);
gIMMgr->addMessage(session_id, LLUUID::null, SYSTEM_FROM, message.getString());
}
+ // log message to file
+ else
+ {
+ std::string session_name;
+ // since we select user to share item with - his name is already in cache
+ gCacheName->getFullName(args["user_id"], session_name);
+ LLIMModel::instance().logToFile(session_name, SYSTEM_FROM, LLUUID::null, message.getString());
+ }
}
}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index ec367c1746..afaeddaaeb 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2489,7 +2489,7 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back(std::string("Wear As Ensemble"));
}
mItems.push_back(std::string("Remove From Outfit"));
- if (!areAnyContentsWorn(model))
+ if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
{
disabled_items.push_back(std::string("Remove From Outfit"));
}
@@ -2514,19 +2514,6 @@ BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInv
return ((item_array.count() > 0) ? TRUE : FALSE );
}
-BOOL LLFolderBridge::areAnyContentsWorn(LLInventoryModel* model) const
-{
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t item_array;
- LLFindWorn is_worn;
- model->collectDescendentsIf(mUUID,
- cat_array,
- item_array,
- LLInventoryModel::EXCLUDE_TRASH,
- is_worn);
- return (item_array.size() > 0);
-}
-
// Flags unused
void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
@@ -4496,6 +4483,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
items.push_back(std::string("Wearable Wear"));
items.push_back(std::string("Wearable Add"));
disabled_items.push_back(std::string("Take Off"));
+ disabled_items.push_back(std::string("Wearable Edit"));
}
break;
default:
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 757808eb93..64d0f8d254 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -295,7 +295,6 @@ protected:
static void createNewEyes(void* user_data);
BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck);
- BOOL areAnyContentsWorn(LLInventoryModel* model) const;
void modifyOutfit(BOOL append);
void determineFolderType();
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index de24bd92d0..37088064c6 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -327,6 +327,11 @@ BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id)
return FALSE;
}
+void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id)
+{
+ LLSideTray::getInstance()->showPanel("sidepanel_inventory", LLSD().with("id", item_uuid).with("object", object_id));
+}
+
void show_item_profile(const LLUUID& item_uuid)
{
LLUUID linked_uuid = gInventory.getLinkedItemID(item_uuid);
@@ -573,6 +578,31 @@ bool LLFindWearables::operator()(LLInventoryCategory* cat,
return FALSE;
}
+LLFindWearablesEx::LLFindWearablesEx(bool is_worn, bool include_body_parts)
+: mIsWorn(is_worn)
+, mIncludeBodyParts(include_body_parts)
+{}
+
+bool LLFindWearablesEx::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+ LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item);
+ if (!vitem) return false;
+
+ // Skip non-wearables.
+ if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT)
+ {
+ return false;
+ }
+
+ // Skip body parts if requested.
+ if (!mIncludeBodyParts && vitem->getType() == LLAssetType::AT_BODYPART)
+ {
+ return false;
+ }
+
+ return (bool) get_is_item_worn(item->getUUID()) == mIsWorn;
+}
+
bool LLFindWearablesOfType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
if (!item) return false;
@@ -593,11 +623,6 @@ void LLFindWearablesOfType::setType(LLWearableType::EType type)
mWearableType = type;
}
-bool LLFindWorn::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
-{
- return item && get_is_item_worn(item->getUUID());
-}
-
bool LLFindNonRemovableObjects::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
if (item)
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 93c56e1b8a..6619a50d28 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -53,6 +53,7 @@ BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id);
BOOL get_is_category_renameable(const LLInventoryModel* model, const LLUUID& id);
void show_item_profile(const LLUUID& item_uuid);
+void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
void show_item_original(const LLUUID& item_uuid);
@@ -337,6 +338,21 @@ public:
LLInventoryItem* item);
};
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFindWearablesEx
+//
+// Collects wearables based on given criteria.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLFindWearablesEx : public LLInventoryCollectFunctor
+{
+public:
+ LLFindWearablesEx(bool is_worn, bool include_body_parts = true);
+ virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
+private:
+ bool mIncludeBodyParts;
+ bool mIsWorn;
+};
+
//Inventory collect functor collecting wearables of a specific wearable type
class LLFindWearablesOfType : public LLInventoryCollectFunctor
{
@@ -363,15 +379,6 @@ public:
}
};
-// Find worn items.
-class LLFindWorn : public LLInventoryCollectFunctor
-{
-public:
- LLFindWorn() {}
- virtual ~LLFindWorn() {}
- virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
-};
-
// Collect non-removable folders and items.
class LLFindNonRemovableObjects : public LLInventoryCollectFunctor
{
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index 384b24210c..14de5442d6 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -80,10 +80,11 @@ void LLPanelInventoryListItemBase::draw()
}
// virtual
-void LLPanelInventoryListItemBase::updateItem(const std::string& name)
+void LLPanelInventoryListItemBase::updateItem(const std::string& name,
+ const LLStyle::Params& input_params)
{
setIconImage(mIconImage);
- setTitle(name, mHighlightedText);
+ setTitle(name, mHighlightedText, input_params);
}
void LLPanelInventoryListItemBase::addWidgetToLeftSide(const std::string& name, bool show_widget/* = true*/)
@@ -286,25 +287,28 @@ void LLPanelInventoryListItemBase::setIconImage(const LLUIImagePtr& image)
}
}
-void LLPanelInventoryListItemBase::setTitle(const std::string& title, const std::string& highlit_text)
+void LLPanelInventoryListItemBase::setTitle(const std::string& title,
+ const std::string& highlit_text,
+ const LLStyle::Params& input_params)
{
- setToolTip(title);
+ mTitleCtrl->setToolTip(title);
LLTextUtil::textboxSetHighlightedVal(
mTitleCtrl,
- LLStyle::Params(),
+ input_params,
title,
highlit_text);
}
BOOL LLPanelInventoryListItemBase::handleToolTip( S32 x, S32 y, MASK mask)
{
- LLTextBox* item_name = getChild<LLTextBox>("item_name");
- if (item_name->getRect().getWidth() < item_name->getTextPixelWidth())
+ LLRect text_box_rect = mTitleCtrl->getRect();
+ if (text_box_rect.pointInRect(x, y) &&
+ mTitleCtrl->getTextPixelWidth() <= text_box_rect.getWidth())
{
- return LLPanel::handleToolTip(x,y,mask);
+ return FALSE;
}
- return FALSE;
+ return LLPanel::handleToolTip(x, y, mask);
}
void LLPanelInventoryListItemBase::reshapeLeftWidgets()
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
index 489a82829c..5dc0bfe3de 100644
--- a/indra/newview/llinventoryitemslist.h
+++ b/indra/newview/llinventoryitemslist.h
@@ -152,7 +152,8 @@ protected:
/**
* Called after inventory item was updated, update panel widgets to reflect inventory changes.
*/
- virtual void updateItem(const std::string& name);
+ virtual void updateItem(const std::string& name,
+ const LLStyle::Params& input_params = LLStyle::Params());
/** setter for mIconCtrl */
void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
@@ -177,7 +178,9 @@ protected:
void setIconImage(const LLUIImagePtr& image);
/** Set item title - inventory item name usually */
- virtual void setTitle(const std::string& title, const std::string& highlit_text);
+ virtual void setTitle(const std::string& title,
+ const std::string& highlit_text,
+ const LLStyle::Params& input_params = LLStyle::Params());
/**
* Show tool tip if item name text size > panel size
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 0ac8fbcb15..8cb263d9a7 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -523,8 +523,14 @@ void LLInventoryAddItemByAssetObserver::changed(U32 mask)
return;
}
- LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem;
LLMessageSystem* msg = gMessageSystem;
+ if (!(msg->getMessageName() && (0 == strcmp(msg->getMessageName(), "UpdateCreateInventoryItem"))))
+ {
+ // this is not our message
+ return; // to prevent a crash. EXT-7921;
+ }
+
+ LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem;
S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
for(S32 i = 0; i < num_blocks; ++i)
{
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 46f531fdd9..a300e15edd 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -433,7 +433,6 @@ BOOL LLNearbyChatBar::handleKeyHere( KEY key, MASK mask )
{
BOOL handled = FALSE;
- // ALT-RETURN is reserved for windowed/fullscreen toggle
if( KEY_RETURN == key && mask == MASK_CONTROL)
{
// shout
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index df6f04b6ea..a06a5770a2 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -106,11 +106,16 @@ bool LLTipHandler::processNotification(const LLSD& notify)
}
}
+ std::string session_name = notification->getPayload()["SESSION_NAME"];
const std::string name = notification->getSubstitutions()["NAME"];
+ if (session_name.empty())
+ {
+ session_name = name;
+ }
LLUUID from_id = notification->getPayload()["from_id"];
if (LLHandlerUtil::canLogToIM(notification))
{
- LLHandlerUtil::logToIM(IM_NOTHING_SPECIAL, name, name,
+ LLHandlerUtil::logToIM(IM_NOTHING_SPECIAL, session_name, name,
notification->getMessage(), from_id, from_id);
}
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index de074d6aaf..c5043e1c3d 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -103,6 +103,14 @@ protected:
{
return get_is_category_renameable(&gInventory, outfit_cat_id);
}
+ else if ("wear_add" == param)
+ {
+ return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id);
+ }
+ else if ("take_off" == param)
+ {
+ return LLAppearanceMgr::getCanRemoveFromCOF(outfit_cat_id);
+ }
return true;
}
@@ -120,14 +128,6 @@ protected:
{
return !is_worn;
}
- else if ("wear_add" == param)
- {
- return !is_worn;
- }
- else if ("take_off" == param)
- {
- return is_worn;
- }
else if ("delete" == param)
{
return LLAppearanceMgr::instance().getCanRemoveOutfit(outfit_cat_id);
@@ -161,6 +161,7 @@ LLOutfitsList::LLOutfitsList()
, mAccordion(NULL)
, mListCommands(NULL)
, mIsInitialized(false)
+ , mItemSelected(false)
{
mCategoriesObserver = new LLInventoryCategoriesObserver();
@@ -208,8 +209,13 @@ void LLOutfitsList::onOpen(const LLSD& /*info*/)
mCategoriesObserver->addCategory(outfits,
boost::bind(&LLOutfitsList::refreshList, this, outfits));
- // Start observing changes in Current Outfit to update items worn state.
- LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLOutfitsList::onCOFChanged, this));
+ const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
+
+ // Start observing changes in Current Outfit category.
+ mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this));
+
+ LLOutfitObserver::instance().addBOFChangedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this));
+ LLOutfitObserver::instance().addBOFReplacedCallback(boost::bind(&LLOutfitsList::highlightBaseOutfit, this));
// Fetch "My Outfits" contents and refresh the list to display
// initially fetched items. If not all items are fetched now
@@ -217,6 +223,7 @@ void LLOutfitsList::onOpen(const LLSD& /*info*/)
// arrive.
category->fetch();
refreshList(outfits);
+ highlightBaseOutfit();
mIsInitialized = true;
}
@@ -325,19 +332,13 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
// 1. Remove outfit category from observer to stop monitoring its changes.
mCategoriesObserver->removeCategory(outfit_id);
- // 2. Remove selected lists map entry.
- mSelectedListsMap.erase(outfit_id);
-
- // 3. Reset currently selected outfit id if it is being removed.
- if (outfit_id == mSelectedOutfitUUID)
- {
- setSelectedOutfitUUID(LLUUID());
- }
+ // 2. Remove the outfit from selection.
+ deselectOutfit(outfit_id);
- // 4. Remove category UUID to accordion tab mapping.
+ // 3. Remove category UUID to accordion tab mapping.
mOutfitsMap.erase(outfits_iter);
- // 5. Remove outfit tab from accordion.
+ // 4. Remove outfit tab from accordion.
mAccordion->removeCollapsibleCtrl(tab);
}
}
@@ -355,6 +356,25 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
mAccordion->sort();
}
+void LLOutfitsList::highlightBaseOutfit()
+{
+ // id of base outfit
+ LLUUID base_id = LLAppearanceMgr::getInstance()->getBaseOutfitUUID();
+ if (base_id != mHighlightedOutfitUUID)
+ {
+ if (mOutfitsMap[mHighlightedOutfitUUID])
+ {
+ mOutfitsMap[mHighlightedOutfitUUID]->setTitleFontStyle("NORMAL");
+ }
+
+ mHighlightedOutfitUUID = base_id;
+ }
+ if (mOutfitsMap[base_id])
+ {
+ mOutfitsMap[base_id]->setTitleFontStyle("BOLD");
+ }
+}
+
void LLOutfitsList::onSelectionChange(LLUICtrl* ctrl)
{
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl);
@@ -399,6 +419,11 @@ boost::signals2::connection LLOutfitsList::addSelectionChangeCallback(selection_
return mSelectionChangeSignal.connect(cb);
}
+bool LLOutfitsList::hasItemSelected()
+{
+ return mItemSelected;
+}
+
//////////////////////////////////////////////////////////////////////////
// Private methods
//////////////////////////////////////////////////////////////////////////
@@ -484,6 +509,8 @@ void LLOutfitsList::changeOutfitSelection(LLWearableItemsList* list, const LLUUI
mSelectedListsMap.clear();
}
+ mItemSelected = list && (list->getSelectedItem() != NULL);
+
mSelectedListsMap.insert(wearables_lists_map_value_t(category_id, list));
setSelectedOutfitUUID(category_id);
}
@@ -493,6 +520,27 @@ void LLOutfitsList::setSelectedOutfitUUID(const LLUUID& category_id)
mSelectionChangeSignal(mSelectedOutfitUUID = category_id);
}
+void LLOutfitsList::deselectOutfit(const LLUUID& category_id)
+{
+ // Remove selected lists map entry.
+ mSelectedListsMap.erase(category_id);
+
+ // Reset selection if the outfit is selected.
+ if (category_id == mSelectedOutfitUUID)
+ {
+ setSelectedOutfitUUID(LLUUID::null);
+ }
+}
+
+void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID& category_id)
+{
+ // Try restoring outfit selection after filtering.
+ if (mAccordion->getSelectedTab() == tab)
+ {
+ setSelectedOutfitUUID(category_id);
+ }
+}
+
void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
{
if (!ctrl || mFilterSubString.empty())
@@ -509,26 +557,7 @@ void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
if (list != ctrl) continue;
- std::string title = tab->getTitle();
- LLStringUtil::toUpper(title);
-
- std::string cur_filter = mFilterSubString;
- LLStringUtil::toUpper(cur_filter);
-
- if (std::string::npos == title.find(cur_filter))
- {
- // hide tab if its title doesn't pass filter
- // and it has no visible items
- tab->setVisible(list->size() != 0);
-
- // remove title highlighting because it might
- // have been previously highlighted by less restrictive filter
- tab->setTitle(tab->getTitle());
- }
- else
- {
- tab->setTitle(tab->getTitle(), cur_filter);
- }
+ applyFilterToTab(iter->first, tab, mFilterSubString);
}
}
@@ -567,26 +596,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
if (!new_filter_substring.empty())
{
- std::string title = tab->getTitle();
- LLStringUtil::toUpper(title);
-
- std::string cur_filter = new_filter_substring;
- LLStringUtil::toUpper(cur_filter);
-
- if (std::string::npos == title.find(cur_filter))
- {
- // hide tab if its title doesn't pass filter
- // and it has no visible items
- tab->setVisible(list->size() != 0);
-
- // remove title highlighting because it might
- // have been previously highlighted by less restrictive filter
- tab->setTitle(tab->getTitle());
- }
- else
- {
- tab->setTitle(tab->getTitle(), cur_filter);
- }
+ applyFilterToTab(iter->first, tab, new_filter_substring);
if (tab->getVisible())
{
@@ -607,10 +617,50 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
//restore accordion state after all those accodrion tab manipulations
tab->notifyChildren(LLSD().with("action","restore_state"));
+
+ // Try restoring the tab selection.
+ restoreOutfitSelection(tab, iter->first);
}
}
}
+void LLOutfitsList::applyFilterToTab(
+ const LLUUID& category_id,
+ LLAccordionCtrlTab* tab,
+ const std::string& filter_substring)
+{
+ if (!tab) return;
+ LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
+ if (!list) return;
+
+ std::string title = tab->getTitle();
+ LLStringUtil::toUpper(title);
+
+ std::string cur_filter = filter_substring;
+ LLStringUtil::toUpper(cur_filter);
+
+ tab->setTitle(tab->getTitle(), cur_filter);
+
+ if (std::string::npos == title.find(cur_filter))
+ {
+ // hide tab if its title doesn't pass filter
+ // and it has no visible items
+ tab->setVisible(list->size() > 0);
+
+ // remove title highlighting because it might
+ // have been previously highlighted by less restrictive filter
+ tab->setTitle(tab->getTitle());
+
+ // Remove the tab from selection.
+ deselectOutfit(category_id);
+ }
+ else
+ {
+ // Try restoring the tab selection.
+ restoreOutfitSelection(tab, category_id);
+ }
+}
+
void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id)
{
LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl);
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 5605044f41..df65f7187b 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -83,6 +83,9 @@ public:
void refreshList(const LLUUID& category_id);
+ // highlits currently worn outfit tab text and unhighlights previously worn
+ void highlightBaseOutfit();
+
void performAction(std::string action);
void setFilterSubString(const std::string& string);
@@ -91,6 +94,11 @@ public:
boost::signals2::connection addSelectionChangeCallback(selection_change_callback_t cb);
+ /**
+ * Returns true if there is a selection inside currently selected outfit
+ */
+ bool hasItemSelected();
+
private:
/**
* Reads xml with accordion tab and Flat list from xml file.
@@ -120,6 +128,18 @@ private:
void setSelectedOutfitUUID(const LLUUID& category_id);
/**
+ * Removes the outfit from selection.
+ */
+ void deselectOutfit(const LLUUID& category_id);
+
+ /**
+ * Try restoring selection for a temporary hidden tab.
+ *
+ * A tab may be hidden if it doesn't match current filter.
+ */
+ void restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID& category_id);
+
+ /**
* Called upon list refresh event to update tab visibility depending on
* the results of applying filter to the title and list items of the tab.
*/
@@ -130,6 +150,13 @@ private:
*/
void applyFilter(const std::string& new_filter_substring);
+ /**
+ * Applies filter to the given tab
+ *
+ * @see applyFilter()
+ */
+ void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring);
+
void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id);
void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
void onCOFChanged();
@@ -148,6 +175,8 @@ private:
wearables_lists_map_t mSelectedListsMap;
LLUUID mSelectedOutfitUUID;
+ // id of currently highlited outfit
+ LLUUID mHighlightedOutfitUUID;
selection_change_signal_t mSelectionChangeSignal;
std::string mFilterSubString;
@@ -159,6 +188,10 @@ private:
LLListContextMenu* mOutfitMenu;
bool mIsInitialized;
+ /**
+ * True if there is a selection inside currently selected outfit
+ */
+ bool mItemSelected;
};
#endif //LL_LLOUTFITSLIST_H
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 1aedfec86f..4402b2130f 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -652,7 +652,7 @@ BOOL LLPanelEditWearable::postBuild()
// handled at appearance panel level?
//mBtnBack->setClickedCallback(boost::bind(&LLPanelEditWearable::onBackButtonClicked, this));
- mTextEditor = getChild<LLTextEditor>("description");
+ mNameEditor = getChild<LLLineEditor>("description");
mPanelTitle = getChild<LLTextBox>("edit_wearable_title");
mDescTitle = getChild<LLTextBox>("description_text");
@@ -758,7 +758,7 @@ BOOL LLPanelEditWearable::isDirty() const
if (mWearablePtr)
{
if (mWearablePtr->isDirty() ||
- mWearablePtr->getName().compare(mTextEditor->getText()) != 0)
+ mWearablePtr->getName().compare(mNameEditor->getText()) != 0)
{
isDirty = TRUE;
}
@@ -796,7 +796,7 @@ void LLPanelEditWearable::onRevertButtonClicked(void* userdata)
void LLPanelEditWearable::onSaveAsButtonClicked()
{
LLSD args;
- args["DESC"] = mTextEditor->getText();
+ args["DESC"] = mNameEditor->getText();
LLNotificationsUtil::add("SaveWearableAs", args, LLSD(), boost::bind(&LLPanelEditWearable::saveAsCallback, this, _1, _2));
}
@@ -810,7 +810,7 @@ void LLPanelEditWearable::saveAsCallback(const LLSD& notification, const LLSD& r
LLStringUtil::trim(wearable_name);
if( !wearable_name.empty() )
{
- mTextEditor->setText(wearable_name);
+ mNameEditor->setText(wearable_name);
saveChanges();
}
}
@@ -956,10 +956,10 @@ void LLPanelEditWearable::saveChanges()
U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
- if (mWearablePtr->getName().compare(mTextEditor->getText()) != 0)
+ if (mWearablePtr->getName().compare(mNameEditor->getText()) != 0)
{
// the name of the wearable has changed, re-save wearable with new name
- gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, mTextEditor->getText(), FALSE);
+ gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, mNameEditor->getText(), FALSE);
}
else
{
@@ -976,7 +976,7 @@ void LLPanelEditWearable::revertChanges()
}
mWearablePtr->revertValues();
- mTextEditor->setText(mWearablePtr->getName());
+ mNameEditor->setText(mWearablePtr->getName());
}
void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
@@ -1018,7 +1018,7 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
mDescTitle->setText(description_title);
// set name
- mTextEditor->setText(wearable->getName());
+ mNameEditor->setText(wearable->getName());
updatePanelPickerControls(type);
updateTypeSpecificControls(type);
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index c63671fcc9..61441435cd 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -41,7 +41,6 @@
class LLCheckBoxCtrl;
class LLWearable;
-class LLTextEditor;
class LLTextBox;
class LLViewerInventoryItem;
class LLViewerVisualParam;
@@ -49,6 +48,7 @@ class LLVisualParamHint;
class LLViewerJointMesh;
class LLAccordionCtrlTab;
class LLJoint;
+class LLLineEditor;
class LLPanelEditWearable : public LLPanel
{
@@ -140,7 +140,7 @@ private:
// This text editor reference will change each time we edit a new wearable -
// it will be grabbed from the currently visible panel
- LLTextEditor *mTextEditor;
+ LLLineEditor *mNameEditor;
// The following panels will be shown/hidden based on what wearable we're editing
// body parts
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 1cb0f4601b..144839b554 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -1153,7 +1153,10 @@ void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
void LLPanelLogin::onServerComboLostFocus(LLFocusableElement* fe)
{
- if (!sInstance) return;
+ if (!sInstance)
+ {
+ return;
+ }
LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
if(fe == combo)
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index da809b7baa..ca1361c84b 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -114,6 +114,7 @@ public:
virtual time_t getCreationDate() const;
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
+ virtual BOOL canOpenItem() const { return FALSE; }
virtual void closeItem() {}
virtual void previewItem();
virtual void selectItem() {}
@@ -176,17 +177,7 @@ LLInventoryItem* LLTaskInvFVBridge::findItem() const
void LLTaskInvFVBridge::showProperties()
{
- show_item_profile(mUUID);
-
- // Disable old properties floater; this is replaced by the sidepanel.
- /*
- LLFloaterProperties* floater = LLFloaterReg::showTypedInstance<LLFloaterProperties>("properties", mUUID);
- if (floater)
- {
- floater->setObjectID(mPanel->getTaskUUID());
- }
- */
-
+ show_task_item_profile(mUUID, mPanel->getTaskUUID());
}
struct LLBuyInvItemData
@@ -677,7 +668,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
}
- else
+ else if (canOpenItem())
{
items.push_back(std::string("Task Open"));
if (!isItemCopyable())
@@ -723,6 +714,8 @@ public:
virtual BOOL dragOrDrop(MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data);
+ virtual BOOL canOpenItem() const { return TRUE; }
+ virtual void openItem();
};
LLTaskCategoryBridge::LLTaskCategoryBridge(
@@ -757,7 +750,8 @@ void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- items.push_back(std::string("Task Open"));
+ items.push_back(std::string("--no options--"));
+ disabled_items.push_back(std::string("--no options--"));
hide_context_entries(menu, items, disabled_items);
}
@@ -768,6 +762,10 @@ BOOL LLTaskCategoryBridge::hasChildren() const
return FALSE;
}
+void LLTaskCategoryBridge::openItem()
+{
+}
+
BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
@@ -874,6 +872,7 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
};
@@ -900,6 +899,7 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
virtual void performAction(LLInventoryModel* model, std::string action);
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
@@ -976,9 +976,8 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
}
- else
+ else if (canOpenItem())
{
- items.push_back(std::string("Task Open"));
if (!isItemCopyable())
{
disabled_items.push_back(std::string("Task Open"));
@@ -1063,6 +1062,7 @@ public:
const std::string& name) :
LLTaskScriptBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
virtual BOOL removeItem();
//virtual void buildContextMenu(LLMenuGL& menu);
@@ -1124,6 +1124,7 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
virtual BOOL removeItem();
};
@@ -1163,6 +1164,7 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
virtual BOOL removeItem();
};
@@ -1196,6 +1198,7 @@ public:
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
+ virtual BOOL canOpenItem() const { return TRUE; }
virtual void openItem();
virtual BOOL removeItem();
};
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 8da7432e0a..5fac7efb84 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -60,6 +60,7 @@
#include "llinventorybridge.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
+#include "llloadingindicator.h"
#include "llpaneloutfitsinventory.h"
#include "lluiconstants.h"
#include "llsaveoutfitcombobtn.h"
@@ -262,6 +263,9 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
observer.addBOFChangedCallback(boost::bind(&LLPanelOutfitEdit::updateVerbs, this));
observer.addOutfitLockChangedCallback(boost::bind(&LLPanelOutfitEdit::updateVerbs, this));
observer.addCOFChangedCallback(boost::bind(&LLPanelOutfitEdit::update, this));
+
+ gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, true));
+ gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, false));
mFolderViewItemTypes.reserve(NUM_FOLDER_VIEW_ITEM_TYPES);
for (U32 i = 0; i < NUM_FOLDER_VIEW_ITEM_TYPES; i++)
@@ -902,6 +906,27 @@ void LLPanelOutfitEdit::showFilteredWearablesListView(LLWearableType::EType type
applyListViewFilter((EListViewItemType) (LVIT_SHAPE + type));
}
+static void update_status_widget_rect(LLView * widget, S32 right_border)
+{
+ LLRect rect = widget->getRect();
+ rect.mRight = right_border;
+ widget->setShape(rect);
+}
+
+void LLPanelOutfitEdit::onOutfitChanging(bool started)
+{
+ static LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("edit_outfit_loading_indicator");
+ static LLView* status_panel = getChild<LLView>("outfit_name_and_status");
+ static S32 indicator_delta = status_panel->getRect().getWidth() - indicator->getRect().mLeft;
+
+ S32 delta = started ? indicator_delta : 0;
+ S32 right_border = status_panel->getRect().getWidth() - delta;
+
+ update_status_widget_rect(mCurrentOutfitName, right_border);
+ update_status_widget_rect(mStatus, right_border);
+
+ indicator->setVisible(started);
+}
// EOF
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 1705e3043b..484f3fcb9f 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -191,6 +191,7 @@ private:
void onGearButtonClick(LLUICtrl* clicked_button);
void onAddMoreButtonClicked();
void showFilteredWearablesListView(LLWearableType::EType type);
+ void onOutfitChanging(bool started);
LLTextBox* mCurrentOutfitName;
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 7e1bff0961..714d9cd4c5 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -191,6 +191,10 @@ private:
{
return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id);
}
+ else if ("take_off" == param)
+ {
+ return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id);
+ }
return true;
}
@@ -209,10 +213,6 @@ private:
{
return !is_worn;
}
- else if ("take_off" == param)
- {
- return is_worn;
- }
return true;
}
@@ -224,7 +224,6 @@ private:
LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
mMyOutfitsPanel(NULL),
mCurrentOutfitPanel(NULL),
- mParent(NULL),
mGearMenu(NULL),
mInitialized(false)
{
@@ -314,11 +313,6 @@ void LLPanelOutfitsInventory::updateVerbs()
}
}
-void LLPanelOutfitsInventory::setParent(LLSidepanelAppearance* parent)
-{
- mParent = parent;
-}
-
// virtual
void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
{
@@ -548,7 +542,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
void LLPanelOutfitsInventory::updateListCommands()
{
bool trash_enabled = isActionEnabled("delete");
- bool wear_enabled = isActionEnabled("wear");
+ bool wear_enabled = !gAgentWearables.isCOFChangeInProgress() && isActionEnabled("wear");
bool wear_visible = !isCOFPanelActive();
bool make_outfit_enabled = isActionEnabled("save_outfit");
@@ -667,7 +661,8 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
else // "My Outfits" tab active
{
const LLUUID& selected_outfit = mMyOutfitsPanel->getSelectedOutfitUUID();
- can_delete = LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit);
+ // first condition prevents trash btn from enabling when items are selected inside outfit (EXT-7847)
+ can_delete = !mMyOutfitsPanel->hasItemSelected() && LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit);
}
return can_delete;
@@ -827,12 +822,6 @@ BOOL LLPanelOutfitsInventory::isCOFPanelActive() const
void LLPanelOutfitsInventory::setWearablesLoading(bool val)
{
mListCommands->childSetEnabled("wear_btn", !val);
-
- llassert(mParent);
- if (mParent)
- {
- mParent->setWearablesLoading(val);
- }
}
void LLPanelOutfitsInventory::onWearablesLoaded()
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index 863dc9dd7c..eabfda7f8c 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -72,7 +72,6 @@ public:
// If a compatible listener type is selected, then return a pointer to that.
// Otherwise, return NULL.
LLFolderViewEventListener* getCorrectListenerForAction();
- void setParent(LLSidepanelAppearance *parent);
LLFolderView* getRootFolder();
static LLSidepanelAppearance* getAppearanceSP();
@@ -84,7 +83,6 @@ protected:
bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const;
private:
- LLSidepanelAppearance* mParent;
LLSaveFolderState* mSavedFolderState;
LLTabContainer* mAppearanceTabs;
std::string mFilterSubString;
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 7cf574b6e5..68dc1cdf71 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -36,12 +36,16 @@
#include "llagent.h"
#include "llagentui.h"
+#include "llclipboard.h"
+#include "lllandmarkactions.h"
#include "lllocationinputctrl.h"
#include "llnotificationsutil.h"
#include "llparcel.h"
#include "llsidetray.h"
+#include "llslurl.h"
#include "llstatusbar.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewermenu.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
@@ -65,6 +69,9 @@ private:
LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0)
{
+ LLUICtrl::CommitCallbackRegistry::currentRegistrar()
+ .add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2));
+
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml");
}
@@ -120,7 +127,7 @@ void LLPanelTopInfoBar::handleLoginComplete()
BOOL LLPanelTopInfoBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- show_navbar_context_menu(this, x, y);
+ show_topinfobar_context_menu(this, x, y);
return TRUE;
}
@@ -387,6 +394,32 @@ void LLPanelTopInfoBar::onAgentParcelChange()
update();
}
+void LLPanelTopInfoBar::onContextMenuItemClicked(const LLSD::String& item)
+{
+ if (item == "landmark")
+ {
+ LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
+
+ if(landmark == NULL)
+ {
+ LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "create_landmark"));
+ }
+ else
+ {
+ LLSideTray::getInstance()->showPanel("panel_places",
+ LLSD().with("type", "landmark").with("id",landmark->getUUID()));
+ }
+ }
+ else if (item == "copy")
+ {
+ LLSLURL slurl;
+ LLAgentUI::buildSLURL(slurl, false);
+ LLUIString location_str(slurl.getSLURLString());
+
+ gClipboard.copyFromString(location_str);
+ }
+}
+
void LLPanelTopInfoBar::onInfoButtonClicked()
{
LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent"));
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index 4a85bbcd76..e417a06a64 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -95,6 +95,11 @@ private:
void onAgentParcelChange();
/**
+ * Called when context menu item is clicked.
+ */
+ void onContextMenuItemClicked(const LLSD::String& userdata);
+
+ /**
* Called when user checks/unchecks Show Coordinates menu item.
*/
void onNavBarShowParcelPropertiesCtrlChanged();
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 2e061b235d..ff315d3c53 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -31,55 +31,31 @@
*/
#include "llviewerprecompiledheaders.h"
-
#include "llpreviewgesture.h"
-#include <algorithm>
-
-// libraries
-#include "lldatapacker.h"
-#include "lldarray.h"
-#include "llstring.h"
-#include "lldir.h"
+#include "llagent.h"
+#include "llanimstatelabels.h"
+#include "llanimationstates.h"
+#include "llappviewer.h" // gVFS
+#include "llassetuploadresponders.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "lldelayedgestureerror.h"
#include "llfloaterreg.h"
+#include "llgesturemgr.h"
#include "llinventorydefines.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llmultigesture.h"
#include "llnotificationsutil.h"
-#include "llvfile.h"
-
-// newview
-#include "llagent.h" // todo: remove
-#include "llanimationstates.h"
-#include "llassetuploadresponders.h"
-#include "llbutton.h"
-#include "llcheckboxctrl.h"
-#include "llcombobox.h"
-#include "lldelayedgestureerror.h"
-#include "llfloatergesture.h" // for some label constants
-#include "llgesturemgr.h"
-#include "llkeyboard.h"
-#include "lllineeditor.h"
#include "llradiogroup.h"
-#include "llscrolllistctrl.h"
-#include "llscrolllistitem.h"
-#include "llscrolllistcell.h"
-#include "lltextbox.h"
-#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
-#include "llviewerobject.h"
+#include "llresmgr.h"
+#include "lltrans.h"
+#include "llvfile.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
-#include "llviewerwindow.h" // busycount
-#include "llvoavatarself.h"
-#include "llappviewer.h" // gVFS
-#include "llanimstatelabels.h"
-#include "llresmgr.h"
-#include "lltrans.h"
-
std::string NONE_LABEL;
std::string SHIFT_LABEL;
@@ -832,7 +808,9 @@ void LLPreviewGesture::loadAsset()
const LLInventoryItem* item = getItem();
if (!item)
{
- mAssetStatus = PREVIEW_ASSET_ERROR;
+ // Don't set asset status here; we may not have set the item id yet
+ // (e.g. when this gets called initially)
+ //mAssetStatus = PREVIEW_ASSET_ERROR;
return;
}
diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h
index 5968e936ef..b141b14445 100644
--- a/indra/newview/llpreviewgesture.h
+++ b/indra/newview/llpreviewgesture.h
@@ -34,10 +34,9 @@
#define LL_LLPREVIEWGESTURE_H
#include "llassettype.h"
-#include "llmultigesture.h"
#include "llpreview.h"
+#include "llmultigesture.h"
-class LLMultiGesture;
class LLLineEditor;
class LLTextBox;
class LLCheckBoxCtrl;
@@ -45,7 +44,6 @@ class LLComboBox;
class LLScrollListCtrl;
class LLScrollListItem;
class LLButton;
-class LLGestureStep;
class LLRadioGroup;
class LLVFS;
@@ -140,7 +138,7 @@ protected:
static void onDonePreview(LLMultiGesture* gesture, void* data);
-protected:
+private:
// LLPreview contains mDescEditor
LLLineEditor* mTriggerEditor;
LLTextBox* mReplaceText;
@@ -173,4 +171,4 @@ protected:
BOOL mDirty;
};
-#endif
+#endif // LL_LLPREVIEWGESTURE_H
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index d315f40ff3..668c04cf15 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -257,7 +257,6 @@ public:
LLObjectSelection();
void updateEffects();
- void cleanupNodes();
BOOL isEmpty() const;
@@ -281,11 +280,6 @@ public:
template <typename T> bool getSelectedTEValue(LLSelectedTEGetFunctor<T>* func, T& res);
template <typename T> bool isMultipleTEValue(LLSelectedTEGetFunctor<T>* func, const T& ignore_value);
- void addNode(LLSelectNode *nodep);
- void addNodeAtEnd(LLSelectNode *nodep);
- void moveNodeToFront(LLSelectNode *nodep);
- void removeNode(LLSelectNode *nodep);
- void deleteAllNodes(); // Delete all nodes
S32 getNumNodes();
LLSelectNode* findNode(LLViewerObject* objectp);
@@ -313,6 +307,15 @@ public:
ESelectType getSelectType() const { return mSelectType; }
private:
+ void addNode(LLSelectNode *nodep);
+ void addNodeAtEnd(LLSelectNode *nodep);
+ void moveNodeToFront(LLSelectNode *nodep);
+ void removeNode(LLSelectNode *nodep);
+ void deleteAllNodes();
+ void cleanupNodes();
+
+
+private:
list_t mList;
const LLObjectSelection &operator=(const LLObjectSelection &);
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index e2d4f5ad45..0d1be91125 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -86,6 +86,9 @@ LLSidepanelAppearance::LLSidepanelAppearance() :
outfit_observer.addBOFReplacedCallback(boost::bind(&LLSidepanelAppearance::refreshCurrentOutfitName, this, ""));
outfit_observer.addBOFChangedCallback(boost::bind(&LLSidepanelAppearance::refreshCurrentOutfitName, this, ""));
outfit_observer.addCOFChangedCallback(boost::bind(&LLSidepanelAppearance::refreshCurrentOutfitName, this, ""));
+
+ gAgentWearables.addLoadingStartedCallback(boost::bind(&LLSidepanelAppearance::setWearablesLoading, this, true));
+ gAgentWearables.addLoadedCallback(boost::bind(&LLSidepanelAppearance::setWearablesLoading, this, false));
}
LLSidepanelAppearance::~LLSidepanelAppearance()
@@ -114,7 +117,6 @@ BOOL LLSidepanelAppearance::postBuild()
}
mPanelOutfitsInventory = dynamic_cast<LLPanelOutfitsInventory *>(getChild<LLPanel>("panel_outfits_inventory"));
- mPanelOutfitsInventory->setParent(this);
mOutfitEdit = dynamic_cast<LLPanelOutfitEdit*>(getChild<LLPanel>("panel_outfit_edit"));
if (mOutfitEdit)
@@ -387,7 +389,9 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
mCurrentLookName->setText(outfit_name);
return;
}
- mCurrentLookName->setText(getString("No Outfit"));
+
+ std::string look_name = gAgentWearables.isCOFChangeInProgress() ? "" : getString("No Outfit");
+ mCurrentLookName->setText(look_name);
mOpenOutfitBtn->setEnabled(FALSE);
}
else
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index e76397671b..3ab71eac64 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -80,6 +80,7 @@ static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_t
LLSidepanelTaskInfo::LLSidepanelTaskInfo()
{
setMouseOpaque(FALSE);
+ LLSelectMgr::instance().mUpdateSignal.connect(boost::bind(&LLSidepanelTaskInfo::refreshAll, this));
}
@@ -271,7 +272,6 @@ void LLSidepanelTaskInfo::refresh()
// BUG: fails if a root and non-root are both single-selected.
const BOOL is_perm_modify = (mObjectSelection->getFirstRootNode() && LLSelectMgr::getInstance()->selectGetRootsModify()) ||
LLSelectMgr::getInstance()->selectGetModify();
- const LLFocusableElement* keyboard_focus_view = gFocusMgr.getKeyboardFocus();
S32 string_index = 0;
std::string MODIFY_INFO_STRINGS[] =
@@ -365,14 +365,14 @@ void LLSidepanelTaskInfo::refresh()
if (is_one_object)
{
- if (keyboard_focus_view != LineEditorObjectName)
+ if (!LineEditorObjectName->hasFocus())
{
childSetText("Object Name",nodep->mName);
}
if (LineEditorObjectDesc)
{
- if (keyboard_focus_view != LineEditorObjectDesc)
+ if (!LineEditorObjectDesc->hasFocus())
{
LineEditorObjectDesc->setText(nodep->mDescription);
}
@@ -1178,9 +1178,30 @@ void LLSidepanelTaskInfo::save()
onCommitIncludeInSearch(getChild<LLCheckBoxCtrl>("search_check"), this);
}
+// removes keyboard focus so that all fields can be updated
+// and then restored focus
+void LLSidepanelTaskInfo::refreshAll()
+{
+ // update UI as soon as we have an object
+ // but remove keyboard focus first so fields are free to update
+ LLFocusableElement* focus = NULL;
+ if (hasFocus())
+ {
+ focus = gFocusMgr.getKeyboardFocus();
+ setFocus(FALSE);
+ }
+ refresh();
+ if (focus)
+ {
+ focus->setFocus(TRUE);
+ }
+}
+
+
void LLSidepanelTaskInfo::setObjectSelection(LLObjectSelectionHandle selection)
{
mObjectSelection = selection;
+ refreshAll();
}
LLSidepanelTaskInfo* LLSidepanelTaskInfo::getActivePanel()
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
index 15274c90db..010173e84e 100644
--- a/indra/newview/llsidepaneltaskinfo.h
+++ b/indra/newview/llsidepaneltaskinfo.h
@@ -67,6 +67,8 @@ protected:
/*virtual*/ void save();
/*virtual*/ void updateVerbs();
+ void refreshAll(); // ignore current keyboard focus and update all fields
+
// statics
static void onClickClaim(void*);
static void onClickRelease(void*);
@@ -120,7 +122,7 @@ protected:
LLViewerObject* getObject();
private:
LLViewerObject* mObject;
- LLObjectSelectionHandle mObjectSelection;
+ LLObjectSelectionHandle mObjectSelection;
static LLSidepanelTaskInfo* sActivePanel;
};
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index df5be34e39..d25e8444cf 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1116,8 +1116,6 @@ bool idle_startup()
LLVoiceClient::getInstance()->userAuthorized(gUserCredential->userID(), gAgentID);
// create the default proximal channel
LLVoiceChannel::initClass();
- // update the voice settings
- LLVoiceClient::getInstance()->updateSettings();
LLGridManager::getInstance()->setFavorite();
LLStartUp::setStartupState( STATE_WORLD_INIT);
}
@@ -1300,6 +1298,10 @@ bool idle_startup()
LLAppViewer::instance()->loadNameCache();
}
+ // update the voice settings *after* gCacheName initialization
+ // so that we can construct voice UI that relies on the name cache
+ LLVoiceClient::getInstance()->updateSettings();
+
//gCacheName is required for nearby chat history loading
//so I just moved nearby history loading a few states further
if (!gNoRender && gSavedPerAccountSettings.getBOOL("LogShowHistory"))
@@ -2637,12 +2639,6 @@ void reset_login()
//---------------------------------------------------------------------------
-
-bool LLStartUp::canGoFullscreen()
-{
- return gStartupState >= STATE_WORLD_INIT;
-}
-
// Initialize all plug-ins except the web browser (which was initialized
// early, before the login screen). JC
void LLStartUp::multimediaInit()
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index e1e108ca6a..b2868378bc 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -81,9 +81,6 @@ extern LLPointer<LLViewerTexture> gStartTexture;
class LLStartUp
{
public:
- static bool canGoFullscreen();
- // returns true if we are far enough along in startup to allow
- // going full screen
// Always use this to set gStartupState so changes are logged
static void setStartupState( EStartupState state );
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index db1f4dc4cb..7ba256c870 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -247,35 +247,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
msg_box->setRect( rect );
LLToastPanel::addChild(msg_box);
- // Buttons
- S32 button_left = (LLToastPanel::getRect().getWidth() - btn_total_width) / 2;
-
- for( S32 i = 0; i < num_options; i++ )
- {
- LLRect button_rect;
-
- LLButton* btn = LLUICtrlFactory::getInstance()->createFromFile<LLButton>("alert_button.xml", this, LLPanel::child_registry_t::instance());
- if(btn)
- {
- btn->setName(options[i].first);
- btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, button_width, BTN_HEIGHT ));
- btn->setLabel(options[i].second);
- btn->setFont(font);
-
- btn->setClickedCallback(boost::bind(&LLToastAlertPanel::onButtonPressed, this, _2, i));
-
- mButtonData[i].mButton = btn;
-
- LLToastPanel::addChild(btn);
-
- if( i == mDefaultOption )
- {
- btn->setFocus(TRUE);
- }
- }
- button_left += button_width + BTN_HPAD;
- }
-
// (Optional) Edit Box
if (!edit_text_name.empty())
{
@@ -307,9 +278,63 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
mLineEditor->setDrawAsterixes(is_password);
setEditTextArgs(notification->getSubstitutions());
+
+ mLineEditor->setFollowsLeft();
+ mLineEditor->setFollowsRight();
+
+ // find form text input field
+ LLSD form_text;
+ for (LLSD::array_const_iterator it = form_sd.beginArray(); it != form_sd.endArray(); ++it)
+ {
+ std::string type = (*it)["type"].asString();
+ if (type == "text")
+ {
+ form_text = (*it);
+ }
+ }
+
+ // if form text input field has width attribute
+ if (form_text.has("width"))
+ {
+ // adjust floater width to fit line editor
+ S32 editor_width = form_text["width"];
+ LLRect editor_rect = mLineEditor->getRect();
+ U32 width_delta = editor_width - editor_rect.getWidth();
+ LLRect toast_rect = getRect();
+ reshape(toast_rect.getWidth() + width_delta, toast_rect.getHeight());
+ }
}
}
+ // Buttons
+ S32 button_left = (LLToastPanel::getRect().getWidth() - btn_total_width) / 2;
+
+ for( S32 i = 0; i < num_options; i++ )
+ {
+ LLRect button_rect;
+
+ LLButton* btn = LLUICtrlFactory::getInstance()->createFromFile<LLButton>("alert_button.xml", this, LLPanel::child_registry_t::instance());
+ if(btn)
+ {
+ btn->setName(options[i].first);
+ btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, button_width, BTN_HEIGHT ));
+ btn->setLabel(options[i].second);
+ btn->setFont(font);
+
+ btn->setClickedCallback(boost::bind(&LLToastAlertPanel::onButtonPressed, this, _2, i));
+
+ mButtonData[i].mButton = btn;
+
+ LLToastPanel::addChild(btn);
+
+ if( i == mDefaultOption )
+ {
+ btn->setFocus(TRUE);
+ }
+ }
+ button_left += button_width + BTN_HPAD;
+ }
+
std::string ignore_label;
if (form->getIgnoreType() == LLNotificationForm::IGNORE_WITH_DEFAULT_RESPONSE)
diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp
index 404eab9249..d45915499a 100644
--- a/indra/newview/lltoolbar.cpp
+++ b/indra/newview/lltoolbar.cpp
@@ -212,23 +212,16 @@ void LLToolBar::layoutButtons()
// this function may be called before postBuild(), in which case mResizeHandle won't have been set up yet.
if(mResizeHandle != NULL)
{
- if(!gViewerWindow->getWindow()->getFullscreen())
- {
- // Only when running in windowed mode on the Mac, leave room for a resize widget on the right edge of the bar.
- width -= RESIZE_HANDLE_WIDTH;
-
- LLRect r;
- r.mLeft = width - pad;
- r.mBottom = 0;
- r.mRight = r.mLeft + RESIZE_HANDLE_WIDTH;
- r.mTop = r.mBottom + RESIZE_HANDLE_HEIGHT;
- mResizeHandle->setRect(r);
- mResizeHandle->setVisible(TRUE);
- }
- else
- {
- mResizeHandle->setVisible(FALSE);
- }
+ // Only when running in windowed mode on the Mac, leave room for a resize widget on the right edge of the bar.
+ width -= RESIZE_HANDLE_WIDTH;
+
+ LLRect r;
+ r.mLeft = width - pad;
+ r.mBottom = 0;
+ r.mRight = r.mLeft + RESIZE_HANDLE_WIDTH;
+ r.mTop = r.mBottom + RESIZE_HANDLE_HEIGHT;
+ mResizeHandle->setRect(r);
+ mResizeHandle->setVisible(TRUE);
}
#endif // LL_DARWIN
}
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index cae5e93545..9bd08287f3 100644
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -886,28 +886,6 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask)
// Not dragging. Just showing affordances
void LLToolGrab::handleHoverInactive(S32 x, S32 y, MASK mask)
{
- const F32 ROTATE_ANGLE_PER_SECOND = 40.f * DEG_TO_RAD;
- const F32 rotate_angle = ROTATE_ANGLE_PER_SECOND / gFPSClamped;
-
- // Look for cursor against the edge of the screen
- // Only works in fullscreen
- if (gSavedSettings.getBOOL("FullScreen"))
- {
- if (gAgentCamera.cameraThirdPerson() )
- {
- if (x == 0)
- {
- gAgent.yaw(rotate_angle);
- //gAgent.setControlFlags(AGENT_CONTROL_YAW_POS);
- }
- else if (x == (gViewerWindow->getWorldViewWidthScaled() - 1) )
- {
- gAgent.yaw(-rotate_angle);
- //gAgent.setControlFlags(AGENT_CONTROL_YAW_NEG);
- }
- }
- }
-
// JC - TODO - change cursor based on gGrabBtnVertical, gGrabBtnSpin
lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolGrab (inactive-not over editable object)" << llendl;
gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 4a1214db9d..a02946d3f4 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -458,7 +458,11 @@ bool toggle_agent_pause(const LLSD& newvalue)
bool toggle_show_navigation_panel(const LLSD& newvalue)
{
- LLNavigationBar::getInstance()->showNavigationPanel(newvalue.asBoolean());
+ bool value = newvalue.asBoolean();
+
+ LLNavigationBar::getInstance()->showNavigationPanel(value);
+ gSavedSettings.setBOOL("ShowMiniLocationPanel", !value);
+
return true;
}
@@ -470,7 +474,11 @@ bool toggle_show_favorites_panel(const LLSD& newvalue)
bool toggle_show_mini_location_panel(const LLSD& newvalue)
{
- LLPanelTopInfoBar::getInstance()->setVisible(newvalue.asBoolean());
+ bool value = newvalue.asBoolean();
+
+ LLPanelTopInfoBar::getInstance()->setVisible(value);
+ gSavedSettings.setBOOL("ShowNavbarNavigationPanel", !value);
+
return true;
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index caa868dca8..1dc2a9eef7 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3278,16 +3278,6 @@ void handle_buy_object(LLSaleInfo sale_info)
return;
}
- S32 price = sale_info.getSalePrice();
-
- if (price > 0 && price > gStatusBar->getBalance())
- {
- LLStringUtil::format_map_t args;
- args["AMOUNT"] = llformat("%d", price);
- LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("this_object_costs", args), price );
- return;
- }
-
LLFloaterBuy::show(sale_info);
}
@@ -3788,17 +3778,6 @@ class LLViewMouselook : public view_listener_t
}
};
-class LLViewFullscreen : public view_listener_t
-{
- bool handleEvent(const LLSD& userdata)
- {
- // we no longer permit full screen mode EXT-6775
- // gViewerWindow->toggleFullscreen(TRUE);
- llwarns << "full screen mode no longer supported" << llendl;
- return true;
- }
-};
-
class LLViewDefaultUISize : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -4554,6 +4533,16 @@ void handle_buy()
BOOL valid = LLSelectMgr::getInstance()->selectGetSaleInfo(sale_info);
if (!valid) return;
+ S32 price = sale_info.getSalePrice();
+
+ if (price > 0 && price > gStatusBar->getBalance())
+ {
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", price);
+ LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("this_object_costs", args), price );
+ return;
+ }
+
if (sale_info.getSaleType() == LLSaleInfo::FS_CONTENTS)
{
handle_buy_contents(sale_info);
@@ -7245,7 +7234,7 @@ void handle_web_browser_test(const LLSD& param)
{
url = "about:blank";
}
- LLWeb::loadURL(url);
+ LLWeb::loadURLInternal(url);
}
void handle_buy_currency_test(void*)
@@ -7740,6 +7729,31 @@ void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
LLMenuGL::showPopup(ctrl, show_navbar_context_menu, x, y);
}
+void show_topinfobar_context_menu(LLView* ctrl, S32 x, S32 y)
+{
+ static LLMenuGL* show_topbarinfo_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_topinfobar.xml",
+ gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+ LLMenuItemGL* landmark_item = show_topbarinfo_context_menu->getChild<LLMenuItemGL>("Landmark");
+ if (!LLLandmarkActions::landmarkAlreadyExists())
+ {
+ landmark_item->setLabel(LLTrans::getString("AddLandmarkNavBarMenu"));
+ }
+ else
+ {
+ landmark_item->setLabel(LLTrans::getString("EditLandmarkNavBarMenu"));
+ }
+
+ if(gMenuHolder->hasVisibleMenu())
+ {
+ gMenuHolder->hideMenus();
+ }
+
+ show_topbarinfo_context_menu->buildDrawLabels();
+ show_topbarinfo_context_menu->updateParent(LLMenuGL::sMenuContainer);
+ LLMenuGL::showPopup(ctrl, show_topbarinfo_context_menu, x, y);
+}
+
void initialize_edit_menu()
{
view_listener_t::addMenu(new LLEditUndo(), "Edit.Undo");
@@ -7819,7 +7833,6 @@ void initialize_menus()
view_listener_t::addMenu(new LLZoomer(1.2f), "View.ZoomOut");
view_listener_t::addMenu(new LLZoomer(1/1.2f), "View.ZoomIn");
view_listener_t::addMenu(new LLZoomer(DEFAULT_FIELD_OF_VIEW, false), "View.ZoomDefault");
- view_listener_t::addMenu(new LLViewFullscreen(), "View.Fullscreen");
view_listener_t::addMenu(new LLViewDefaultUISize(), "View.DefaultUISize");
view_listener_t::addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index ad88fcea9a..e0497139a5 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -53,6 +53,7 @@ void toggle_debug_menus(void*);
void show_context_menu( S32 x, S32 y, MASK mask );
void show_build_mode_context_menu(S32 x, S32 y, MASK mask);
void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y);
+void show_topinfobar_context_menu(LLView* ctrl, S32 x, S32 y);
BOOL enable_save_into_inventory(void*);
void handle_reset_view();
void handle_cut(void*);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3c2443bcec..5840d4599f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1980,6 +1980,18 @@ static bool parse_lure_bucket(const std::string& bucket,
return true;
}
+class LLPostponedIMSystemTipNotification: public LLPostponedNotification
+{
+protected:
+ /* virtual */
+ void modifyNotificationParams()
+ {
+ LLSD payload = mParams.payload;
+ payload["SESSION_NAME"] = mName;
+ mParams.payload = payload;
+ }
+};
+
void process_improved_im(LLMessageSystem *msg, void **user_data)
{
if (gNoRender)
@@ -2050,14 +2062,19 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLSD args;
LLSD payload;
+ LLNotification::Params params;
+
switch(dialog)
{
case IM_CONSOLE_AND_CHAT_HISTORY:
- // *TODO: Translate
args["MESSAGE"] = message;
- payload["SESSION_NAME"] = name;
+ args["NAME"] = name;
payload["from_id"] = from_id;
- LLNotificationsUtil::add("IMSystemMessageTip",args, payload);
+
+ params.name = "IMSystemMessageTip";
+ params.substitutions = args;
+ params.payload = payload;
+ LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false);
break;
case IM_NOTHING_SPECIAL:
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 22911ff241..37e07fd58c 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1118,28 +1118,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
mActive = TRUE;
send_agent_resume();
gAgent.clearAFK();
- if (mWindow->getFullscreen() && !mIgnoreActivate)
- {
- if (!LLApp::isExiting() )
- {
- if (LLStartUp::getStartupState() >= STATE_STARTED)
- {
- // if we're in world, show a progress bar to hide reloading of textures
- llinfos << "Restoring GL during activate" << llendl;
- restoreGL(LLTrans::getString("ProgressRestoring"));
- }
- else
- {
- // otherwise restore immediately
- restoreGL();
- }
- }
- else
- {
- llwarns << "Activating while quitting" << llendl;
- }
- }
-
+
// Unmute audio
audio_update_volume();
}
@@ -1159,12 +1138,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
}
send_agent_pause();
-
- if (mWindow->getFullscreen() && !mIgnoreActivate)
- {
- llinfos << "Stopping GL during deactivation" << llendl;
- stopGL();
- }
+
// Mute audio
audio_update_volume();
}
@@ -1331,12 +1305,10 @@ LLViewerWindow::LLViewerWindow(
const std::string& title, const std::string& name,
S32 x, S32 y,
S32 width, S32 height,
- BOOL fullscreen, BOOL ignore_pixel_depth)
+ BOOL fullscreen, BOOL ignore_pixel_depth) // fullscreen is no longer used
:
mWindow(NULL),
mActive(TRUE),
- mWantFullscreen(fullscreen),
- mShowFullscreenProgress(FALSE),
mWindowRectRaw(0, height, width, 0),
mWindowRectScaled(0, height, width, 0),
mWorldViewRectRaw(0, height, width, 0),
@@ -1351,7 +1323,6 @@ LLViewerWindow::LLViewerWindow(
mIgnoreActivate( FALSE ),
mResDirty(false),
mStatesDirty(false),
- mIsFullscreenChecked(false),
mCurrResolutionIndex(0),
mViewerWindowListener(new LLViewerWindowListener(this)),
mProgressView(NULL)
@@ -1911,24 +1882,17 @@ void LLViewerWindow::reshape(S32 width, S32 height)
sendShapeToSim();
-
- // store the mode the user wants (even if not there yet)
- gSavedSettings.setBOOL("FullScreen", mWantFullscreen);
-
// store new settings for the mode we are in, regardless
- if (!mWindow->getFullscreen())
- {
- // Only save size if not maximized
- BOOL maximized = mWindow->getMaximized();
- gSavedSettings.setBOOL("WindowMaximized", maximized);
+ // Only save size if not maximized
+ BOOL maximized = mWindow->getMaximized();
+ gSavedSettings.setBOOL("WindowMaximized", maximized);
- LLCoordScreen window_size;
- if (!maximized
- && mWindow->getSize(&window_size))
- {
- gSavedSettings.setS32("WindowWidth", window_size.mX);
- gSavedSettings.setS32("WindowHeight", window_size.mY);
- }
+ LLCoordScreen window_size;
+ if (!maximized
+ && mWindow->getSize(&window_size))
+ {
+ gSavedSettings.setS32("WindowWidth", window_size.mX);
+ gSavedSettings.setS32("WindowHeight", window_size.mY);
}
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_WINDOW_WIDTH, (F64)width);
@@ -3806,18 +3770,7 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
BORDERHEIGHT = size.mY- y;
LLCoordScreen new_size(new_width + BORDERWIDTH,
new_height + BORDERHEIGHT);
- BOOL disable_sync = gSavedSettings.getBOOL("DisableVerticalSync");
- if (gViewerWindow->mWindow->getFullscreen())
- {
- gViewerWindow->changeDisplaySettings(FALSE,
- new_size,
- disable_sync,
- TRUE);
- }
- else
- {
- gViewerWindow->mWindow->setSize(new_size);
- }
+ gViewerWindow->mWindow->setSize(new_size);
}
}
@@ -4469,51 +4422,12 @@ void LLViewerWindow::initFonts(F32 zoom_factor)
LLFontGL::loadDefaultFonts();
}
-void LLViewerWindow::toggleFullscreen(BOOL show_progress)
-{
- if (mWindow)
- {
- mWantFullscreen = mWindow->getFullscreen() ? FALSE : TRUE;
- mIsFullscreenChecked = mWindow->getFullscreen() ? FALSE : TRUE;
- mShowFullscreenProgress = show_progress;
- }
-}
-
-void LLViewerWindow::getTargetWindow(BOOL& fullscreen, S32& width, S32& height) const
-{
- fullscreen = mWantFullscreen;
-
- if (mWindow
- && mWindow->getFullscreen() == mWantFullscreen)
- {
- width = getWindowWidthRaw();
- height = getWindowHeightRaw();
- }
- else if (mWantFullscreen)
- {
- width = gSavedSettings.getS32("FullScreenWidth");
- height = gSavedSettings.getS32("FullScreenHeight");
- }
- else
- {
- width = gSavedSettings.getS32("WindowWidth");
- height = gSavedSettings.getS32("WindowHeight");
- }
-}
-
void LLViewerWindow::requestResolutionUpdate()
{
mResDirty = true;
}
-void LLViewerWindow::requestResolutionUpdate(bool fullscreen_checked)
-{
- mResDirty = true;
- mWantFullscreen = fullscreen_checked;
- mIsFullscreenChecked = fullscreen_checked;
-}
-
-BOOL LLViewerWindow::checkSettings()
+void LLViewerWindow::checkSettings()
{
if (mStatesDirty)
{
@@ -4525,70 +4439,9 @@ BOOL LLViewerWindow::checkSettings()
// We want to update the resolution AFTER the states getting refreshed not before.
if (mResDirty)
{
- if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio"))
- {
- getWindow()->setNativeAspectRatio(0.f);
- }
- else
- {
- getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio"));
- }
-
reshape(getWindowWidthRaw(), getWindowHeightRaw());
-
- // force aspect ratio
- if (mIsFullscreenChecked)
- {
- LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() );
- }
-
mResDirty = false;
- }
-
- BOOL is_fullscreen = mWindow->getFullscreen();
- if(mWantFullscreen)
- {
- LLCoordScreen screen_size;
- LLCoordScreen desired_screen_size(gSavedSettings.getS32("FullScreenWidth"),
- gSavedSettings.getS32("FullScreenHeight"));
- getWindow()->getSize(&screen_size);
- if(!is_fullscreen ||
- screen_size.mX != desired_screen_size.mX
- || screen_size.mY != desired_screen_size.mY)
- {
- if (!LLStartUp::canGoFullscreen())
- {
- return FALSE;
- }
-
- LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- changeDisplaySettings(TRUE,
- desired_screen_size,
- gSavedSettings.getBOOL("DisableVerticalSync"),
- mShowFullscreenProgress);
-
- LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- mStatesDirty = true;
- return TRUE;
- }
- }
- else
- {
- if(is_fullscreen)
- {
- // Changing to windowed mode.
- changeDisplaySettings(FALSE,
- LLCoordScreen(gSavedSettings.getS32("WindowWidth"),
- gSavedSettings.getS32("WindowHeight")),
- TRUE,
- mShowFullscreenProgress);
- mStatesDirty = true;
- return TRUE;
- }
- }
- return FALSE;
+ }
}
void LLViewerWindow::restartDisplay(BOOL show_progress_bar)
@@ -4605,39 +4458,24 @@ void LLViewerWindow::restartDisplay(BOOL show_progress_bar)
}
}
-BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar)
+BOOL LLViewerWindow::changeDisplaySettings(LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar)
{
BOOL was_maximized = gSavedSettings.getBOOL("WindowMaximized");
- mWantFullscreen = fullscreen;
- mShowFullscreenProgress = show_progress_bar;
- gSavedSettings.setBOOL("FullScreen", mWantFullscreen);
//gResizeScreenTexture = TRUE;
- BOOL old_fullscreen = mWindow->getFullscreen();
- if (!old_fullscreen && fullscreen && !LLStartUp::canGoFullscreen())
- {
- // Not allowed to switch to fullscreen now, so exit early.
- // *NOTE: This case should never be reached, but just-in-case.
- return TRUE;
- }
-
//U32 fsaa = gSavedSettings.getU32("RenderFSAASamples");
//U32 old_fsaa = mWindow->getFSAASamples();
- // going from windowed to windowed
- if (!old_fullscreen && !fullscreen)
+ // if not maximized, use the request size
+ if (!mWindow->getMaximized())
{
- // if not maximized, use the request size
- if (!mWindow->getMaximized())
- {
- mWindow->setSize(size);
- }
+ mWindow->setSize(size);
+ }
//if (fsaa == old_fsaa)
- {
- return TRUE;
- }
+ {
+ return TRUE;
}
// Close floaters that don't handle settings change
@@ -4654,23 +4492,15 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
LLCoordScreen old_size;
LLCoordScreen old_pos;
mWindow->getSize(&old_size);
- BOOL got_position = mWindow->getPosition(&old_pos);
- if (!old_fullscreen && fullscreen && got_position)
- {
- // switching from windowed to fullscreen, so save window position
- gSavedSettings.setS32("WindowX", old_pos.mX);
- gSavedSettings.setS32("WindowY", old_pos.mY);
- }
-
//mWindow->setFSAASamples(fsaa);
- result_first_try = mWindow->switchContext(fullscreen, size, disable_vsync);
+ result_first_try = mWindow->switchContext(false, size, disable_vsync);
if (!result_first_try)
{
// try to switch back
//mWindow->setFSAASamples(old_fsaa);
- result_second_try = mWindow->switchContext(old_fullscreen, old_size, disable_vsync);
+ result_second_try = mWindow->switchContext(false, old_size, disable_vsync);
if (!result_second_try)
{
@@ -4702,19 +4532,8 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
}
BOOL success = result_first_try || result_second_try;
- if (success)
- {
-#if LL_WINDOWS
- // Only trigger a reshape after switching to fullscreen; otherwise rely on the windows callback
- // (otherwise size is wrong; this is the entire window size, reshape wants the visible window size)
- if (fullscreen && result_first_try)
-#endif
- {
- reshape(size.mX, size.mY);
- }
- }
- if (!mWindow->getFullscreen() && success)
+ if (success)
{
// maximize window if was maximized, else reposition
if (was_maximized)
@@ -4732,45 +4551,14 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size,
mIgnoreActivate = FALSE;
gFocusMgr.setKeyboardFocus(keyboard_focus);
- mWantFullscreen = mWindow->getFullscreen();
- mShowFullscreenProgress = FALSE;
return success;
}
-
-F32 LLViewerWindow::getDisplayAspectRatio() const
-{
- if (mWindow->getFullscreen())
- {
- if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio"))
- {
- return mWindow->getNativeAspectRatio();
- }
- else
- {
- return gSavedSettings.getF32("FullScreenAspectRatio");
- }
- }
- else
- {
- return mWindow->getNativeAspectRatio();
- }
-}
-
-
F32 LLViewerWindow::getWorldViewAspectRatio() const
{
F32 world_aspect = (F32)mWorldViewRectRaw.getWidth() / (F32)mWorldViewRectRaw.getHeight();
- //F32 window_aspect = (F32)mWindowRectRaw.getWidth() / (F32)mWindowRectRaw.getHeight();
- if (mWindow->getFullscreen())
- {
- return world_aspect * mWindow->getPixelAspectRatio();
- }
- else
- {
- return world_aspect;
- }
+ return world_aspect;
}
void LLViewerWindow::calcDisplayScale()
@@ -4778,27 +4566,13 @@ void LLViewerWindow::calcDisplayScale()
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
LLVector2 display_scale;
display_scale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f));
- F32 height_normalization = gSavedSettings.getBOOL("UIAutoScale") ? ((F32)mWindowRectRaw.getHeight() / display_scale.mV[VY]) / 768.f : 1.f;
- if(mWindow->getFullscreen())
- {
- display_scale *= (ui_scale_factor * height_normalization);
- }
- else
- {
- display_scale *= ui_scale_factor;
- }
+ display_scale *= ui_scale_factor;
// limit minimum display scale
if (display_scale.mV[VX] < MIN_DISPLAY_SCALE || display_scale.mV[VY] < MIN_DISPLAY_SCALE)
{
display_scale *= MIN_DISPLAY_SCALE / llmin(display_scale.mV[VX], display_scale.mV[VY]);
}
-
- if (mWindow->getFullscreen())
- {
- display_scale.mV[0] = llround(display_scale.mV[0], 2.0f/(F32) mWindowRectRaw.getWidth());
- display_scale.mV[1] = llround(display_scale.mV[1], 2.0f/(F32) mWindowRectRaw.getHeight());
- }
if (display_scale != mDisplayScale)
{
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 410445d97f..1e0200a075 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -262,10 +262,6 @@ public:
// Is window of our application frontmost?
BOOL getActive() const { return mActive; }
- void getTargetWindow(BOOL& fullscreen, S32& width, S32& height) const;
- // The 'target' is where the user wants the window to be. It may not be
- // there yet, because we may be supressing fullscreen prior to login.
-
const std::string& getInitAlert() { return mInitAlert; }
//
@@ -380,17 +376,12 @@ public:
// Prints window implementation details
void dumpState();
- // Request display setting changes
- void toggleFullscreen(BOOL show_progress);
-
// handle shutting down GL and bringing it back up
- void requestResolutionUpdate(bool fullscreen_checked);
- void requestResolutionUpdate(); // doesn't affect fullscreen
- BOOL checkSettings();
+ void requestResolutionUpdate();
+ void checkSettings();
void restartDisplay(BOOL show_progress_bar);
- BOOL changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar);
+ BOOL changeDisplaySettings(LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar);
BOOL getIgnoreDestroyWindow() { return mIgnoreActivate; }
- F32 getDisplayAspectRatio() const;
F32 getWorldViewAspectRatio() const;
const LLVector2& getDisplayScale() const { return mDisplayScale; }
void calcDisplayScale();
@@ -415,8 +406,6 @@ public:
protected:
BOOL mActive;
- BOOL mWantFullscreen;
- BOOL mShowFullscreenProgress;
LLRect mWindowRectRaw; // whole window, including UI
LLRect mWindowRectScaled; // whole window, scaled by UI size
@@ -470,7 +459,6 @@ protected:
bool mResDirty;
bool mStatesDirty;
- bool mIsFullscreenChecked; // Did the user check the fullscreen checkbox in the display settings
U32 mCurrResolutionIndex;
boost::scoped_ptr<LLViewerWindowListener> mViewerWindowListener;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 0341ea782c..2ebc60957d 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3547,7 +3547,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// AUDIO_STEP_LO_SPEED, AUDIO_STEP_HI_SPEED,
// AUDIO_STEP_LO_GAIN, AUDIO_STEP_HI_GAIN );
- const F32 STEP_VOLUME = 0.3f;
+ const F32 STEP_VOLUME = 0.1f;
const LLUUID& step_sound_id = getStepSound();
LLVector3d foot_pos_global = gAgent.getPosGlobalFromAgent(foot_pos_agent);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index d9f5017a31..5644e02134 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1978,9 +1978,13 @@ bool LLVOVolume::hasMediaPermission(const LLMediaEntry* media_entry, MediaPermTy
}
// Group permissions
- else if (0 != (media_perms & LLMediaEntry::PERM_GROUP) && permGroupOwner())
+ else if (0 != (media_perms & LLMediaEntry::PERM_GROUP))
{
- return true;
+ LLPermissions* obj_perm = LLSelectMgr::getInstance()->findObjectPermissions(this);
+ if (obj_perm && gAgent.isInGroup(obj_perm->getGroup()))
+ {
+ return true;
+ }
}
// Owner permissions
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index ea0c5f1d0f..9c308359fa 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -112,16 +112,19 @@ LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item
}
// virtual
-void LLPanelWearableOutfitItem::updateItem(const std::string& name)
+void LLPanelWearableOutfitItem::updateItem(const std::string& name,
+ const LLStyle::Params& input_params)
{
std::string search_label = name;
+ LLStyle::Params style_params = input_params;
if (mItem && get_is_item_worn(mItem->getUUID()))
{
search_label += LLTrans::getString("worn");
+ style_params.font.style("BOLD");
}
- LLPanelInventoryListItemBase::updateItem(search_label);
+ LLPanelInventoryListItemBase::updateItem(search_label, style_params);
}
//////////////////////////////////////////////////////////////////////////
@@ -261,7 +264,9 @@ LLPanelAttachmentListItem* LLPanelAttachmentListItem::create(LLViewerInventoryIt
return list_item;
}
-void LLPanelAttachmentListItem::setTitle(const std::string& title, const std::string& highlit_text)
+void LLPanelAttachmentListItem::setTitle(const std::string& title,
+ const std::string& highlit_text,
+ const LLStyle::Params& input_params)
{
std::string title_joint = title;
@@ -271,7 +276,7 @@ void LLPanelAttachmentListItem::setTitle(const std::string& title, const std::st
title_joint = title + " (" + joint + ")";
}
- LLPanelDeletableWearableListItem::setTitle(title_joint, highlit_text);
+ LLPanelDeletableWearableListItem::setTitle(title_joint, highlit_text, input_params);
}
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index 69134dd646..5dc06284c3 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -86,8 +86,8 @@ public:
/**
* Updates item name and (worn) suffix.
*/
- /*virtual*/ void updateItem(const std::string& name);
-
+ /*virtual*/ void updateItem(const std::string& name,
+ const LLStyle::Params& input_params = LLStyle::Params());
protected:
LLPanelWearableOutfitItem(LLViewerInventoryItem* item);
@@ -124,7 +124,9 @@ public:
virtual ~LLPanelAttachmentListItem() {};
/** Set item title. Joint name is added to the title in parenthesis */
- /*virtual*/ void setTitle(const std::string& title, const std::string& highlit_text);
+ /*virtual*/ void setTitle(const std::string& title,
+ const std::string& highlit_text,
+ const LLStyle::Params& input_params = LLStyle::Params());
protected:
LLPanelAttachmentListItem(LLViewerInventoryItem* item) : LLPanelDeletableWearableListItem(item) {};
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 06040a574c..09c5b9b196 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -193,6 +193,9 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
U32 x_world = (U32)(x_regions) * REGION_WIDTH_UNITS;
U32 y_world = (U32)(y_regions) * REGION_WIDTH_UNITS;
+ // name shouldn't be empty, see EXT-4568
+ llassert(!name.empty());
+
// Insert that region in the world map, if failure, flag it as a "null_sim"
if (!(LLWorldMap::getInstance()->insertRegion(x_world, y_world, name, image_id, (U32)accesscode, region_flags)))
{
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index c02bf5741e..cf632c085f 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -114,7 +114,7 @@ with the same filename but different name
<texture name="DisclosureArrow_Opened_Off" file_name="widgets/DisclosureArrow_Opened_Off.png" preload="true" />
<texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" />
- <texture name="DownArrow_Off" file_name="icons/DownArrow_off.png" preload="false" />
+ <texture name="DownArrow_Off" file_name="icons/DownArrow_Off.png" preload="false" />
<texture name="Dragbar" file_name="windows/Dragbar.png" preload="false" scale.left="35" scale.top="5" scale.right="29" scale.bottom="5" />
<texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
index 87371b05e3..418e717bf6 100644
--- a/indra/newview/skins/default/xui/de/floater_camera.xml
+++ b/indra/newview/skins/default/xui/de/floater_camera.xml
@@ -9,35 +9,28 @@
<floater.string name="move_tooltip">
Kamera nach oben, unten, links und rechts bewegen
</floater.string>
- <floater.string name="orbit_mode_title">
- Kreisen
+ <floater.string name="camera_modes_title">
+ Kameramodi
</floater.string>
<floater.string name="pan_mode_title">
- Schwenken
+ Kreisen - Zoomen - Schwenken
</floater.string>
- <floater.string name="avatar_view_mode_title">
- Voreinstellungen
+ <floater.string name="presets_mode_title">
+ Ansichten
</floater.string>
<floater.string name="free_mode_title">
Objekt ansehen
</floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
<panel name="zoom" tool_tip="Kamera auf Fokus zoomen">
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
- </panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
- <panel name="camera_presets">
- <button name="rear_view" tool_tip="Hinteransicht"/>
- <button name="group_view" tool_tip="Gruppen-Ansicht"/>
- <button name="front_view" tool_tip="Vorderansicht"/>
- <button name="mouselook_view" tool_tip="Mouselook"/>
+ <joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="orbit_btn" tool_tip="Kamera kreisen"/>
- <button label="" name="pan_btn" tool_tip="Kamera schwenken"/>
- <button label="" name="avatarview_btn" tool_tip="Voreinstellungen"/>
- <button label="" name="freecamera_btn" tool_tip="Objekt ansehen"/>
+ <button label="" name="presets_btn" tool_tip="Ansichten"/>
+ <button label="" name="pan_btn" tool_tip="Kreisen - Zoomen - Schwenken"/>
+ <button label="" name="avatarview_btn" tool_tip="Kameramodi"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_incoming_call.xml b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
index 740085599f..0312f7dfe9 100644
--- a/indra/newview/skins/default/xui/de/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
@@ -16,7 +16,13 @@
ist einem Voice-Konferenz-Chat beigetreten.
</floater.string>
<floater.string name="VoiceInviteGroup">
- ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
+ ist dem &apos;[GROUP]&apos; Voice-Kanal beigetreten.
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionGroup">
+ Möchten Sie [CURRENT_CHAT] verlassen und dem Gespräch mit &apos;[GROUP]&apos; beitreten?
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionDefault">
+ Möchten Sie [CURRENT_CHAT] verlassen und diesem Voice-Chat beitreten?
</floater.string>
<text name="question">
Möchten Sie [CURRENT_CHAT] verlassen und diesem Voice-Chat beitreten?
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index 4c417710bd..a656ffb894 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -5,12 +5,19 @@
</floater.string>
<button label="Foto aktualisieren" name="new_snapshot_btn"/>
<line_editor label="Beschreibung" name="description"/>
- <button label="Foto freigeben" name="share"/>
- <button label="Ins Internet stellen" name="share_to_web"/>
- <button label="Objekt in meinem Inventar speichern" name="save_to_inventory"/>
- <button label="Foto speichern" name="save"/>
- <button label="Foto per E-Mail senden" name="share_to_email"/>
- <button label="Auf meinem Computer speichern" name="save_to_computer"/>
- <button label="Als Profilbild festlegen" name="set_profile_pic"/>
- <button label="Zurück" name="cancel"/>
+ <panel name="panel_snapshot_main">
+ <button label="Foto freigeben" name="share"/>
+ <button label="Foto speichern" name="save"/>
+ <button label="Als Profilbild festlegen" name="set_profile_pic"/>
+ </panel>
+ <panel name="panel_snapshot_share">
+ <button label="Ins Internet stellen" name="share_to_web"/>
+ <button label="Foto per E-Mail senden" name="share_to_email"/>
+ <button label="Zurück" name="cancel_share"/>
+ </panel>
+ <panel name="panel_snapshot_save">
+ <button label="Objekt in meinem Inventar speichern" name="save_to_inventory"/>
+ <button label="Auf meinem Computer speichern" name="save_to_computer"/>
+ <button label="Zurück" name="cancel_save"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
index aa582838a4..07b7689cd0 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -19,8 +19,10 @@
<layout_panel name="my_panel">
<text name="user_text" value="Mein Avatar:"/>
</layout_panel>
- <layout_panel name="leave_call_btn_panel">
- <button label="Anruf beenden" name="leave_call_btn"/>
- </layout_panel>
+ <layout_stack name="voice_effect_and_leave_call_stack">
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Anruf beenden" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
new file mode 100644
index 0000000000..8de0133ead
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Orte" name="voice_effects" title="VOICE-MORPHING AUSPROBIEREN">
+ <string name="no_voice_effect">
+ (Kein Voice-Morphing)
+ </string>
+ <string name="active_voice_effect">
+ (Aktiv)
+ </string>
+ <string name="unsubscribed_voice_effect">
+ (nicht abonniert)
+ </string>
+ <string name="new_voice_effect">
+ (Neu!)
+ </string>
+ <text name="status_text">
+ Um die Voice-Morph-Effekte auszuprobieren, einfach auf die Schaltfläche „Aufnahme“ klicken und kurz ins Mikrofon sprechen. Klicken Sie dann auf einen beliebigen Effekt in der Liste, um zu hören, wie der Effekt Ihre Stimme verändert.
+
+Schließen Sie dieses Fenster, um wieder mit dem Voice-Chat in der Nähe verbunden zu werden.
+ </text>
+ <button label="Aufnahme" name="record_btn" tool_tip="Nehmen Sie Ihre Stimme auf."/>
+ <button label="Stopp" name="record_stop_btn"/>
+ <text name="voice_morphing_link">
+ [[URL]Voice-Morphing abonnieren]
+ </text>
+ <scroll_list name="voice_effect_list" tool_tip="Nehmen Sie Ihre Stimme auf und klicken Sie dann auf einen Effekt, um diesen auszuprobieren.">
+ <scroll_list.columns label="Voice-Morphing" name="name"/>
+ <scroll_list.columns label="Gültig bis" name="expires"/>
+ </scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/inspect_object.xml b/indra/newview/skins/default/xui/de/inspect_object.xml
index ede14a37d7..72b8235828 100644
--- a/indra/newview/skins/default/xui/de/inspect_object.xml
+++ b/indra/newview/skins/default/xui/de/inspect_object.xml
@@ -8,7 +8,7 @@
Von [CREATOR]
</string>
<string name="CreatorAndOwner">
- von [CREATOR]
+ Von [CREATOR]
Besitzer [OWNER]
</string>
<string name="Price">
@@ -23,16 +23,16 @@ Besitzer [OWNER]
<string name="Sit">
Sitzen
</string>
- <text name="object_name" value="Wirklich langen Objektnamen als Test eingeben"/>
+ <text name="object_name" value="Test für ein Objektname der sehr lange ist und über zwei Zeilen geht."/>
<text name="object_creator">
von secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
Besitzer secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
</text>
<text name="price_text">
- 300.000 L$
+ 30.000 L$
</text>
<text name="object_description">
- Dies ist eine wirklich lange Beschreibung für ein Objekt, mindestens 80 Zeichen lang oder jetzt schon 120 Zeichen. Niemand weiß es genau.
+ Dies ist eine wirklich lange Beschreibung für ein Objekt, mindestens 80 Zeichen lang oder jetzt schon mindestens 120 Zeichen lang und länger als der englische Originaltext. Niemand weiß es genau.
</text>
<text name="object_media_url">
http://www.superdupertest.com
diff --git a/indra/newview/skins/default/xui/de/menu_cof_attachment.xml b/indra/newview/skins/default/xui/de/menu_cof_attachment.xml
new file mode 100644
index 0000000000..05d3dfca9d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+ <menu_item_call label="Abnehmen" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_cof_body_part.xml b/indra/newview/skins/default/xui/de/menu_cof_body_part.xml
new file mode 100644
index 0000000000..07960a525c
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+ <menu_item_call label="Ersetzen" name="replace"/>
+ <menu_item_call label="Bearbeiten" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_cof_clothing.xml b/indra/newview/skins/default/xui/de/menu_cof_clothing.xml
new file mode 100644
index 0000000000..5cf31791ba
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+ <menu_item_call label="Ausziehen" name="take_off"/>
+ <menu_item_call label="Eine Kategorie nach oben" name="move_up"/>
+ <menu_item_call label="Eine Kategorie nach unten" name="move_down"/>
+ <menu_item_call label="Bearbeiten" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_cof_gear.xml b/indra/newview/skins/default/xui/de/menu_cof_gear.xml
new file mode 100644
index 0000000000..54b218d22f
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+ <menu label="Neue Kleider" name="COF.Gear.New_Clothes"/>
+ <menu label="Neue Körperteile" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
index 32a6823b35..9acf96dc6d 100644
--- a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
<menu name="hide_navbar_menu">
<menu_item_check label="Navigationsleiste anzeigen" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="Favoritenleiste anzeigen" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Mini-Standortleiste anzeigen" name="ShowMiniLocationPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index 306ef19de3..f6139a0ea0 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -80,6 +80,7 @@
<menu label="An HUD hängen" name="Attach To HUD"/>
<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
<menu_item_call label="Anziehen" name="Wearable Wear"/>
+ <menu_item_call label="Hinzufügen" name="Wearable Add"/>
<menu_item_call label="Ausziehen" name="Take Off"/>
<menu_item_call label="--keine Optionen--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_outfit_gear.xml b/indra/newview/skins/default/xui/de/menu_outfit_gear.xml
new file mode 100644
index 0000000000..411dfc42c0
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+ <menu_item_call label="Anziehen - Aktuelles Outfit ersetzen" name="wear"/>
+ <menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/>
+ <menu label="Neue Kleider" name="New Clothes">
+ <menu_item_call label="Neues Hemd" name="New Shirt"/>
+ <menu_item_call label="Neue Hose" name="New Pants"/>
+ <menu_item_call label="Neue Schuhe" name="New Shoes"/>
+ <menu_item_call label="Neue Socken" name="New Socks"/>
+ <menu_item_call label="Neue Jacke" name="New Jacket"/>
+ <menu_item_call label="Neuer Rock" name="New Skirt"/>
+ <menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+ <menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+ <menu_item_call label="Neue Unterhose" name="New Underpants"/>
+ <menu_item_call label="Neues Alpha" name="New Alpha"/>
+ <menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
+ </menu>
+ <menu label="Neue Körperteile" name="New Body Parts">
+ <menu_item_call label="Neue Form" name="New Shape"/>
+ <menu_item_call label="Neue Haut" name="New Skin"/>
+ <menu_item_call label="Neues Haar" name="New Hair"/>
+ <menu_item_call label="Neue Augen" name="New Eyes"/>
+ </menu>
+ <menu_item_call label="Outfit neu benennen" name="rename"/>
+ <menu_item_call label="Outfit löschen" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_outfit_tab.xml b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml
new file mode 100644
index 0000000000..605dee9b33
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+ <menu_item_call label="Anziehen - Aktuelles Outfit ersetzen" name="wear_replace"/>
+ <menu_item_call label="Anziehen - Aktuelles Outfit hinzufügen" name="wear_add"/>
+ <menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/>
+ <menu_item_call label="Outfit bearbeiten" name="edit"/>
+ <menu_item_call label="Umbenennen" name="rename"/>
+ <menu_item_call label="Outfit löschen" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_save_outfit.xml b/indra/newview/skins/default/xui/de/menu_save_outfit.xml
index 70bca077ab..986c78b318 100644
--- a/indra/newview/skins/default/xui/de/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/de/menu_save_outfit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="save_outfit_menu">
<menu_item_call label="Speichern" name="save_outfit"/>
- <menu_item_call label="Als neue Datei speichern" name="save_as_new_outfit"/>
+ <menu_item_call label="Speichern unter" name="save_as_new_outfit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index c416ebd7c1..38ef1b0421 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -7,10 +7,10 @@
</menu_item_call>
<menu_item_call label="L$ kaufen" name="Buy and Sell L$"/>
<menu_item_call label="Mein Profil" name="Profile"/>
- <menu_item_call label="Mein Aussehen" name="Appearance"/>
<menu_item_check label="Mein Inventar" name="Inventory"/>
<menu_item_check label="Mein Inventar" name="ShowSidetrayInventory"/>
<menu_item_check label="Meine Gesten" name="Gestures"/>
+ <menu_item_check label="Meine Stimme" name="ShowVoice"/>
<menu label="Mein Status" name="Status">
<menu_item_call label="Abwesend" name="Set Away"/>
<menu_item_call label="Beschäftigt" name="Set Busy"/>
@@ -70,6 +70,12 @@
<menu_item_call label="Verknüpfung" name="Link"/>
<menu_item_call label="Verknüpfung auflösen" name="Unlink"/>
<menu_item_check label="Verknüpfte Teile bearbeiten" name="Edit Linked Parts"/>
+ <menu label="Verknüpfte Teile auswählen" name="Select Linked Parts">
+ <menu_item_call label="Nächstes Teil auswählen" name="Select Next Part"/>
+ <menu_item_call label="Vorheriges Teil auswählen" name="Select Previous Part"/>
+ <menu_item_call label="Nächsten Teil mit einsschließen" name="Include Next Part"/>
+ <menu_item_call label="Vorherige Teile mit einschließen" name="Include Previous Part"/>
+ </menu>
<menu_item_call label="Fokus auf Auswahl" name="Focus on Selection"/>
<menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection"/>
<menu label="Objekt" name="Object">
@@ -100,11 +106,11 @@
<menu_item_call label="Auswahl für Raster verwenden" name="Use Selection for Grid"/>
<menu_item_call label="Rasteroptionen" name="Grid Options"/>
</menu>
- <menu label="Verknüpfte Teile auswählen" name="Select Linked Parts">
- <menu_item_call label="Nächstes Teil auswählen" name="Select Next Part"/>
- <menu_item_call label="Vorheriges Teil auswählen" name="Select Previous Part"/>
- <menu_item_call label="Nächsten Teil mit einsschließen" name="Include Next Part"/>
- <menu_item_call label="Vorherige Teile mit einschließen" name="Include Previous Part"/>
+ <menu label="Hochladen" name="Upload">
+ <menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/>
+ <menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/>
+ <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
+ <menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
</menu>
</menu>
<menu label="Hilfe" name="Help">
@@ -189,7 +195,6 @@
<menu_item_call label="Hineinzoomen" name="Zoom In"/>
<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
<menu_item_call label="Wegzoomen" name="Zoom Out"/>
- <menu_item_call label="Vollbild" name="Toggle Fullscreen"/>
</menu>
<menu_item_call label="Debug-Einstellungen anzeigen" name="Debug Settings"/>
<menu_item_check label="Menü „Entwickler“ anzeigen" name="Debug Mode"/>
diff --git a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..a4bf75a497
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+ <menu_item_call label="Anziehen" name="wear"/>
+ <menu_item_call label="Hinzufügen" name="wear_add"/>
+ <menu_item_call label="Ausziehen / Abnehmen" name="take_off_or_detach"/>
+ <menu_item_call label="Abnehmen" name="detach"/>
+ <context_menu label="Anhängen an ▶" name="wearable_attach_to"/>
+ <context_menu label="An HUD hängen ▶" name="wearable_attach_to_hud"/>
+ <menu_item_call label="Ausziehen" name="take_off"/>
+ <menu_item_call label="Bearbeiten" name="edit"/>
+ <menu_item_call label="Objektprofil" name="object_profile"/>
+ <menu_item_call label="Original anzeigen" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index aa1ee71c3f..408ece9690 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -479,7 +479,9 @@ Sie können die Grafikqualität unter Einstellungen &gt; Grafik wieder erhöhen.
Die Region [REGION] erlaubt kein Terraforming.
</notification>
<notification name="CannotCopyWarning">
- Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
+ Sie sind nicht berechtigt, die folgenden Objekte zu kopieren:
+[ITEMS]
+Wenn Sie diese weitergeben, werden sie aus Ihrem Inventar entfernt. Möchten Sie diese Objekte wirklich weggeben?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="CannotGiveItem">
@@ -947,6 +949,26 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
+ <notification label="Kleidungstyp speichern" name="SaveWearableAs">
+ Objekt in meinem Inventar speichern als:
+ <form name="form">
+ <input name="message">
+ [DESC] (neu)
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
+ <notification label="Outfit neu benennen" name="RenameOutfit">
+ Neuer Outfit-Name:
+ <form name="form">
+ <input name="new_name">
+ [NAME]
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Abbrechen"/>
+ </form>
+ </notification>
<notification name="RemoveFromFriends">
Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -1522,9 +1544,9 @@ Möchten Sie unsere Knowledgebase besuchen, um mehr Informationen über Alterein
Aufgrund Ihrer Alterseinstufung dürfen Sie diese Region nicht betreten.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- Sie dürfen diese Region aufgrund der Einstellung Ihrer Alterseinstufung nicht betreten.
+ Sie dürfen diese Region aufgrund der Einstellung Ihrer Inhaltseinstufung nicht betreten.
-Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstufung sofort zu ändern und Zugang zu erhalten. Sie können ab sofort [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Falls Sie diese Einstellung später rückgängig machen möchten, gehen Sie zu Bearbeiten &gt; Einstellungen &gt; Allgemein.
+Bitte ändern Sie Ihre Einstellungen bezüglich der Inhaltseinstufung, um die gewünschte Region zu betreten. Danach können Sie nach [REGIONMATURITY]-Inhalt suchen und auf diesen zugreifen. Um die Veränderungen rückgängig zu machen, gehen Sie zu Ich &gt; Einstellungen &gt; Allgemein.
<form name="form">
<button name="OK" text="Einstellung ändern"/>
<button name="Cancel" text="Schließen"/>
@@ -2297,15 +2319,6 @@ Versuchen Sie es in einigen Minuten erneut.
<button name="Mute" text="Ignorieren"/>
</form>
</notification>
- <notification name="ObjectGiveItemUnknownUser">
- Ein Objekt namens [OBJECTFROMNAME] von (einem unbekannten Einwohner) hat Ihnen folgendes übergeben [OBJECTTYPE]:
-[ITEM_SLURL]
- <form name="form">
- <button name="Keep" text="Behalten"/>
- <button name="Discard" text="Verwerfen"/>
- <button name="Mute" text="Ignorieren"/>
- </form>
- </notification>
<notification name="UserGiveItem">
[NAME_SLURL] hat Ihnen folgendes [OBJECTTYPE] übergeben:
[ITEM_SLURL]
@@ -2551,6 +2564,21 @@ Klicken Sie auf &apos;Akzeptieren &apos;, um dem Chat beizutreten, oder auf &a
<notification name="VoiceLoginRetry">
Wir erstellen einen Voice-Kanal für Sie. Bitte warten Sie einen Moment.
</notification>
+ <notification name="VoiceEffectsExpired">
+ Ein oder mehrere Ihrer Voice-Morph-Abos ist/sind abgelaufen.
+[[URL] Hier klicken], um Ihr Abo zu erneuern.
+ </notification>
+ <notification name="VoiceEffectsExpiredInUse">
+ Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet.
+[[URL] Hier klicken], um Ihr Abo zu erneuern.
+ </notification>
+ <notification name="VoiceEffectsWillExpire">
+ Ein oder mehrere Ihrer Voice-Morph-Abos werden in weniger als [INTERVAL] Tagen ablaufen.
+[[URL] Hier klicken], um Ihr Abo zu erneuern.
+ </notification>
+ <notification name="VoiceEffectsNew">
+ Neue Voice-Morph-Effekte sind erhältlich!
+ </notification>
<notification name="Cannot enter parcel: not a group member">
Nur Mitglieder einer bestimmten Gruppe dürfen diesen Bereich betreten.
</notification>
@@ -2617,10 +2645,58 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist.
</notification>
<notification name="ShareNotification">
- Artikel aus Inventar auf eine Person im Fenster „Einwohner auswählen“ ziehen.
+ Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten.
+ </notification>
+ <notification name="ShareItemsConfirmation">
+ Möchten Sie diese Objekte wirklich für andere freigeben:
+
+[ITEMS]
+
+Für folgende Einwohner:
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
+ <notification name="ItemsShared">
+ Objekte wurden erfolgreich freigegeben.
</notification>
<notification name="AvatarRezNotification">
- Avatar &apos;[NAME]&apos; wurde in [TIME] Sekunden gerezzt.
+ (Seit [EXISTENCE] Sekunden inworld )
+Avatar &apos;[NAME]&apos; wurde in [TIME] Sekunden gerezzt.
+ </notification>
+ <notification name="AvatarRezSelfBakedDoneNotification">
+ (Seit [EXISTENCE] Sekunden inworld )
+Ihr Outfit wurde in [TIME] Sekunden gebacken.
+ </notification>
+ <notification name="AvatarRezSelfBakedUpdateNotification">
+ (Seit [EXISTENCE] Sekunden inworld )
+Nach [TIME] Sekunden wurde eine Aktualisierung Ihres Aussehens gesendet.
+[STATUS]
+ </notification>
+ <notification name="NoConnect">
+ Es gibt Probleme mit der Verbindung mit [PROTOCOL] [HOSTID].
+Bitte überprüfen Sie Ihre Netzwerk- und Firewalleinstellungen.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="NoVoiceConnect">
+ Verbindung mit Voice-Server ist leider nicht möglich:
+
+[HOSTID]
+
+Voice-Kommunikation ist leider nicht verfügbar.
+Bitte überprüfen Sie Ihr Netzwerk- und Firewall-Setup.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="AvatarRezSelfBakeNotification">
+ (Seit [EXISTENCE] Sekunden inworld )
+Die [RESOLUTION]-gebakene Textur für &apos;[BODYREGION]&apos; wurde in [TIME] Sekunden hochgeladen.
+ </notification>
+ <notification name="ConfirmMuteAll">
+ <usetemplate ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
<global name="UnsupportedCPU">
- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
diff --git a/indra/newview/skins/default/xui/de/panel_edit_shape.xml b/indra/newview/skins/default/xui/de/panel_edit_shape.xml
index 393a586903..d04dba7a3b 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_shape.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <panel name="avatar_sex_panel">
- <text name="gender_text">
- Geschlecht:
- </text>
- <radio_group name="sex_radio">
- <radio_item label="weiblich" name="radio"/>
- <radio_item label="Männlich" name="radio2"/>
- </radio_group>
- </panel>
+ <string name="meters">
+ Meter
+ </string>
+ <string name="feet">
+ Fuß
+ </string>
+ <string name="height">
+ Höhe:
+ </string>
<panel label="Hemd" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="Körper"/>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
index 17a632b46e..7294a0b34f 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
<string name="jacket_desc_text">
Jacke:
</string>
- <string name="skirt_skirt_desc_text">
+ <string name="skirt_desc_text">
Rock:
</string>
<string name="gloves_desc_text">
@@ -94,11 +94,6 @@
<panel label="Hemd" name="wearable_type_panel">
<text name="description_text" value="Form:"/>
</panel>
- <panel label="gear_buttom_panel" name="gear_buttom_panel">
- <button name="friends_viewsort_btn" tool_tip="Optionen"/>
- <button name="add_btn" tool_tip="TODO"/>
- <button name="del_btn" tool_tip="TODO"/>
- </panel>
<panel name="button_panel">
<button label="Speichern unter" name="save_as_button"/>
<button label="Zurücksetzen" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
index 5ff088d41c..91ba94b3d6 100644
--- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
@@ -11,7 +11,7 @@
<string name="Filter.All" value="Alle"/>
<string name="Filter.Clothes/Body" value="Kleider/Körper"/>
<string name="Filter.Objects" value="Objekte"/>
- <button label="Bearbeiten" name="edit_wearable_btn"/>
+ <string name="Filter.Custom" value="Benutzerspezifischer Filter"/>
<text name="title" value="Outfit bearbeiten"/>
<panel label="bottom_panel" name="header_panel">
<panel label="bottom_panel" name="outfit_name_and_status">
@@ -21,25 +21,16 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="IM Steuerkonsole" name="outfit_wearables_panel">
- <scroll_list name="look_items_list">
- <scroll_list.columns label="Look-Artikel" name="look_item"/>
- <scroll_list.columns label="Outfit-Artikel sortieren" name="look_item_sort"/>
- </scroll_list>
- <panel label="bottom_panel" name="edit_panel"/>
- </layout_panel>
- <layout_panel name="add_wearables_panel">
- <filter_editor label="Filter" name="look_item_filter"/>
<layout_stack name="filter_panels">
- <layout_panel label="IM Steuerkonsole" name="filter_button_panel">
- <text name="add_to_outfit_label" value="Zum Outfit hinzufügen:"/>
- <button label="O" name="filter_button"/>
+ <layout_panel name="add_button_and_combobox">
+ <button label="Mehr hinzufügen" name="show_add_wearables_btn"/>
+ </layout_panel>
+ <layout_panel name="filter_panel">
+ <filter_editor label="Tragbare Inventarobjekte filtern" name="look_item_filter"/>
</layout_panel>
</layout_stack>
- <panel label="add_wearables_button_bar" name="add_wearables_button_bar">
- <button label="O" name="folder_view_btn"/>
- <button label="L" name="list_view_btn"/>
- </panel>
</layout_panel>
+ <layout_panel name="add_wearables_panel"/>
</layout_stack>
<panel name="save_revert_button_bar">
<button label="Speichern" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
index f695d67d1b..8b04cecd68 100644
--- a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
<dnd_button name="trash_btn" tool_tip="Auswahl löschen"/>
- <button label="Outfit speichern" name="make_outfit_btn" tool_tip="Aussehen als Outfit speichern"/>
+ <button label="Speichern unter" name="save_btn"/>
<button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
- <button label="Outfit bearbeiten" name="edit_current_outfit_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index 37ccdbeb7d..bd5c1c8ffe 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -5,12 +5,12 @@
<filter_editor label="Meine Orte filtern" name="Filter"/>
<panel name="button_panel">
<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
- <button label="Karte" name="map_btn" width="60"/>
+ <button label="Karte" name="map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen" width="60"/>
<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>
<button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
<button label="Speichern" name="save_btn" width="66"/>
<button label="Abbrechen" name="cancel_btn" width="66"/>
<button label="Schließen" name="close_btn"/>
- <button label="Profil" name="profile_btn"/>
+ <button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
index f9d5c93dc0..52e616a402 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
@@ -13,6 +13,7 @@
</text>
<check_box label="Bauen/Bearbeiten" name="edit_camera_movement" tool_tip="Automatische Kamerapositionierung bei Wechsel in und aus dem Bearbeitungsmodus verwenden"/>
<check_box label="Aussehen" name="appearance_camera_movement" tool_tip="Automatische Kamerapositionierung im Bearbeitenmodus verwenden"/>
+ <check_box initial_value="true" label="Sidebar" name="appearance_sidebar_positioning" tool_tip="Use automatic camera positioning for sidebar"/>
<check_box label="Mich im Mouselook anzeigen" name="first_person_avatar_visible"/>
<check_box label="Mit Pfeiltasten bewegen" name="arrow_keys_move_avatar_check"/>
<check_box label="2-mal-drücken-halten, um zu rennen" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml
index 3dc6997320..005290c1ff 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -21,8 +21,10 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand"/>
- <button label="L$ kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
+ <panel name="balance_bg">
+ <text name="balance" tool_tip="Mein Kontostand" value="20 L$"/>
+ <button label="L$ kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
+ </panel>
<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
24:00 H PST
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_voice_effect.xml b/indra/newview/skins/default/xui/de/panel_voice_effect.xml
new file mode 100644
index 0000000000..363ee013e3
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+ <string name="no_voice_effect">
+ Kein Voice-Morphing
+ </string>
+ <string name="preview_voice_effects">
+ Voice-Morphing ausprobieren ▶
+ </string>
+ <string name="get_voice_effects">
+ Voice-Morphing abonnieren ▶
+ </string>
+ <combo_box name="voice_effect" tool_tip="Wählen Sie einen Voice-Morph-Effekt aus, um Ihre Stimme zu verändern.">
+ <combo_box.item label="Kein Voice-Morphing" name="no_voice_effect"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index 26bde94ffd..96dd181854 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -2,11 +2,12 @@
<panel label="Sonstiges" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<panel name="button_panel">
- <button label="Profil" name="info_btn"/>
- <button label="Teilen" name="share_btn"/>
- <button label="Anziehen" name="wear_btn"/>
+ <button label="Profil" name="info_btn" tool_tip="Objektprofil anzeigen"/>
+ <button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
+ <button label="Shop" name="shop_btn" tool_tip="Marktplatz-Webseite öffnen"/>
+ <button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
<button label="Wiedergeben" name="play_btn"/>
- <button label="Teleportieren" name="teleport_btn"/>
+ <button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
</panel>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 03c858c880..bc4f20df26 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -100,6 +100,12 @@
<string name="LoginDownloadingClothing">
Kleidung wird geladen...
</string>
+ <string name="CertExpired">
+ Das vom Grid ausgegebene Zertifikate ist abgelaufen. Bitte überprüfen Sie Ihre Systemuhr oder kontaktieren Sie Ihren Grid-Administrator.
+ </string>
+ <string name="CertInvalidSignature">
+ Die Zertifikatsunterschrift des Gridservers konnte nicht bestätigt werden. Bitte kontaktieren Sie Ihren Grid-Administrator.
+ </string>
<string name="LoginFailedNoNetwork">
Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Netzwerkverbindung.
</string>
@@ -735,6 +741,12 @@
<string name="land_type_unknown">
(unbekannt)
</string>
+ <string name="Estate / Full Region">
+ Grundstück / Vollständige Region
+ </string>
+ <string name="Mainland / Full Region">
+ Mainland / Vollständige Region
+ </string>
<string name="all_files">
Alle Dateien
</string>
@@ -843,6 +855,9 @@
<string name="NewWearable">
Neue/r/s [WEARABLE_ITEM]
</string>
+ <string name="CreateNewWearable">
+ [WEARABLE_TYPE] erstellen
+ </string>
<string name="next">
Weiter
</string>
@@ -3390,12 +3405,6 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="answered_call">
Ihr Anruf wurde entgegengenommen
</string>
- <string name="started_call">
- haben/hat einen Anruf initiiert
- </string>
- <string name="joined_call">
- ist dem Gespräch beigetreten
- </string>
<string name="ringing-im">
Verbindung wird hergestellt...
</string>
@@ -3486,6 +3495,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="session_initialization_timed_out_error">
Die Initialisierung der Sitzung ist fehlgeschlagen
</string>
+ <string name="voice_morphing_url">
+ http://secondlife.com/landing/voicemorphing
+ </string>
<string name="paid_you_ldollars">
[NAME] hat Ihnen [AMOUNT] L$ bezahlt.
</string>
@@ -3605,6 +3617,18 @@ Missbrauchsbericht
<string name="Contents">
Inhalt
</string>
+ <string name="Female - Excuse me">
+ Weiblich - Räuspern
+ </string>
+ <string name="Female - Get lost">
+ Weiblich - Get lost
+ </string>
+ <string name="Female - Blow kiss">
+ Weiblich - Kusshand
+ </string>
+ <string name="Female - Boo">
+ Weiblich - Buh
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>
@@ -3614,4 +3638,32 @@ Missbrauchsbericht
<string name="texture_load_dimensions_error">
Bilder, die größer sind als [WIDTH]*[HEIGHT] können nicht geladen werden
</string>
+ <string name="words_separator" value=","/>
+ <string name="server_is_down">
+ Trotz all unserer Bemühungen ist ein unerwarteter Fehler aufgetreten.
+
+ Bitte überprüfen Sie status.secondlifegrid.net, um festzustellen, ob ein Problem besteht.
+ Falls Sie weiterhin Problem haben, überprüfen Sie bitte Ihre Netzwerk- und Firewalleinstellungen.
+ </string>
+ <string name="dateTimeWeekdaysNames">
+ Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
+ </string>
+ <string name="dateTimeWeekdaysShortNames">
+ So:Mo:Di:Mi:Do:Fr:Sa
+ </string>
+ <string name="dateTimeMonthNames">
+ Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
+ </string>
+ <string name="dateTimeMonthShortNames">
+ Jan:Feb:Mär:Apr:Mai:Jun:Jul:Aug:Sep:Okt:Nov:Dez
+ </string>
+ <string name="dateTimeDayFormat">
+ [MDAY]
+ </string>
+ <string name="dateTimeAM">
+ Uhr
+ </string>
+ <string name="dateTimePM">
+ Uhr
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 54ef6d65a7..b9489895ae 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -825,7 +825,7 @@ Leyla Linden </text>
name="Simulator primitive usage:"
top_pad="4"
width="364">
- Primative usage:
+ Primitive usage:
</text>
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml
index 7b5451553f..05c958e051 100644
--- a/indra/newview/skins/default/xui/en/floater_critical.xml
+++ b/indra/newview/skins/default/xui/en/floater_critical.xml
@@ -6,6 +6,7 @@
height="500"
layout="topleft"
name="modal container"
+ open_centered="true"
width="600">
<button
height="20"
@@ -16,15 +17,6 @@
name="Continue"
top="465"
width="100" />
- <button
- height="20"
- label="Cancel"
- label_selected="Cancel"
- layout="topleft"
- left_delta="-468"
- name="Cancel"
- top_delta="0"
- width="100" />
<text
type="string"
length="1"
@@ -32,9 +24,9 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="4"
+ left="20"
name="tos_heading"
- top_delta="-450"
+ top="20"
width="552">
Please read the following message carefully.
</text>
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index 70dac7e41c..c02d607586 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -182,7 +182,7 @@
</button>
</layout_panel>
<layout_panel
- height="20"
+ height="40"
layout="topleft"
left_delta="0"
name="external_controls"
@@ -190,7 +190,7 @@
user_resize="false"
width="540">
<web_browser
- bottom="-10"
+ bottom="-30"
follows="left|right|top|bottom"
layout="topleft"
left="0"
@@ -206,9 +206,9 @@
name="open_browser"
top_pad="5"
width="185">
- <button.commit_callback
- function="MediaBrowser.OpenWebBrowser" />
- </button>
+ <button.commit_callback
+ function="MediaBrowser.OpenWebBrowser" />
+ </button>
<check_box
control_name="UseExternalBrowser"
follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
index f766fe5a5d..6281bc5272 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
@@ -39,28 +39,6 @@
name="Title">
Gesture: [NAME]
</floater.string>
- <text
- type="string"
- length="1"
- follows="top|left"
- font="SansSerifSmall"
- height="10"
- layout="topleft"
- left="10"
- name="name_text"
- top="20"
- font.style="BOLD"
- width="100">
- Name:
- </text>
- <line_editor
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="84"
- name="name"
- top_delta="-4"
- width="180" />
<text
type="string"
length="1"
@@ -70,7 +48,7 @@
layout="topleft"
left="10"
name="desc_label"
- top_pad="10"
+ top_pad="25"
font.style="BOLD"
width="100">
Description:
@@ -79,10 +57,10 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="84"
+ left_delta="89"
name="desc"
top_delta="-4"
- width="180" />
+ width="175" />
<text
type="string"
length="1"
@@ -101,11 +79,11 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="84"
+ left_delta="89"
max_length="31"
name="trigger_editor"
top_delta="-4"
- width="180" />
+ width="175" />
<text
type="string"
length="1"
@@ -125,12 +103,12 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="84"
+ left_delta="89"
max_length="31"
name="replace_editor"
tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
top_delta="-4"
- width="180" />
+ width="175" />
<text
type="string"
length="1"
@@ -149,7 +127,7 @@
height="20"
label="None"
layout="topleft"
- left_delta="84"
+ left_delta="89"
name="modifier_combo"
top_delta="-4"
width="75" />
@@ -171,7 +149,7 @@
left="10"
font.style="BOLD"
name="library_label"
- top="135"
+ top_delta="25"
width="100">
Library:
</text>
@@ -181,7 +159,7 @@
layout="topleft"
left="10"
name="library_list"
- top="150"
+ top_delta="15"
width="180">
<scroll_list.rows
value="Animation" />
@@ -199,7 +177,7 @@
layout="topleft"
left_pad="10"
name="add_btn"
- top_delta="0"
+ top_delta="-1"
width="70" />
<text
type="string"
@@ -230,7 +208,7 @@
layout="topleft"
left_pad="10"
name="up_btn"
- top_delta="0"
+ top_delta="-1"
width="70" />
<button
follows="top|left"
@@ -256,23 +234,25 @@
layout="topleft"
left="15"
name="options_text"
- top="330"
- width="205" />
+ top="315"
+ width="205">
+ (options)
+ </text>
<combo_box
follows="top|left"
height="20"
layout="topleft"
left_delta="15"
name="animation_list"
- top="345"
- width="100" />
+ top="330"
+ width="100"/>
<combo_box
follows="top|left"
height="20"
layout="topleft"
left_delta="0"
name="sound_list"
- top_delta="0"
+ top="330"
width="100" />
<line_editor
follows="top|left"
@@ -281,7 +261,7 @@
left_delta="0"
max_length="127"
name="chat_editor"
- top_delta="0"
+ top="330"
width="100" />
<radio_group
draw_border="false"
@@ -290,7 +270,7 @@
layout="topleft"
left_pad="8"
name="animation_trigger_type"
- top_delta="0"
+ top="330"
width="80">
<radio_item
height="16"
@@ -298,7 +278,7 @@
layout="topleft"
left="3"
name="start"
- top="-51"
+ top_delta="45"
width="80" />
<radio_item
height="16"
@@ -306,7 +286,7 @@
layout="topleft"
left_delta="0"
name="stop"
- top_pad="10"
+ top_pad="3"
width="80" />
</radio_group>
<check_box
@@ -314,14 +294,14 @@
height="20"
label="until animations are done"
layout="topleft"
- left="16"
+ left="28"
name="wait_anim_check"
- top="340"
+ top="330"
width="100" />
<check_box
follows="top|left"
height="20"
- label="time in seconds"
+ label="time in seconds:"
layout="topleft"
left_delta="0"
name="wait_time_check"
@@ -331,10 +311,10 @@
follows="top|left"
height="20"
layout="topleft"
- left_pad="5"
+ left_pad="10"
max_length="15"
name="wait_time_editor"
- top_delta="0"
+ top_delta="1"
width="50" />
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index 0569b4d515..bf5bd87ad6 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -47,8 +47,8 @@
width="263">
<layout_panel
follows="top|left|right"
- user_resize="false"
- auto_resize="false"
+ user_resize="false"
+ auto_resize="false"
layout="topleft"
height="20"
name="my_panel">
@@ -123,7 +123,7 @@
layout="topleft"
left="2"
top_pad="0"
- height="132"
+ height="132"
name="callers_panel"
user_resize="false"
width="280">
diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
index edc25348e4..9bf9cc6c77 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- legacy_header_height="18"
+ legacy_header_height="27"
can_resize="true"
- height="420"
+ height="500"
name="voice_effects"
help_topic="voice_effects"
- title="PREVIEW VOICE MORPHING"
+ title="VOICE MORPHING"
background_visible="true"
follows="all"
label="Places"
layout="topleft"
- min_height="350"
- min_width="330"
- width="455">
+ min_height="360"
+ min_width="200"
+ width="300">
<string name="no_voice_effect">
(No Voice Morph)
</string>
@@ -25,8 +25,22 @@
<string name="new_voice_effect">
(New!)
</string>
+ <text
+ height="16"
+ word_wrap="true"
+ use_ellipses="true"
+ type="string"
+ follows="left|top|right"
+ layout="topleft"
+ font="SansSerifBold"
+ color="White"
+ left="10"
+ name="preview_text"
+ right="-10"
+ top="27">To Preview
+ </text>
<text
- height="68"
+ height="23"
word_wrap="true"
use_ellipses="true"
type="string"
@@ -34,22 +48,20 @@
layout="topleft"
left="10"
name="status_text"
- right="-10"
- top="25">
-To preview any of the Voice Morphing effects, click the Record button to record a short snippet of voice, then click any Voice Morph in the list to hear how it will sound.
-
-To reconnect to Nearby Voice simply close this window.
+ right="-5"
+ top_pad="0">
+Record a sample, then click on a voice to hear how it will sound.
</text>
<button
follows="left|top"
height="23"
- label="Record Sample"
+ label="Record"
layout="topleft"
left="10"
name="record_btn"
tool_tip="Record a sample of your voice."
top_pad="5"
- width="150">
+ width="100">
<button.commit_callback
function="VoiceEffect.Record" />
</button>
@@ -61,22 +73,22 @@ To reconnect to Nearby Voice simply close this window.
left_delta="0"
name="record_stop_btn"
top_delta="0"
- width="150">
+ width="100">
<button.commit_callback
function="VoiceEffect.Stop" />
</button>
<text
- height="18"
+ height="23"
halign="right"
use_ellipses="true"
type="string"
follows="left|top|right"
layout="topleft"
left_pad="10"
+ top_delta="10"
name="voice_morphing_link"
- right="-10"
- top_delta="5">
- [[URL] Get Voice Morphing]
+ right="-10">
+ [[URL] Subscribe Now]
</text>
<scroll_list
bottom="-10"
@@ -88,14 +100,16 @@ To reconnect to Nearby Voice simply close this window.
name="voice_effect_list"
right="-10"
tool_tip="Record a sample of your voice, then click an effect to preview."
- top="128">
+ top="95">
<scroll_list.columns
- label="Voice Morph"
- name="name" relative_width="0.41"/>
+ label="Voice Name"
+ name="name"
+ relative_width="0.60" />
<scroll_list.columns
dynamic_width="true"
label="Expires"
name="expires"
- relative_width="0.59" />
+ relative_width="0.30" />
</scroll_list>
+
</floater>
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index f629eef475..8aeec46ba3 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -36,7 +36,6 @@ Owner [OWNER]
top="6"
use_ellipses="true"
word_wrap="true"
- value="Test Object Name That Is actually two lines and Really Long"
width="220" />
<text
follows="all"
@@ -74,7 +73,6 @@ L$30,000
use_ellipses="true"
width="220"
word_wrap="true">
-This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
</text>
<!-- Overlapping buttons for all default actions. Show "Buy" if
for sale, "Sit" if can sit, etc. -->
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
index e084216a69..9c3151fe07 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
@@ -18,6 +18,9 @@
name="wear_add">
<on_click
function="Outfit.WearAdd" />
+ <on_enable
+ function="Outfit.OnEnable"
+ parameter="wear_add" />
<on_visible
function="Outfit.OnVisible"
parameter="wear_add" />
@@ -28,6 +31,9 @@
name="take_off">
<on_click
function="Outfit.TakeOff" />
+ <on_enable
+ function="Outfit.OnEnable"
+ parameter="take_off" />
<on_visible
function="Outfit.OnVisible"
parameter="take_off" />
@@ -44,7 +50,7 @@
</menu_item_call>
<menu_item_separator />
<menu_item_call
- label="Rename"
+ label="Rename Outfit"
layout="topleft"
name="rename">
<on_click
diff --git a/indra/newview/skins/default/xui/en/menu_topinfobar.xml b/indra/newview/skins/default/xui/en/menu_topinfobar.xml
new file mode 100644
index 0000000000..cbe249ed4d
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_topinfobar.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ height="201"
+ layout="topleft"
+ left="100"
+ mouse_opaque="false"
+ name="menu_topinfobar"
+ top="624"
+ visible="false"
+ width="128">
+ <menu_item_check
+ label="Show Coordinates"
+ name="Show Coordinates">
+ <on_click
+ function="ToggleControl"
+ parameter="NavBarShowCoordinates" />
+ <on_check
+ function="CheckControl"
+ parameter="NavBarShowCoordinates" />
+ </menu_item_check>
+ <menu_item_check
+ label="Show Parcel Properties"
+ name="Show Parcel Properties">
+ <on_click
+ function="ToggleControl"
+ parameter="NavBarShowParcelProperties" />
+ <on_check
+ function="CheckControl"
+ parameter="NavBarShowParcelProperties" />
+ </menu_item_check>
+ <menu_item_separator
+ name="Separator" />
+ <!-- Label of 'Landmark' item is changing in runtime,
+ see AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->
+ <menu_item_call
+ label="Landmark"
+ name="Landmark">
+ <on_click
+ function="TopInfoBar.Action"
+ parameter="landmark" />
+ </menu_item_call>
+ <menu_item_separator
+ name="Separator" />
+ <menu_item_call
+ label="Copy"
+ name="Copy">
+ <on_click
+ function="TopInfoBar.Action"
+ parameter="copy" />
+ </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 20a2a7d954..88732fee7d 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2098,7 +2098,7 @@ Would you be my friend?
type="alertmodal">
New outfit name:
<form name="form">
- <input name="new_name" type="text">
+ <input name="new_name" type="text" width="300">
[NAME]
</input>
<button
@@ -6209,7 +6209,7 @@ With the following Residents:
icon="notifytip.tga"
name="ItemsShared"
type="notifytip">
-Items are successfully shared.
+Items successfully shared.
</notification>
<notification
icon="notifytip.tga"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 950c4a5fdb..3106ed34ff 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -225,15 +225,17 @@ left="0"
tool_tip="Female"
top="7"
width="16" />
- <text_editor
- follows="all"
- height="23"
- left="10"
- layout="topleft"
- max_length="300"
- name="description"
- top_pad="3"
- width="290" />
+ <line_editor
+ follows="all"
+ height="23"
+ layout="topleft"
+ left="10"
+ max_length="300"
+ name="description"
+ prevalidate_callback="ascii"
+ text_color="black"
+ top_pad="3"
+ width="290" />
</panel>
<panel
follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index e79ae34627..2af1a84400 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -243,7 +243,7 @@ Hover your mouse over the options for more help.
top_pad="4"
width="190">
<combo_item name="select_mature" value="Select">
- - Select Mature -
+ - Select maturity rating -
</combo_item>
<combo_box.item
label="Moderate Content"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 03a0c464d2..1ed73e6c15 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -106,7 +106,7 @@
<panel
bevel_style="none"
follows="top|right"
- height="38"
+ height="37"
layout="topleft"
left_pad="5"
name="outfit_name_and_status"
@@ -122,18 +122,26 @@
top="2"
value="Now editing..."
use_ellipses="true"
- width="270" />
+ width="245" />
<text
follows="bottom|left|right"
font="SansSerifLargeBold"
- height="26"
+ height="18"
layout="topleft"
name="curr_outfit_name"
text_color="LtGray"
top_pad="2"
value="[Current Outfit]"
use_ellipses="true"
- width="270" />
+ width="245" />
+ <loading_indicator
+ follows="right|top"
+ height="24"
+ layout="topleft"
+ right="-2"
+ name="edit_outfit_loading_indicator"
+ top="6"
+ width="24" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_voice_effect.xml b/indra/newview/skins/default/xui/en/panel_voice_effect.xml
index c575ca468c..93e79b7328 100644
--- a/indra/newview/skins/default/xui/en/panel_voice_effect.xml
+++ b/indra/newview/skins/default/xui/en/panel_voice_effect.xml
@@ -6,7 +6,7 @@
name="panel_voice_effect"
width="200">
<string name="no_voice_effect">
- No Voice Morph
+ Voice Morphing Off
</string>
<string name="preview_voice_effects">
Preview Voice Morphing ▶
@@ -19,11 +19,11 @@
follows="left|top|right"
height="23"
name="voice_effect"
- tool_tip="Select a Voice Morphing effect to change your voice."
+ tool_tip="Select a Voice Morph to change your voice"
top_pad="0"
width="200">
<combo_box.item
- label="No Voice Morph"
+ label="Voice Morphing Off"
name="no_voice_effect"
top_pad="0"
value="0" />
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index e2bd6f375e..b3bc618eec 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -159,51 +159,49 @@
name="LabelCreatorName"
top_delta="6"
width="140">
- Nicole Linden
- </text>
- <button
- follows="top|right"
- height="16"
- image_selected="Inspector_I"
- image_unselected="Inspector_I"
- layout="topleft"
- right="-5"
- name="BtnCreator"
- top_delta="-6"
- width="16" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="23"
- layout="topleft"
- left="5"
- name="LabelOwnerTitle"
- top_pad="10"
- width="78">
- Owner:
- </text>
- <avatar_icon
- follows="top|left"
- height="20"
- default_icon_name="Generic_Person"
- layout="topleft"
- left_pad="0"
- top_delta="-6"
- mouse_opaque="true"
- width="20" />
- <text
- type="string"
- follows="left|right|top"
- font="SansSerifSmall"
- height="15"
- layout="topleft"
- left_pad="5"
- name="LabelOwnerName"
- top_delta="6"
- width="140">
- Thrax Linden
- </text>
+ </text>
+ <button
+ follows="top|right"
+ height="16"
+ image_selected="Inspector_I"
+ image_unselected="Inspector_I"
+ layout="topleft"
+ right="-5"
+ name="BtnCreator"
+ top_delta="-6"
+ width="16" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="23"
+ layout="topleft"
+ left="5"
+ name="LabelOwnerTitle"
+ top_pad="10"
+ width="78">
+ Owner:
+ </text>
+ <avatar_icon
+ follows="top|left"
+ height="20"
+ default_icon_name="Generic_Person"
+ layout="topleft"
+ left_pad="0"
+ top_delta="-6"
+ mouse_opaque="true"
+ width="20" />
+ <text
+ type="string"
+ follows="left|right|top"
+ font="SansSerifSmall"
+ height="15"
+ layout="topleft"
+ left_pad="5"
+ name="LabelOwnerName"
+ top_delta="6"
+ width="140">
+ </text>
<button
follows="top|right"
height="16"
@@ -236,7 +234,6 @@ top_pad="10"
name="LabelAcquiredDate"
top_delta="0"
width="222">
- Wed May 24 12:50:46 2006
</text>
<panel
border="false"
diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml
index febbfd2739..f524bf9874 100644
--- a/indra/newview/skins/default/xui/it/floater_camera.xml
+++ b/indra/newview/skins/default/xui/it/floater_camera.xml
@@ -9,35 +9,28 @@
<floater.string name="move_tooltip">
Muovi la telecamera su e giù e a sinistra e destra
</floater.string>
- <floater.string name="orbit_mode_title">
- Ruota visuale
+ <floater.string name="camera_modes_title">
+ Modalità della fotocamera
</floater.string>
<floater.string name="pan_mode_title">
- Panoramica
+ Ruota visuale - Ingrandisci - Panoramica
</floater.string>
- <floater.string name="avatar_view_mode_title">
- Valori predefiniti
+ <floater.string name="presets_mode_title">
+ Visuali predefinite
</floater.string>
<floater.string name="free_mode_title">
Vedi oggetto
</floater.string>
<panel name="controls">
- <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale in su e in giù, a sinistra e a destra"/>
<panel name="zoom" tool_tip="Avvicina la telecamera nell&apos;inquadratura">
+ <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al punto focale"/>
<slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/>
- </panel>
- <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al punto focale"/>
- <panel name="camera_presets">
- <button name="rear_view" tool_tip="Visuale posteriore"/>
- <button name="group_view" tool_tip="Visuale di gruppo"/>
- <button name="front_view" tool_tip="Visuale frontale"/>
- <button name="mouselook_view" tool_tip="Visuale soggettiva"/>
+ <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale in su e in giù, a sinistra e a destra"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="orbit_btn" tool_tip="Ruota la visuale"/>
- <button label="" name="pan_btn" tool_tip="Visuale panoramica"/>
- <button label="" name="avatarview_btn" tool_tip="Valori predefiniti"/>
- <button label="" name="freecamera_btn" tool_tip="Vedi oggetto"/>
+ <button label="" name="presets_btn" tool_tip="Visuali predefinite"/>
+ <button label="" name="pan_btn" tool_tip="Ruota visuale - Ingrandisci - Panoramica"/>
+ <button label="" name="avatarview_btn" tool_tip="Modalità della fotocamera"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_incoming_call.xml b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
index 81a6ea7a60..4d9c1b98dd 100644
--- a/indra/newview/skins/default/xui/it/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
@@ -16,7 +16,13 @@
ha aderito ad una chiamata in chat vocale in conferenza.
</floater.string>
<floater.string name="VoiceInviteGroup">
- ha accettato una chiamata in Chat vocale con il gruppo [GROUP].
+ ha appena aderito al canale voce &apos;[GROUP]&apos;.
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionGroup">
+ Vuoi abbandonare [CURRENT_CHAT] e aderire alla chiamata con &apos;[GROUP]&apos;?
+ </floater.string>
+ <floater.string name="VoiceInviteQuestionDefault">
+ Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat?
</floater.string>
<text name="question">
Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat?
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
index 2f5c86985c..d2ba980f62 100644
--- a/indra/newview/skins/default/xui/it/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml
@@ -5,12 +5,19 @@
</floater.string>
<button label="Aggiorna la fotografia" name="new_snapshot_btn"/>
<line_editor label="Descrizione" name="description"/>
- <button label="Condividi foto" name="share"/>
- <button label="Condividi su Web" name="share_to_web"/>
- <button label="Salva nell&apos;inventario" name="save_to_inventory"/>
- <button label="Salva foto" name="save"/>
- <button label="Invia foto via e-mail" name="share_to_email"/>
- <button label="Salva sul mio computer" name="save_to_computer"/>
- <button label="Imposta come foto del profilo" name="set_profile_pic"/>
- <button label="Indietro" name="cancel"/>
+ <panel name="panel_snapshot_main">
+ <button label="Condividi foto" name="share"/>
+ <button label="Salva foto" name="save"/>
+ <button label="Imposta come foto del profilo" name="set_profile_pic"/>
+ </panel>
+ <panel name="panel_snapshot_share">
+ <button label="Condividi su Web" name="share_to_web"/>
+ <button label="Invia foto via e-mail" name="share_to_email"/>
+ <button label="Indietro" name="cancel_share"/>
+ </panel>
+ <panel name="panel_snapshot_save">
+ <button label="Salva nell&apos;inventario" name="save_to_inventory"/>
+ <button label="Salva sul mio computer" name="save_to_computer"/>
+ <button label="Indietro" name="cancel_save"/>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
index 07368da0dd..d2fd462062 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
@@ -19,8 +19,10 @@
<layout_panel name="my_panel">
<text name="user_text" value="Il mio avatar:"/>
</layout_panel>
- <layout_panel name="leave_call_btn_panel">
- <button label="Abbandona chiamata" name="leave_call_btn"/>
- </layout_panel>
+ <layout_stack name="voice_effect_and_leave_call_stack">
+ <layout_panel name="leave_call_btn_panel">
+ <button label="Abbandona chiamata" name="leave_call_btn"/>
+ </layout_panel>
+ </layout_stack>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
new file mode 100644
index 0000000000..202be752c9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Luoghi" name="voice_effects" title="ANTEPRIMA MANIPOLAZIONE VOCE">
+ <string name="no_voice_effect">
+ (Nessuna manipolazione voce)
+ </string>
+ <string name="active_voice_effect">
+ (Attivato)
+ </string>
+ <string name="unsubscribed_voice_effect">
+ (Iscrizione annullata)
+ </string>
+ <string name="new_voice_effect">
+ (Nuovo!)
+ </string>
+ <text name="status_text">
+ Per ascoltare un&apos;anteprima degli effetti di manipolazione della voce, clicca sul pulsante Registra per registrare un campione di voce, quindi fai clic su uno degli effetti per ascoltare il risultato.
+
+Per ricollegarti alla voce nei dintorni, chiudi la finestra.
+ </text>
+ <button label="Registra campione" name="record_btn" tool_tip="Registra un campione della tua voce."/>
+ <button label="Ferma" name="record_stop_btn"/>
+ <text name="voice_morphing_link">
+ [[URL] Ottieni manipolazione voce]
+ </text>
+ <scroll_list name="voice_effect_list" tool_tip="Registra un campione della tua voce, quindi fai clic su uno degli effetti per un&apos;anteprima del risultato.">
+ <scroll_list.columns label="Manipolazione voce" name="name"/>
+ <scroll_list.columns label="Scade il" name="expires"/>
+ </scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/inspect_object.xml b/indra/newview/skins/default/xui/it/inspect_object.xml
index fd58c18e0b..d8ab10cfda 100644
--- a/indra/newview/skins/default/xui/it/inspect_object.xml
+++ b/indra/newview/skins/default/xui/it/inspect_object.xml
@@ -9,7 +9,7 @@
</string>
<string name="CreatorAndOwner">
Di [CREATOR]
-proprietario [OWNER]
+Proprietario [OWNER]
</string>
<string name="Price">
L$ [AMOUNT]
@@ -23,6 +23,13 @@ proprietario [OWNER]
<string name="Sit">
Siediti
</string>
+ <text name="object_name" value="Nome oggetto di prova che si trova su due righe ed è molto lungo"/>
+ <text name="price_text">
+ L$ 30.000
+ </text>
+ <text name="object_description">
+ Questa è una descrizione di un oggetto che è molto lunga ed è di almeno 80 caratteri, ma potrebbe essere di 120 caratteri a questo punto. Chi lo sa veramente?
+ </text>
<button label="Acquista" name="buy_btn"/>
<button label="Paga" name="pay_btn"/>
<button label="Prendi copia" name="take_free_copy_btn"/>
diff --git a/indra/newview/skins/default/xui/it/menu_cof_attachment.xml b/indra/newview/skins/default/xui/it/menu_cof_attachment.xml
new file mode 100644
index 0000000000..699490c8f1
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+ <menu_item_call label="Stacca" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_cof_body_part.xml b/indra/newview/skins/default/xui/it/menu_cof_body_part.xml
new file mode 100644
index 0000000000..1e3658ef45
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+ <menu_item_call label="Sostituisci" name="replace"/>
+ <menu_item_call label="Modifica" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_cof_clothing.xml b/indra/newview/skins/default/xui/it/menu_cof_clothing.xml
new file mode 100644
index 0000000000..5b4f8c0642
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+ <menu_item_call label="Togli" name="take_off"/>
+ <menu_item_call label="Un livello in alto" name="move_up"/>
+ <menu_item_call label="Un livello in basso" name="move_down"/>
+ <menu_item_call label="Modifica" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_cof_gear.xml b/indra/newview/skins/default/xui/it/menu_cof_gear.xml
new file mode 100644
index 0000000000..10524ba92d
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+ <menu label="Nuovi abiti" name="COF.Gear.New_Clothes"/>
+ <menu label="Nuove parti del corpo" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
index ee50a18ba5..2c2c6c4bc5 100644
--- a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
<menu name="hide_navbar_menu">
<menu_item_check label="Mostra la barra di navigazione" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="Mostra la barra dei Preferiti" name="ShowNavbarFavoritesPanel"/>
+ <menu_item_check label="Mostra mini barra del luogo" name="ShowMiniLocationPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
index b127f8b816..fb8361ad05 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory.xml
@@ -81,6 +81,7 @@
<menu label="Attacca all&apos;HUD" name="Attach To HUD"/>
<menu_item_call label="Modifica" name="Wearable Edit"/>
<menu_item_call label="Indossa" name="Wearable Wear"/>
+ <menu_item_call label="Aggiungi" name="Wearable Add"/>
<menu_item_call label="Togli" name="Take Off"/>
<menu_item_call label="--nessuna opzione--" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
new file mode 100644
index 0000000000..cf39779b67
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+ <menu_item_call label="Indossa - Sostituisci vestiario attuale" name="wear"/>
+ <menu_item_call label="Togli - Rimuovi dal vestiario attuale" name="take_off"/>
+ <menu label="Nuovi abiti" name="New Clothes">
+ <menu_item_call label="Nuova camicia" name="New Shirt"/>
+ <menu_item_call label="Nuovi pantaloni" name="New Pants"/>
+ <menu_item_call label="Nuove scarpe" name="New Shoes"/>
+ <menu_item_call label="Nuove calze" name="New Socks"/>
+ <menu_item_call label="Nuova giacca" name="New Jacket"/>
+ <menu_item_call label="Nuova gonna" name="New Skirt"/>
+ <menu_item_call label="Nuovi guanti" name="New Gloves"/>
+ <menu_item_call label="Nuova maglietta intima" name="New Undershirt"/>
+ <menu_item_call label="Nuovi slip" name="New Underpants"/>
+ <menu_item_call label="Nuovo Alpha (trasparenza)" name="New Alpha"/>
+ <menu_item_call label="Nuovo tatuaggio" name="New Tattoo"/>
+ </menu>
+ <menu label="Nuove parti del corpo" name="New Body Parts">
+ <menu_item_call label="Nuova figura corporea" name="New Shape"/>
+ <menu_item_call label="Nuova pelle" name="New Skin"/>
+ <menu_item_call label="Nuovi capelli" name="New Hair"/>
+ <menu_item_call label="Nuovi occhi" name="New Eyes"/>
+ </menu>
+ <menu_item_call label="Cambia nome del vestiario" name="rename"/>
+ <menu_item_call label="Elimina vestito" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_tab.xml b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
new file mode 100644
index 0000000000..4e0caf832c
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+ <menu_item_call label="Indossa - Sostituisci vestiario attuale" name="wear_replace"/>
+ <menu_item_call label="Indossa - Aggiungi al vestiario attuale" name="wear_add"/>
+ <menu_item_call label="Togli - Rimuovi dal vestiario attuale" name="take_off"/>
+ <menu_item_call label="Modifica vestiario" name="edit"/>
+ <menu_item_call label="Modifica nome" name="rename"/>
+ <menu_item_call label="Elimina vestito" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_save_outfit.xml b/indra/newview/skins/default/xui/it/menu_save_outfit.xml
index ac7b40ca48..4882a8ac64 100644
--- a/indra/newview/skins/default/xui/it/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/it/menu_save_outfit.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="save_outfit_menu">
<menu_item_call label="Salva" name="save_outfit"/>
- <menu_item_call label="Salva come nuovo" name="save_as_new_outfit"/>
+ <menu_item_call label="Salva con nome" name="save_as_new_outfit"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 999f89a80d..693f4f158e 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -11,6 +11,7 @@
<menu_item_check label="Il mio inventario" name="Inventory"/>
<menu_item_check label="Il mio inventario" name="ShowSidetrayInventory"/>
<menu_item_check label="Le mie gesture" name="Gestures"/>
+ <menu_item_check label="La mia voce" name="ShowVoice"/>
<menu label="Il mio stato" name="Status">
<menu_item_call label="Assente" name="Set Away"/>
<menu_item_call label="Non disponibile" name="Set Busy"/>
@@ -70,6 +71,12 @@
<menu_item_call label="Collegamento" name="Link"/>
<menu_item_call label="Scollega" name="Unlink"/>
<menu_item_check label="Modifica le parti collegate" name="Edit Linked Parts"/>
+ <menu label="Seleziona parti collegate" name="Select Linked Parts">
+ <menu_item_call label="Seleziona parte successiva" name="Select Next Part"/>
+ <menu_item_call label="Seleziona parte precedente" name="Select Previous Part"/>
+ <menu_item_call label="Includi parte successiva" name="Include Next Part"/>
+ <menu_item_call label="Includi parte precedente" name="Include Previous Part"/>
+ </menu>
<menu_item_call label="Ingrandisci selezione" name="Focus on Selection"/>
<menu_item_call label="Zoom sulla selezione" name="Zoom to Selection"/>
<menu label="Oggetto" name="Object">
@@ -100,11 +107,11 @@
<menu_item_call label="Usa la selezione per la griglia" name="Use Selection for Grid"/>
<menu_item_call label="Opzioni della griglia" name="Grid Options"/>
</menu>
- <menu label="Seleziona parti collegate" name="Select Linked Parts">
- <menu_item_call label="Seleziona parte successiva" name="Select Next Part"/>
- <menu_item_call label="Seleziona parte precedente" name="Select Previous Part"/>
- <menu_item_call label="Includi parte successiva" name="Include Next Part"/>
- <menu_item_call label="Includi parte precedente" name="Include Previous Part"/>
+ <menu label="Carica sul server" name="Upload">
+ <menu_item_call label="Immagine ([COST] L$)..." name="Upload Image"/>
+ <menu_item_call label="Suono ([COST] L$)..." name="Upload Sound"/>
+ <menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/>
+ <menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/>
</menu>
</menu>
<menu label="Aiuto" name="Help">
diff --git a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..79ef188993
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+ <menu_item_call label="Indossa" name="wear"/>
+ <menu_item_call label="Aggiungi" name="wear_add"/>
+ <menu_item_call label="Togli / Stacca" name="take_off_or_detach"/>
+ <menu_item_call label="Stacca" name="detach"/>
+ <context_menu label="Attacca a ▶" name="wearable_attach_to"/>
+ <context_menu label="Attacca a HUD ▶" name="wearable_attach_to_hud"/>
+ <menu_item_call label="Togli" name="take_off"/>
+ <menu_item_call label="Modifica" name="edit"/>
+ <menu_item_call label="Profilo dell&apos;oggetto" name="object_profile"/>
+ <menu_item_call label="Mostra originale" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 058353da38..9f1472fc6f 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -472,8 +472,9 @@ La qualità grafica può essere aumentata in Preferenze &gt; Grafica.
La regione [REGION] non consente di terraformare.
</notification>
<notification name="CannotCopyWarning">
- Non hai il permesso di copiare questo elemento e lo perderai dal tuo inventario se lo regali.
-Confermi veramente di offrire questo elemento?
+ Non hai l&apos;autorizzazione a copiare i seguenti oggetti:
+[ITEMS]
+e se li dai via, verranno eliminati dal tuo inventario. Sicuro di volere offrire questi oggetti?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
<notification name="CannotGiveItem">
@@ -942,6 +943,26 @@ Offri l&apos;amicizia a [NAME]?
<button name="Cancel" text="Annulla"/>
</form>
</notification>
+ <notification label="Salva capo da indossare" name="SaveWearableAs">
+ Salva oggetto nel mio inventario come:
+ <form name="form">
+ <input name="message">
+ [DESC] (nuovo)
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Annulla"/>
+ </form>
+ </notification>
+ <notification label="Cambia nome del vestiario" name="RenameOutfit">
+ Nuovo nome per il vestiario:
+ <form name="form">
+ <input name="new_name">
+ [NAME]
+ </input>
+ <button name="Offer" text="OK"/>
+ <button name="Cancel" text="Annulla"/>
+ </form>
+ </notification>
<notification name="RemoveFromFriends">
Vuoi rimuovere remove [FIRST_NAME] [LAST_NAME] dalla lista dei tuoi amici?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -1560,9 +1581,9 @@ Vuoi andare alla Knowledge Base per ulteriori informazioni sulle categorie di ac
Non sei ammesso in questa regione a causa della tua categoria d&apos;accesso.
</notification>
<notification name="RegionEntryAccessBlocked_Change">
- Non ti è consentito entrare in quella regione a causa della tua categoria di accesso impostata nelle preferenze.
+ Non ti è consentito entrare in quella regione a causa della categoria di accesso impostata nelle preferenze.
-Clicca su Cambia preferenze per modificare la categoria di accesso e potere entrare subito. Ciò ti consentirà di effettuare ricerche di contenuti di categoria [REGIONMATURITY]. Potrai modificare queste impostazioni in un secondo momento da Io &gt; Preferenze &gt; Generali.
+Per entrare nella regione, dovrai modificare la tua categoria di accesso. Ciò ti consentirà inoltre di effettuare ricerche di contenuti di categoria [REGIONMATURITY]. Per annullare le modifiche in un secondo momento, vai a Io &gt; Preferenze &gt; Generali.
<form name="form">
<button name="OK" text="Cambia preferenza"/>
<button default="true" name="Cancel" text="Chiudi"/>
@@ -2577,6 +2598,21 @@ Clicca su Accetta per unirti alla chat oppure su Declina per declinare l&apos;in
<notification name="VoiceLoginRetry">
Stiamo creando una canale voice per te. Questo può richiedere fino a un minuto.
</notification>
+ <notification name="VoiceEffectsExpired">
+ Almeno una delle manipolazioni vocali alle quali sei iscritto è scaduta.
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+ </notification>
+ <notification name="VoiceEffectsExpiredInUse">
+ Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali.
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+ </notification>
+ <notification name="VoiceEffectsWillExpire">
+ Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni.
+[[URL] Fai clic qui] per rinnovare l&apos;abbonamento.
+ </notification>
+ <notification name="VoiceEffectsNew">
+ Sono disponibili nuove manipolazioni vocali.
+ </notification>
<notification name="Cannot enter parcel: not a group member">
Soltanto i membri di un determinato gruppo possono visitare questa zona.
</notification>
@@ -2643,18 +2679,36 @@ Per sicurezza, verranno bloccati per alcuni secondi.
Il pulsante verrà visualizzato quando lo spazio sarà sufficiente.
</notification>
<notification name="ShareNotification">
- Trascina articoli dell&apos;inventario su una persona nel selettore residenti
+ Scegli i residenti con i quali condividere.
+ </notification>
+ <notification name="ShareItemsConfirmation">
+ Sei sicuro di volere condividere gli oggetti
+
+[ITEMS]
+
+Con i seguenti residenti?
+
+[RESIDENTS]
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Ok"/>
+ </notification>
+ <notification name="ItemsShared">
+ Gli oggetti sono stati condivisi.
</notification>
<notification name="DeedToGroupFail">
Cessione al gruppo non riuscita.
</notification>
<notification name="AvatarRezNotification">
- ( presente da [EXISTENCE] secondi )
-Nuvola avatar &apos;[NAME]&apos; risolta in [TIME] secondi.
+ ( in esistenza da [EXISTENCE] secondi )
+Nuvola avatar &apos;[NAME]&apos; dileguata dopo [TIME] secondi.
</notification>
- <notification name="AvatarRezSelfNotification">
- ( presente da [EXISTENCE] secondi )
-Baking dei vestiti eseguito in [TIME] secondi.
+ <notification name="AvatarRezSelfBakedDoneNotification">
+ ( in esistenza da [EXISTENCE] secondi )
+Baking dei vestiti terminato dopo [TIME] secondi.
+ </notification>
+ <notification name="AvatarRezSelfBakedUpdateNotification">
+ ( in esistenza da [EXISTENCE] secondi )
+Hai inviato un aggiornamento al tuo aspetto dopo [TIME] secondi.
+[STATUS]
</notification>
<notification name="AvatarRezCloudNotification">
( presente da [EXISTENCE] secondi )
@@ -2676,10 +2730,32 @@ Avatar &apos;[NAME]&apos; è entrato nella modalità aspetto.
( presente da [EXISTENCE] secondi )
Avatar &apos;[NAME]&apos; ha lasciato la modalità aspetto.
</notification>
+ <notification name="NoConnect">
+ Ci sono problemi di connessione tramite [PROTOCOL] [HOSTID].
+Ti consigliamo di controllare le tue impostazioni di rete e della firewall.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
+ <notification name="NoVoiceConnect">
+ A causa di problemi di connessione al server vocale
+
+[HOSTID]
+
+le comunicazioni tramite voce non saranno disponibili.
+Ti consigliamo di controllare le tue impostazioni di rete e della firewall.
+ <form name="form">
+ <button name="OK" text="OK"/>
+ </form>
+ </notification>
<notification name="AvatarRezLeftNotification">
( presente da [EXISTENCE] secondi )
Avatar &apos;[NAME]&apos; è partito completamente caricato.
</notification>
+ <notification name="AvatarRezSelfBakeNotification">
+ ( in esistenza da [EXISTENCE] secondi )
+Hai caricato una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
+ </notification>
<notification name="ConfirmLeaveCall">
Sei sicuro di volere uscire dalla chiamata?
<usetemplate ignoretext="Conferma prima di uscire dalla chiamata" name="okcancelignore" notext="No" yestext="Sì"/>
@@ -2690,7 +2766,7 @@ In questo modo verrà disattivato l&apos;audio anche di tutti i residenti che si
uniscono alla chiamata in un secondo momento, anche dopo che tu ti fossi scollegato.
Disattiva audio di tutti?
- <usetemplate ignoretext="Conferma prima di disattivare l&apos;audio di tutti i partecipanti alla chiamata di gruppo" name="okcancelignore" notext="Ok" yestext="Annulla"/>
+ <usetemplate ignoretext="Conferma prima di disattivare l&apos;audio di tutti i partecipanti alla chiamata di gruppo" name="okcancelignore" notext="Annulla" yestext="Ok"/>
</notification>
<global name="UnsupportedCPU">
- La velocità della tua CPU non soddisfa i requisiti minimi.
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shape.xml b/indra/newview/skins/default/xui/it/panel_edit_shape.xml
index ab77548f26..fd6a7af69c 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_shape.xml
@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
- <text name="avatar_height">
- Statura: [HEIGHT] metri
- </text>
+ <string name="meters">
+ Metri
+ </string>
+ <string name="feet">
+ Piedi
+ </string>
+ <string name="height">
+ Statura:
+ </string>
+ <text name="avatar_height"/>
<panel label="Camicia" name="accordion_panel">
<accordion name="wearable_accordion">
<accordion_tab name="shape_body_tab" title="Corpo"/>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
index 3d8aa858db..5eaae828d8 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
@@ -72,8 +72,8 @@
<string name="jacket_desc_text">
Giacca:
</string>
- <string name="skirt_skirt_desc_text">
- Giacca:
+ <string name="skirt_desc_text">
+ Gonna:
</string>
<string name="gloves_desc_text">
Guanti:
@@ -100,11 +100,6 @@
<icon name="male_icon" tool_tip="Maschio"/>
<icon name="female_icon" tool_tip="Femmina"/>
</panel>
- <panel label="gear_buttom_panel" name="gear_buttom_panel">
- <button name="friends_viewsort_btn" tool_tip="Opzioni"/>
- <button name="add_btn" tool_tip="TODO"/>
- <button name="del_btn" tool_tip="TODO"/>
- </panel>
<panel name="button_panel">
<button label="Salva con nome" name="save_as_button"/>
<button label="Ripristina" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
index bd2202b60e..57168096d5 100644
--- a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
<string name="Filter.All" value="Tutto"/>
<string name="Filter.Clothes/Body" value="Abiti/corpo"/>
<string name="Filter.Objects" value="Oggetti"/>
- <button label="modifica" name="edit_wearable_btn"/>
+ <string name="Filter.Custom" value="Filtro personalizzato"/>
<text name="title" value="Modifica vestiario"/>
<panel label="bottom_panel" name="header_panel">
<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
</panel>
<layout_stack name="im_panels">
<layout_panel label="Pannello di controllo IM" name="outfit_wearables_panel">
- <panel label="bottom_panel" name="edit_panel"/>
- </layout_panel>
- <layout_panel name="add_wearables_panel">
- <text name="add_to_outfit_label" value="Aggiungi al vestiario:"/>
<layout_stack name="filter_panels">
- <layout_panel label="Pannello di controllo IM" name="filter_panel">
- <filter_editor label="Filtro" name="look_item_filter"/>
+ <layout_panel name="add_button_and_combobox">
+ <button label="Aggiungi altri..." name="show_add_wearables_btn"/>
+ </layout_panel>
+ <layout_panel name="filter_panel">
+ <filter_editor label="Filtra capi da indossare dell&apos;inventario" name="look_item_filter"/>
</layout_panel>
</layout_stack>
- <panel label="add_wearables_button_bar" name="add_wearables_button_bar">
- <button label="C" name="folder_view_btn"/>
- <button label="E" name="list_view_btn"/>
- </panel>
</layout_panel>
+ <layout_panel name="add_wearables_panel"/>
</layout_stack>
<panel name="save_revert_button_bar">
<button label="Salva" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
index 932788eaa3..8f8f7a25f4 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
<panel name="bottom_panel">
<button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
<dnd_button name="trash_btn" tool_tip="Rimuovi l&apos;articolo selezionato"/>
- <button label="Salva vestiario" name="make_outfit_btn" tool_tip="Salva questo aspetto fisico come un vestito"/>
+ <button label="Salva con nome" name="save_btn"/>
<button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
- <button label="Modifica vestiario" name="edit_current_outfit_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index 3b242b1805..9a052068f7 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -5,12 +5,12 @@
<filter_editor label="Filtra i miei luoghi" name="Filter"/>
<panel name="button_panel">
<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
- <button label="Mappa" name="map_btn"/>
+ <button label="Mappa" name="map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
<button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>
<button label="▼" name="overflow_btn" tool_tip="Mostra opzioni addizionali"/>
<button label="Salva" name="save_btn"/>
<button label="Annulla" name="cancel_btn"/>
<button label="Chiudi" name="close_btn"/>
- <button label="Profilo" name="profile_btn"/>
+ <button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
index 7c3f32ad7b..842daaa331 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
</text>
<check_box label="Costruire/Modificare" name="edit_camera_movement" tool_tip="Utilizza il posizionamento automatico della fotocamera entrando o uscendo dalla modalità modifica"/>
<check_box label="Aspetto fisico" name="appearance_camera_movement" tool_tip="Utilizza il posizionamento automatico della camera in modalità modifica"/>
- <check_box initial_value="1" label="Barra laterale" name="appearance_sidebar_positioning" tool_tip="Utilizza il posizionamento automatico della fotocamera per la barra laterale"/>
+ <check_box initial_value="vero" label="Barra laterale" name="appearance_sidebar_positioning" tool_tip="Utilizza il posizionamento automatico della fotocamera per la barra laterale"/>
<check_box label="Visualizzami in modalità soggettiva" name="first_person_avatar_visible"/>
<check_box label="Le frecce di direzione mi fanno sempre spostare" name="arrow_keys_move_avatar_check"/>
<check_box label="Doppio click e tieni premuto per correre" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/it/panel_status_bar.xml b/indra/newview/skins/default/xui/it/panel_status_bar.xml
index 4c860ff479..6b1a8aa71b 100644
--- a/indra/newview/skins/default/xui/it/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/it/panel_status_bar.xml
@@ -21,8 +21,10 @@
<panel.string name="buycurrencylabel">
L$ [AMT]
</panel.string>
- <button label="" label_selected="" name="buycurrency" tool_tip="Il mio saldo"/>
- <button label="Acquista L$" name="buyL" tool_tip="Clicca per comprare più L$"/>
+ <panel name="balance_bg">
+ <text name="balance" tool_tip="Il mio saldo" value="L$ 20"/>
+ <button label="ACQUISTA L$" name="buyL" tool_tip="Clicca per acquistare più L$"/>
+ </panel>
<text name="TimeText" tool_tip="Orario attuale (Pacifico)">
24:00, ora del Pacifico
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_voice_effect.xml b/indra/newview/skins/default/xui/it/panel_voice_effect.xml
new file mode 100644
index 0000000000..78ce1ff24a
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+ <string name="no_voice_effect">
+ Nessuna manipolazione voce
+ </string>
+ <string name="preview_voice_effects">
+ Anteprima manipolazione voce ▶
+ </string>
+ <string name="get_voice_effects">
+ Ottieni manipolazione voce ▶
+ </string>
+ <combo_box name="voice_effect" tool_tip="Scegli un effetto di manipolazione per modificare il suono della tua voce.">
+ <combo_box.item label="Nessuna manipolazione voce" name="no_voice_effect"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 0d862a0ff7..3944f8e306 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
<panel label="Cose" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
<panel name="button_panel">
- <button label="Profilo" name="info_btn"/>
- <button label="Condividi" name="share_btn"/>
- <button label="Acquisti" name="shop_btn"/>
- <button label="Indossa" name="wear_btn"/>
+ <button label="Profilo" name="info_btn" tool_tip="Mostra profilo dell&apos;oggetto"/>
+ <button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
+ <button label="Acquisti" name="shop_btn" tool_tip="Apri pagina web di Marketplace"/>
+ <button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
<button label="Riproduci" name="play_btn"/>
- <button label="Teleport" name="teleport_btn"/>
+ <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
</panel>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 67cd4c35b2..d601c27d28 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -738,6 +738,12 @@
<string name="land_type_unknown">
(sconosciuto)
</string>
+ <string name="Estate / Full Region">
+ Proprietà immobiliare / Regione completa
+ </string>
+ <string name="Mainland / Full Region">
+ Continente / Regione completa
+ </string>
<string name="all_files">
Tutti i file
</string>
@@ -882,6 +888,9 @@
<string name="NewWearable">
Nuovo [WEARABLE_ITEM]
</string>
+ <string name="CreateNewWearable">
+ Crea [WEARABLE_TYPE]
+ </string>
<string name="next">
Avanti
</string>
@@ -3454,6 +3463,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="session_initialization_timed_out_error">
Sessione di inizializzazione scaduta
</string>
+ <string name="voice_morphing_url">
+ http://secondlife.com/landing/voicemorphing
+ </string>
<string name="paid_you_ldollars">
[NAME] ti ha inviato un pagamento di L$[AMOUNT].
</string>
@@ -3624,16 +3636,16 @@ Segnala abuso
<string name="Male - Wow">
Maschio - Accipicchia
</string>
- <string name="FeMale - Excuse me">
+ <string name="Female - Excuse me">
Femmina - Chiedere scusa
</string>
- <string name="FeMale - Get lost">
+ <string name="Female - Get lost">
Femmina - Levati dai piedi!
</string>
- <string name="FeMale - Blow kiss">
+ <string name="Female - Blow kiss">
Femmina - Butta un bacio
</string>
- <string name="FeMale - Boo">
+ <string name="Female - Boo">
Femmina - Bu
</string>
<string name="Female - Bored">
@@ -3666,4 +3678,32 @@ Segnala abuso
<string name="texture_load_dimensions_error">
Impossibile caricare immagini di dimensioni superiori a [WIDTH]*[HEIGHT]
</string>
+ <string name="words_separator" value=","/>
+ <string name="server_is_down">
+ Nonostante i nostri tentativi, si è verificato un errore imprevisto.
+
+ Consulta la pagina status.secondlifegrid.net per determinare se si sia verificato un problema noto con il servizio.
+ Se il problema continua, ti consigliamo di controllare le tue impostazioni di rete e della firewall.
+ </string>
+ <string name="dateTimeWeekdaysNames">
+ lunedì:martedì:mercoledì:giovedì:venerdì:sabato:domenica
+ </string>
+ <string name="dateTimeWeekdaysShortNames">
+ lun:mar:mer:gio:ven:sab:dom
+ </string>
+ <string name="dateTimeMonthNames">
+ gennaio:febbraio:marzo:aprile:maggio:giugno:luglio:agosto:settembre:ottobre:novembre:dicembre
+ </string>
+ <string name="dateTimeMonthShortNames">
+ gen:feb:mar:apr:mag:giu:lug:ago:sett:ott:nov:dic
+ </string>
+ <string name="dateTimeDayFormat">
+ [MDAY]
+ </string>
+ <string name="dateTimeAM">
+ antemeridiane
+ </string>
+ <string name="dateTimePM">
+ pomeridiane
+ </string>
</strings>