summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/llfloater.cpp63
-rw-r--r--indra/llui/llfloater.h1
-rw-r--r--indra/llui/llfloaterreg.cpp2
-rw-r--r--indra/llui/llpanel.h4
-rw-r--r--indra/llui/lluictrlfactory.cpp66
-rw-r--r--indra/llui/lluictrlfactory.h3
-rw-r--r--indra/llui/llview.h32
7 files changed, 84 insertions, 87 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 838f93d3f9..d66b3c1707 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -42,6 +42,7 @@
#include "lluictrlfactory.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
+#include "lldir.h"
#include "lldraghandle.h"
#include "llfloaterreg.h"
#include "llfocusmgr.h"
@@ -2883,3 +2884,65 @@ bool LLFloater::isVisible(const LLFloater* floater)
{
return floater && floater->getVisible();
}
+
+static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
+
+/* static */
+bool LLFloater::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
+{
+ LLFastTimer timer(FTM_BUILD_FLOATERS);
+ LLXMLNodePtr root;
+
+ //if exporting, only load the language being exported,
+ //instead of layering localized version on top of english
+ if (output_node)
+ {
+ if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
+ {
+ llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+ return false;
+ }
+ }
+ else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
+ {
+ llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+ return false;
+ }
+
+ // root must be called floater
+ if( !(root->hasName("floater") || root->hasName("multi_floater")) )
+ {
+ llwarns << "Root node should be named floater in: " << filename << llendl;
+ return false;
+ }
+
+ bool res = true;
+
+ lldebugs << "Building floater " << filename << llendl;
+ LLUICtrlFactory::instance().pushFileName(filename);
+ {
+ if (!floaterp->getFactoryMap().empty())
+ {
+ LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
+ }
+
+ // for local registry callbacks; define in constructor, referenced in XUI or postBuild
+ floaterp->getCommitCallbackRegistrar().pushScope();
+ floaterp->getEnableCallbackRegistrar().pushScope();
+
+ res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
+
+ floaterp->setXMLFilename(filename);
+
+ floaterp->getCommitCallbackRegistrar().popScope();
+ floaterp->getEnableCallbackRegistrar().popScope();
+
+ if (!floaterp->getFactoryMap().empty())
+ {
+ LLPanel::sFactoryStack.pop_front();
+ }
+ }
+ LLUICtrlFactory::instance().popFileName();
+
+ return res;
+}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index e7d365238b..69762c7723 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -147,6 +147,7 @@ public:
// Don't export top/left for rect, only height/width
static void setupParamsForExport(Params& p, LLView* parent);
+ static bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
void initFromParams(const LLFloater::Params& p);
bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 85f9af126c..2c31854011 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
res = build_func(key);
- bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);
+ bool success = LLFloater::buildFloater(res, xui_file, NULL);
if (!success)
{
llwarns << "Failed to build floater type: '" << name << "'." << llendl;
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 6fc8ca204f..de16d28e27 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -265,6 +265,8 @@ protected:
commit_signal_t* mVisibleSignal; // Called when visibility changes, passes new visibility as LLSD()
std::string mHelpTopic; // the name of this panel's help topic to display in the Help Viewer
+ typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
+ static factory_stack_t sFactoryStack;
private:
BOOL mBgVisible; // any background at all?
@@ -286,8 +288,6 @@ private:
// for setting the xml filename when building panel in context dependent cases
std::string mXMLFilename;
- typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
- static factory_stack_t sFactoryStack;
}; // end class LLPanel
// Build time optimization, generate once in .cpp file
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 913c8bdb7d..ee700ee6eb 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -48,7 +48,7 @@
#include "llquaternion.h"
// this library includes
-#include "llfloater.h"
+#include "llpanel.h"
LLFastTimer::DeclareTimer FTM_WIDGET_CONSTRUCTION("Widget Construction");
LLFastTimer::DeclareTimer FTM_INIT_FROM_PARAMS("Widget InitFromParams");
@@ -178,70 +178,6 @@ bool LLUICtrlFactory::getLocalizedXMLNode(const std::string &xui_filename, LLXML
}
}
-static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
-
-//-----------------------------------------------------------------------------
-// buildFloater()
-//-----------------------------------------------------------------------------
-bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
-{
- LLFastTimer timer(FTM_BUILD_FLOATERS);
- LLXMLNodePtr root;
-
- //if exporting, only load the language being exported,
- //instead of layering localized version on top of english
- if (output_node)
- {
- if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
- {
- llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
- return false;
- }
- }
- else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
- {
- llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
- return false;
- }
-
- // root must be called floater
- if( !(root->hasName("floater") || root->hasName("multi_floater")) )
- {
- llwarns << "Root node should be named floater in: " << filename << llendl;
- return false;
- }
-
- bool res = true;
-
- lldebugs << "Building floater " << filename << llendl;
- pushFileName(filename);
- {
- if (!floaterp->getFactoryMap().empty())
- {
- LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
- }
-
- // for local registry callbacks; define in constructor, referenced in XUI or postBuild
- floaterp->getCommitCallbackRegistrar().pushScope();
- floaterp->getEnableCallbackRegistrar().pushScope();
-
- res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
-
- floaterp->setXMLFilename(filename);
-
- floaterp->getCommitCallbackRegistrar().popScope();
- floaterp->getEnableCallbackRegistrar().popScope();
-
- if (!floaterp->getFactoryMap().empty())
- {
- LLPanel::sFactoryStack.pop_front();
- }
- }
- popFileName();
-
- return res;
-}
-
//-----------------------------------------------------------------------------
// saveToXML()
//-----------------------------------------------------------------------------
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 0b0a235f8f..16fb618c88 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -38,7 +38,6 @@
#include "llregistry.h"
#include "llxuiparser.h"
-class LLFloater;
class LLView;
// sort functor for typeid maps
@@ -147,8 +146,6 @@ public:
return ParamDefaults<typename T::Params, 0>::instance().get();
}
- bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
-
// Does what you want for LLFloaters and LLPanels
// Returns 0 on success
S32 saveToXML(LLView* viewp, const std::string& filename);
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 37f5232f91..0f796fb408 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -134,26 +134,26 @@ public:
Optional<std::string> layout;
Optional<LLRect> rect;
+
// Historical bottom-left layout used bottom_delta and left_delta
// for relative positioning. New layout "topleft" prefers specifying
// based on top edge.
- Optional<S32> bottom_delta, // deprecated
- top_pad, // from last bottom to my top
- top_delta, // from last top to my top
- left_pad, // from last right to my left
- left_delta; // from last left to my left
-
- // these are nested attributes for LLLayoutPanel
+ Optional<S32> bottom_delta, // from last bottom to my bottom
+ top_pad, // from last bottom to my top
+ top_delta, // from last top to my top
+ left_pad, // from last right to my left
+ left_delta; // from last left to my left
+
//FIXME: get parent context involved in parsing traversal
- Ignored user_resize,
- auto_resize,
- needs_translate,
- min_width,
- max_width,
- xmlns,
- xmlns_xsi,
- xsi_schemaLocation,
- xsi_type;
+ Ignored user_resize, // nested attribute for LLLayoutPanel
+ auto_resize, // nested attribute for LLLayoutPanel
+ needs_translate, // cue for translation tools
+ min_width, // nested attribute for LLLayoutPanel
+ max_width, // nested attribute for LLLayoutPanel
+ xmlns, // xml namespace
+ xmlns_xsi, // xml namespace
+ xsi_schemaLocation, // xml schema
+ xsi_type; // xml schema type
Params();
};