summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt4
-rw-r--r--indra/newview/app_settings/settings.xml30
-rw-r--r--indra/newview/llagent.cpp6
-rw-r--r--indra/newview/llagentui.cpp19
-rw-r--r--indra/newview/llagentui.h9
-rw-r--r--indra/newview/llappviewer.cpp48
-rw-r--r--indra/newview/llavataractions.cpp2
-rw-r--r--indra/newview/llchathistory.cpp105
-rw-r--r--indra/newview/llchathistory.h7
-rw-r--r--indra/newview/llchiclet.cpp59
-rw-r--r--indra/newview/llchiclet.h40
-rw-r--r--indra/newview/llfavoritesbar.cpp6
-rw-r--r--indra/newview/llfloaterbuyland.cpp2
-rw-r--r--indra/newview/llfloaterchat.cpp2
-rw-r--r--indra/newview/llfloaterchatterbox.cpp2
-rw-r--r--indra/newview/llfloaterland.cpp2
-rw-r--r--indra/newview/llfloaterpreference.cpp7
-rw-r--r--indra/newview/llglsandbox.cpp5
-rw-r--r--indra/newview/llgroupmgr.cpp1
-rw-r--r--indra/newview/llimfloater.cpp97
-rw-r--r--indra/newview/llimfloater.h8
-rw-r--r--indra/newview/llimfloatercontainer.cpp96
-rw-r--r--indra/newview/llimfloatercontainer.h61
-rw-r--r--indra/newview/llimpanel.cpp2
-rw-r--r--indra/newview/lllocationinputctrl.cpp212
-rw-r--r--indra/newview/lllocationinputctrl.h32
-rw-r--r--indra/newview/llmediactrl.cpp2
-rw-r--r--indra/newview/llmoveview.cpp3
-rw-r--r--indra/newview/llnavigationbar.cpp39
-rw-r--r--indra/newview/llnavigationbar.h7
-rw-r--r--indra/newview/llnearbychat.cpp4
-rw-r--r--indra/newview/llnotificationscripthandler.cpp59
-rw-r--r--indra/newview/llpanelavatartag.cpp2
-rw-r--r--indra/newview/llpanellandmarks.cpp84
-rw-r--r--indra/newview/llpanellandmarks.h18
-rw-r--r--indra/newview/llpanelobjectinventory.cpp1
-rw-r--r--indra/newview/llpanelpeople.cpp2
-rw-r--r--indra/newview/llpanelprofileview.cpp2
-rw-r--r--indra/newview/llpreviewgesture.cpp2
-rw-r--r--indra/newview/llscreenchannel.cpp4
-rw-r--r--indra/newview/llscriptfloater.cpp335
-rw-r--r--indra/newview/llscriptfloater.h164
-rw-r--r--indra/newview/llsidetray.cpp3
-rw-r--r--indra/newview/llsidetray.h8
-rw-r--r--indra/newview/llstatusbar.h1
-rw-r--r--indra/newview/llteleporthistory.cpp4
-rw-r--r--indra/newview/llteleporthistory.h3
-rw-r--r--indra/newview/lltexturefetch.cpp8
-rw-r--r--indra/newview/lltoolmgr.cpp2
-rw-r--r--indra/newview/llviewerfloaterreg.cpp4
-rw-r--r--indra/newview/llviewermenu.cpp15
-rw-r--r--indra/newview/llviewermessage.cpp12
-rw-r--r--indra/newview/llviewerparcelmgr.cpp42
-rw-r--r--indra/newview/llviewerparcelmgr.h30
-rw-r--r--indra/newview/llviewerwindow.cpp3
-rw-r--r--indra/newview/pipeline.cpp101
-rw-r--r--indra/newview/pipeline.h5
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Notices_Unread.pngbin333 -> 331 bytes
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Unread_IM.pngbin297 -> 416 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml13
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Left.pngbin0 -> 223 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Right.pngbin0 -> 217 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Up.pngbin0 -> 382 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.pngbin0 -> 482 bytes
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml20
-rw-r--r--indra/newview/skins/default/xui/en/floater_animation_preview.xml19
-rw-r--r--indra/newview/skins/default/xui/en/floater_build_options.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_customize.xml17
-rw-r--r--indra/newview/skins/default/xui/en/floater_env_settings.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_god_tools.xml15
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_container.xml36
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_image_preview.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml31
-rw-r--r--indra/newview/skins/default/xui/en/floater_moveview.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_openobject.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_sound.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_script.xml19
-rw-r--r--indra/newview/skins/default/xui/en/floater_sell_land.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_telehub.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_slider.xml15
-rw-r--r--indra/newview/skins/default/xui/en/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_url_entry.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_whitelist_entry.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml1
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml32
-rw-r--r--indra/newview/skins/default/xui/en/menu_navbar.xml17
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml11
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml21
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml52
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_invite.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_chat.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_covenant.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_debug.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_appearance.xml2
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml5
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml36
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/en/widgets/button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_script.xml9
-rw-r--r--indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml13
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml56
-rw-r--r--indra/newview/skins/default/xui/en/widgets/menu_item.xml4
-rw-r--r--indra/newview/skins/default/xui/en/widgets/tab_container.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/talk_button.xml12
121 files changed, 1913 insertions, 547 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e8302ab5eb..611875a1e2 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -239,6 +239,7 @@ set(viewer_SOURCE_FILES
llhudtext.cpp
llhudview.cpp
llimfloater.cpp
+ llimfloatercontainer.cpp
llimhandler.cpp
llimpanel.cpp
llimview.cpp
@@ -364,6 +365,7 @@ set(viewer_SOURCE_FILES
llremoteparcelrequest.cpp
llsavedsettingsglue.cpp
llscreenchannel.cpp
+ llscriptfloater.cpp
llscrollingpanelparam.cpp
llsearchcombobox.cpp
llsearchhistory.cpp
@@ -737,6 +739,7 @@ set(viewer_HEADER_FILES
llhudtext.h
llhudview.h
llimfloater.h
+ llimfloatercontainer.h
llimpanel.h
llimview.h
llinspect.h
@@ -860,6 +863,7 @@ set(viewer_HEADER_FILES
llrootview.h
llsavedsettingsglue.h
llscreenchannel.h
+ llscriptfloater.h
llscrollingpanelparam.h
llsearchcombobox.h
llsearchhistory.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c7279a2e33..075aee46c7 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3585,7 +3585,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;os=[OS]&amp;language=[LANGUAGE]&amp;version_major=[VERSION_MAJOR]&amp;version_minor=[VERSION_MINOR]&amp;version_patch=[VERSION_PATCH]&amp;version_build=[VERSION_BUILD]</string>
+ <string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC]</string>
</map>
<key>HighResSnapshot</key>
<map>
@@ -5371,6 +5371,19 @@
<key>Value</key>
<real>1.0</real>
</map>
+
+ <key>PlainTextChatHistory</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable/Disable plain text chat history style</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+
<key>PluginInstancesLow</key>
<map>
<key>Comment</key>
@@ -7709,10 +7722,10 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>ShowCoordinatesOption</key>
+ <key>NavBarShowCoordinates</key>
<map>
<key>Comment</key>
- <string>Show Coordinates in Location Input Field</string>
+ <string>Show coordinates in navigation bar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -7720,6 +7733,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>NavBarShowParcelProperties</key>
+ <map>
+ <key>Comment</key>
+ <string>Show parcel property icons in navigation bar</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>ShowCrosshairs</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4dd569e2fa..eb5d172ff7 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2795,7 +2795,8 @@ void LLAgent::endAnimationUpdateUI()
LLBottomTray::getInstance()->setVisible(TRUE);
- LLSideTray::getInstance()->setVisible(TRUE);
+ LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
+ LLSideTray::getInstance()->updateSidetrayVisibility();
LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
@@ -2893,7 +2894,8 @@ void LLAgent::endAnimationUpdateUI()
LLBottomTray::getInstance()->setVisible(FALSE);
- LLSideTray::getInstance()->setVisible(FALSE);
+ LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
+ LLSideTray::getInstance()->updateSidetrayVisibility();
LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 568ac4164a..7404fe5bc4 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -130,6 +130,7 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
// create a default name and description for the landmark
std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();
std::string region_name = region->getName();
+ std::string sim_access_string = region->getSimAccessString();
std::string buffer;
if( parcel_name.empty() )
{
@@ -142,7 +143,13 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
case LOCATION_FORMAT_NORMAL:
buffer = llformat("%s", region_name.c_str());
break;
- case LOCATION_FORMAT_WITHOUT_SIM:
+ case LOCATION_FORMAT_NO_COORDS:
+ buffer = llformat("%s%s%s",
+ region_name.c_str(),
+ sim_access_string.empty() ? "" : " - ",
+ sim_access_string.c_str());
+ break;
+ case LOCATION_FORMAT_NO_MATURITY:
case LOCATION_FORMAT_FULL:
buffer = llformat("%s (%d, %d, %d)",
region_name.c_str(),
@@ -161,14 +168,20 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
case LOCATION_FORMAT_NORMAL:
buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str());
break;
- case LOCATION_FORMAT_WITHOUT_SIM:
+ case LOCATION_FORMAT_NO_MATURITY:
buffer = llformat("%s, %s (%d, %d, %d)",
parcel_name.c_str(),
region_name.c_str(),
pos_x, pos_y, pos_z);
break;
+ case LOCATION_FORMAT_NO_COORDS:
+ buffer = llformat("%s, %s%s%s",
+ parcel_name.c_str(),
+ region_name.c_str(),
+ sim_access_string.empty() ? "" : " - ",
+ sim_access_string.c_str());
+ break;
case LOCATION_FORMAT_FULL:
- std::string sim_access_string = region->getSimAccessString();
buffer = llformat("%s, %s (%d, %d, %d)%s%s",
parcel_name.c_str(),
region_name.c_str(),
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
index c7aafb71e7..3478793e38 100644
--- a/indra/newview/llagentui.h
+++ b/indra/newview/llagentui.h
@@ -38,10 +38,11 @@ class LLAgentUI
public:
enum ELocationFormat
{
- LOCATION_FORMAT_NORMAL,
- LOCATION_FORMAT_LANDMARK,
- LOCATION_FORMAT_WITHOUT_SIM,
- LOCATION_FORMAT_FULL,
+ LOCATION_FORMAT_NORMAL, // Parcel
+ LOCATION_FORMAT_LANDMARK, // Parcel, Region
+ LOCATION_FORMAT_NO_MATURITY, // Parcel, Region (x, y, z)
+ LOCATION_FORMAT_NO_COORDS, // Parcel, Region - Maturity
+ LOCATION_FORMAT_FULL, // Parcel, Region (x, y, z) - Maturity
};
static void buildName(std::string& name);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 4f2d3e9645..fa0ea557ba 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1360,19 +1360,25 @@ bool LLAppViewer::cleanup()
llinfos << "Waiting for pending IO to finish: " << pending << llendflush;
ms_sleep(100);
}
- llinfos << "Shutting down." << llendflush;
+ llinfos << "Shutting down Views" << llendflush;
// Destroy the UI
if( gViewerWindow)
gViewerWindow->shutdownViews();
+
+ llinfos << "Cleaning up Inevntory" << llendflush;
// Cleanup Inventory after the UI since it will delete any remaining observers
// (Deleted observers should have already removed themselves)
gInventory.cleanupInventory();
+
+ llinfos << "Cleaning up Selections" << llendflush;
// Clean up selection managers after UI is destroyed, as UI may be observing them.
// Clean up before GL is shut down because we might be holding on to objects with texture references
LLSelectMgr::cleanupGlobals();
+
+ llinfos << "Shutting down OpenGL" << llendflush;
// Shut down OpenGL
if( gViewerWindow)
@@ -1386,11 +1392,18 @@ bool LLAppViewer::cleanup()
gViewerWindow = NULL;
llinfos << "ViewerWindow deleted" << llendflush;
}
+
+ llinfos << "Cleaning up Keyboard & Joystick" << llendflush;
// viewer UI relies on keyboard so keep it aound until viewer UI isa gone
delete gKeyboard;
gKeyboard = NULL;
+ // Turn off Space Navigator and similar devices
+ LLViewerJoystick::getInstance()->terminate();
+
+ llinfos << "Cleaning up Objects" << llendflush;
+
LLViewerObject::cleanupVOClasses();
LLWaterParamManager::cleanupClass();
@@ -1413,6 +1426,8 @@ bool LLAppViewer::cleanup()
}
LLPrimitive::cleanupVolumeManager();
+ llinfos << "Additional Cleanup..." << llendflush;
+
LLViewerParcelMgr::cleanupGlobals();
// *Note: this is where gViewerStats used to be deleted.
@@ -1432,9 +1447,11 @@ bool LLAppViewer::cleanup()
// Also after shutting down the messaging system since it has VFS dependencies
//
+ llinfos << "Cleaning up VFS" << llendflush;
LLVFile::cleanupClass();
- llinfos << "VFS cleaned up" << llendflush;
+ llinfos << "Saving Data" << llendflush;
+
// Quitting with "Remember Password" turned off should always stomp your
// saved password, whether or not you successfully logged in. JC
if (!gSavedSettings.getBOOL("RememberPassword"))
@@ -1476,13 +1493,16 @@ bool LLAppViewer::cleanup()
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);
}
- // Turn off Space Navigator and similar devices
- LLViewerJoystick::getInstance()->terminate();
-
removeMarkerFile(); // Any crashes from here on we'll just have to ignore
writeDebugInfo();
+ LLLocationHistory::getInstance()->save();
+
+ LLAvatarIconIDCache::getInstance()->save();
+
+ llinfos << "Shutting down Threads" << llendflush;
+
// Let threads finish
LLTimer idleTimer;
idleTimer.reset();
@@ -1515,14 +1535,9 @@ bool LLAppViewer::cleanup()
sTextureFetch = NULL;
delete sImageDecodeThread;
sImageDecodeThread = NULL;
-
- LLLocationHistory::getInstance()->save();
-
- LLAvatarIconIDCache::getInstance()->save();
-
delete mFastTimerLogThread;
mFastTimerLogThread = NULL;
-
+
if (LLFastTimerView::sAnalyzePerformance)
{
llinfos << "Analyzing performance" << llendl;
@@ -1544,6 +1559,8 @@ bool LLAppViewer::cleanup()
}
LLMetricPerformanceTester::cleanClass() ;
+ llinfos << "Cleaning up Media and Textures" << llendflush;
+
//Note:
//LLViewerMedia::cleanupClass() has to be put before gTextureList.shutdown()
//because some new image might be generated during cleaning up media. --bao
@@ -1557,13 +1574,13 @@ bool LLAppViewer::cleanup()
LLVFSThread::cleanupClass();
LLLFSThread::cleanupClass();
- llinfos << "VFS Thread finished" << llendflush;
-
#ifndef LL_RELEASE_FOR_DOWNLOAD
llinfos << "Auditing VFS" << llendl;
gVFS->audit();
#endif
+ llinfos << "Misc Cleanup" << llendflush;
+
// For safety, the LLVFS has to be deleted *after* LLVFSThread. This should be cleaned up.
// (LLVFS doesn't know about LLVFSThread so can't kill pending requests) -Steve
delete gStaticVFS;
@@ -1577,12 +1594,11 @@ bool LLAppViewer::cleanup()
LLWatchdog::getInstance()->cleanup();
+ llinfos << "Shutting down message system" << llendflush;
end_messaging_system();
- llinfos << "Message system deleted." << llendflush;
// *NOTE:Mani - The following call is not thread safe.
LLCurl::cleanupClass();
- llinfos << "LLCurl cleaned up." << llendflush;
// If we're exiting to launch an URL, do that here so the screen
// is at the right resolution before we launch IE.
@@ -1603,7 +1619,7 @@ bool LLAppViewer::cleanup()
ll_close_fail_log();
- llinfos << "Goodbye" << llendflush;
+ llinfos << "Goodbye!" << llendflush;
// return 0;
return true;
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 0844cca766..a133bd6fe6 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -347,9 +347,9 @@ void LLAvatarActions::inviteToGroup(const LLUUID& id)
LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(id));
if (widget)
{
- widget->removeNoneOption();
widget->center();
widget->setPowersMask(GP_MEMBER_INVITE);
+ widget->removeNoneOption();
widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, id));
}
}
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 4ce3b50ed5..cd0456b308 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -33,11 +33,9 @@
#include "llviewerprecompiledheaders.h"
#include "llchathistory.h"
#include "llpanel.h"
-#include "lltextbox.h"
#include "lluictrlfactory.h"
#include "llscrollcontainer.h"
#include "llavatariconctrl.h"
-
#include "llimview.h"
#include "llcallingcard.h" //for LLAvatarTracker
#include "llagentdata.h"
@@ -185,11 +183,10 @@ public:
mSourceType = CHAT_SOURCE_SYSTEM;
}
- LLTextBox* userName = getChild<LLTextBox>("user_name");
+ LLTextEditor* userName = getChild<LLTextEditor>("user_name");
- LLUIColor color = style_params.color;
- userName->setReadOnlyColor(color);
- userName->setColor(color);
+ userName->setReadOnlyColor(style_params.readonly_color());
+ userName->setColor(style_params.color());
if(!chat.mFromName.empty())
{
@@ -203,7 +200,7 @@ public:
}
- LLTextBox* timeBox = getChild<LLTextBox>("time_box");
+ LLUICtrl* timeBox = getChild<LLUICtrl>("time_box");
timeBox->setValue(chat.mTimeStr);
LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
@@ -334,20 +331,14 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style
return header;
}
-void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params)
+void LLChatHistory::clear()
{
- LLView* view = NULL;
- std::string view_text = "\n[" + chat.mTimeStr + "] ";
- if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
- view_text += chat.mFromName + ": ";
-
-
- LLInlineViewSegment::Params p;
- p.force_newline = true;
- p.left_pad = mLeftWidgetPad;
- p.right_pad = mRightWidgetPad;
+ mLastFromName.clear();
+ LLTextEditor::clear();
+}
-
+void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params)
+{
LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
LLViewerChat::getChatColor(chat,txt_color);
LLFontGL* fontp = LLViewerChat::getChatFont();
@@ -360,39 +351,63 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Param
style_params.font.size(font_size);
style_params.font.style(input_append_params.font.style);
-
+ std::string header_text = "[" + chat.mTimeStr + "] ";
+ if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
+ header_text += chat.mFromName + ": ";
- if (mLastFromName == chat.mFromName)
+ if (use_plain_text_chat_history)
{
- view = getSeparator();
- p.top_pad = mTopSeparatorPad;
- p.bottom_pad = mBottomSeparatorPad;
+ appendText(header_text, getText().size() != 0, style_params);
}
else
{
- view = getHeader(chat,style_params);
- if (getText().size() == 0)
- p.top_pad = 0;
+ LLView* view = NULL;
+ LLInlineViewSegment::Params p;
+ p.force_newline = true;
+ p.left_pad = mLeftWidgetPad;
+ p.right_pad = mRightWidgetPad;
+
+ if (mLastFromName == chat.mFromName)
+ {
+ view = getSeparator();
+ p.top_pad = mTopSeparatorPad;
+ p.bottom_pad = mBottomSeparatorPad;
+ }
else
- p.top_pad = mTopHeaderPad;
- p.bottom_pad = mBottomHeaderPad;
-
+ {
+ view = getHeader(chat, style_params);
+ if (getText().size() == 0)
+ p.top_pad = 0;
+ else
+ p.top_pad = mTopHeaderPad;
+ p.bottom_pad = mBottomHeaderPad;
+
+ }
+ p.view = view;
+
+ //Prepare the rect for the view
+ LLRect target_rect = getDocumentView()->getRect();
+ // squeeze down the widget by subtracting padding off left and right
+ target_rect.mLeft += mLeftWidgetPad + mHPad;
+ target_rect.mRight -= mRightWidgetPad;
+ view->reshape(target_rect.getWidth(), view->getRect().getHeight());
+ view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
+
+ appendWidget(p, header_text, false);
+ mLastFromName = chat.mFromName;
}
- p.view = view;
-
- //Prepare the rect for the view
- LLRect target_rect = getDocumentView()->getRect();
- // squeeze down the widget by subtracting padding off left and right
- target_rect.mLeft += mLeftWidgetPad + mHPad;
- target_rect.mRight -= mRightWidgetPad;
- view->reshape(target_rect.getWidth(), view->getRect().getHeight());
- view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
-
- appendWidget(p, view_text, false);
-
- //Append the text message
- appendText(chat.mText, FALSE, style_params);
+ //Handle IRC styled /me messages.
+ std::string prefix = chat.mText.substr(0, 4);
+ if (prefix == "/me " || prefix == "/me'")
+ {
+ style_params.font.style = "ITALIC";
- mLastFromName = chat.mFromName;
+ if (chat.mFromName.size() > 0)
+ appendText(chat.mFromName + " ", TRUE, style_params);
+ appendText(chat.mText.substr(4), FALSE, style_params);
+ }
+ else
+ appendText(chat.mText, FALSE, style_params);
blockUndo();
}
+
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index c89d4b4ec6..ef5839ff2f 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -106,10 +106,11 @@ class LLChatHistory : public LLTextEditor
* If last user appended message, concurs with current user,
* separator is added before the message, otherwise header is added.
* @param chat - base chat message.
- * @param time time of a message.
- * @param message message itself.
+ * @param use_plain_text_chat_history - whether to add message as plain text.
+ * @param input_append_params - font style.
*/
- void appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params = LLStyle::Params());
+ void appendMessage(const LLChat& chat, const bool use_plain_text_chat_history = false, const LLStyle::Params& input_append_params = LLStyle::Params());
+ /*virtual*/ void clear();
private:
std::string mLastFromName;
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 6a5877f673..90f246ddaf 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -43,6 +43,7 @@
#include "lllocalcliprect.h"
#include "llmenugl.h"
#include "lloutputmonitorctrl.h"
+#include "llscriptfloater.h"
#include "lltextbox.h"
#include "llvoiceclient.h"
#include "llvoicecontrolpanel.h"
@@ -55,6 +56,7 @@ static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notif
static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");
static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");
static LLDefaultChildRegistry::Register<LLAdHocChiclet> t5("chiclet_im_adhoc");
+static LLDefaultChildRegistry::Register<LLScriptChiclet> t6("chiclet_script");
static const LLRect CHICLET_RECT(0, 25, 25, 0);
static const LLRect CHICLET_ICON_RECT(0, 22, 22, 0);
@@ -163,7 +165,7 @@ LLChiclet::~LLChiclet()
boost::signals2::connection LLChiclet::setLeftButtonClickCallback(
const commit_callback_t& cb)
{
- return mCommitSignal.connect(cb);
+ return setCommitCallback(cb);
}
BOOL LLChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -983,7 +985,10 @@ void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
void LLChicletPanel::onChicletClick(LLUICtrl*ctrl,const LLSD&param)
{
- mCommitSignal(ctrl,param);
+ if (mCommitSignal)
+ {
+ (*mCommitSignal)(ctrl,param);
+ }
}
void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it)
@@ -1288,7 +1293,7 @@ void LLChicletPanel::onRightScrollHeldDown()
boost::signals2::connection LLChicletPanel::setChicletClickedCallback(
const commit_callback_t& cb)
{
- return mCommitSignal.connect(cb);
+ return setCommitCallback(cb);
}
BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks)
@@ -1411,3 +1416,51 @@ LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
: LLOutputMonitorCtrl(p)
{
}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLScriptChiclet::Params::Params()
+ : icon("icon")
+{
+ // *TODO Vadim: Get rid of hardcoded values.
+ rect(CHICLET_RECT);
+ icon.rect(CHICLET_ICON_RECT);
+}
+
+LLScriptChiclet::LLScriptChiclet(const Params&p)
+ : LLIMChiclet(p)
+ , mChicletIconCtrl(NULL)
+{
+ LLIconCtrl::Params icon_params = p.icon;
+ mChicletIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
+ // Let "new message" icon be on top, else it will be hidden behind chiclet icon.
+ addChildInBack(mChicletIconCtrl);
+}
+
+void LLScriptChiclet::setSessionId(const LLUUID& session_id)
+{
+ setShowNewMessagesIcon( getSessionId() != session_id );
+
+ LLIMChiclet::setSessionId(session_id);
+ LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(session_id);
+ LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+ if(notification)
+ {
+ setToolTip(notification->getSubstitutions()["TITLE"].asString());
+ }
+}
+
+void LLScriptChiclet::onMouseDown()
+{
+ LLScriptFloaterManager::getInstance()->toggleScriptFloater(getSessionId());
+}
+
+BOOL LLScriptChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ onMouseDown();
+ return LLChiclet::handleMouseDown(x, y, mask);
+}
+
+// EOF
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 03935d21a6..1ea141e6c4 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -534,6 +534,46 @@ private:
};
/**
+ * Chiclet for script floaters.
+ */
+class LLScriptChiclet : public LLIMChiclet
+{
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
+ {
+ Optional<LLIconCtrl::Params> icon;
+
+ Params();
+ };
+
+ /*virtual*/ void setSessionId(const LLUUID& session_id);
+
+ /*virtual*/ void setCounter(S32 counter){}
+
+ /*virtual*/ S32 getCounter() { return 0; }
+
+ /**
+ * Toggle script floater
+ */
+ /*virtual*/ void onMouseDown();
+
+ /**
+ * Override default handler
+ */
+ /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+
+protected:
+
+ LLScriptChiclet(const Params&);
+ friend class LLUICtrlFactory;
+
+private:
+
+ LLIconCtrl* mChicletIconCtrl;
+};
+
+/**
* Implements Group chat chiclet.
*/
class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index ae5be8cc7c..8406ddeeca 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -232,13 +232,15 @@ public:
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask)
{
- mMouseDownSignal(this, x, y, mask);
+ if (mMouseDownSignal)
+ (*mMouseDownSignal)(this, x, y, mask);
return LLMenuItemCallGL::handleMouseDown(x, y, mask);
}
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask)
{
- mMouseUpSignal(this, x, y, mask);
+ if (mMouseUpSignal)
+ (*mMouseUpSignal)(this, x, y, mask);
return LLMenuItemCallGL::handleMouseUp(x, y, mask);
}
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 467796b4a3..976aaf8044 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -903,7 +903,7 @@ void LLFloaterBuyLandUI::tellUserError(
// virtual
BOOL LLFloaterBuyLandUI::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));
mCurrency.prepare();
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index 58025ef78b..57bb93d81a 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -129,7 +129,7 @@ void LLFloaterChat::draw()
BOOL LLFloaterChat::postBuild()
{
// Hide the chat overlay when our history is visible.
- mVisibleSignal.connect(boost::bind(&LLFloaterChat::updateConsoleVisibility, this));
+ setVisibleCallback(boost::bind(&LLFloaterChat::updateConsoleVisibility, this));
mPanel = (LLPanelActiveSpeakers*)getChild<LLPanel>("active_speakers_panel");
diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp
index fbf09207fe..1b14ca573a 100644
--- a/indra/newview/llfloaterchatterbox.cpp
+++ b/indra/newview/llfloaterchatterbox.cpp
@@ -114,7 +114,7 @@ LLFloaterChatterBox::~LLFloaterChatterBox()
BOOL LLFloaterChatterBox::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2));
if (gSavedSettings.getBOOL("ContactsTornOff"))
{
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 22d6098d5b..d855ab1dfa 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -239,7 +239,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
BOOL LLFloaterLand::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2));
LLTabContainer* tab = getChild<LLTabContainer>("landtab");
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 6d2c35442a..e20249a737 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -56,6 +56,7 @@
#include "llfloaterabout.h"
#include "llfloaterhardwaresettings.h"
#include "llfloatervoicedevicesettings.h"
+#include "llimfloater.h"
#include "llkeyboard.h"
#include "llmodaldialog.h"
#include "llnavigationbar.h"
@@ -357,6 +358,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
BOOL LLFloaterPreference::postBuild()
{
+ gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&LLIMFloater::processChatHistoryStyleUpdate, _2));
+
LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");
if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
tabcontainer->selectFirstTab();
@@ -458,6 +461,8 @@ void LLFloaterPreference::apply()
// LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString());
// LLWStringUtil::replaceTabsWithSpaces(busy_response, 4);
+
+ gSavedSettings.setBOOL("PlainTextChatHistory", childGetValue("plain_text_chat_history").asBoolean());
if(mGotPersonalInfo)
{
@@ -1186,6 +1191,8 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility);
childEnable("send_im_to_email");
childSetValue("send_im_to_email", im_via_email);
+ childEnable("plain_text_chat_history");
+ childSetValue("plain_text_chat_history", gSavedSettings.getBOOL("PlainTextChatHistory"));
childEnable("log_instant_messages");
// childEnable("log_chat");
// childEnable("busy_response");
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 43fbe362d5..750a9d478f 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -67,7 +67,10 @@
#include "llresmgr.h"
#include "pipeline.h"
#include "llspatialpartition.h"
-
+
+// Height of the yellow selection highlight posts for land
+const F32 PARCEL_POST_HEIGHT = 0.666f;
+
BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)
{
if(object && object->isAttachment())
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 0626a5c3d3..59537c1e65 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -52,6 +52,7 @@
#include "llviewerwindow.h"
#include "llpanelgroup.h"
#include "llgroupactions.h"
+#include "llnotifications.h"
#include "lluictrlfactory.h"
#include <boost/regex.hpp>
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 4a487bd5a7..795770d3db 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -53,6 +53,10 @@
#include "lltransientfloatermgr.h"
#include "llinventorymodel.h"
+#ifdef USE_IM_CONTAINER
+ #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
+#endif
+
LLIMFloater::LLIMFloater(const LLUUID& session_id)
@@ -106,10 +110,10 @@ void LLIMFloater::onFocusReceived()
// virtual
void LLIMFloater::onClose(bool app_quitting)
{
+ if (!gIMMgr->hasSession(mSessionID)) return;
+
setTyping(false);
- // SJB: We want the close button to hide the session window, not end it
- // *NOTE: Yhis is functional, but not ideal - it's still closing the floater; we really want to change the behavior of the X button instead.
- //gIMMgr->leaveSession(mSessionID);
+ gIMMgr->leaveSession(mSessionID);
}
/* static */
@@ -257,7 +261,11 @@ BOOL LLIMFloater::postBuild()
//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"
//see LLFloaterIMPanel for how it is done (IB)
+#ifdef USE_IM_CONTAINER
+ return LLFloater::postBuild();
+#else
return LLDockableFloater::postBuild();
+#endif
}
// virtual
@@ -318,6 +326,11 @@ void LLIMFloater::onSlide()
//static
LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
{
+#ifdef USE_IM_CONTAINER
+ LLIMFloater* target_floater = findInstance(session_id);
+ bool not_existed = NULL == target_floater;
+
+#else
//hide all
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
@@ -329,12 +342,25 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
floater->setVisible(false);
}
}
+#endif
LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);
floater->updateMessages();
floater->mInputEditor->setFocus(TRUE);
+#ifdef USE_IM_CONTAINER
+ // do not add existed floaters to avoid adding torn off instances
+ if (not_existed)
+ {
+ // LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
+ // TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists
+ LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END;
+
+ LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_container");
+ floater_container->addFloater(floater, TRUE, i_pt);
+ }
+#else
if (floater->getDockControl() == NULL)
{
LLChiclet* chiclet =
@@ -352,13 +378,14 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
LLDockControl::TOP, boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));
}
+#endif
return floater;
}
void LLIMFloater::getAllowedRect(LLRect& rect)
{
- rect = gViewerWindow->getWorldViewRectScaled();
+ rect = gViewerWindow->getWorldViewRectRaw();
}
void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
@@ -368,7 +395,9 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
(LLNotificationsUI::LLChannelManager::getInstance()->
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+#ifndef USE_IM_CONTAINER
LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+#endif
// update notification channel state
if(channel)
@@ -394,6 +423,7 @@ void LLIMFloater::setVisible(BOOL visible)
//static
bool LLIMFloater::toggle(const LLUUID& session_id)
{
+#ifndef USE_IM_CONTAINER
LLIMFloater* floater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
if (floater && floater->getVisible() && floater->isDocked())
{
@@ -409,6 +439,7 @@ bool LLIMFloater::toggle(const LLUUID& session_id)
return true;
}
else
+#endif
{
// ensure the list of messages is updated when floater is made visible
show(session_id);
@@ -451,6 +482,8 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
void LLIMFloater::updateMessages()
{
+ bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
+
std::list<LLSD> messages;
LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1);
@@ -476,39 +509,7 @@ void LLIMFloater::updateMessages()
chat.mText = message;
chat.mTimeStr = time;
- //Handle IRC styled /me messages.
- std::string prefix = message.substr(0, 4);
- if (prefix == "/me " || prefix == "/me'")
- {
-
- LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
- LLViewerChat::getChatColor(chat,txt_color);
- LLFontGL* fontp = LLViewerChat::getChatFont();
- std::string font_name = LLFontGL::nameFromFont(fontp);
- std::string font_size = LLFontGL::sizeFromFont(fontp);
- LLStyle::Params append_style_params;
- append_style_params.color(txt_color);
- append_style_params.readonly_color(txt_color);
- append_style_params.font.name(font_name);
- append_style_params.font.size(font_size);
-
- if (from.size() > 0)
- {
- append_style_params.font.style = "ITALIC";
- chat.mText = from;
- mChatHistory->appendWidgetMessage(chat, append_style_params);
- }
-
- message = message.substr(3);
- append_style_params.font.style = "ITALIC";
- mChatHistory->appendText(message, FALSE, append_style_params);
- }
- else
- {
- chat.mText = message;
- mChatHistory->appendWidgetMessage(chat);
- }
-
+ mChatHistory->appendMessage(chat, use_plain_text_chat_history);
mLastMessageIndex = msg["index"].asInteger();
}
}
@@ -639,6 +640,28 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body)
}
}
+void LLIMFloater::updateChatHistoryStyle()
+{
+ mChatHistory->clear();
+ mLastMessageIndex = -1;
+ updateMessages();
+}
+
+void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue)
+{
+ LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
+ for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
+ iter != inst_list.end(); ++iter)
+ {
+ LLIMFloater* floater = dynamic_cast<LLIMFloater*>(*iter);
+ if (floater)
+ {
+ floater->updateChatHistoryStyle();
+ }
+ }
+
+}
+
void LLIMFloater::processSessionUpdate(const LLSD& session_update)
{
// *TODO : verify following code when moderated mode will be implemented
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index e2d500d821..9e1330ff49 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -33,6 +33,11 @@
#ifndef LL_IMFLOATER_H
#define LL_IMFLOATER_H
+// This variable is used to show floaters related to chiclets in a Multi Floater Container
+// So, this functionality does not require to have IM Floaters as Dockable & Transient
+// See EXT-2640.
+#define USE_IM_CONTAINER
+
#include "lltransientdockablefloater.h"
#include "lllogchat.h"
#include "lltooldraganddrop.h"
@@ -92,6 +97,9 @@ public:
void processAgentListUpdates(const LLSD& body);
void processSessionUpdate(const LLSD& session_update);
+ void updateChatHistoryStyle();
+ static void processChatHistoryStyleUpdate(const LLSD& newvalue);
+
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
BOOL drop, EDragAndDropType cargo_type,
void *cargo_data, EAcceptance *accept,
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
new file mode 100644
index 0000000000..6e4b3ae214
--- /dev/null
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -0,0 +1,96 @@
+/**
+ * @file llimfloatercontainer.cpp
+ * @brief Multifloater containing active IM sessions in separate tab container tabs
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llimfloatercontainer.h"
+
+//
+// LLIMFloaterContainer
+//
+LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed)
+: LLMultiFloater(seed),
+ mActiveVoiceFloater(NULL)
+{
+ mAutoResize = FALSE;
+}
+
+LLIMFloaterContainer::~LLIMFloaterContainer()
+{
+}
+
+BOOL LLIMFloaterContainer::postBuild()
+{
+ // Do not call base postBuild to not connect to mCloseSignal to not close all floaters via Close button
+ // mTabContainer will be initialized in LLMultiFloater::addChild()
+ return TRUE;
+}
+
+void LLIMFloaterContainer::onOpen(const LLSD& key)
+{
+ LLMultiFloater::onOpen(key);
+/*
+ if (key.isDefined())
+ {
+ LLIMFloater* im_floater = LLIMFloater::findInstance(key.asUUID());
+ if (im_floater)
+ {
+ im_floater->openFloater();
+ }
+ }
+*/
+}
+
+void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
+ BOOL select_added_floater,
+ LLTabContainer::eInsertionPoint insertion_point)
+{
+ if(!floaterp) return;
+
+ // already here
+ if (floaterp->getHost() == this)
+ {
+ openFloater(floaterp->getKey());
+ return;
+ }
+
+ LLMultiFloater::addFloater(floaterp, select_added_floater, insertion_point);
+
+ // make sure active voice icon shows up for new tab
+ if (floaterp == mActiveVoiceFloater)
+ {
+ mTabContainer->setTabImage(floaterp, "active_voice_tab.tga");
+ }
+}
+
+// EOF
diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h
new file mode 100644
index 0000000000..10cde56c6e
--- /dev/null
+++ b/indra/newview/llimfloatercontainer.h
@@ -0,0 +1,61 @@
+/**
+ * @file llimfloatercontainer.h
+ * @brief Multifloater containing active IM sessions in separate tab container tabs
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLIMFLOATERCONTAINER_H
+#define LL_LLIMFLOATERCONTAINER_H
+
+#include "llfloater.h"
+#include "llmultifloater.h"
+
+class LLTabContainer;
+
+class LLIMFloaterContainer : public LLMultiFloater
+{
+public:
+ LLIMFloaterContainer(const LLSD& seed);
+ virtual ~LLIMFloaterContainer();
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ /*virtual*/ void addFloater(LLFloater* floaterp,
+ BOOL select_added_floater,
+ LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END);
+
+ static LLFloater* getCurrentVoiceFloater();
+
+protected:
+
+ LLFloater* mActiveVoiceFloater;
+};
+
+#endif // LL_LLIMFLOATERCONTAINER_H
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 87b801d73b..e6ded5f371 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -216,7 +216,7 @@ LLFloaterIMPanel::~LLFloaterIMPanel()
BOOL LLFloaterIMPanel::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2));
mInputEditor = getChild<LLLineEditor>("chat_editor");
mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 7e35cfa04c..6b28edf0b6 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -52,6 +52,7 @@
#include "llteleporthistory.h"
#include "llsidetray.h"
#include "llslurl.h"
+#include "llstatusbar.h" // getHealth()
#include "lltrans.h"
#include "llviewerinventory.h"
#include "llviewerparcelmgr.h"
@@ -157,15 +158,22 @@ LLLocationInputCtrl::Params::Params()
add_landmark_image_disabled("add_landmark_image_disabled"),
add_landmark_image_hover("add_landmark_image_hover"),
add_landmark_image_selected("add_landmark_image_selected"),
+ icon_hpad("icon_hpad", 0),
add_landmark_button("add_landmark_button"),
- add_landmark_hpad("add_landmark_hpad", 0),
- info_button("info_button")
+ info_button("info_button"),
+ voice_icon("voice_icon"),
+ fly_icon("fly_icon"),
+ push_icon("push_icon"),
+ build_icon("build_icon"),
+ scripts_icon("scripts_icon"),
+ damage_icon("damage_icon"),
+ damage_text("damage_text")
{
}
LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
: LLComboBox(p),
- mAddLandmarkHPad(p.add_landmark_hpad),
+ mIconHPad(p.icon_hpad),
mInfoBtn(NULL),
mLocationContextMenu(NULL),
mAddLandmarkBtn(NULL),
@@ -188,13 +196,12 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
params.rect(text_entry_rect);
params.default_text(LLStringUtil::null);
params.max_length_bytes(p.max_chars);
- params.commit_callback.function(boost::bind(&LLComboBox::onTextCommit, this, _2));
params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1));
params.handle_edit_keys_directly(true);
params.commit_on_focus_lost(false);
params.follows.flags(FOLLOWS_ALL);
mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params);
- this->addChild(mTextEntry);
+ addChild(mTextEntry);
// LLLineEditor is replaced with LLLocationLineEditor
// "Place information" button.
@@ -230,6 +237,35 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params);
enableAddLandmarkButton(true);
addChild(mAddLandmarkBtn);
+
+ // Parcel property icons
+ LLIconCtrl::Params voice_icon = p.voice_icon;
+ mParcelIcon[VOICE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(voice_icon);
+ addChild(mParcelIcon[VOICE_ICON]);
+
+ LLIconCtrl::Params fly_icon = p.fly_icon;
+ mParcelIcon[FLY_ICON] = LLUICtrlFactory::create<LLIconCtrl>(fly_icon);
+ addChild(mParcelIcon[FLY_ICON]);
+
+ LLIconCtrl::Params push_icon = p.push_icon;
+ mParcelIcon[PUSH_ICON] = LLUICtrlFactory::create<LLIconCtrl>(push_icon);
+ addChild(mParcelIcon[PUSH_ICON]);
+
+ LLIconCtrl::Params build_icon = p.build_icon;
+ mParcelIcon[BUILD_ICON] = LLUICtrlFactory::create<LLIconCtrl>(build_icon);
+ addChild(mParcelIcon[BUILD_ICON]);
+
+ LLIconCtrl::Params scripts_icon = p.scripts_icon;
+ mParcelIcon[SCRIPTS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(scripts_icon);
+ addChild(mParcelIcon[SCRIPTS_ICON]);
+
+ LLIconCtrl::Params damage_icon = p.damage_icon;
+ mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon);
+ addChild(mParcelIcon[DAMAGE_ICON]);
+
+ LLTextBox::Params damage_text = p.damage_text;
+ mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
+ addChild(mDamageText);
// Register callbacks and load the location field context menu (NB: the order matters).
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
@@ -373,11 +409,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
*/
void LLLocationInputCtrl::setText(const LLStringExplicit& text)
{
- if (mTextEntry)
- {
- mTextEntry->setText(text);
- mHasAutocompletedText = FALSE;
- }
+ mTextEntry->setText(text);
+ mHasAutocompletedText = FALSE;
}
void LLLocationInputCtrl::setFocus(BOOL b)
@@ -410,11 +443,20 @@ void LLLocationInputCtrl::onFocusLost()
mTextEntry->deselect();
}
}
-void LLLocationInputCtrl::draw(){
-
- if(!hasFocus() && gSavedSettings.getBOOL("ShowCoordinatesOption")){
+
+void LLLocationInputCtrl::draw()
+{
+ static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false);
+ if(!hasFocus() && show_coords)
+ {
refreshLocation();
}
+
+ static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false);
+ if (show_icons)
+ {
+ refreshHealth();
+ }
LLComboBox::draw();
}
@@ -511,10 +553,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.
}
+
bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter)
{
return item.mTitle.find(filter) != std::string::npos;
}
+
void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
{
if (mLocationContextMenu)
@@ -532,6 +576,7 @@ void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
void LLLocationInputCtrl::refresh()
{
refreshLocation(); // update location string
+ refreshParcelIcons();
updateAddLandmarkButton(); // indicate whether current parcel has been landmarked
}
@@ -548,13 +593,98 @@ void LLLocationInputCtrl::refreshLocation()
// Update location field.
std::string location_name;
- LLAgentUI::ELocationFormat format = (gSavedSettings.getBOOL("ShowCoordinatesOption") ?
- LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM: LLAgentUI::LOCATION_FORMAT_NORMAL);
+ LLAgentUI::ELocationFormat format =
+ (gSavedSettings.getBOOL("NavBarShowCoordinates")
+ ? LLAgentUI::LOCATION_FORMAT_FULL
+ : LLAgentUI::LOCATION_FORMAT_NO_COORDS);
- if (!LLAgentUI::buildLocationString(location_name, format)) location_name = "Unknown";
+ if (!LLAgentUI::buildLocationString(location_name, format))
+ {
+ location_name = "???";
+ }
setText(location_name);
}
+void LLLocationInputCtrl::refreshParcelIcons()
+{
+ // Our "cursor" moving right to left
+ S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
+
+ static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false);
+ if (show_properties)
+ {
+ LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+ // *TODO buy
+ //bool allow_buy = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
+ bool allow_voice = vpm->allowAgentVoice();
+ bool allow_fly = vpm->allowAgentFly();
+ bool allow_push = vpm->allowAgentPush();
+ bool allow_build = vpm->allowAgentBuild();
+ bool allow_scripts = vpm->allowAgentScripts();
+ bool allow_damage = vpm->allowAgentDamage();
+
+ // Most icons are "block this ability"
+ mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
+ mParcelIcon[FLY_ICON]->setVisible( !allow_fly );
+ mParcelIcon[PUSH_ICON]->setVisible( !allow_push );
+ mParcelIcon[BUILD_ICON]->setVisible( !allow_build );
+ mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
+ mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
+ mDamageText->setVisible(allow_damage);
+
+ // Slide the parcel icons rect from right to left, adjusting rectangles of
+ // visible icons. Assumes all icon rects are the same.
+ for (S32 i = 0; i < ICON_COUNT; ++i)
+ {
+ LLIconCtrl* icon = mParcelIcon[i];
+ if (icon->getVisible())
+ {
+ LLRect r = icon->getRect();
+ r.mLeft = x - r.getWidth();
+ r.mRight = x;
+ icon->setRect( r );
+ x -= r.getWidth() + mIconHPad;
+ }
+ }
+ LLRect text_rect = mDamageText->getRect();
+ text_rect.mLeft = x - text_rect.getWidth();
+ text_rect.mRight = x;
+ mDamageText->setRect(text_rect);
+ x -= text_rect.getWidth() + mIconHPad;
+ }
+ else
+ {
+ for (S32 i = 0; i < ICON_COUNT; ++i)
+ {
+ mParcelIcon[i]->setVisible(false);
+ }
+ mDamageText->setVisible(false);
+ }
+
+ S32 left_pad, right_pad;
+ mTextEntry->getTextPadding(&left_pad, &right_pad);
+ right_pad = mTextEntry->getRect().mRight - x;
+ llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect()
+ << " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl;
+ mTextEntry->setTextPadding(left_pad, right_pad);
+}
+
+void LLLocationInputCtrl::refreshHealth()
+{
+ // *FIXME: Status bar owns health information, should be in agent
+ if (gStatusBar)
+ {
+ static S32 last_health = -1;
+ S32 health = gStatusBar->getHealth();
+ if (health != last_health)
+ {
+ std::string text = llformat("%d%%", health);
+ mDamageText->setText(text);
+ last_health = health;
+ }
+ }
+}
+
void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
{
LLLocationHistory::location_list_t filtered_items;
@@ -651,13 +781,11 @@ void LLLocationInputCtrl::updateWidgetlayout()
mInfoBtn->setRect(info_btn_rect);
// "Add Landmark" button
- {
- LLRect al_btn_rect = mAddLandmarkBtn->getRect();
- al_btn_rect.translate(
- hist_btn_rect.mLeft - mAddLandmarkHPad - al_btn_rect.getWidth(),
- (rect.getHeight() - al_btn_rect.getHeight()) / 2);
- mAddLandmarkBtn->setRect(al_btn_rect);
- }
+ LLRect al_btn_rect = mAddLandmarkBtn->getRect();
+ al_btn_rect.translate(
+ hist_btn_rect.mLeft - mIconHPad - al_btn_rect.getWidth(),
+ (rect.getHeight() - al_btn_rect.getHeight()) / 2);
+ mAddLandmarkBtn->setRect(al_btn_rect);
}
void LLLocationInputCtrl::changeLocationPresentation()
@@ -678,11 +806,17 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
{
std::string item = userdata.asString();
- if (item == std::string("show_coordinates"))
+ if (item == "show_coordinates")
+ {
+ gSavedSettings.setBOOL("NavBarShowCoordinates",!gSavedSettings.getBOOL("NavBarShowCoordinates"));
+ }
+ else if (item == "show_properties")
{
- gSavedSettings.setBOOL("ShowCoordinatesOption",!gSavedSettings.getBOOL("ShowCoordinatesOption"));
+ gSavedSettings.setBOOL("NavBarShowParcelProperties",
+ !gSavedSettings.getBOOL("NavBarShowParcelProperties"));
+ refreshParcelIcons();
}
- else if (item == std::string("landmark"))
+ else if (item == "landmark")
{
LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
@@ -696,23 +830,23 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)
LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));
}
}
- else if (item == std::string("cut"))
+ else if (item == "cut")
{
mTextEntry->cut();
}
- else if (item == std::string("copy"))
+ else if (item == "copy")
{
mTextEntry->copy();
}
- else if (item == std::string("paste"))
+ else if (item == "paste")
{
mTextEntry->paste();
}
- else if (item == std::string("delete"))
+ else if (item == "delete")
{
mTextEntry->deleteSelection();
}
- else if (item == std::string("select_all"))
+ else if (item == "select_all")
{
mTextEntry->selectAll();
}
@@ -722,29 +856,29 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
{
std::string item = userdata.asString();
- if (item == std::string("can_cut"))
+ if (item == "can_cut")
{
return mTextEntry->canCut();
}
- else if (item == std::string("can_copy"))
+ else if (item == "can_copy")
{
return mTextEntry->canCopy();
}
- else if (item == std::string("can_paste"))
+ else if (item == "can_paste")
{
return mTextEntry->canPaste();
}
- else if (item == std::string("can_delete"))
+ else if (item == "can_delete")
{
return mTextEntry->canDeselect();
}
- else if (item == std::string("can_select_all"))
+ else if (item == "can_select_all")
{
return mTextEntry->canSelectAll();
}
- else if(item == std::string("show_coordinates")){
-
- return gSavedSettings.getBOOL("ShowCoordinatesOption");
+ else if(item == "show_coordinates")
+ {
+ return gSavedSettings.getBOOL("NavBarShowCoordinates");
}
return false;
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 44dc0cb251..3bd23e80a9 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -33,7 +33,9 @@
#ifndef LL_LLLOCATIONINPUTCTRL_H
#define LL_LLLOCATIONINPUTCTRL_H
-#include <llcombobox.h>
+#include "llcombobox.h"
+#include "lliconctrl.h" // Params
+#include "lltextbox.h" // Params
class LLLandmark;
@@ -63,9 +65,16 @@ public:
add_landmark_image_disabled,
add_landmark_image_hover,
add_landmark_image_selected;
- Optional<S32> add_landmark_hpad;
+ Optional<S32> icon_hpad;
Optional<LLButton::Params> add_landmark_button,
info_button;
+ Optional<LLIconCtrl::Params> voice_icon,
+ fly_icon,
+ push_icon,
+ build_icon,
+ scripts_icon,
+ damage_icon;
+ Optional<LLTextBox::Params> damage_text;
Params();
};
@@ -103,6 +112,10 @@ private:
void enableAddLandmarkButton(bool val);
void refresh();
void refreshLocation();
+ void refreshParcelIcons();
+ // Refresh the value in the health percentage text field
+ void refreshHealth();
+
void rebuildLocationHistory(std::string filter = "");
bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
void setText(const LLStringExplicit& text);
@@ -126,7 +139,20 @@ private:
LLMenuGL* mLocationContextMenu;
LLButton* mAddLandmarkBtn;
LLButton* mInfoBtn;
- S32 mAddLandmarkHPad;
+ S32 mIconHPad;
+
+ enum EParcelIcon
+ {
+ VOICE_ICON = 0,
+ FLY_ICON,
+ PUSH_ICON,
+ BUILD_ICON,
+ SCRIPTS_ICON,
+ DAMAGE_ICON,
+ ICON_COUNT
+ };
+ LLIconCtrl* mParcelIcon[ICON_COUNT];
+ LLTextBox* mDamageText;
LLAddLandmarkObserver* mAddLandmarkObserver;
LLRemoveLandmarkObserver* mRemoveLandmarkObserver;
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 5cd40273f6..2376a3581d 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -356,7 +356,7 @@ void LLMediaCtrl::onFocusLost()
//
BOOL LLMediaCtrl::postBuild ()
{
- mVisibleSignal.connect(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
return TRUE;
}
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 93db337053..9e46a4422a 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -586,7 +586,8 @@ void LLPanelStandStopFlying::setVisible(BOOL visible)
updatePosition();
}
- LLPanel::setVisible(visible);
+ //change visibility of parent layout_panel to animate in/out
+ if (getParent()) getParent()->setVisible(visible);
}
BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 114d26af8a..41376c4c09 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -172,7 +172,8 @@ LLNavigationBar::LLNavigationBar()
mBtnHome(NULL),
mCmbLocation(NULL),
mSearchComboBox(NULL),
- mPurgeTPHistoryItems(false)
+ mPurgeTPHistoryItems(false),
+ mSaveToLocationHistory(false)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
@@ -186,6 +187,7 @@ LLNavigationBar::LLNavigationBar()
LLNavigationBar::~LLNavigationBar()
{
mTeleportFinishConnection.disconnect();
+ mTeleportFailedConnection.disconnect();
}
BOOL LLNavigationBar::postBuild()
@@ -220,6 +222,12 @@ BOOL LLNavigationBar::postBuild()
mSearchComboBox->setCommitCallback(boost::bind(&LLNavigationBar::onSearchCommit, this));
+ mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
+ setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1));
+
+ mTeleportFailedConnection = LLViewerParcelMgr::getInstance()->
+ setTeleportFailedCallback(boost::bind(&LLNavigationBar::onTeleportFailed, this));
+
mDefaultNbRect = getRect();
mDefaultFpRect = getChild<LLFavoritesBarCtrl>("favorite")->getRect();
@@ -230,6 +238,16 @@ BOOL LLNavigationBar::postBuild()
return TRUE;
}
+void LLNavigationBar::setVisible(BOOL visible)
+{
+ // change visibility of grandparent layout_panel to animate in and out
+ if (getParent() && getParent()->getParent())
+ {
+ getParent()->getParent()->setVisible(visible);
+ }
+}
+
+
void LLNavigationBar::fillSearchComboBox()
{
if(!mSearchComboBox)
@@ -395,15 +413,19 @@ void LLNavigationBar::onLocationSelection()
LLWorldMapMessage::url_callback_t cb = boost::bind(
&LLNavigationBar::onRegionNameResponse, this,
typed_location, region_name, local_coords, _1, _2, _3, _4);
- // connect the callback each time, when user enter new location to get real location of agent after teleport
- mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
- setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location));
+ mSaveToLocationHistory = true;
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);
}
-void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location)
+void LLNavigationBar::onTeleportFailed()
{
- // Location is valid. Add it to the typed locations history.
+ mSaveToLocationHistory = false;
+}
+
+void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos)
+{
+ if (!mSaveToLocationHistory)
+ return;
LLLocationHistory* lh = LLLocationHistory::getInstance();
//TODO*: do we need convert surl into readable format?
@@ -413,7 +435,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con
* At this moment gAgent.getPositionAgent() contains previous coordinates.
* according to EXT-65 agent position is being reseted on each frame.
*/
- LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM,
+ LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_NO_MATURITY,
gAgent.getPosAgentFromGlobal(global_agent_pos));
std::string tooltip (LLSLURL::buildSLURLfromPosGlobal(gAgent.getRegion()->getName(), global_agent_pos, false));
@@ -426,8 +448,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con
lh->save();
- if(mTeleportFinishConnection.connected())
- mTeleportFinishConnection.disconnect();
+ mSaveToLocationHistory = false;
}
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 52f5a827e4..9d0687f193 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -56,6 +56,7 @@ public:
/*virtual*/ void draw();
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL postBuild();
+ /*virtual*/ void setVisible(BOOL visible);
void handleLoginComplete();
void clearHistoryCache();
@@ -81,7 +82,8 @@ private:
void onLocationSelection();
void onLocationPrearrange(const LLSD& data);
void onSearchCommit();
- void onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location);
+ void onTeleportFinished(const LLVector3d& global_agent_pos);
+ void onTeleportFailed();
void onRegionNameResponse(
std::string typed_location,
std::string region_name,
@@ -99,8 +101,11 @@ private:
LLLocationInputCtrl* mCmbLocation;
LLRect mDefaultNbRect;
LLRect mDefaultFpRect;
+ boost::signals2::connection mTeleportFailedConnection;
boost::signals2::connection mTeleportFinishConnection;
bool mPurgeTPHistoryItems;
+ // if true, save location to location history when teleport finishes
+ bool mSaveToLocationHistory;
};
#endif
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 09fd9b2949..80a6cc343f 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -173,7 +173,7 @@ void LLNearbyChat::addMessage(const LLChat& chat)
append_style_params.font.style = "ITALIC";
LLChat add_chat=chat;
add_chat.mText = chat.mFromName + " ";
- mChatHistory->appendWidgetMessage(add_chat, append_style_params);
+ mChatHistory->appendMessage(add_chat, false, append_style_params);
}
message = message.substr(3);
@@ -182,7 +182,7 @@ void LLNearbyChat::addMessage(const LLChat& chat)
}
else
{
- mChatHistory->appendWidgetMessage(chat);
+ mChatHistory->appendMessage(chat);
}
}
}
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 4be98201d1..f01f2e4441 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -38,9 +38,13 @@
#include "llviewercontrol.h"
#include "llviewerwindow.h"
#include "llnotificationmanager.h"
+#include "llscriptfloater.h"
using namespace LLNotificationsUI;
+static const std::string SCRIPT_DIALOG ("ScriptDialog");
+static const std::string SCRIPT_DIALOG_GROUP ("ScriptDialogGroup");
+
//--------------------------------------------------------------------------
LLScriptHandler::LLScriptHandler(e_notification_type type, const LLSD& id)
{
@@ -90,25 +94,40 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
{
- LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
-
- LLToast::Params p;
- p.notif_id = notification->getID();
- p.notification = notification;
- p.panel = notify_box;
- p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1);
-
- LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
- if(channel)
- channel->addToast(p);
-
- // send a signal to the counter manager
- mNewNotificationSignal();
-
+ if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName())
+ {
+ LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
+ }
+ else
+ {
+ LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
+
+ LLToast::Params p;
+ p.notif_id = notification->getID();
+ p.notification = notification;
+ p.panel = notify_box;
+ p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1);
+
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+ if(channel)
+ {
+ channel->addToast(p);
+ }
+
+ // send a signal to the counter manager
+ mNewNotificationSignal();
+ }
}
else if (notify["sigtype"].asString() == "delete")
{
- mChannel->killToastByNotificationID(notification->getID());
+ if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName())
+ {
+ LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+ }
+ else
+ {
+ mChannel->killToastByNotificationID(notification->getID());
+ }
}
return true;
}
@@ -123,6 +142,14 @@ void LLScriptHandler::onDeleteToast(LLToast* toast)
// send a signal to a listener to let him perform some action
// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
mNotificationIDSignal(toast->getNotificationID());
+
+ LLNotificationPtr notification = LLNotifications::getInstance()->find(toast->getNotificationID());
+
+ if( notification &&
+ (SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) )
+ {
+ LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+ }
}
//--------------------------------------------------------------------------
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index 03ad19f911..7563cc7f61 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -92,7 +92,7 @@ void LLPanelAvatarTag::setAvatarId(const LLUUID& avatar_id)
boost::signals2::connection LLPanelAvatarTag::setLeftButtonClickCallback(
const commit_callback_t& cb)
{
- return mCommitSignal.connect(cb);
+ return setCommitCallback(cb);
}
BOOL LLPanelAvatarTag::handleMouseDown(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 10b419dfdb..e24fa14e1e 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -67,6 +67,27 @@ static const std::string TRASH_BUTTON_NAME = "trash_btn";
// helper functions
static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string);
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLLandmarksPanelObserver
+//
+// Bridge to support knowing when the inventory has changed to update
+// landmarks accordions visibility.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLLandmarksPanelObserver : public LLInventoryObserver
+{
+public:
+ LLLandmarksPanelObserver(LLLandmarksPanel* lp) : mLP(lp) {}
+ virtual ~LLLandmarksPanelObserver() {}
+ /*virtual*/ void changed(U32 mask);
+
+private:
+ LLLandmarksPanel* mLP;
+};
+
+void LLLandmarksPanelObserver::changed(U32 mask)
+{
+ mLP->updateFilteredAccordions();
+}
LLLandmarksPanel::LLLandmarksPanel()
: LLPanelPlacesTab()
@@ -80,11 +101,16 @@ LLLandmarksPanel::LLLandmarksPanel()
, mGearLandmarkMenu(NULL)
, mDirtyFilter(false)
{
+ mInventoryObserver = new LLLandmarksPanelObserver(this);
+ gInventory.addObserver(mInventoryObserver);
+
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
}
LLLandmarksPanel::~LLLandmarksPanel()
{
+ if (gInventory.containsObserver(mInventoryObserver))
+ gInventory.removeObserver(mInventoryObserver);
}
BOOL LLLandmarksPanel::postBuild()
@@ -135,8 +161,14 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
LLAccordionCtrlTab* tab = *iter;
tab->setVisible(true);
- // expand accordion to see matched items in all ones. See EXT-2014.
+ // expand accordion to see matched items in each one. See EXT-2014.
tab->changeOpenClose(false);
+
+ // refresh all accordions to display their contents in case of less restrictive filter
+ LLInventorySubTreePanel* inventory_list = dynamic_cast<LLInventorySubTreePanel*>(tab->getAccordionView());
+ if (NULL == inventory_list) continue;
+ LLFolderView* fv = inventory_list->getRootFolder();
+ fv->refresh();
}
}
@@ -223,6 +255,31 @@ void LLLandmarksPanel::onSelectorButtonClicked()
}
}
+void LLLandmarksPanel::updateFilteredAccordions()
+{
+ LLInventoryPanel* inventory_list = NULL;
+ LLAccordionCtrlTab* accordion_tab = NULL;
+ for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
+ {
+ accordion_tab = *iter;
+ inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
+ if (NULL == inventory_list) continue;
+ LLFolderView* fv = inventory_list->getRootFolder();
+
+ bool has_descendants = fv->hasFilteredDescendants();
+
+ accordion_tab->setVisible(has_descendants);
+ }
+
+ // we have to arrange accordion tabs for cases when filter string is less restrictive but
+ // all items are still filtered.
+ static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
+ accordion->arrange();
+
+ // now filter state is applied to accordion tabs
+ mDirtyFilter = false;
+}
+
//////////////////////////////////////////////////////////////////////////
// PROTECTED METHODS
//////////////////////////////////////////////////////////////////////////
@@ -833,31 +890,6 @@ void LLLandmarksPanel::doIdle(void* landmarks_panel)
}
-void LLLandmarksPanel::updateFilteredAccordions()
-{
- LLInventoryPanel* inventory_list = NULL;
- LLAccordionCtrlTab* accordion_tab = NULL;
- for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
- {
- accordion_tab = *iter;
- inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
- if (NULL == inventory_list) continue;
- LLFolderView* fv = inventory_list->getRootFolder();
-
- bool has_visible_children = fv->hasVisibleChildren();
-
- accordion_tab->setVisible(has_visible_children);
- }
-
- // we have to arrange accordion tabs for cases when filter string is less restrictive but
- // all items are still filtered.
- static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
- accordion->arrange();
-
- // now filter state is applied to accordion tabs
- mDirtyFilter = false;
-}
-
void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark)
{
LLVector3d landmark_global_pos;
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 777ee562d2..c65abc178b 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -46,6 +46,7 @@ class LLAccordionCtrlTab;
class LLFolderViewItem;
class LLMenuGL;
class LLInventoryPanel;
+class LLInventoryObserver;
class LLInventorySubTreePanel;
class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver
@@ -62,7 +63,14 @@ public:
void onSelectionChange(LLInventorySubTreePanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
void onSelectorButtonClicked();
-
+
+ /**
+ * Updates accordions according to filtered items in lists.
+ *
+ * It hides accordion for empty lists
+ */
+ void updateFilteredAccordions();
+
protected:
/**
* @return true - if current selected panel is not null and selected item is a landmark
@@ -122,13 +130,6 @@ private:
static void doIdle(void* landmarks_panel);
/**
- * Updates accordions according to filtered items in lists.
- *
- * It hides accordion for empty lists
- */
- void updateFilteredAccordions();
-
- /**
* Landmark actions callbacks. Fire when a landmark is loaded from the list.
*/
void doShowOnMap(LLLandmark* landmark);
@@ -147,6 +148,7 @@ private:
LLMenuGL* mGearFolderMenu;
LLMenuGL* mMenuAdd;
LLInventorySubTreePanel* mCurrentSelectedList;
+ LLInventoryObserver* mInventoryObserver;
LLPanel* mListCommands;
bool mSortByDate;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index dbe0ec3b86..4237681c80 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -41,6 +41,7 @@
#include "llpanelobjectinventory.h"
+#include "llmenugl.h"
#include "roles_constants.h"
#include "llagent.h"
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 29f7cc1851..0c832defd7 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -483,7 +483,7 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva
BOOL LLPanelPeople::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));
mFilterEditor = getChild<LLFilterEditor>("filter_input");
mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2));
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index d4ab5013f9..bcf5b16aa6 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -190,7 +190,7 @@ void LLPanelProfileView::processOnlineStatus(bool online)
void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)
{
llassert(getAvatarId() == id);
- getChild<LLTextBox>("user_name", FALSE)->setValue(first_name + " " + last_name);
+ getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);
}
void LLPanelProfileView::togglePanel(LLPanel* panel)
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 49a2a3723d..3d2c529dda 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -355,7 +355,7 @@ LLPreviewGesture::~LLPreviewGesture()
BOOL LLPreviewGesture::postBuild()
{
- mVisibleSignal.connect(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2));
+ setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2));
LLLineEditor* edit;
LLComboBox* combo;
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 24505f6bd6..fb9db42cf6 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -46,6 +46,7 @@
#include "lldockablefloater.h"
#include "llsyswellwindow.h"
#include "llimfloater.h"
+#include "llscriptfloater.h"
#include <algorithm>
@@ -686,7 +687,8 @@ void LLScreenChannel::updateShowToastsState()
}
// for IM floaters showed in a docked state - prohibit showing of ani toast
- if(dynamic_cast<LLIMFloater*>(floater))
+ if(dynamic_cast<LLIMFloater*>(floater)
+ || dynamic_cast<LLScriptFloater*>(floater) )
{
setShowToasts(!(floater->getVisible() && floater->isDocked()));
if (!getShowToasts())
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
new file mode 100644
index 0000000000..bdea6ff459
--- /dev/null
+++ b/indra/newview/llscriptfloater.cpp
@@ -0,0 +1,335 @@
+/**
+ * @file llscriptfloater.cpp
+ * @brief LLScriptFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llscriptfloater.h"
+
+#include "llbottomtray.h"
+#include "llchannelmanager.h"
+#include "llchiclet.h"
+#include "llfloaterreg.h"
+#include "llscreenchannel.h"
+#include "lltoastnotifypanel.h"
+#include "llviewerwindow.h"
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLUUID notification_id_to_object_id(const LLUUID& notification_id)
+{
+ LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+ if(notification)
+ {
+ return notification->getPayload()["object_id"].asUUID();
+ }
+ return LLUUID::null;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLScriptFloater::LLScriptFloater(const LLSD& key)
+: LLTransientDockableFloater(NULL, true, key)
+, mScriptForm(NULL)
+, mObjectId(key.asUUID())
+{
+}
+
+bool LLScriptFloater::toggle(const LLUUID& object_id)
+{
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+
+ // show existing floater
+ if(floater)
+ {
+ if(floater->getVisible())
+ {
+ floater->setVisible(false);
+ return false;
+ }
+ else
+ {
+ floater->setVisible(TRUE);
+ floater->setFocus(TRUE);
+ return true;
+ }
+ }
+ // create and show new floater
+ else
+ {
+ show(object_id);
+ return true;
+ }
+}
+
+LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id)
+{
+ LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", object_id);
+ floater->createForm(object_id);
+
+ if (floater->getDockControl() == NULL)
+ {
+ LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(object_id);
+ if (chiclet == NULL)
+ {
+ llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
+ }
+ else
+ {
+ LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
+ }
+
+ floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
+ LLDockControl::TOP, boost::bind(&LLScriptFloater::getAllowedRect, floater, _1)));
+ }
+
+ return floater;
+}
+
+void LLScriptFloater::getAllowedRect(LLRect& rect)
+{
+ rect = gViewerWindow->getWorldViewRectRaw();
+}
+
+void LLScriptFloater::createForm(const LLUUID& object_id)
+{
+ // delete old form
+ if(mScriptForm)
+ {
+ removeChild(mScriptForm);
+ mScriptForm->die();
+ }
+
+ LLNotificationPtr notification = LLNotifications::getInstance()->find(
+ LLScriptFloaterManager::getInstance()->findNotificationId(object_id));
+ if(NULL == notification)
+ {
+ return;
+ }
+
+ // create new form
+ mScriptForm = new LLToastNotifyPanel(notification);
+ addChild(mScriptForm);
+
+ // position form on floater
+ mScriptForm->setOrigin(0, 0);
+
+ // make floater size fit form size
+ LLRect toast_rect = getRect();
+ LLRect panel_rect = mScriptForm->getRect();
+ toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
+ setShape(toast_rect);
+}
+
+void LLScriptFloater::onClose(bool app_quitting)
+{
+ LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+}
+
+void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
+{
+ LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+
+ hideToastsIfNeeded();
+}
+
+void LLScriptFloater::setVisible(BOOL visible)
+{
+ LLTransientDockableFloater::setVisible(visible);
+
+ hideToastsIfNeeded();
+}
+
+void LLScriptFloater::hideToastsIfNeeded()
+{
+ using namespace LLNotificationsUI;
+
+ // find channel
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
+ LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+ // update notification channel state
+ if(channel)
+ {
+ channel->updateShowToastsState();
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
+{
+ // get scripted Object's ID
+ LLUUID object_id = notification_id_to_object_id(notification_id);
+ if(object_id.isNull())
+ {
+ llwarns << "Invalid notification, no object id" << llendl;
+ return;
+ }
+
+ // If an Object spawns more-than-one floater, only the newest one is shown.
+ // The previous is automatically closed.
+ script_notification_map_t::iterator it = mNotifications.find(object_id);
+ if(it != mNotifications.end())
+ {
+ onRemoveNotification(notification_id);
+ }
+
+ LLNotificationData nd = {notification_id};
+ mNotifications.insert(std::make_pair(object_id, nd));
+
+ LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(object_id);
+}
+
+void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
+{
+ LLUUID object_id = notification_id_to_object_id(notification_id);
+ if(object_id.isNull())
+ {
+ llwarns << "Invalid notification, no object id" << llendl;
+ return;
+ }
+
+ using namespace LLNotificationsUI;
+
+ // remove related toast
+ LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID"));
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>
+ (LLChannelManager::getInstance()->findChannelByID(channel_id));
+ if(channel)
+ {
+ channel->killToastByNotificationID(findNotificationToastId(object_id));
+ }
+
+ mNotifications.erase(object_id);
+
+ // remove related chiclet
+ LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id);
+
+ // close floater
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+ if(floater)
+ {
+ floater->closeFloater();
+ }
+}
+
+void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id)
+{
+ // Check we have not removed notification yet
+ LLNotificationPtr notification = LLNotifications::getInstance()->find(
+ findNotificationId(object_id));
+ if(notification)
+ {
+ onRemoveNotification(notification->getID());
+ }
+}
+
+void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& object_id)
+{
+ // hide "new message" icon from chiclet
+ LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(object_id);
+ if(chiclet)
+ {
+ chiclet->setShowNewMessagesIcon(false);
+ }
+
+ // kill toast
+ using namespace LLNotificationsUI;
+ LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
+ LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+ if(channel)
+ {
+ channel->killToastByNotificationID(findNotificationToastId(object_id));
+ }
+
+ // toggle floater
+ LLScriptFloater::toggle(object_id);
+}
+
+void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id)
+{
+ script_notification_map_t::iterator it = mNotifications.find(object_id);
+ if(mNotifications.end() != it)
+ {
+ it->second.toast_notification_id = notification_id;
+ }
+}
+
+LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
+{
+ script_notification_map_t::const_iterator it = mNotifications.find(object_id);
+ if(mNotifications.end() != it)
+ {
+ return it->second.notification_id;
+ }
+ return LLUUID::null;
+}
+
+LLUUID LLScriptFloaterManager::findNotificationToastId(const LLUUID& object_id)
+{
+ script_notification_map_t::const_iterator it = mNotifications.find(object_id);
+ if(mNotifications.end() != it)
+ {
+ return it->second.toast_notification_id;
+ }
+ return LLUUID::null;
+}
+
+//static
+void LLScriptFloaterManager::onToastButtonClick(const LLSD&notification, const LLSD&response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
+ LLUUID object_id = notification["payload"]["object_id"].asUUID();
+
+ switch(option)
+ {
+ case 0: // "Open"
+ LLScriptFloaterManager::getInstance()->toggleScriptFloater(object_id);
+ break;
+ case 1: // "Ignore"
+ LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id);
+ break;
+ case 2: // "Block"
+ LLMuteList::getInstance()->add(LLMute(object_id, notification["substitutions"]["TITLE"], LLMute::OBJECT));
+ LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id);
+ break;
+ default:
+ llwarns << "Unexpected value" << llendl;
+ break;
+ }
+}
+
+// EOF
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
new file mode 100644
index 0000000000..0e1a7f36b7
--- /dev/null
+++ b/indra/newview/llscriptfloater.h
@@ -0,0 +1,164 @@
+/**
+ * @file llscriptfloater.h
+ * @brief LLScriptFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SCRIPTFLOATER_H
+#define LL_SCRIPTFLOATER_H
+
+#include "lltransientdockablefloater.h"
+
+class LLToastNotifyPanel;
+
+/**
+ * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
+ * and manages Script Floaters.
+ */
+class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
+{
+public:
+
+ /**
+ * Handles new notifications.
+ * Saves notification and object ids, removes old notification if needed, creates script chiclet
+ * Note that one object can spawn one script floater.
+ */
+ void onAddNotification(const LLUUID& notification_id);
+
+ /**
+ * Handles notification removal.
+ * Removes script notification toast, removes script chiclet, closes script floater
+ */
+ void onRemoveNotification(const LLUUID& notification_id);
+
+ /**
+ * Wrapper for onRemoveNotification, removes notification by object id.
+ */
+ void removeNotificationByObjectId(const LLUUID& object_id);
+
+ /**
+ * Toggles script floater.
+ * Removes "new message" icon from chiclet and removes notification toast.
+ */
+ void toggleScriptFloater(const LLUUID& object_id);
+
+ LLUUID findNotificationId(const LLUUID& object_id);
+
+ LLUUID findNotificationToastId(const LLUUID& object_id);
+
+ /**
+ * Associate notification toast id with object id.
+ */
+ void setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id);
+
+ /**
+ * Callback for notification toast buttons.
+ */
+ static void onToastButtonClick(const LLSD&notification, const LLSD&response);
+
+private:
+
+ struct LLNotificationData
+ {
+ LLUUID notification_id;
+ LLUUID toast_notification_id;
+ };
+
+ // <object_id, notification_data>
+ typedef std::map<LLUUID, LLNotificationData> script_notification_map_t;
+
+ script_notification_map_t mNotifications;
+};
+
+/**
+ * Floater script forms.
+ * LLScriptFloater will create script form based on notification data and
+ * will auto fit the form.
+ */
+class LLScriptFloater : public LLTransientDockableFloater
+{
+public:
+
+ /**
+ * key - UUID of scripted Object
+ */
+ LLScriptFloater(const LLSD& key);
+
+ virtual ~LLScriptFloater(){};
+
+ /**
+ * Toggle existing floater or create and show a new one.
+ */
+ static bool toggle(const LLUUID& object_id);
+
+ /**
+ * Creates and shows floater
+ */
+ static LLScriptFloater* show(const LLUUID& object_id);
+
+ const LLUUID& getObjectId() { return mObjectId; }
+
+ /**
+ * Close notification if script floater is closed.
+ */
+ /*virtual*/ void onClose(bool app_quitting);
+
+ /**
+ * Hide all notification toasts when we show dockable floater
+ */
+ /*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
+
+ /**
+ * Hide all notification toasts when we show dockable floater
+ */
+ /*virtual*/ void setVisible(BOOL visible);
+
+protected:
+
+ /**
+ * Creates script form, will delete old form if floater is shown for same object.
+ */
+ void createForm(const LLUUID& object_id);
+
+ /*virtual*/ void getAllowedRect(LLRect& rect);
+
+ /**
+ * Hide all notification toasts.
+ */
+ static void hideToastsIfNeeded();
+
+ void setObjectId(const LLUUID& id) { mObjectId = id; }
+
+private:
+ LLToastNotifyPanel* mScriptForm;
+ LLUUID mObjectId;
+};
+
+#endif //LL_SCRIPTFLOATER_H
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 7711f3c733..2f98435b83 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -34,6 +34,7 @@
#include "lltextbox.h"
+#include "llagent.h"
#include "llbottomtray.h"
#include "llsidetray.h"
#include "llviewerwindow.h"
@@ -700,7 +701,7 @@ void LLSideTray::updateSidetrayVisibility()
// set visibility of parent container based on collapsed state
if (getParent())
{
- getParent()->setVisible(!mCollapsed);
+ getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook());
}
}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 54652c1108..7321574681 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -120,7 +120,7 @@ public:
void setVisible(BOOL visible)
{
- LLPanel::setVisible(visible);
+ if (getParent()) getParent()->setVisible(visible);
}
LLPanel* getButtonsPanel() { return mButtonsPanel; }
@@ -141,6 +141,7 @@ public:
void processTriState ();
+ void updateSidetrayVisibility();
protected:
LLSideTrayTab* getTab (const std::string& name);
@@ -153,10 +154,6 @@ protected:
void toggleTabButton (LLSideTrayTab* tab);
- void updateSidetrayVisibility();
-
-
-
private:
// Implementation of LLDestroyClass<LLSideTray>
static void destroyClass()
@@ -166,7 +163,6 @@ private:
LLSideTray::getInstance()->setEnabled(FALSE);
}
-
private:
LLPanel* mButtonsPanel;
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 3ce3549961..bdaacce981 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -34,7 +34,6 @@
#define LL_LLSTATUSBAR_H
#include "llpanel.h"
-#include <llmenugl.h>
// "Constants" loaded from settings.xml at start time
extern S32 STATUS_BAR_HEIGHT;
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index bc886d5743..cc4689062e 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -52,7 +52,7 @@
const std::string& LLTeleportHistoryItem::getTitle() const
{
- return gSavedSettings.getBOOL("ShowCoordinatesOption") ? mFullTitle : mTitle;
+ return gSavedSettings.getBOOL("NavBarShowCoordinates") ? mFullTitle : mTitle;
}
//////////////////////////////////////////////////////////////////////////////
@@ -177,7 +177,7 @@ void LLTeleportHistory::purgeItems()
std::string LLTeleportHistory::getCurrentLocationTitle(bool full, const LLVector3& local_pos_override)
{
std::string location_name;
- LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM : LLAgentUI::LOCATION_FORMAT_NORMAL;
+ LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_NO_MATURITY : LLAgentUI::LOCATION_FORMAT_NORMAL;
if (!LLAgentUI::buildLocationString(location_name, fmt, local_pos_override)) location_name = "Unknown";
return location_name;
diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h
index 9f5563ed0b..a82bec7c4f 100644
--- a/indra/newview/llteleporthistory.h
+++ b/indra/newview/llteleporthistory.h
@@ -57,7 +57,8 @@ public:
{}
/**
- * @return title formatted according to the current value of the ShowCoordinatesOption setting.
+ * @return title formatted according to the current value of the
+ * NavBarShowCoordinates setting.
*/
const std::string& getTitle() const;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6f3dabe5a7..9bb2a4ad0a 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -931,6 +931,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mState == DECODE_IMAGE)
{
+ if (mDesiredDiscard < 0)
+ {
+ // We aborted, don't decode
+ mState = DONE;
+ setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
+ return true;
+ }
+
if (mFormattedImage->getDataSize() <= 0)
{
llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index ded83debad..26b3bdb82e 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -247,7 +247,7 @@ bool LLToolMgr::inEdit()
bool LLToolMgr::canEdit()
{
- return LLViewerParcelMgr::getInstance()->agentCanBuild();
+ return LLViewerParcelMgr::getInstance()->allowAgentBuild();
}
void LLToolMgr::toggleBuildMode()
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 7772f613f0..642df92379 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -109,6 +109,7 @@
#include "llfloaterwhitelistentry.h"
#include "llfloaterwindlight.h"
#include "llfloaterworldmap.h"
+#include "llimfloatercontainer.h"
#include "llinspectavatar.h"
#include "llinspectgroup.h"
#include "llinspectobject.h"
@@ -124,6 +125,7 @@
#include "llpreviewsound.h"
#include "llpreviewtexture.h"
#include "llsyswellwindow.h"
+#include "llscriptfloater.h"
// *NOTE: Please add files in alphabetical order to keep merges easy.
@@ -171,6 +173,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);
LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>);
+ LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloaterContainer>);
+ LLFloaterReg::add("script_floater", "floater_script.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLScriptFloater>);
LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);
LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>);
LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c67af994a4..8bcf2c6281 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2736,7 +2736,7 @@ bool enable_object_edit()
bool enable = false;
if (gAgent.inPrelude())
{
- enable = LLViewerParcelMgr::getInstance()->agentCanBuild()
+ enable = LLViewerParcelMgr::getInstance()->allowAgentBuild()
|| LLSelectMgr::getInstance()->getSelection()->isAttachment();
}
else if (LLSelectMgr::getInstance()->selectGetModify())
@@ -5678,6 +5678,16 @@ class LLFloaterVisible : public view_listener_t
}
};
+class LLShowSidetrayPanel : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ std::string panel_name = userdata.asString();
+ LLSideTray::getInstance()->showPanel(panel_name, LLSD());
+ return true;
+ }
+};
+
bool callback_show_url(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotification::getSelectedOption(notification, response);
@@ -6096,7 +6106,7 @@ class LLAttachmentEnableDrop : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild());
+ BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->allowAgentBuild());
//Add an inventory observer to only allow dropping the newly attached item
//once it exists in your inventory. Look at Jira 2422.
@@ -8039,6 +8049,7 @@ void initialize_menus()
visible.add("Object.VisibleEdit", boost::bind(&enable_object_edit));
view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible");
+ view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel");
view_listener_t::addMenu(new LLSomethingSelected(), "SomethingSelected");
view_listener_t::addMenu(new LLSomethingSelectedNoHUD(), "SomethingSelectedNoHUD");
view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index eaffa75298..adad06dc6f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -101,6 +101,7 @@
#include "llpanelgrouplandmoney.h"
#include "llpanelplaces.h"
#include "llrecentpeople.h"
+#include "llscriptfloater.h"
#include "llselectmgr.h"
#include "llsidetray.h"
#include "llstartup.h"
@@ -5534,6 +5535,17 @@ void process_script_dialog(LLMessageSystem* msg, void**)
notification = LLNotifications::instance().add(
LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
}
+
+ // "ScriptDialog" and "ScriptDialogGroup" are handles by LLScriptFloaterManager.
+ // We want to inform user that there is a script floater, lets add "ScriptToast"
+ LLNotification::Params p("ScriptToast");
+ p.substitutions(args).payload(payload).functor.function(boost::bind(
+ LLScriptFloaterManager::onToastButtonClick, _1, _2));
+
+ notification = LLNotifications::instance().add(p);
+
+ LLScriptFloaterManager::getInstance()->setNotificationToastId(
+ object_id, notification->getID());
}
//---------------------------------------------------------------------------
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index aa0987aa7d..fcaf49c884 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -650,7 +650,7 @@ LLParcel *LLViewerParcelMgr::getAgentParcel() const
}
// Return whether the agent can build on the land they are on
-bool LLViewerParcelMgr::agentCanBuild() const
+bool LLViewerParcelMgr::allowAgentBuild() const
{
if (mAgentParcel)
{
@@ -664,19 +664,47 @@ bool LLViewerParcelMgr::agentCanBuild() const
}
}
-BOOL LLViewerParcelMgr::agentCanTakeDamage() const
+bool LLViewerParcelMgr::allowAgentVoice() const
{
- return mAgentParcel->getAllowDamage();
+ LLViewerRegion* region = gAgent.getRegion();
+ return region && region->isVoiceEnabled()
+ && mAgentParcel && mAgentParcel->getParcelFlagAllowVoice();
}
-BOOL LLViewerParcelMgr::agentCanFly() const
+bool LLViewerParcelMgr::allowAgentFly() const
{
- return TRUE;
+ LLViewerRegion* region = gAgent.getRegion();
+ return region && !region->getBlockFly()
+ && mAgentParcel && mAgentParcel->getAllowFly();
}
-F32 LLViewerParcelMgr::agentDrawDistance() const
+// Can the agent be pushed around by LLPushObject?
+bool LLViewerParcelMgr::allowAgentPush() const
{
- return 512.f;
+ LLViewerRegion* region = gAgent.getRegion();
+ return region && !region->getRestrictPushObject()
+ && mAgentParcel && !mAgentParcel->getRestrictPushObject();
+}
+
+bool LLViewerParcelMgr::allowAgentScripts() const
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ // *NOTE: This code does not take into account group-owned parcels
+ // and the flag to allow group-owned scripted objects to run.
+ // This mirrors the traditional menu bar parcel icon code, but is not
+ // technically correct.
+ return region
+ && !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
+ && !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)
+ && mAgentParcel
+ && mAgentParcel->getAllowOtherScripts();
+}
+
+bool LLViewerParcelMgr::allowAgentDamage() const
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ return region && region->getAllowDamage()
+ && mAgentParcel && mAgentParcel->getAllowDamage();
}
BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 1c8fe23dba..379190789b 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -56,9 +56,6 @@ class LLViewerRegion;
// | EAST_MASK
// | WEST_MASK);
-const F32 PARCEL_POST_HEIGHT = 0.666f;
-//const F32 PARCEL_POST_HEIGHT = 20.f;
-
// Specify the type of land transfer taking place
//enum ELandTransferType
//{
@@ -171,10 +168,29 @@ public:
LLParcel* getCollisionParcel() const;
- BOOL agentCanTakeDamage() const;
- BOOL agentCanFly() const;
- F32 agentDrawDistance() const;
- bool agentCanBuild() const;
+ // Can this agent build on the parcel he is on?
+ // Used for parcel property icons in nav bar.
+ bool allowAgentBuild() const;
+
+ // Can this agent speak on the parcel he is on?
+ // Used for parcel property icons in nav bar.
+ bool allowAgentVoice() const;
+
+ // Can this agent start flying on this parcel?
+ // Used for parcel property icons in nav bar.
+ bool allowAgentFly() const;
+
+ // Can this agent be pushed by llPushObject() on this parcel?
+ // Used for parcel property icons in nav bar.
+ bool allowAgentPush() const;
+
+ // Can scripts written by non-parcel-owners run on the agent's current
+ // parcel? Used for parcel property icons in nav bar.
+ bool allowAgentScripts() const;
+
+ // Can the agent be damaged here?
+ // Used for parcel property icons in nav bar.
+ bool allowAgentDamage() const;
F32 getHoverParcelWidth() const
{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); }
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index db66faef81..29d40d073c 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1573,7 +1573,8 @@ void LLViewerWindow::initWorldUI()
LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
LLSideTray* sidetrayp = LLSideTray::getInstance();
sidetrayp->setShape(side_tray_container->getLocalRect());
- sidetrayp->setFollowsAll();
+ // don't follow right edge to avoid spurious resizes, since we are using a fixed width layout
+ sidetrayp->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_BOTTOM);
side_tray_container->addChild(sidetrayp);
side_tray_container->setVisible(FALSE);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 507c726e02..5aad87630d 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -344,7 +344,12 @@ LLPipeline::LLPipeline() :
mWLSkyPool(NULL),
mLightMask(0),
mLightMovingMask(0),
- mLightingDetail(0)
+ mLightingDetail(0),
+ mScreenWidth(0),
+ mScreenHeight(0),
+ mViewportWidth(0),
+ mViewportHeight(0)
+
{
mNoiseMap = 0;
mTrueNoiseMap = 0;
@@ -518,13 +523,29 @@ void LLPipeline::resizeScreenTexture()
GLuint view_height = gViewerWindow->getWorldViewHeightRaw();
allocateScreenBuffer(resX, resY, view_width, view_height);
-
- llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
}
}
void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height)
{
+ bool screen_size_changed = resX != mScreenWidth || resY != mScreenHeight;
+ bool viewport_size_changed = viewport_width != mViewportWidth || viewport_height != mViewportHeight;
+
+ if (!screen_size_changed
+ && !viewport_size_changed)
+ {
+ // nothing to do
+ return;
+ }
+
+ // remember these dimensions
+ mScreenWidth = resX;
+ mScreenHeight = resY;
+ mViewportWidth = viewport_width;
+ mViewportHeight = viewport_height;
+
+ llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
+
U32 samples = gSavedSettings.getU32("RenderFSAASamples");
U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
@@ -534,7 +555,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
resY /= res_mod;
}
- if (gSavedSettings.getBOOL("RenderUIBuffer"))
+ if (gSavedSettings.getBOOL("RenderUIBuffer")
+ && screen_size_changed)
{
mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
}
@@ -542,25 +564,39 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
if (LLPipeline::sRenderDeferred)
{
//allocate deferred rendering color buffers
- mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
- mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (screen_size_changed)
+ {
+ mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ addDeferredAttachments(mDeferredScreen);
+ }
+ // always set viewport to desired size, since allocate resets the viewport
mDeferredScreen.setViewport(viewport_width, viewport_height);
mDeferredDepth.setViewport(viewport_width, viewport_height);
- addDeferredAttachments(mDeferredScreen);
- mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
- mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+
+ if (screen_size_changed)
+ {
+ mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ }
mScreen.setViewport(viewport_width, viewport_height);
mEdgeMap.setViewport(viewport_width, viewport_height);
for (U32 i = 0; i < 3; i++)
{
- mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (screen_size_changed)
+ {
+ mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ }
mDeferredLight[i].setViewport(viewport_width, viewport_height);
}
for (U32 i = 0; i < 2; i++)
{
- mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (screen_size_changed)
+ {
+ mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ }
mGIMapPost[i].setViewport(viewport_width, viewport_height);
}
@@ -568,7 +604,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
for (U32 i = 0; i < 4; i++)
{
- mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (screen_size_changed)
+ {
+ mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ }
mShadow[i].setViewport(viewport_width, viewport_height);
}
@@ -578,7 +617,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
for (U32 i = 4; i < 6; i++)
{
- mShadow[i].allocate(width, height, 0, TRUE, FALSE);
+ if (screen_size_changed)
+ {
+ mShadow[i].allocate(width, height, 0, TRUE, FALSE);
+ }
mShadow[i].setViewport(viewport_width, viewport_height);
}
@@ -586,32 +628,41 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
width = nhpo2(resX)/2;
height = nhpo2(resY)/2;
- mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+ if (screen_size_changed)
+ {
+ mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+ }
mLuminanceMap.setViewport(viewport_width, viewport_height);
}
else
{
- mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (screen_size_changed)
+ {
+ mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ }
mScreen.setViewport(viewport_width, viewport_height);
}
if (gGLManager.mHasFramebufferMultisample && samples > 1)
{
- mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
- mSampleBuffer.setViewport(viewport_width, viewport_height);
- mScreen.setSampleBuffer(&mSampleBuffer);
-
- if (LLPipeline::sRenderDeferred)
+ if (screen_size_changed)
{
- addDeferredAttachments(mSampleBuffer);
- mDeferredScreen.setSampleBuffer(&mSampleBuffer);
+ mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
+ if (LLPipeline::sRenderDeferred)
+ {
+ addDeferredAttachments(mSampleBuffer);
+ mDeferredScreen.setSampleBuffer(&mSampleBuffer);
+ }
}
+ mSampleBuffer.setViewport(viewport_width, viewport_height);
+ mScreen.setSampleBuffer(&mSampleBuffer);
stop_glerror();
}
- if (LLPipeline::sRenderDeferred)
+ if (LLPipeline::sRenderDeferred
+ && screen_size_changed)
{ //share depth buffer between deferred targets
mDeferredScreen.shareDepthBuffer(mScreen);
for (U32 i = 0; i < 3; i++)
@@ -726,6 +777,10 @@ void LLPipeline::createGLBuffers()
mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE);
}
+ // force reallocation of buffers by clearing known dimensions
+ mScreenWidth = 0;
+ mScreenHeight = 0;
+
allocateScreenBuffer(resX,resY, viewport_width, viewport_height);
}
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 9193e19bb1..11b7b55f20 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -467,6 +467,11 @@ public:
static F32 sMinRenderSize;
//screen texture
+ U32 mScreenWidth;
+ U32 mScreenHeight;
+ U32 mViewportWidth;
+ U32 mViewportHeight;
+
LLRenderTarget mScreen;
LLRenderTarget mUIScreen;
LLRenderTarget mDeferredScreen;
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index 98f1f04b9a..aa3898ca99 100644
--- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
+++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
index a355917fca..598342ea80 100644
--- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
+++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index f4a239be62..99f6fc5cb3 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -50,8 +50,12 @@ with the same filename but different name
<texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" />
<texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" />
- <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" />
- <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" />
+ <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" />
+ <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" />
+
+ <texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" />
+ <texture name="Arrow_Small_Left" file_name="widgets/Arrow_Small_Left.png" preload="true" />
+ <texture name="Arrow_Small_Right" file_name="widgets/Arrow_Small_Right.png" preload="true" />
<texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" />
<texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" />
@@ -120,6 +124,7 @@ with the same filename but different name
<texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+ <texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="Container" file_name="containers/Container.png" preload="false" />
@@ -161,7 +166,7 @@ with the same filename but different name
<texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />
<texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />
<texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" />
- <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" />
+ <texture name="Generic_Object_Small" file_name="icons/Generic_Object_Small.png" preload="false" />
<texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />
<texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
<texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
@@ -439,6 +444,7 @@ with the same filename but different name
<texture name="Search" file_name="navbar/Search.png" preload="false" />
<texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
+ <texture name="SegmentedBtn_Left_Over" file_name="widgets/SegmentedBtn_Left_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Left_Press" file_name="widgets/SegmentedBtn_Left_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Left_Disabled" file_name="widgets/SegmentedBtn_Left_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Left_Selected" file_name="widgets/SegmentedBtn_Left_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
@@ -453,6 +459,7 @@ with the same filename but different name
<texture name="SegmentedBtn_Middle_Selected_Disabled" file_name="widgets/SegmentedBtn_Middle_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Right_Off" file_name="widgets/SegmentedBtn_Right_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
+ <texture name="SegmentedBtn_Right_Over" file_name="widgets/SegmentedBtn_Right_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Right_Press" file_name="widgets/SegmentedBtn_Right_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Right_Disabled" file_name="widgets/SegmentedBtn_Right_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
<texture name="SegmentedBtn_Right_Selected" file_name="widgets/SegmentedBtn_Right_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png
new file mode 100644
index 0000000000..2d624c3779
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
new file mode 100644
index 0000000000..91c03c426e
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
new file mode 100644
index 0000000000..38aac0e5ca
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png
new file mode 100644
index 0000000000..fd1d11dd0b
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png
Binary files differ
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 615d1bf18d..4f1024f56d 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
can_tear_off="false"
height="420"
@@ -215,7 +215,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</text>
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Profile..."
label_selected="Profile..."
@@ -247,7 +246,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
width="250" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Set..."
label_selected="Set..."
@@ -269,7 +267,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
<button
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Deed..."
label_selected="Deed..."
@@ -928,7 +925,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="100"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Show"
label_selected="Show"
@@ -940,7 +936,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="100"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Return..."
label_selected="Return..."
@@ -977,7 +972,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="120"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Show"
label_selected="Show"
@@ -989,7 +983,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="120"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Return..."
label_selected="Return..."
@@ -1026,7 +1019,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="140"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Show"
label_selected="Show"
@@ -1038,7 +1030,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
bottom="140"
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Return..."
label_selected="Return..."
@@ -1108,7 +1099,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</text>
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Refresh List"
label_selected="Refresh List"
@@ -1120,7 +1110,6 @@ Go to World menu &gt; About Land or select another parcel to show its details.
<button
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Return objects..."
label_selected="Return objects..."
@@ -1531,7 +1520,6 @@ Only large parcels can be listed in search.
</text>
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Set"
label_selected="Set"
@@ -1543,7 +1531,6 @@ Only large parcels can be listed in search.
width="50" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Clear"
label_selected="Clear"
@@ -1654,7 +1641,6 @@ Only large parcels can be listed in search.
text_readonly_color="0.576471 0.662745 0.835294 1" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Set..."
label_selected="Set..."
@@ -1685,7 +1671,6 @@ Only large parcels can be listed in search.
width="300" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Reset..."
label_selected="Reset..."
@@ -2119,7 +2104,6 @@ Texture:
width="80" />
<button
follows="bottom"
- font="SansSerifSmall"
height="16"
label="Remove"
label_selected="Remove"
@@ -2155,7 +2139,6 @@ Texture:
width="195" />
<button
follows="bottom"
- font="SansSerifSmall"
height="16"
label="Add..."
label_selected="Add..."
@@ -2167,7 +2150,6 @@ Texture:
<button
enabled="false"
follows="bottom"
- font="SansSerifSmall"
height="16"
label="Remove"
label_selected="Remove"
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index ebce758d3d..41b1f99d41 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -163,7 +163,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
follows="top|left|right"
height="23"
layout="topleft"
- left="85"
+ left="100"
name="name_form"
right="-10" />
<text
@@ -182,7 +182,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
follows="top|left|right"
height="23"
layout="topleft"
- left="85"
+ left="100"
name="description_form"
right="-10" />
<spinner
@@ -192,7 +192,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
increment="1"
initial_value="0"
label="Priority"
- label_width="90"
+ label_width="88"
layout="topleft"
left="10"
max_val="4"
@@ -214,14 +214,14 @@ Maximum animation length is [MAX_LENGTH] seconds.
increment="1"
initial_value="0"
label="In(%)"
- label_width="35"
+ label_width="49"
layout="topleft"
top_pad="5"
left="30"
max_val="100"
name="loop_in_point"
tool_tip="Sets point in animation that looping returns to"
- width="110" />
+ width="115" />
<spinner
bottom_delta="0"
follows="left|top"
@@ -234,8 +234,8 @@ Maximum animation length is [MAX_LENGTH] seconds.
max_val="100"
name="loop_out_point"
tool_tip="Sets point in animation that ends a loop"
- label_width="45"
- width="120" />
+ label_width="49"
+ width="115" />
<text
type="string"
length="1"
@@ -243,6 +243,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
follows="top|left"
height="23"
width="110"
+ word_wrap="true"
layout="topleft"
left="10"
name="hand_label">
@@ -315,6 +316,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
follows="top|left"
height="23"
width="110"
+ word_wrap="true"
layout="topleft"
left="10"
name="emote_label">
@@ -395,6 +397,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
follows="top|left"
height="23"
width="110"
+ word_wrap="true"
layout="topleft"
left="10"
name="preview_label">
@@ -482,6 +485,8 @@ Maximum animation length is [MAX_LENGTH] seconds.
<text
type="string"
length="1"
+ height="72"
+ word_wrap="true"
top_pad="5"
text_color="EmphasisColor"
follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index f0e678af00..56230e912c 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -15,14 +15,14 @@
height="23"
initial_value="1"
label="Grid Units (meters)"
- label_width="130"
+ label_width="160"
layout="topleft"
left="10"
max_val="5"
min_val="0.01"
name="GridResolution"
top="25"
- width="200" />
+ width="230" />
<spinner
control_name="GridDrawSize"
decimal_digits="1"
@@ -31,14 +31,14 @@
increment="0.5"
initial_value="5"
label="Grid Extents (meters)"
- label_width="130"
+ label_width="160"
layout="topleft"
left_delta="0"
max_val="50"
min_val="1"
name="GridDrawSize"
top_pad="0"
- width="200" />
+ width="230" />
<check_box
control_name="GridSubUnit"
height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 9d2a811d9f..275ab5bb8b 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -64,7 +64,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Body"
label_selected="Body"
@@ -75,7 +74,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Head"
label_selected="Head"
@@ -86,7 +84,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Eyes"
label_selected="Eyes"
@@ -97,7 +94,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Ears"
label_selected="Ears"
@@ -108,7 +104,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Nose"
label_selected="Nose"
@@ -119,7 +114,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Mouth"
label_selected="Mouth"
@@ -130,7 +124,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Chin"
label_selected="Chin"
@@ -141,7 +134,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Torso"
label_selected="Torso"
@@ -152,7 +144,6 @@
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Legs"
label_selected="Legs"
@@ -351,7 +342,6 @@ scratch and wear it.
width="16" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Skin Color"
label_selected="Skin Color"
@@ -362,7 +352,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Face Detail"
label_selected="Face Detail"
@@ -373,7 +362,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Makeup"
label_selected="Makeup"
@@ -384,7 +372,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Body Detail"
label_selected="Body Detail"
@@ -606,7 +593,6 @@ scratch and wear it.
width="16" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Color"
label_selected="Color"
@@ -617,7 +603,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Style"
label_selected="Style"
@@ -628,7 +613,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Eyebrows"
label_selected="Eyebrows"
@@ -639,7 +623,6 @@ scratch and wear it.
width="82" />
<button
follows="left|top"
- font="SansSerifSmall"
height="16"
label="Facial"
label_selected="Facial"
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
index 5233cb023d..5e78037ee1 100644
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml
@@ -136,7 +136,6 @@
width="210" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Use Estate Time"
layout="topleft"
@@ -146,7 +145,6 @@
width="137" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Advanced Sky"
layout="topleft"
@@ -156,7 +154,6 @@
width="137" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Advanced Water"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index 79eed52fbf..b01c0edc8b 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -191,7 +191,6 @@
</check_box>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Bake Terrain"
label_selected="Bake Terrain"
@@ -206,7 +205,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Revert Terrain"
label_selected="Revert Terrain"
@@ -220,7 +218,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Swap Terrain"
label_selected="Swap Terrain"
@@ -419,7 +416,6 @@
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Refresh"
label_selected="Refresh"
@@ -434,7 +430,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Apply"
label_selected="Apply"
@@ -449,7 +444,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Select Region"
label_selected="Select Region"
@@ -464,7 +458,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Autosave now"
label_selected="Autosave now"
@@ -556,7 +549,6 @@
</check_box>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Apply"
label_selected="Apply"
@@ -571,7 +563,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Set Target"
label_selected="Set Target"
@@ -598,7 +589,6 @@
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Delete Target&apos;s Scripted Objects On Others Land"
label_selected="Delete Target&apos;s Scripted Objects On Others Land"
@@ -613,7 +603,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Delete Target&apos;s Scripted Objects On *Any* Land"
label_selected="Delete Target&apos;s Scripted Objects On *Any* Land"
@@ -628,7 +617,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Delete *ALL* Of Target&apos;s Objects"
label_selected="Delete *ALL* Of Target&apos;s Objects"
@@ -643,7 +631,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="20"
label="Get Top Colliders"
label_selected="Get Top Colliders"
@@ -658,7 +645,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="20"
label="Get Top Scripts"
label_selected="Get Top Scripts"
@@ -673,7 +659,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="20"
label="Scripts digest"
label_selected="Scripts digest"
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
new file mode 100644
index 0000000000..cf6a4e45bd
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<multi_floater
+background_visible="true"
+bg_color="yellow"
+ can_resize="true"
+ height="390"
+ layout="topleft"
+ name="floater_im_box"
+ help_topic="floater_im_box"
+ save_rect="true"
+ save_visibility="true"
+ single_instance="true"
+ title="Instant Messages"
+ width="392">
+ <tab_container
+ follows="left|right|top|bottom"
+ height="390"
+ layout="topleft"
+ left="1"
+ name="im_box_tab_container"
+ tab_position="bottom"
+ tab_width="80"
+ top="0"
+ width="390" />
+ <icon
+ color="DefaultShadowLight"
+ enabled="false"
+ follows="left|right|bottom"
+ height="17"
+ image_name="tabarea.tga"
+ layout="bottomleft"
+ left="1"
+ name="im_box_tab_container_icon"
+ bottom="10"
+ width="390" />
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 01713cc003..7f2f37409c 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -9,7 +9,7 @@
name="panel_im"
top="0"
can_close="true"
- can_dock="true"
+ can_dock="false"
can_minimize="false"
visible="true"
width="300"
diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml
index 2562daf4b3..6f8f272128 100644
--- a/indra/newview/skins/default/xui/en/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml
@@ -47,9 +47,11 @@
<text
type="string"
length="1"
- bottom_delta="20"
+ bottom_delta="30"
follows="top|left"
- height="15"
+ height="25"
+ width="105"
+ word_wrap="true"
layout="topleft"
name="preview_label">
Preview image as:
@@ -96,7 +98,9 @@
<text
type="string"
length="1"
- bottom="190"
+ bottom="225"
+ height="45"
+ word_wrap="true"
follows="top|left"
layout="topleft"
left="10"
@@ -114,7 +118,7 @@ Try saving image as 24 bit Targa (.tga).
layout="topleft"
left_delta="2"
name="lossless_check"
- top_pad="197"
+ top_pad="162"
width="280" />
<button
follows="bottom|right"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 4ca6002c13..366098013b 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -106,12 +106,11 @@
left_delta="78"
name="LabelCreatorName"
top_delta="0"
- width="200">
+ width="170">
Nicole Linden
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="16"
label="Profile..."
layout="topleft"
@@ -140,12 +139,11 @@
left_delta="78"
name="LabelOwnerName"
top_delta="0"
- width="200">
+ width="170">
Thrax Linden
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="16"
label="Profile..."
layout="topleft"
@@ -257,12 +255,13 @@
type="string"
length="1"
follows="left|top"
- height="10"
+ height="25"
layout="topleft"
left="10"
name="NextOwnerLabel"
top_pad="5"
- width="78">
+ width="78"
+ word_wrap="true">
Next owner:
</text>
<check_box
@@ -303,7 +302,7 @@
layout="topleft"
follows="left|top"
name="combobox sale copy"
- width="90">
+ width="110">
<combo_box.item
label="Copy"
name="Copy"
@@ -319,14 +318,26 @@
increment="1"
control_name="Edit Cost"
name="Edit Cost"
- label="Price: L$"
- label_width="60"
+ label="Price:"
+ label_width="100"
left="10"
- width="180"
+ width="192"
min_val="1"
height="19"
max_val="999999999"
top_pad="5"/>
+ <text
+ type="string"
+ length="1"
+ height="15"
+ follows="left|top"
+ layout="topleft"
+ left_delta="82"
+ name="CurrencySymbol"
+ top_delta="1"
+ width="18">
+ L$
+ </text>
<!--line_editor
border_style="line"
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 5a8ffcebea..cff0c29dfc 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -151,8 +151,7 @@
top="2"
width="31" />
<button
- follows="left|bottom"
- font="SansSerifSmall"
+ follows="left|bottom"
height="23"
image_overlay="Move_Run_Off"
image_selected="PushButton_Selected_Press"
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 3fd118df1c..41a440aaa0 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -38,7 +38,6 @@
width="284" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="23"
label="Copy To Inventory"
label_selected="Copy To Inventory"
@@ -53,7 +52,6 @@
</button>
<button
follows="bottom|left"
- font="SansSerifSmall"
height="23"
label="Copy And Wear"
label_selected="Copy And Wear"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
index 3b84358484..bbfb362337 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
@@ -38,7 +38,6 @@
width="170" />
<button
height="20"
- font="SansSerifSmall"
label="Play in World"
label_selected="Stop"
layout="topleft"
@@ -49,7 +48,6 @@
width="125" />
<button
height="20"
- font="SansSerifSmall"
label="Play Locally"
label_selected="Stop"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
index 95347f0dff..68a78d5017 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
@@ -50,7 +50,6 @@
<button
follows="left|top"
height="22"
- font="SansSerifSmall"
label="Play Locally"
label_selected="Play Locally"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml
new file mode 100644
index 0000000000..f44ba6d873
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_script.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ background_visible="true"
+ follows="left|top|right|bottom"
+ height="369"
+ layout="topleft"
+ left="0"
+ name="script_floater"
+ help_topic="script_floater"
+ top="0"
+ can_dock="true"
+ can_minimize="true"
+ visible="true"
+ width="520"
+ can_resize="true"
+ min_width="350"
+ min_height="369">
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 2cf800fb15..e6a78563f3 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -205,7 +205,6 @@
width="130" />
<button
height="20"
- font="SansSerifSmall"
label="Select"
layout="topleft"
left_pad="5"
@@ -267,7 +266,6 @@
</radio_group>
<button
height="20"
- font="SansSerifSmall"
label="Show Objects"
layout="topleft"
name="show_objects"
@@ -290,7 +288,6 @@
<button
follows="bottom|left"
height="20"
- font="SansSerifSmall"
label="Set Land For Sale"
layout="topleft"
left_delta="0"
@@ -300,7 +297,6 @@
<button
follows="bottom|right"
height="20"
- font="SansSerifSmall"
label="Cancel"
layout="topleft"
left_pad="30"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 95a40e27f7..8860ac1e50 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -120,7 +120,6 @@
width="85" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="More &gt;&gt;"
layout="topleft"
@@ -131,7 +130,6 @@
width="80" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="&lt;&lt; Less"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml
index cc0ab8c57e..374f014908 100644
--- a/indra/newview/skins/default/xui/en/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/en/floater_telehub.xml
@@ -57,7 +57,6 @@
</text>
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Connect Telehub"
layout="topleft"
@@ -67,7 +66,6 @@
width="110" />
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Disconnect"
layout="topleft"
@@ -97,7 +95,6 @@
width="230" />
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Add Spawn"
layout="topleft"
@@ -107,7 +104,6 @@
width="110" />
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Remove Spawn"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml
index 2bd0d1a0fa..8c6ad5c0f7 100644
--- a/indra/newview/skins/default/xui/en/floater_test_button.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_button.xml
@@ -23,7 +23,6 @@
name="bottom_delta_button" />
<button
bottom_delta="30"
- font="SansSerifSmall"
height="23"
label="SansSerifSmall"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml
index 86ff82e01f..85d8bb2bb1 100644
--- a/indra/newview/skins/default/xui/en/floater_test_slider.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_resize="true"
- height="400"
+ height="500"
layout="topleft"
name="floater_test_slider"
help_topic="floater_test_slider"
@@ -84,4 +84,17 @@
name="red_slider"
text_color="red"
text_width="40" />
+ <slider
+ width ="140"
+ bottom="490"
+ decimal_digits="1"
+ height="100"
+ left="20"
+ label="Red Slider Vertical"
+ label_width="100"
+ layout="topleft"
+ name="red_slider_vertical"
+ text_color="red"
+ orientation="vertical"
+ text_width="20" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 4679ae467d..113da9ea4d 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -49,7 +49,6 @@
<button
enabled="false"
follows="left|bottom"
- font="SansSerifSmall"
height="20"
label="Default"
label_selected="Default"
@@ -61,7 +60,6 @@
<button
enabled="false"
follows="left|bottom"
- font="SansSerifSmall"
height="20"
label="None"
label_selected="None"
@@ -72,7 +70,6 @@
width="80" />
<button
follows="left|bottom"
- font="SansSerifSmall"
height="20"
label="Blank"
label_selected="Blank"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 8b6f0f03fe..636e9d465a 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -701,7 +701,6 @@
</slider_bar>
<button
follows="left|top"
- font="SansSerifSmall"
height="19"
label="Apply"
label_selected="Apply"
@@ -927,7 +926,6 @@
width="150" />
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Deed"
label_selected="Deed"
@@ -2606,7 +2604,6 @@ even though the user gets a free copy.
width="170" />
<button
follows="left|top"
- font="SansSerifSmall"
height="19"
label="Apply"
label_selected="Apply"
@@ -2742,7 +2739,6 @@ even though the user gets a free copy.
decouple_texture_size="true" />
<button
follows="left|top"
- font="SansSerifSmall"
height="19"
label="Align"
label_selected="Align Media"
diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml
index 1ab42cb140..29fb29fabf 100644
--- a/indra/newview/skins/default/xui/en/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml
@@ -32,7 +32,6 @@
<button
follows="top|left"
height="20"
- font="SansSerifSmall"
label="OK"
layout="topleft"
left="10"
@@ -42,7 +41,6 @@
<button
follows="top|left"
height="20"
- font="SansSerifSmall"
label="Cancel"
layout="topleft"
left_pad="5"
@@ -52,7 +50,6 @@
<button
follows="top|right"
height="20"
- font="SansSerifSmall"
label="Clear"
layout="topleft"
left_pad="65"
diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
index ef68d03a45..4ece0fa3ba 100644
--- a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
@@ -17,9 +17,9 @@
tool_tip="Enter a URL or URL pattern to White List"
width="350" />
- <button follows="top|left" height="20" font="SansSerifSmall" label="OK"
+ <button follows="top|left" height="20" label="OK"
layout="topleft" left="10" name="ok_btn" bottom_delta="28" width="64" />
- <button follows="top|left" height="20" font="SansSerifSmall" label="Cancel"
+ <button follows="top|left" height="20" label="Cancel"
layout="topleft" left_pad="5" name="cancel_btn" bottom_delta="0" width="64" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index c60cc163c8..e3db0972ec 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -116,7 +116,6 @@
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="16"
label="Go Home"
label_selected="Go Home"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 14a4949df7..3bf7f50a2c 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -15,19 +15,19 @@
orientation="vertical"
top="0">
<layout_panel auto_resize="false"
- min_height="19"
+ height="84"
mouse_opaque="false"
- name="status_bar_container"
- height="19"
+ name="nav_and_status_bar_region"
width="1024"
- visible="false"/>
- <layout_panel auto_resize="false"
- height="65"
- mouse_opaque="false"
- name="nav_bar_container"
- width="1024"
- visible="false"/>
- <panel auto_resize="true"
+ visible="false">
+ <panel follows="left|right|bottom"
+ left="0"
+ name="nav_bar_container"
+ right="1024"
+ top="19"
+ height="65"/>
+ </layout_panel>
+ <layout_panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
@@ -124,8 +124,16 @@
height="500"
name="DebugView"
width="1024"/>
- </panel>
+ </layout_panel>
</layout_stack>
+ <panel mouse_opaque="false"
+ follows="left|right|top"
+ name="status_bar_container"
+ height="19"
+ left="0"
+ top="0"
+ width="1024"
+ visible="false"/>
<notify_box_view top="0"
follows="all"
height="768"
diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml
index 89469fb013..e17eeb46f6 100644
--- a/indra/newview/skins/default/xui/en/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/en/menu_navbar.xml
@@ -10,7 +10,6 @@
width="128">
<menu_item_check
label="Show Coordinates"
- layout="topleft"
name="Show Coordinates">
<menu_item_check.on_click
function="Navbar.Action"
@@ -19,22 +18,28 @@
function="Navbar.EnableMenuItem"
parameter="show_coordinates" />
</menu_item_check>
+ <menu_item_check
+ label="Show Parcel Properties"
+ name="Show Parcel Properties">
+ <menu_item_check.on_click
+ function="Navbar.Action"
+ parameter="show_properties" />
+ <menu_item_check.on_check
+ control="NavBarShowParcelProperties" />
+ </menu_item_check>
<!-- Label of 'Landmark' item is changing in runtime,
see AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->
<menu_item_call
label="Landmark"
- layout="topleft"
name="Landmark">
<menu_item_call.on_click
function="Navbar.Action"
parameter="landmark" />
</menu_item_call>
<menu_item_separator
- layout="topleft"
name="Separator" />
<menu_item_call
label="Cut"
- layout="topleft"
name="Cut">
<menu_item_call.on_click
function="Navbar.Action"
@@ -45,7 +50,6 @@
</menu_item_call>
<menu_item_call
label="Copy"
- layout="topleft"
name="Copy">
<menu_item_call.on_click
function="Navbar.Action"
@@ -56,7 +60,6 @@
</menu_item_call>
<menu_item_call
label="Paste"
- layout="topleft"
name="Paste">
<menu_item_call.on_click
function="Navbar.Action"
@@ -67,7 +70,6 @@
</menu_item_call>
<menu_item_call
label="Delete"
- layout="topleft"
name="Delete">
<menu_item_call.on_click
function="Navbar.Action"
@@ -78,7 +80,6 @@
</menu_item_call>
<menu_item_call
label="Select All"
- layout="topleft"
name="Select All">
<menu_item_call.on_click
function="Navbar.Action"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 8ab5fb1659..e19e11a1b8 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -59,7 +59,7 @@
label="My Inventory"
layout="topleft"
name="Inventory"
- shortcut="control|I">
+ shortcut="control|shift|I">
<menu_item_check.on_check
function="Floater.Visible"
parameter="inventory" />
@@ -68,6 +68,15 @@
parameter="inventory" />
</menu_item_check>
<menu_item_call
+ label="Show Sidetray Inventory"
+ name="ShowSidetrayInventory"
+ shortcut="control|I"
+ visible="false">
+ <menu_item_call.on_click
+ function="ShowSidetrayPanel"
+ parameter="sidepanel_inventory" />
+ </menu_item_call>
+ <menu_item_call
label="My Gestures"
layout="topleft"
name="Gestures"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 3e622d779c..a87f05cbcc 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5311,6 +5311,27 @@ Grant this request?
<notification
icon="notify.tga"
+ name="ScriptToast"
+ type="notify">
+ [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; is requesting user input.
+ <form name="form">
+ <button
+ index="0"
+ name="Open"
+ text="Open Dialog"/>
+ <button
+ index="1"
+ name="Ignore"
+ text="Ignore"/>
+ <button
+ index="2"
+ name="Block"
+ text="Block"/>
+ </form>
+ </notification>
+
+ <notification
+ icon="notify.tga"
name="FirstBalanceIncrease"
type="notify">
You just received L$[AMOUNT].
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 6480469f43..da8006d545 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -46,7 +46,7 @@
left="0"
min_height="23"
width="310"
- top="0"
+ top="4"
min_width="192"
name="chat_bar"
user_resize="false"
@@ -58,7 +58,7 @@
height="28"
layout="topleft"
min_height="28"
- width="104"
+ width="100"
top_delta="0"
min_width="54"
name="speak_panel"
@@ -71,7 +71,7 @@
layout="topleft"
left="0"
name="talk"
- top="3"
+ top="4"
width="100" />
</layout_panel>
<icon
@@ -104,11 +104,10 @@
layout="topleft"
name="Gesture"
left="0"
- top="3"
+ top="4"
width="82"
tool_tip="Shows/hides gestures">
<gesture_combo_box.drop_down_button
- font="SansSerifSmall"
pad_right="10"
use_ellipses="true" />
</gesture_combo_box>
@@ -137,6 +136,9 @@
width="80"
min_width="49">
<button
+ image_selected="PushButton_Selected_Press"
+ image_pressed="PushButton_Press"
+ image_pressed_selected="PushButton_Selected_Press"
follows="left|right"
height="23"
use_ellipses="true"
@@ -145,7 +147,7 @@
layout="topleft"
name="movement_btn"
tool_tip="Shows/hides movement controls"
- top="3"
+ top="4"
width="80">
<button.init_callback
function="Button.SetDockableFloaterToggle"
@@ -176,6 +178,9 @@
user_resize="false"
width="80">
<button
+ image_selected="PushButton_Selected_Press"
+ image_pressed="PushButton_Press"
+ image_pressed_selected="PushButton_Selected_Press"
follows="left|right"
height="23"
use_ellipses="true"
@@ -184,7 +189,7 @@
layout="topleft"
left="0"
tool_tip="Shows/hides camera controls"
- top="3"
+ top="4"
name="camera_btn"
width="80">
<button.init_callback
@@ -221,7 +226,7 @@
layout="topleft"
name="snapshots"
width="36"
- top="3"
+ top="4"
image_overlay="Snapshot_Off"
tool_tip="Take snapshot">
<button.commit_callback
@@ -245,37 +250,47 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
<chiclet_panel
mouse_opaque="false"
follows="left|right"
- height="28"
+ height="23"
layout="topleft"
left="0"
min_width="180"
name="chiclet_list"
- top="0"
- chiclet_padding="3"
+ top="4"
+ chiclet_padding="4"
scrolling_offset="40"
width="189">
<button
auto_resize="true"
follows="right"
height="23"
- image_selected="BottomTray_Scroll_Left"
- image_unselected="BottomTray_Scroll_Left"
+ image_selected="SegmentedBtn_Left_Off"
+ image_unselected="SegmentedBtn_Left_Off"
+ image_hover_selected="SegmentedBtn_Left_Over"
+ image_hover_unselected="SegmentedBtn_Left_Over"
+ image_pressed="SegmentedBtn_Left_Press"
+ image_pressed_selected="SegmentedBtn_Left_Press"
+ image_overlay="Arrow_Small_Left"
layout="topleft"
name="chicklet_left_scroll_button"
tab_stop="false"
- top="3"
+ top="0"
visible="false"
width="20" />
<button
auto_resize="true"
follows="right"
height="23"
- image_selected="BottomTray_Scroll_Right"
- image_unselected="BottomTray_Scroll_Right"
+ image_selected="SegmentedBtn_Right_Off"
+ image_unselected="SegmentedBtn_Right_Off"
+ image_hover_selected="SegmentedBtn_Right_Over"
+ image_hover_unselected="SegmentedBtn_Right_Over"
+ image_pressed="SegmentedBtn_Right_Press"
+ image_pressed_selected="SegmentedBtn_Right_Press"
+ image_overlay="Arrow_Small_Right"
layout="topleft"
name="chicklet_right_scroll_button"
tab_stop="false"
- top="3"
+ top="0"
visible="false"
width="20" />
</chiclet_panel>
@@ -311,6 +326,9 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
top="4"
width="54">
<button
+ image_selected="PushButton_Selected_Press"
+ image_pressed="PushButton_Press"
+ image_pressed_selected="PushButton_Selected_Press"
auto_resize="true"
halign="right"
height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 7a3eae35a9..692461b1a2 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- background_visible="true"
+ background_visible="true"
bevel_style="in"
bg_alpha_color="black"
follows="top|left|right"
height="24"
label="im_header"
- layout="topleft"
+ layout="topleft"
name="im_header"
width="300">
- <avatar_icon
+ <avatar_icon
follows="left"
height="18"
image_name="Generic_Person"
@@ -19,18 +19,20 @@
name="avatar_icon"
top="3"
width="18" />
- <text
+ <text_editor
+ v_pad = "0"
+ read_only = "true"
follows="left|right"
- font.style="BOLD"
- height="12"
- layout="topleft"
- left_pad="5"
+ font.style="BOLD"
+ height="12"
+ layout="topleft"
+ left_pad="5"
right="-50"
name="user_name"
text_color="white"
- top="8"
- use_ellipses="true"
- value="Erica Vader" />
+ top="8"
+ use_ellipses="true"
+ value="Ericag Vader" />
<text
font="SansSerifSmall"
follows="right"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index bdca8531dc..df889e87c3 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -151,7 +151,6 @@
name="buttons">
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Teleport"
layout="topleft"
@@ -161,7 +160,6 @@
width="90" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Map"
layout="topleft"
@@ -171,7 +169,6 @@
width="90" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Edit"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 2378ae518b..a833ad97d9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -15,6 +15,10 @@
[ACCTTYPE]
[PAYMENTINFO] [AGEVERIFICATION]
</string>
+ <string
+ name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
<string
name="AcctTypeResident"
value="Resident" />
diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml
index 1996977acb..37578eae70 100644
--- a/indra/newview/skins/default/xui/en/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml
@@ -33,7 +33,6 @@ invite to your group. Click &apos;Open
Resident Chooser&apos; to start.
</text>
<button
- font="SansSerifSmall"
height="20"
label="Open Resident Chooser"
layout="topleft"
@@ -53,7 +52,6 @@ Resident Chooser&apos; to start.
top_pad="4"
width="200" />
<button
- font="SansSerifSmall"
height="20"
label="Remove Selected from List"
layout="topleft"
@@ -82,7 +80,6 @@ Resident Chooser&apos; to start.
top_delta="16"
width="196" />
<button
- font="SansSerifSmall"
height="20"
label="Send Invitations"
layout="topleft"
@@ -91,7 +88,6 @@ Resident Chooser&apos; to start.
top="356"
width="130" />
<button
- font="SansSerifSmall"
height="20"
label="Cancel"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index a90337d31a..bf33b752d9 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -41,7 +41,6 @@
width="600">
<button
follows="left|top"
- font="SansSerifSmall"
height="23"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -58,7 +57,6 @@
<button
follows="left|top"
- font="SansSerifSmall"
height="23"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -74,7 +72,6 @@
width="31" />
<button
follows="left|top"
- font="SansSerifSmall"
height="23"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index ecf35523cd..de612fbbc3 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -26,7 +26,7 @@
max_length="512"
name="chat_box"
tool_tip="Press Enter to say, Ctrl+Enter to shout"
- top="0"
+ top="1"
width="279" />
<output_monitor
auto_update="true"
@@ -37,19 +37,21 @@
left_pad="-24"
mouse_opaque="true"
name="chat_zone_indicator"
- top="4"
+ top="1"
visible="true"
width="20" />
<button
follows="right"
is_toggle="true"
width="20"
- top="0"
+ top="1"
layout="topleft"
- left_pad="4 "
+ left_pad="4"
image_disabled="ComboButton_UpOff"
image_unselected="ComboButton_UpOff"
- image_selected="ComboButton_UpSelected"
+ image_selected="ComboButton_Up_On_Selected"
+ image_pressed="ComboButton_UpSelected"
+ image_pressed_selected="ComboButton_Up_On_Selected"
height="23"
name="show_nearby_chat"
tool_tip="Shows/hides nearby chat log">
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index a370b450e9..87861e7901 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -344,7 +344,6 @@ background_visible="true"
width="313">
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left="0"
height="19"
@@ -355,7 +354,6 @@ background_visible="true"
width="70" />
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left_pad="2"
height="19"
@@ -366,7 +364,6 @@ background_visible="true"
width="45" />
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left_pad="2"
height="19"
@@ -377,7 +374,6 @@ background_visible="true"
width="50" />
<button
follows="left|top"
- font="SansSerifSmall"
top="4"
left_pad="2"
height="19"
@@ -387,7 +383,6 @@ background_visible="true"
width="60" />
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left_pad="2"
height="19"
@@ -398,7 +393,6 @@ background_visible="true"
width="75" />
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left="0"
height="19"
@@ -409,7 +403,6 @@ background_visible="true"
width="110" />
<button
follows="bottom|left"
- font="SansSerifSmall"
top="4"
left_pad="2"
height="19"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index cf18aa2d39..0cf2a7afc3 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -103,7 +103,6 @@
name="buttons">
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Teleport"
layout="topleft"
@@ -113,7 +112,6 @@
width="90" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Map"
layout="topleft"
@@ -123,7 +121,6 @@
width="90" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Edit"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 5cefe3e4ab..69a81adecd 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -131,7 +131,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Info"
layout="topleft"
@@ -143,7 +142,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Teleport"
layout="topleft"
@@ -155,7 +153,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Map"
layout="topleft"
@@ -167,7 +164,6 @@
<button
enabled="false"
follows="bottom|right"
- font="SansSerifSmall"
height="25"
label="▼"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 5efacb68be..88df529ec1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -72,7 +72,6 @@ background_visible="true"
width="313">
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Teleport"
layout="topleft"
@@ -82,7 +81,6 @@ background_visible="true"
width="100" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Map"
layout="topleft"
@@ -92,7 +90,6 @@ background_visible="true"
width="70" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="19"
label="Edit"
layout="topleft"
@@ -102,7 +99,6 @@ background_visible="true"
width="70" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
image_disabled="ForwardArrow_Off"
image_selected="ForwardArrow_Press"
@@ -114,7 +110,6 @@ background_visible="true"
width="18" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
label="Close"
layout="topleft"
@@ -124,7 +119,6 @@ background_visible="true"
width="60" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
label="Cancel"
layout="topleft"
@@ -134,7 +128,6 @@ background_visible="true"
width="60" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
label="Save"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 5a4b0a3892..fac0d5c60f 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -309,4 +309,13 @@
name="send_im_to_email"
top_pad="5"
width="400" />
+ <check_box
+ enabled="false"
+ height="16"
+ label="Enable plain text chat history"
+ layout="topleft"
+ left_delta="0"
+ name="plain_text_chat_history"
+ top_pad="5"
+ width="400" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index bf1d46451b..947bb67152 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -27,7 +27,10 @@
<string
name="no_partner_text"
value="None" />
- <string name="RegisterDateFormat">[REG_DATE] ([AGE])</string>
+ <string
+ name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
<scroll_container
color="DkGray2"
follows="all"
@@ -324,7 +327,6 @@
width="64" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
label="▼"
layout="topleft"
@@ -344,7 +346,6 @@
width="303">
<button
follows="bottom|right"
- font="SansSerifSmall"
height="19"
left="10"
label="Edit Profile"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index b015346a79..8e683bffc1 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -25,10 +25,11 @@
tab_stop="false"
top="2"
width="23" />
- <text
+ <text_editor
+ read_only = "true"
follows="top|left|right"
font="SansSerifHugeBold"
- height="26"
+ height="29"
layout="topleft"
left_pad="10"
name="user_name"
@@ -52,7 +53,7 @@
halign="center"
layout="topleft"
left="10"
- min_width="333"
+ min_width="333"
name="tabs"
tab_min_width="80"
tab_height="30"
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
index 49fc930cd8..75d7d85505 100644
--- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
@@ -119,7 +119,6 @@
</text_editor>
<button
follows="left|top"
- font="SansSerifSmall"
height="18"
label="Reset"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index a1bca4229d..e07585d285 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -61,7 +61,6 @@
<button
enabled="false"
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Apply"
layout="topleft"
@@ -109,7 +108,6 @@
<button
follows="left|top"
height="20"
- font="SansSerifSmall"
label="Choose"
layout="topleft"
left_pad="5"
@@ -156,7 +154,6 @@
<button
follows="left|top"
height="20"
- font="SansSerifSmall"
label="Return"
layout="topleft"
left="20"
@@ -165,7 +162,6 @@
width="80" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Get Top Colliders..."
layout="topleft"
@@ -176,7 +172,6 @@
width="150" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Get Top Scripts..."
layout="topleft"
@@ -187,7 +182,6 @@
width="150" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Restart Region"
layout="topleft"
@@ -198,7 +192,6 @@
width="130" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="Delay Restart"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index b1afe76500..65bc48265d 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -43,7 +43,6 @@
auto_resize="true"
halign="right"
follows="right|bottom"
- font="SansSerifSmall"
image_selected="BuyArrow_Over"
image_unselected="BuyArrow_Off"
image_pressed="BuyArrow_Press"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index b9a89a2ebc..4dae8e48a0 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -71,7 +71,6 @@
width="313" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Wear"
layout="topleft"
@@ -81,7 +80,6 @@
width="80" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="New Outfit"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index b8b3d993bd..51b74307c8 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -41,7 +41,6 @@
<button
enabled="true"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Info"
layout="topleft"
@@ -52,7 +51,6 @@
<button
enabled="true"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Share"
layout="topleft"
@@ -63,7 +61,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Wear"
layout="topleft"
@@ -74,7 +71,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Play"
layout="topleft"
@@ -85,7 +81,6 @@
<button
enabled="false"
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Teleport"
layout="topleft"
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 6ae2477304..db8a844eb0 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -126,12 +126,11 @@
left_delta="78"
name="LabelCreatorName"
top_delta="0"
- width="200">
+ width="140">
Nicole Linden
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="16"
label="Profile..."
layout="topleft"
@@ -160,12 +159,11 @@
left_delta="78"
name="LabelOwnerName"
top_delta="0"
- width="200">
+ width="140">
Thrax Linden
</text>
<button
follows="top|right"
- font="SansSerifSmall"
height="16"
label="Profile..."
layout="topleft"
@@ -194,7 +192,7 @@
left_delta="78"
name="LabelAcquiredDate"
top_delta="0"
- width="252">
+ width="222">
Wed May 24 12:50:46 2006
</text>
<text
@@ -277,12 +275,13 @@
type="string"
length="1"
follows="left|top"
- height="10"
+ height="25"
layout="topleft"
left="10"
name="NextOwnerLabel"
top_pad="5"
- width="78">
+ width="78"
+ word_wrap="true">
Next owner:
</text>
<check_box
@@ -323,7 +322,7 @@
layout="topleft"
follows="left|top"
name="combobox sale copy"
- width="90">
+ width="110">
<combo_box.item
label="Copy"
name="Copy"
@@ -339,14 +338,26 @@
increment="1"
control_name="Edit Cost"
name="Edit Cost"
- label="Price: L$"
- label_width="60"
+ label="Price:"
+ label_width="100"
left="10"
- width="180"
+ width="192"
min_val="1"
height="19"
max_val="999999999"
top_pad="5"/>
+ <text
+ type="string"
+ length="1"
+ height="15"
+ follows="left|top"
+ layout="topleft"
+ left_delta="82"
+ name="CurrencySymbol"
+ top_delta="1"
+ width="18">
+ L$
+ </text>
<!--line_editor
border_style="line"
border_thickness="1"
@@ -479,7 +490,6 @@
width="313">
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Edit"
layout="topleft"
@@ -489,7 +499,6 @@
width="50" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="25"
label="Cancel"
layout="topleft"
@@ -499,7 +508,6 @@
width="70" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="25"
label="Save"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 7647be7830..348f0dfc09 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -203,7 +203,6 @@
width="150" />
<button
follows="top|left"
- font="SansSerifSmall"
height="20"
label="Deed"
label_selected="Deed"
@@ -485,7 +484,6 @@
width="313">
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Edit"
layout="topleft"
@@ -495,7 +493,6 @@
width="50" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Open"
layout="topleft"
@@ -505,7 +502,6 @@
width="60" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Pay"
layout="topleft"
@@ -515,7 +511,6 @@
width="50" />
<button
follows="bottom|left"
- font="SansSerifSmall"
height="25"
label="Buy"
layout="topleft"
@@ -525,7 +520,6 @@
width="60" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="25"
label="Cancel"
layout="topleft"
@@ -535,7 +529,6 @@
width="70" />
<button
follows="bottom|right"
- font="SansSerifSmall"
height="25"
label="Save"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 6b11e72247..7c54e618ef 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -15,7 +15,6 @@
image_color="ButtonImageColor"
image_color_disabled="ButtonImageColor"
flash_color="ButtonFlashBgColor"
- font="SansSerifSmall"
hover_glow_amount="0.15"
halign="center"
scale_image="true">
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
new file mode 100644
index 0000000000..5011bf6a61
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<chiclet_script
+ name="script_chiclet">
+ <icon
+ name="chiclet_icon"
+ follows="all"
+ mouse_opaque="false"
+ image_name="Generic_Object_Small" />
+</expandable_text> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
index 6171be034f..4229f34c09 100644
--- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<gesture_combo_box font="SansSerifSmall"
+<gesture_combo_box
label="Gestures"
list_position="below"
max_chars="20"
@@ -7,7 +7,6 @@
<gesture_combo_box.combo_button name="Combobox Button"
label=""
hover_glow_amount="0.15"
- font="SansSerifSmall"
scale_image="true"
image_unselected="ComboButton_Off"
image_selected="ComboButton_Selected"
@@ -17,15 +16,15 @@
label=""
halign="center"
hover_glow_amount="0.15"
- font="SansSerif"
scale_image="true"
+ image_selected="PushButton_Selected_Press"
+ image_pressed="PushButton_Press"
+ image_pressed_selected="PushButton_Selected_Press"
image_unselected="PushButton_Off"
- image_selected="PushButton_Selected"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Selected_Disabled" />
<gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor"
- scroll_bar_bg_visible="true" />
+ scroll_bar_bg_visible="false" />
<gesture_combo_box.combo_editor name="Combo Text Entry"
- select_on_focus="true"
- font="SansSerifSmall" />
+ select_on_focus="true" />
</gesture_combo_box>
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index d88bcfab1d..17b1479ec4 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -11,7 +11,7 @@
add_landmark_image_disabled="Favorite_Star_Off"
add_landmark_image_hover="Favorite_Star_Over"
add_landmark_image_selected="Favorite_Star_Press"
- add_landmark_hpad="2"
+ icon_hpad="2"
allow_text_entry="true"
list_position="below"
show_text_as_tentative="false"
@@ -38,6 +38,60 @@
scale_image="false"
top="19"
left="-3" />
+ <voice_icon
+ name="voice_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_VoiceNo"
+ />
+ <fly_icon
+ name="fly_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_FlyNo"
+ />
+ <push_icon
+ name="push_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_PushNo"
+ />
+ <build_icon
+ name="build_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_BuildNo"
+ />
+ <scripts_icon
+ name="scripts_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_ScriptsNo"
+ />
+ <!-- NOTE: Placeholder icon, there is no dark grayscale version -->
+ <damage_icon
+ name="damage_icon"
+ width="22"
+ height="18"
+ top="21"
+ image_name="parcel_lght_Damage"
+ />
+ <!-- Default text color is invisible on top of nav bar background -->
+ <damage_text
+ name="damage_text"
+ width="50"
+ height="18"
+ top="16"
+ halign="right"
+ font="SansSerifSmall"
+ text_color="TextFgColor"
+ />
+
<combo_button name="Location History"
label=""
pad_right="0"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
index c98e9cb6b8..2bbaa6233f 100644
--- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- Use this for the top-level menu styling -->
-<menu_item
- font="SansSerifSmall"
- >
+<menu_item>
</menu_item>
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
index f1401140de..477c6fb8b8 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -2,7 +2,7 @@
<tab_container tab_min_width="60"
tab_max_width="150"
font_halign="center"
- font="SansSerif"
+ font="SansSerifSmall"
tab_height="21">
<first_tab tab_top_image_unselected="TabTop_Left_Off"
tab_top_image_selected="TabTop_Left_Selected"
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
index 64c2e65a6e..7781bdd066 100644
--- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
@@ -7,10 +7,13 @@
-->
<speak_button
follows="left|right"
+ image_selected="SegmentedBtn_Left_Selected_Press"
+ image_unselected="SegmentedBtn_Left_Off"
+ image_pressed="SegmentedBtn_Left_Selected_Press"
+ image_pressed_selected="SegmentedBtn_Left_Selected_Press"
name="left"
label="Speak"
label_selected="Speak"
- font="SansSerifSmall"
tab_stop="false"
/>
<show_button
@@ -23,8 +26,11 @@
bottom="0"
tab_stop="false"
is_toggle="true"
- image_selected="ComboButton_UpSelected"
- image_unselected="ComboButton_UpOff"
+ image_selected="SegmentedBtn_Right_Selected_Press"
+ image_unselected="SegmentedBtn_Right_Off"
+ image_pressed="SegmentedBtn_Right_Press"
+ image_pressed_selected="SegmentedBtn_Right_Selected_Press"
+ image_overlay="Arrow_Small_Up"
/>
<monitor
follows="right"