summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/llsd.cpp29
-rw-r--r--indra/llcommon/llsd.h2
-rw-r--r--indra/llcommon/llsdserialize_xml.cpp35
-rw-r--r--indra/newview/llinventorymodel.cpp2
-rw-r--r--indra/newview/llviewermenu.cpp69
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml12
6 files changed, 94 insertions, 55 deletions
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp
index 6bc2841081..ce39bc7af3 100644
--- a/indra/llcommon/llsd.cpp
+++ b/indra/llcommon/llsd.cpp
@@ -351,18 +351,7 @@ namespace
LLSD::Real ImplString::asReal() const
{
- F64 v = 0.0;
- boost::iostreams::stream<boost::iostreams::array_source> i_stream(mValue.data(), mValue.size());
- i_stream >> v;
-
- // we would probably like to ignore all trailing whitespace as
- // well, but for now, simply eat the next character, and make
- // sure we reached the end of the string.
- // *NOTE: gcc 2.95 does not generate an eof() event on the
- // stream operation above, so we manually get here to force it
- // across platforms.
- int c = i_stream.get();
- return ((EOF ==c) ? v : 0.0);
+ return llsd::string_to_real(mValue);
}
@@ -1264,6 +1253,22 @@ LLSD::reverse_array_iterator LLSD::rendArray() { return makeArray(impl)
namespace llsd
{
+LLSD::Real string_to_real(std::string_view in_string)
+{
+ LLSD::Real v = 0.0;
+ boost::iostreams::stream<boost::iostreams::array_source> i_stream(in_string.data(), in_string.size());
+ i_stream >> v;
+
+ // we would probably like to ignore all trailing whitespace as
+ // well, but for now, simply eat the next character, and make
+ // sure we reached the end of the string.
+ // *NOTE: gcc 2.95 does not generate an eof() event on the
+ // stream operation above, so we manually get here to force it
+ // across platforms.
+ int c = i_stream.get();
+ return ((EOF == c) ? v : 0.0);
+}
+
U32 allocationCount() { return LLSD::Impl::sAllocationCount; }
U32 outstandingCount() { return LLSD::Impl::sOutstandingCount; }
diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h
index c62f2ef1ca..afe35a65ba 100644
--- a/indra/llcommon/llsd.h
+++ b/indra/llcommon/llsd.h
@@ -545,6 +545,8 @@ LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLSD& llsd);
namespace llsd
{
+ // Used by LLSD::ImplString to convert string type to real
+ LLSD::Real string_to_real(std::string_view in_string);
#ifdef LLSD_DEBUG_INFO
/** @name Unit Testing Interface */
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index c28efa3aad..f399c51608 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -712,7 +712,7 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)
case ELEMENT_KEY:
mCurrentKey = std::move(mCurrentContent); // This is safe to move as we are in the end element handler
- mCurrentContent.clear(); // Clear to reset to valid state
+ mCurrentContent.clear(); // Ensure mCurrentContent is empty for subsequent use
return;
default:
@@ -745,38 +745,21 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)
}
else
{
- // This implementation is copied from llsd.cpp
- F64 v = 0.0;
- boost::iostreams::stream<boost::iostreams::array_source> i_stream(mCurrentContent.data(), mCurrentContent.size());
- i_stream >> v;
+ // This must treat "1.23" not as an error, but as a number, which is
+ // then truncated down to an integer. Hence, this code doesn't call
+ // std::istringstream::operator>>(int&), which would not consume the
+ // ".23" portion.
- // we would probably like to ignore all trailing whitespace as
- // well, but for now, simply eat the next character, and make
- // sure we reached the end of the string.
- // *NOTE: gcc 2.95 does not generate an eof() event on the
- // stream operation above, so we manually get here to force it
- // across platforms.
- int c = i_stream.get();
- value = (int)((EOF == c) ? v : 0.0);
+ // Utilizes implementation used internally by LLSD::ImplString::asInteger
+ value = (int)llsd::string_to_real(mCurrentContent);
}
}
break;
case ELEMENT_REAL:
{
- // This implementation is copied from llsd.cpp
- F64 v = 0.0;
- boost::iostreams::stream<boost::iostreams::array_source> i_stream(mCurrentContent.data(), mCurrentContent.size());
- i_stream >> v;
-
- // we would probably like to ignore all trailing whitespace as
- // well, but for now, simply eat the next character, and make
- // sure we reached the end of the string.
- // *NOTE: gcc 2.95 does not generate an eof() event on the
- // stream operation above, so we manually get here to force it
- // across platforms.
- int c = i_stream.get();
- value = ((EOF == c) ? v : 0.0);
+ // Utilizes implementation used internally by LLSD::ImplString::asReal
+ value = llsd::string_to_real(mCurrentContent);
// removed since this breaks when locale has decimal separator that isn't '.'
// investigated changing local to something compatible each time but deemed higher
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index e80c506bc0..c2f9c483c0 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -3456,7 +3456,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
}
{
- LL_PROFILE_ZONE_NAMED("inventory load from file - categories");
+ LL_PROFILE_ZONE_NAMED("inventory load from file - items");
const LLSD& llsd_items = inventory["items"];
if (llsd_items.isArray())
{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 1b496ccd27..5799e23ca5 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -413,7 +413,23 @@ static LLSLMMenuUpdater* gSLMMenuUpdater = NULL;
LLSLMMenuUpdater::LLSLMMenuUpdater()
{
- mMarketplaceListingsItem = gMenuHolder->getChild<LLView>("Me")->getChild<LLView>("MarketplaceListings")->getHandle();
+ LLView* me_menu = gMenuHolder->findChild<LLView>("Me");
+ if (!me_menu)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find 'Me' menu in 'menu_viewer'" << LL_ENDL;
+ return;
+ }
+
+ LLView* marketplace_listings = me_menu->findChild<LLView>("MarketplaceListings");
+ if (!marketplace_listings)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find 'MarketplaceListings' in 'Me' menu" << LL_ENDL;
+ return;
+ }
+
+ mMarketplaceListingsItem = marketplace_listings->getHandle();
}
void LLSLMMenuUpdater::setMerchantMenu()
{
@@ -551,7 +567,29 @@ void init_menus()
color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
}
- LLView* menu_bar_holder = gViewerWindow->getMainView()->findChildView("menu_stack")->findChildView("status_bar_container")->getChildView("menu_bar_holder");
+ LLView* menu_stack = gViewerWindow->getMainView()->findChildView("menu_stack");
+ if (!menu_stack)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find menu_stack in main_view" << LL_ENDL;
+ return;
+ }
+
+ LLView* status_bar_container = menu_stack->findChildView("status_bar_container");
+ if (!status_bar_container)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find status_bar_container in main_view" << LL_ENDL;
+ return;
+ }
+
+ LLView* menu_bar_holder = status_bar_container->findChildView("menu_bar_holder");
+ if (!menu_bar_holder)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find status_bar_container in main_view" << LL_ENDL;
+ return;
+ }
gMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_viewer.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
gMenuBarView->setRect(LLRect(0, menu_bar_holder->getRect().mTop, 0, menu_bar_holder->getRect().mTop - MENU_BAR_HEIGHT));
@@ -567,8 +605,31 @@ void init_menus()
const std::string animation_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getAnimationUploadCost());
LLView* main_upload_menu = gMenuHolder->findChild<LLView>("Upload");
- main_upload_menu->findChild<LLView>("Upload Sound")->setLabelArg("[COST]", sound_upload_cost_str);
- main_upload_menu->findChild<LLView>("Upload Animation")->setLabelArg("[COST]", animation_upload_cost_str);
+ if (!main_upload_menu)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find 'Upload' menu in 'menu_viewer'" << LL_ENDL;
+ return;
+ }
+
+ LLView* upload_sound = main_upload_menu->findChild<LLView>("Upload Sound");
+ if (!upload_sound)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find 'Upload Sound' menu item in 'Upload' menu" << LL_ENDL;
+ return;
+ }
+ upload_sound->setLabelArg("[COST]", sound_upload_cost_str);
+
+ LLView* upload_anim = main_upload_menu->findChild<LLView>("Upload Animation");
+ if (!upload_anim)
+ {
+ LLError::LLUserWarningMsg::showMissingFiles();
+ LL_ERRS() << "Can't find 'Upload Animation' menu item in 'Upload' menu" << LL_ENDL;
+ return;
+ }
+ upload_anim->setLabelArg("[COST]", animation_upload_cost_str);
+
gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", true);
gDetachSubMenu = gMenuBarView->findChildMenuByName("Detach Object", true);
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index c93cb7822e..ba43e80eda 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2601,18 +2601,6 @@ function="World.EnvPreset"
parameter="fast timers" />
</menu_item_check>
<menu_item_check
- label="Memory"
- name="Memory"
- shortcut="control|shift|0"
- use_mac_ctrl="true">
- <menu_item_check.on_check
- function="Advanced.CheckConsole"
- parameter="memory view" />
- <menu_item_check.on_click
- function="Advanced.ToggleConsole"
- parameter="memory view" />
- </menu_item_check>
- <menu_item_check
label="Scene Statistics"
name="Scene Statistics">
<menu_item_check.on_check