aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
Diffstat (limited to 'linden')
-rw-r--r--linden/indra/llui/llbutton.cpp2
-rw-r--r--linden/indra/llui/llcheckboxctrl.cpp3
-rw-r--r--linden/indra/llui/llcombobox.cpp29
-rw-r--r--linden/indra/llui/llcombobox.h1
-rw-r--r--linden/indra/llui/llfloater.cpp11
-rw-r--r--linden/indra/llui/llfloater.h1
-rw-r--r--linden/indra/llui/lliconctrl.cpp2
-rw-r--r--linden/indra/llui/lllineeditor.cpp12
-rw-r--r--linden/indra/llui/lllineeditor.h1
-rw-r--r--linden/indra/llui/llmenugl.cpp82
-rw-r--r--linden/indra/llui/llmenugl.h5
-rw-r--r--linden/indra/llui/llmultislider.cpp2
-rw-r--r--linden/indra/llui/llmultisliderctrl.cpp4
-rw-r--r--linden/indra/llui/llpanel.cpp45
-rw-r--r--linden/indra/llui/llprogressbar.cpp10
-rw-r--r--linden/indra/llui/llprogressbar.h1
-rw-r--r--linden/indra/llui/llradiogroup.cpp17
-rw-r--r--linden/indra/llui/llradiogroup.h1
-rw-r--r--linden/indra/llui/llscrollcontainer.cpp4
-rw-r--r--linden/indra/llui/llscrollingpanellist.cpp10
-rw-r--r--linden/indra/llui/llscrollingpanellist.h3
-rw-r--r--linden/indra/llui/llscrolllistctrl.cpp2
-rw-r--r--linden/indra/llui/llslider.cpp9
-rw-r--r--linden/indra/llui/llsliderctrl.cpp2
-rw-r--r--linden/indra/llui/llspinctrl.cpp2
-rw-r--r--linden/indra/llui/lltabcontainer.cpp3
-rw-r--r--linden/indra/llui/lltextbox.cpp2
-rw-r--r--linden/indra/llui/lltexteditor.cpp2
-rw-r--r--linden/indra/llui/lluictrlfactory.cpp29
-rw-r--r--linden/indra/llui/lluixmltags.h7
-rw-r--r--linden/indra/llui/llview.cpp4
-rw-r--r--linden/indra/llui/llviewborder.cpp10
-rw-r--r--linden/indra/llui/llviewborder.h1
-rw-r--r--linden/indra/newview/llchatbar.cpp8
-rw-r--r--linden/indra/newview/llcolorswatch.cpp5
-rw-r--r--linden/indra/newview/llhudeffectbeam.cpp5
-rw-r--r--linden/indra/newview/llhudeffectbeam.h1
-rw-r--r--linden/indra/newview/llhudeffecttrail.cpp5
-rw-r--r--linden/indra/newview/llhudeffecttrail.h1
-rw-r--r--linden/indra/newview/llhudobject.cpp21
-rw-r--r--linden/indra/newview/llhudobject.h2
-rw-r--r--linden/indra/newview/llimpanel.cpp2
-rw-r--r--linden/indra/newview/llinventoryview.cpp2
-rw-r--r--linden/indra/newview/lljoystickbutton.cpp26
-rw-r--r--linden/indra/newview/lljoystickbutton.h2
-rw-r--r--linden/indra/newview/llnameeditor.cpp10
-rw-r--r--linden/indra/newview/llnameeditor.h1
-rw-r--r--linden/indra/newview/llnamelistctrl.cpp2
-rw-r--r--linden/indra/newview/lltexturectrl.cpp2
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp10
-rw-r--r--linden/indra/newview/llviewertexteditor.h1
-rw-r--r--linden/indra/newview/llvoavatar.cpp2
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp10
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h1
-rw-r--r--linden/indra/newview/pipeline.cpp23
55 files changed, 420 insertions, 41 deletions
diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp
index 2c2c1c2..1a6c705 100644
--- a/linden/indra/llui/llbutton.cpp
+++ b/linden/indra/llui/llbutton.cpp
@@ -980,6 +980,8 @@ LLXMLNodePtr LLButton::getXML(bool save_children) const
980{ 980{
981 LLXMLNodePtr node = LLUICtrl::getXML(); 981 LLXMLNodePtr node = LLUICtrl::getXML();
982 982
983 node->setName(LL_BUTTON_TAG);
984
983 node->createChild("label", TRUE)->setStringValue(getLabelUnselected()); 985 node->createChild("label", TRUE)->setStringValue(getLabelUnselected());
984 node->createChild("label_selected", TRUE)->setStringValue(getLabelSelected()); 986 node->createChild("label_selected", TRUE)->setStringValue(getLabelSelected());
985 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont)); 987 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont));
diff --git a/linden/indra/llui/llcheckboxctrl.cpp b/linden/indra/llui/llcheckboxctrl.cpp
index eda9467..c1daee7 100644
--- a/linden/indra/llui/llcheckboxctrl.cpp
+++ b/linden/indra/llui/llcheckboxctrl.cpp
@@ -298,12 +298,13 @@ void LLCheckBoxCtrl::resetDirty()
298} 298}
299 299
300 300
301
302// virtual 301// virtual
303LLXMLNodePtr LLCheckBoxCtrl::getXML(bool save_children) const 302LLXMLNodePtr LLCheckBoxCtrl::getXML(bool save_children) const
304{ 303{
305 LLXMLNodePtr node = LLUICtrl::getXML(); 304 LLXMLNodePtr node = LLUICtrl::getXML();
306 305
306 node->setName(LL_CHECK_BOX_CTRL_TAG);
307
307 node->createChild("label", TRUE)->setStringValue(mLabel->getText()); 308 node->createChild("label", TRUE)->setStringValue(mLabel->getText());
308 309
309 std::string control_name = mButton->getControlName(); 310 std::string control_name = mButton->getControlName();
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index cbc67fe..ce75f03 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -120,6 +120,8 @@ LLXMLNodePtr LLComboBox::getXML(bool save_children) const
120{ 120{
121 LLXMLNodePtr node = LLUICtrl::getXML(); 121 LLXMLNodePtr node = LLUICtrl::getXML();
122 122
123 node->setName(LL_COMBO_BOX_TAG);
124
123 // Attributes 125 // Attributes
124 126
125 node->createChild("allow_text_entry", TRUE)->setBoolValue(mAllowTextEntry); 127 node->createChild("allow_text_entry", TRUE)->setBoolValue(mAllowTextEntry);
@@ -1172,6 +1174,33 @@ LLFlyoutButton::LLFlyoutButton(
1172 updateLayout(); 1174 updateLayout();
1173} 1175}
1174 1176
1177// virtual
1178LLXMLNodePtr LLFlyoutButton::getXML(bool save_children) const
1179{
1180 LLXMLNodePtr node = LLComboBox::getXML();
1181
1182 node->setName(LL_FLYOUT_BUTTON_TAG);
1183
1184 LLXMLNodePtr child;
1185
1186 for (child = node->getFirstChild(); child.notNull();)
1187 {
1188 if (child->hasName("combo_item"))
1189 {
1190 child->setName(LL_FLYOUT_BUTTON_ITEM_TAG);
1191
1192 //setName does a delete and add, so we have to start over
1193 child = node->getFirstChild();
1194 }
1195 else
1196 {
1197 child = child->getNextSibling();
1198 }
1199 }
1200
1201 return node;
1202}
1203
1175//static 1204//static
1176LLView* LLFlyoutButton::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 1205LLView* LLFlyoutButton::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
1177{ 1206{
diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h
index 33e1baa..95ad17a 100644
--- a/linden/indra/llui/llcombobox.h
+++ b/linden/indra/llui/llcombobox.h
@@ -217,6 +217,7 @@ public:
217 217
218 void setToggleState(BOOL state); 218 void setToggleState(BOOL state);
219 219
220 virtual LLXMLNodePtr getXML(bool save_children = true) const;
220 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 221 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
221 static void onActionButtonClick(void *userdata); 222 static void onActionButtonClick(void *userdata);
222 static void onSelectAction(LLUICtrl* ctrl, void *userdata); 223 static void onSelectAction(LLUICtrl* ctrl, void *userdata);
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index defe200..8a03300 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -2513,6 +2513,15 @@ LLMultiFloater::LLMultiFloater(
2513 2513
2514} 2514}
2515 2515
2516// virtual
2517LLXMLNodePtr LLMultiFloater::getXML(bool save_children) const
2518{
2519 LLXMLNodePtr node = LLFloater::getXML();
2520
2521 node->setName(LL_MULTI_FLOATER_TAG);
2522
2523 return node;
2524}
2516 2525
2517void LLMultiFloater::open() /* Flawfinder: ignore */ 2526void LLMultiFloater::open() /* Flawfinder: ignore */
2518{ 2527{
@@ -2936,6 +2945,8 @@ LLXMLNodePtr LLFloater::getXML(bool save_children) const
2936{ 2945{
2937 LLXMLNodePtr node = LLPanel::getXML(); 2946 LLXMLNodePtr node = LLPanel::getXML();
2938 2947
2948 node->setName(LL_FLOATER_TAG);
2949
2939 node->createChild("title", TRUE)->setStringValue(getCurrentTitle()); 2950 node->createChild("title", TRUE)->setStringValue(getCurrentTitle());
2940 2951
2941 node->createChild("can_resize", TRUE)->setBoolValue(isResizable()); 2952 node->createChild("can_resize", TRUE)->setBoolValue(isResizable());
diff --git a/linden/indra/llui/llfloater.h b/linden/indra/llui/llfloater.h
index 0e3d148..12f878d 100644
--- a/linden/indra/llui/llfloater.h
+++ b/linden/indra/llui/llfloater.h
@@ -398,6 +398,7 @@ public:
398 virtual ~LLMultiFloater() {}; 398 virtual ~LLMultiFloater() {};
399 399
400 virtual BOOL postBuild(); 400 virtual BOOL postBuild();
401 virtual LLXMLNodePtr getXML(bool save_children = true) const;
401 /*virtual*/ void open(); /* Flawfinder: ignore */ 402 /*virtual*/ void open(); /* Flawfinder: ignore */
402 /*virtual*/ void onClose(bool app_quitting); 403 /*virtual*/ void onClose(bool app_quitting);
403 /*virtual*/ void draw(); 404 /*virtual*/ void draw();
diff --git a/linden/indra/llui/lliconctrl.cpp b/linden/indra/llui/lliconctrl.cpp
index cb3b2a3..e73c8fe 100644
--- a/linden/indra/llui/lliconctrl.cpp
+++ b/linden/indra/llui/lliconctrl.cpp
@@ -137,6 +137,8 @@ LLXMLNodePtr LLIconCtrl::getXML(bool save_children) const
137{ 137{
138 LLXMLNodePtr node = LLUICtrl::getXML(); 138 LLXMLNodePtr node = LLUICtrl::getXML();
139 139
140 node->setName(LL_ICON_CTRL_TAG);
141
140 if (mImageName != "") 142 if (mImageName != "")
141 { 143 {
142 node->createChild("image_name", TRUE)->setStringValue(mImageName); 144 node->createChild("image_name", TRUE)->setStringValue(mImageName);
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 6994f0b..e5e193f 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -2210,6 +2210,8 @@ LLXMLNodePtr LLLineEditor::getXML(bool save_children) const
2210{ 2210{
2211 LLXMLNodePtr node = LLUICtrl::getXML(); 2211 LLXMLNodePtr node = LLUICtrl::getXML();
2212 2212
2213 node->setName(LL_LINE_EDITOR_TAG);
2214
2213 node->createChild("max_length", TRUE)->setIntValue(mMaxLengthBytes); 2215 node->createChild("max_length", TRUE)->setIntValue(mMaxLengthBytes);
2214 2216
2215 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont)); 2217 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont));
@@ -2799,6 +2801,16 @@ void LLSearchEditor::onClearSearch(void* user_data)
2799 } 2801 }
2800} 2802}
2801 2803
2804// virtual
2805LLXMLNodePtr LLSearchEditor::getXML(bool save_children) const
2806{
2807 LLXMLNodePtr node = LLUICtrl::getXML();
2808
2809 node->setName(LL_SEARCH_EDITOR_TAG);
2810
2811 return node;
2812}
2813
2802// static 2814// static
2803LLView* LLSearchEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 2815LLView* LLSearchEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
2804{ 2816{
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index f7cff8f..fc1b75f 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -386,6 +386,7 @@ public:
386 386
387 /*virtual*/ void draw(); 387 /*virtual*/ void draw();
388 388
389 virtual LLXMLNodePtr getXML(bool save_children = true) const;
389 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 390 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
390 391
391 void setText(const LLStringExplicit &new_text) { mSearchEdit->setText(new_text); } 392 void setText(const LLStringExplicit &new_text) { mSearchEdit->setText(new_text); }
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index 175bf07..b70f98b 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -154,6 +154,8 @@ LLXMLNodePtr LLMenuItemGL::getXML(bool save_children) const
154{ 154{
155 LLXMLNodePtr node = LLView::getXML(); 155 LLXMLNodePtr node = LLView::getXML();
156 156
157 node->setName(LL_MENU_ITEM_TAG);
158
157 node->createChild("type", TRUE)->setStringValue(getType()); 159 node->createChild("type", TRUE)->setStringValue(getType());
158 160
159 node->createChild("label", TRUE)->setStringValue(mLabel); 161 node->createChild("label", TRUE)->setStringValue(mLabel);
@@ -526,6 +528,8 @@ class LLMenuItemSeparatorGL : public LLMenuItemGL
526public: 528public:
527 LLMenuItemSeparatorGL( const std::string &name = SEPARATOR_NAME ); 529 LLMenuItemSeparatorGL( const std::string &name = SEPARATOR_NAME );
528 530
531 virtual LLXMLNodePtr getXML(bool save_children = true) const;
532
529 virtual std::string getType() const { return "separator"; } 533 virtual std::string getType() const { return "separator"; }
530 534
531 // doIt() - do the primary funcationality of the menu item. 535 // doIt() - do the primary funcationality of the menu item.
@@ -544,6 +548,16 @@ LLMenuItemSeparatorGL::LLMenuItemSeparatorGL( const std::string &name ) :
544{ 548{
545} 549}
546 550
551
552LLXMLNodePtr LLMenuItemSeparatorGL::getXML(bool save_children) const
553{
554 LLXMLNodePtr node = LLMenuItemGL::getXML();
555
556 node->setName(LL_MENU_ITEM_SEPARATOR_GL_TAG);
557
558 return node;
559}
560
547void LLMenuItemSeparatorGL::draw( void ) 561void LLMenuItemSeparatorGL::draw( void )
548{ 562{
549 gGL.color4fv( getDisabledColor().mV ); 563 gGL.color4fv( getDisabledColor().mV );
@@ -624,6 +638,15 @@ LLMenuItemTearOffGL::LLMenuItemTearOffGL(LLHandle<LLFloater> parent_floater_hand
624} 638}
625 639
626 640
641LLXMLNodePtr LLMenuItemTearOffGL::getXML(bool save_children) const
642{
643 LLXMLNodePtr node = LLMenuItemGL::getXML();
644
645 node->setName(LL_MENU_ITEM_TEAR_OFF_GL_TAG);
646
647 return node;
648}
649
627void LLMenuItemTearOffGL::doIt() 650void LLMenuItemTearOffGL::doIt()
628{ 651{
629 if (getMenu()->getTornOff()) 652 if (getMenu()->getTornOff())
@@ -821,6 +844,8 @@ LLXMLNodePtr LLMenuItemCallGL::getXML(bool save_children) const
821{ 844{
822 LLXMLNodePtr node = LLMenuItemGL::getXML(); 845 LLXMLNodePtr node = LLMenuItemGL::getXML();
823 846
847 node->setName(LL_MENU_ITEM_CALL_GL_TAG);
848
824 // Contents 849 // Contents
825 850
826 std::vector<LLListenerEntry> listeners = mDispatcher->getListeners(); 851 std::vector<LLListenerEntry> listeners = mDispatcher->getListeners();
@@ -830,6 +855,9 @@ LLXMLNodePtr LLMenuItemCallGL::getXML(bool save_children) const
830 std::string listener_name = findEventListener((LLSimpleListener*)itor->listener); 855 std::string listener_name = findEventListener((LLSimpleListener*)itor->listener);
831 if (!listener_name.empty()) 856 if (!listener_name.empty())
832 { 857 {
858 // *FIX: It's not always on_click. It could be on_check, on_enable or on_visible,
859 // but there's no way to get that from the data that is stored.
860
833 LLXMLNodePtr child_node = node->createChild("on_click", FALSE); 861 LLXMLNodePtr child_node = node->createChild("on_click", FALSE);
834 child_node->createChild("function", TRUE)->setStringValue(listener_name); 862 child_node->createChild("function", TRUE)->setStringValue(listener_name);
835 child_node->createChild("filter", TRUE)->setStringValue(itor->filter.asString()); 863 child_node->createChild("filter", TRUE)->setStringValue(itor->filter.asString());
@@ -971,6 +999,9 @@ void LLMenuItemCheckGL::setCheckedControl(std::string checked_control, LLView *c
971LLXMLNodePtr LLMenuItemCheckGL::getXML(bool save_children) const 999LLXMLNodePtr LLMenuItemCheckGL::getXML(bool save_children) const
972{ 1000{
973 LLXMLNodePtr node = LLMenuItemCallGL::getXML(); 1001 LLXMLNodePtr node = LLMenuItemCallGL::getXML();
1002
1003 node->setName(LL_MENU_ITEM_CHECK_GL_TAG);
1004
974 return node; 1005 return node;
975} 1006}
976 1007
@@ -1734,6 +1765,8 @@ LLXMLNodePtr LLMenuGL::getXML(bool save_children) const
1734{ 1765{
1735 LLXMLNodePtr node = LLView::getXML(); 1766 LLXMLNodePtr node = LLView::getXML();
1736 1767
1768 node->setName(LL_MENU_GL_TAG);
1769
1737 // Attributes 1770 // Attributes
1738 1771
1739 node->createChild("opaque", TRUE)->setBoolValue(mBgVisible); 1772 node->createChild("opaque", TRUE)->setBoolValue(mBgVisible);
@@ -1904,7 +1937,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
1904 1937
1905 LLSimpleListener* callback = parent->getListenerByName(callback_name); 1938 LLSimpleListener* callback = parent->getListenerByName(callback_name);
1906 1939
1907 if (!callback) continue; 1940 if (!callback)
1941 {
1942 lldebugs << "Ignoring \"on_check\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl;
1943 continue;
1944 }
1908 1945
1909 new_item->addListener(callback, "on_build", userdata); 1946 new_item->addListener(callback, "on_build", userdata);
1910 } 1947 }
@@ -1945,7 +1982,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
1945 1982
1946 LLSimpleListener* callback = parent->getListenerByName(callback_name); 1983 LLSimpleListener* callback = parent->getListenerByName(callback_name);
1947 1984
1948 if (!callback) continue; 1985 if (!callback)
1986 {
1987 lldebugs << "Ignoring \"on_click\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl;
1988 continue;
1989 }
1949 1990
1950 new_item->addListener(callback, "on_click", callback_data); 1991 new_item->addListener(callback, "on_click", callback_data);
1951 } 1992 }
@@ -1975,7 +2016,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
1975 2016
1976 LLSimpleListener* callback = parent->getListenerByName(callback_name); 2017 LLSimpleListener* callback = parent->getListenerByName(callback_name);
1977 2018
1978 if (!callback) continue; 2019 if (!callback)
2020 {
2021 lldebugs << "Ignoring \"on_enable\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl;
2022 continue;
2023 }
1979 2024
1980 new_item->addListener(callback, "on_build", userdata); 2025 new_item->addListener(callback, "on_build", userdata);
1981 } 2026 }
@@ -2015,7 +2060,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
2015 2060
2016 LLSimpleListener* callback = parent->getListenerByName(callback_name); 2061 LLSimpleListener* callback = parent->getListenerByName(callback_name);
2017 2062
2018 if (!callback) continue; 2063 if (!callback)
2064 {
2065 lldebugs << "Ignoring \"on_visible\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl;
2066 continue;
2067 }
2019 2068
2020 new_item->addListener(callback, "on_build", userdata); 2069 new_item->addListener(callback, "on_build", userdata);
2021 } 2070 }
@@ -3033,6 +3082,8 @@ class LLPieMenuBranch : public LLMenuItemGL
3033public: 3082public:
3034 LLPieMenuBranch(const std::string& name, const std::string& label, LLPieMenu* branch); 3083 LLPieMenuBranch(const std::string& name, const std::string& label, LLPieMenu* branch);
3035 3084
3085 virtual LLXMLNodePtr getXML(bool save_children = true) const;
3086
3036 // called to rebuild the draw label 3087 // called to rebuild the draw label
3037 virtual void buildDrawLabel( void ); 3088 virtual void buildDrawLabel( void );
3038 3089
@@ -3055,6 +3106,17 @@ LLPieMenuBranch::LLPieMenuBranch(const std::string& name,
3055 mBranch->setParentMenuItem(this); 3106 mBranch->setParentMenuItem(this);
3056} 3107}
3057 3108
3109// virtual
3110LLXMLNodePtr LLPieMenuBranch::getXML(bool save_children) const
3111{
3112 if (mBranch)
3113 {
3114 return mBranch->getXML();
3115 }
3116
3117 return LLMenuItemGL::getXML();
3118}
3119
3058// called to rebuild the draw label 3120// called to rebuild the draw label
3059void LLPieMenuBranch::buildDrawLabel( void ) 3121void LLPieMenuBranch::buildDrawLabel( void )
3060{ 3122{
@@ -3136,6 +3198,16 @@ LLPieMenu::LLPieMenu(const std::string& name)
3136} 3198}
3137 3199
3138 3200
3201// virtual
3202LLXMLNodePtr LLPieMenu::getXML(bool save_children) const
3203{
3204 LLXMLNodePtr node = LLMenuGL::getXML();
3205
3206 node->setName(LL_PIE_MENU_TAG);
3207
3208 return node;
3209}
3210
3139void LLPieMenu::initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory) 3211void LLPieMenu::initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory)
3140{ 3212{
3141 LLXMLNodePtr child; 3213 LLXMLNodePtr child;
@@ -3837,6 +3909,8 @@ LLXMLNodePtr LLMenuBarGL::getXML(bool save_children) const
3837 3909
3838 LLXMLNodePtr node = LLMenuGL::getXML(); 3910 LLXMLNodePtr node = LLMenuGL::getXML();
3839 3911
3912 node->setName(LL_MENU_BAR_GL_TAG);
3913
3840 for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter) 3914 for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter)
3841 { 3915 {
3842 LLMenuItemGL* child = *item_iter; 3916 LLMenuItemGL* child = *item_iter;
diff --git a/linden/indra/llui/llmenugl.h b/linden/indra/llui/llmenugl.h
index 030b81b..26fc294 100644
--- a/linden/indra/llui/llmenugl.h
+++ b/linden/indra/llui/llmenugl.h
@@ -368,6 +368,9 @@ public:
368 BOOL* toggle, 368 BOOL* toggle,
369 KEY key = KEY_NONE, MASK mask = MASK_NONE ); 369 KEY key = KEY_NONE, MASK mask = MASK_NONE );
370 370
371 // there is no getXML() because we cannot reference the toggled global variable by XML
372 // use LLMenuItemCheckGL instead.
373
371 virtual std::string getType() const { return "toggle"; } 374 virtual std::string getType() const { return "toggle"; }
372 375
373 // called to rebuild the draw label 376 // called to rebuild the draw label
@@ -636,6 +639,7 @@ public:
636 LLPieMenu(const std::string& name); 639 LLPieMenu(const std::string& name);
637 virtual ~LLPieMenu() {} 640 virtual ~LLPieMenu() {}
638 641
642 virtual LLXMLNodePtr getXML(bool save_children = true) const;
639 void initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory); 643 void initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory);
640 644
641 // LLView Functionality 645 // LLView Functionality
@@ -800,6 +804,7 @@ class LLMenuItemTearOffGL : public LLMenuItemGL
800public: 804public:
801 LLMenuItemTearOffGL( LLHandle<LLFloater> parent_floater_handle = LLHandle<LLFloater>()); 805 LLMenuItemTearOffGL( LLHandle<LLFloater> parent_floater_handle = LLHandle<LLFloater>());
802 806
807 virtual LLXMLNodePtr getXML(bool save_children = true) const;
803 virtual std::string getType() const { return "tearoff_menu"; } 808 virtual std::string getType() const { return "tearoff_menu"; }
804 809
805 virtual void doIt(void); 810 virtual void doIt(void);
diff --git a/linden/indra/llui/llmultislider.cpp b/linden/indra/llui/llmultislider.cpp
index c1487be..a0da4e2 100644
--- a/linden/indra/llui/llmultislider.cpp
+++ b/linden/indra/llui/llmultislider.cpp
@@ -571,6 +571,8 @@ LLXMLNodePtr LLMultiSlider::getXML(bool save_children) const
571{ 571{
572 LLXMLNodePtr node = LLUICtrl::getXML(); 572 LLXMLNodePtr node = LLUICtrl::getXML();
573 573
574 node->setName(LL_MULTI_SLIDER_TAG);
575
574 node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue()); 576 node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue());
575 node->createChild("min_val", TRUE)->setFloatValue(getMinValue()); 577 node->createChild("min_val", TRUE)->setFloatValue(getMinValue());
576 node->createChild("max_val", TRUE)->setFloatValue(getMaxValue()); 578 node->createChild("max_val", TRUE)->setFloatValue(getMaxValue());
diff --git a/linden/indra/llui/llmultisliderctrl.cpp b/linden/indra/llui/llmultisliderctrl.cpp
index 8bcf9f9..b76c2f6 100644
--- a/linden/indra/llui/llmultisliderctrl.cpp
+++ b/linden/indra/llui/llmultisliderctrl.cpp
@@ -132,7 +132,7 @@ LLMultiSliderCtrl::LLMultiSliderCtrl(const std::string& name, const LLRect& rect
132 &LLLineEditor::prevalidateFloat ); 132 &LLLineEditor::prevalidateFloat );
133 mEditor->setFollowsLeft(); 133 mEditor->setFollowsLeft();
134 mEditor->setFollowsBottom(); 134 mEditor->setFollowsBottom();
135 mEditor->setFocusReceivedCallback( &LLMultiSliderCtrl::onEditorGainFocus ); 135 mEditor->setFocusReceivedCallback( &LLMultiSliderCtrl::onEditorGainFocus, this );
136 mEditor->setIgnoreTab(TRUE); 136 mEditor->setIgnoreTab(TRUE);
137 // don't do this, as selecting the entire text is single clicking in some cases 137 // don't do this, as selecting the entire text is single clicking in some cases
138 // and double clicking in others 138 // and double clicking in others
@@ -501,6 +501,8 @@ LLXMLNodePtr LLMultiSliderCtrl::getXML(bool save_children) const
501{ 501{
502 LLXMLNodePtr node = LLUICtrl::getXML(); 502 LLXMLNodePtr node = LLUICtrl::getXML();
503 503
504 node->setName(LL_MULTI_SLIDER_CTRL_TAG);
505
504 node->createChild("show_text", TRUE)->setBoolValue(mShowText); 506 node->createChild("show_text", TRUE)->setBoolValue(mShowText);
505 507
506 node->createChild("can_edit_text", TRUE)->setBoolValue(mCanEditText); 508 node->createChild("can_edit_text", TRUE)->setBoolValue(mCanEditText);
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index 28780c7..709342b 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -402,7 +402,9 @@ void LLPanel::setBorderVisible(BOOL b)
402// virtual 402// virtual
403LLXMLNodePtr LLPanel::getXML(bool save_children) const 403LLXMLNodePtr LLPanel::getXML(bool save_children) const
404{ 404{
405 LLXMLNodePtr node = LLView::getXML(); 405 LLXMLNodePtr node = LLUICtrl::getXML();
406
407 node->setName(LL_PANEL_TAG);
406 408
407 if (mBorder && mBorder->getVisible()) 409 if (mBorder && mBorder->getVisible())
408 { 410 {
@@ -418,6 +420,15 @@ LLXMLNodePtr LLPanel::getXML(bool save_children) const
418 { 420 {
419 node->createChild("label", TRUE)->setStringValue(mLabel); 421 node->createChild("label", TRUE)->setStringValue(mLabel);
420 } 422 }
423
424 ui_string_map_t::const_iterator i = mUIStrings.begin();
425 ui_string_map_t::const_iterator end = mUIStrings.end();
426 for (; i != end; ++i)
427 {
428 LLXMLNodePtr child_node = node->createChild("string", FALSE);
429 child_node->setStringValue(i->second);
430 child_node->createChild("name", TRUE)->setStringValue(i->first);
431 }
421 432
422 if (save_children) 433 if (save_children)
423 { 434 {
@@ -1171,6 +1182,38 @@ void LLLayoutStack::removeCtrl(LLUICtrl* ctrl)
1171LLXMLNodePtr LLLayoutStack::getXML(bool save_children) const 1182LLXMLNodePtr LLLayoutStack::getXML(bool save_children) const
1172{ 1183{
1173 LLXMLNodePtr node = LLView::getXML(); 1184 LLXMLNodePtr node = LLView::getXML();
1185 node->setName(LL_LAYOUT_STACK_TAG);
1186
1187 if (mOrientation == HORIZONTAL)
1188 {
1189 node->createChild("orientation", TRUE)->setStringValue("horizontal");
1190 }
1191 else
1192 {
1193 node->createChild("orientation", TRUE)->setStringValue("vertical");
1194 }
1195
1196 if (save_children)
1197 {
1198 LLView::child_list_const_reverse_iter_t rit;
1199 for (rit = getChildList()->rbegin(); rit != getChildList()->rend(); ++rit)
1200 {
1201 LLView* childp = *rit;
1202
1203 if (childp->getSaveToXML())
1204 {
1205 LLXMLNodePtr xml_node = childp->getXML();
1206
1207 if (xml_node->hasName(LL_PANEL_TAG))
1208 {
1209 xml_node->setName(LL_LAYOUT_PANEL_TAG);
1210 }
1211
1212 node->addChild(xml_node);
1213 }
1214 }
1215 }
1216
1174 return node; 1217 return node;
1175} 1218}
1176 1219
diff --git a/linden/indra/llui/llprogressbar.cpp b/linden/indra/llui/llprogressbar.cpp
index 8833494..d148733 100644
--- a/linden/indra/llui/llprogressbar.cpp
+++ b/linden/indra/llui/llprogressbar.cpp
@@ -124,6 +124,16 @@ void LLProgressBar::setColorBackground(const LLColor4 &c)
124} 124}
125 125
126 126
127// virtual
128LLXMLNodePtr LLProgressBar::getXML(bool save_children) const
129{
130 LLXMLNodePtr node = LLView::getXML();
131
132 node->setName(LL_PROGRESS_BAR_TAG);
133
134 return node;
135}
136
127// static 137// static
128LLView* LLProgressBar::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 138LLView* LLProgressBar::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
129{ 139{
diff --git a/linden/indra/llui/llprogressbar.h b/linden/indra/llui/llprogressbar.h
index 00ad61d..5e02c3b 100644
--- a/linden/indra/llui/llprogressbar.h
+++ b/linden/indra/llui/llprogressbar.h
@@ -53,6 +53,7 @@ public:
53 void setColorShadow(const LLColor4 &c); 53 void setColorShadow(const LLColor4 &c);
54 void setColorBackground(const LLColor4 &c); 54 void setColorBackground(const LLColor4 &c);
55 55
56 virtual LLXMLNodePtr getXML(bool save_children = true) const;
56 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 57 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
57 58
58 /*virtual*/ void draw(); 59 /*virtual*/ void draw();
diff --git a/linden/indra/llui/llradiogroup.cpp b/linden/indra/llui/llradiogroup.cpp
index 33b9398..ad8922d 100644
--- a/linden/indra/llui/llradiogroup.cpp
+++ b/linden/indra/llui/llradiogroup.cpp
@@ -345,6 +345,8 @@ LLXMLNodePtr LLRadioGroup::getXML(bool save_children) const
345{ 345{
346 LLXMLNodePtr node = LLUICtrl::getXML(); 346 LLXMLNodePtr node = LLUICtrl::getXML();
347 347
348 node->setName(LL_RADIO_GROUP_TAG);
349
348 // Attributes 350 // Attributes
349 351
350 node->createChild("draw_border", TRUE)->setBoolValue(mHasBorder); 352 node->createChild("draw_border", TRUE)->setBoolValue(mHasBorder);
@@ -356,9 +358,7 @@ LLXMLNodePtr LLRadioGroup::getXML(bool save_children) const
356 { 358 {
357 LLRadioCtrl* radio = *iter; 359 LLRadioCtrl* radio = *iter;
358 360
359 LLXMLNodePtr child_node = radio->LLView::getXML(); 361 LLXMLNodePtr child_node = radio->getXML();
360 child_node->setStringValue(radio->getLabel());
361 child_node->setName(std::string("radio_item"));
362 362
363 node->addChild(child_node); 363 node->addChild(child_node);
364 } 364 }
@@ -515,3 +515,14 @@ void LLRadioCtrl::setValue(const LLSD& value)
515 mButton->setTabStop(value.asBoolean()); 515 mButton->setTabStop(value.asBoolean());
516} 516}
517 517
518// virtual
519LLXMLNodePtr LLRadioCtrl::getXML(bool save_children) const
520{
521 LLXMLNodePtr node = LLCheckBoxCtrl::getXML();
522
523 node->setName(LL_RADIO_ITEM_TAG);
524
525 node->setStringValue(getLabel());
526
527 return node;
528}
diff --git a/linden/indra/llui/llradiogroup.h b/linden/indra/llui/llradiogroup.h
index 3410b74..b4f65e7 100644
--- a/linden/indra/llui/llradiogroup.h
+++ b/linden/indra/llui/llradiogroup.h
@@ -52,6 +52,7 @@ public:
52 } 52 }
53 /*virtual*/ ~LLRadioCtrl(); 53 /*virtual*/ ~LLRadioCtrl();
54 54
55 virtual LLXMLNodePtr getXML(bool save_children = true) const;
55 /*virtual*/ void setValue(const LLSD& value); 56 /*virtual*/ void setValue(const LLSD& value);
56}; 57};
57 58
diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp
index cf03259..6f037e2 100644
--- a/linden/indra/llui/llscrollcontainer.cpp
+++ b/linden/indra/llui/llscrollcontainer.cpp
@@ -679,7 +679,9 @@ S32 LLScrollableContainerView::getBorderWidth() const
679// virtual 679// virtual
680LLXMLNodePtr LLScrollableContainerView::getXML(bool save_children) const 680LLXMLNodePtr LLScrollableContainerView::getXML(bool save_children) const
681{ 681{
682 LLXMLNodePtr node = LLView::getXML(); 682 LLXMLNodePtr node = LLUICtrl::getXML();
683
684 node->setName(LL_SCROLLABLE_CONTAINER_VIEW_TAG);
683 685
684 // Attributes 686 // Attributes
685 687
diff --git a/linden/indra/llui/llscrollingpanellist.cpp b/linden/indra/llui/llscrollingpanellist.cpp
index 05d0c6f..c2afb78 100644
--- a/linden/indra/llui/llscrollingpanellist.cpp
+++ b/linden/indra/llui/llscrollingpanellist.cpp
@@ -139,6 +139,16 @@ void LLScrollingPanelList::draw()
139} 139}
140 140
141 141
142// virtual
143LLXMLNodePtr LLScrollingPanelList::getXML(bool save_children) const
144{
145 LLXMLNodePtr node = LLUICtrl::getXML();
146
147 node->setName(LL_SCROLLING_PANEL_LIST_TAG);
148
149 return node;
150}
151
142// static 152// static
143LLView* LLScrollingPanelList::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 153LLView* LLScrollingPanelList::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
144{ 154{
diff --git a/linden/indra/llui/llscrollingpanellist.h b/linden/indra/llui/llscrollingpanellist.h
index b9d7309..9660427 100644
--- a/linden/indra/llui/llscrollingpanellist.h
+++ b/linden/indra/llui/llscrollingpanellist.h
@@ -58,14 +58,13 @@ public:
58 58
59 virtual void setValue(const LLSD& value) {}; 59 virtual void setValue(const LLSD& value) {};
60 60
61 virtual LLXMLNodePtr getXML(bool save_children) const { return LLUICtrl::getXML(); }
62
63 virtual void draw(); 61 virtual void draw();
64 62
65 void clearPanels(); 63 void clearPanels();
66 void addPanel( LLScrollingPanel* panel ); 64 void addPanel( LLScrollingPanel* panel );
67 void updatePanels(BOOL allow_modify); 65 void updatePanels(BOOL allow_modify);
68 66
67 virtual LLXMLNodePtr getXML(bool save_children = true) const;
69 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 68 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
70 69
71private: 70private:
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index 460b29f..3c2293f 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -2713,6 +2713,8 @@ LLXMLNodePtr LLScrollListCtrl::getXML(bool save_children) const
2713{ 2713{
2714 LLXMLNodePtr node = LLUICtrl::getXML(); 2714 LLXMLNodePtr node = LLUICtrl::getXML();
2715 2715
2716 node->setName(LL_SCROLL_LIST_CTRL_TAG);
2717
2716 // Attributes 2718 // Attributes
2717 2719
2718 node->createChild("multi_select", TRUE)->setBoolValue(mAllowMultipleSelection); 2720 node->createChild("multi_select", TRUE)->setBoolValue(mAllowMultipleSelection);
diff --git a/linden/indra/llui/llslider.cpp b/linden/indra/llui/llslider.cpp
index 4dfc904..7b4da9b 100644
--- a/linden/indra/llui/llslider.cpp
+++ b/linden/indra/llui/llslider.cpp
@@ -291,6 +291,15 @@ LLXMLNodePtr LLSlider::getXML(bool save_children) const
291{ 291{
292 LLXMLNodePtr node = LLUICtrl::getXML(); 292 LLXMLNodePtr node = LLUICtrl::getXML();
293 293
294 if (mVolumeSlider)
295 {
296 node->setName(LL_VOLUME_SLIDER_CTRL_TAG);
297 }
298 else
299 {
300 node->setName(LL_SLIDER_TAG);
301 }
302
294 node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue()); 303 node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue());
295 node->createChild("min_val", TRUE)->setFloatValue(getMinValue()); 304 node->createChild("min_val", TRUE)->setFloatValue(getMinValue());
296 node->createChild("max_val", TRUE)->setFloatValue(getMaxValue()); 305 node->createChild("max_val", TRUE)->setFloatValue(getMaxValue());
diff --git a/linden/indra/llui/llsliderctrl.cpp b/linden/indra/llui/llsliderctrl.cpp
index 31baddd..8a13ed4 100644
--- a/linden/indra/llui/llsliderctrl.cpp
+++ b/linden/indra/llui/llsliderctrl.cpp
@@ -419,6 +419,8 @@ LLXMLNodePtr LLSliderCtrl::getXML(bool save_children) const
419{ 419{
420 LLXMLNodePtr node = LLUICtrl::getXML(); 420 LLXMLNodePtr node = LLUICtrl::getXML();
421 421
422 node->setName(LL_SLIDER_CTRL_TAG);
423
422 node->createChild("show_text", TRUE)->setBoolValue(mShowText); 424 node->createChild("show_text", TRUE)->setBoolValue(mShowText);
423 425
424 node->createChild("can_edit_text", TRUE)->setBoolValue(mCanEditText); 426 node->createChild("can_edit_text", TRUE)->setBoolValue(mCanEditText);
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp
index 2f531a2..2992f98 100644
--- a/linden/indra/llui/llspinctrl.cpp
+++ b/linden/indra/llui/llspinctrl.cpp
@@ -483,6 +483,8 @@ LLXMLNodePtr LLSpinCtrl::getXML(bool save_children) const
483{ 483{
484 LLXMLNodePtr node = LLUICtrl::getXML(); 484 LLXMLNodePtr node = LLUICtrl::getXML();
485 485
486 node->setName(LL_SPIN_CTRL_TAG);
487
486 node->createChild("decimal_digits", TRUE)->setIntValue(mPrecision); 488 node->createChild("decimal_digits", TRUE)->setIntValue(mPrecision);
487 489
488 if (mLabelBox) 490 if (mLabelBox)
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index f416948..1f94191 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -620,6 +620,9 @@ BOOL LLTabContainer::handleKeyHere(KEY key, MASK mask)
620LLXMLNodePtr LLTabContainer::getXML(bool save_children) const 620LLXMLNodePtr LLTabContainer::getXML(bool save_children) const
621{ 621{
622 LLXMLNodePtr node = LLPanel::getXML(); 622 LLXMLNodePtr node = LLPanel::getXML();
623
624 node->setName(LL_TAB_CONTAINER_COMMON_TAG);
625
623 node->createChild("tab_position", TRUE)->setStringValue((getTabPosition() == TOP ? "top" : "bottom")); 626 node->createChild("tab_position", TRUE)->setStringValue((getTabPosition() == TOP ? "top" : "bottom"));
624 return node; 627 return node;
625} 628}
diff --git a/linden/indra/llui/lltextbox.cpp b/linden/indra/llui/lltextbox.cpp
index 89893bc..e45716f 100644
--- a/linden/indra/llui/lltextbox.cpp
+++ b/linden/indra/llui/lltextbox.cpp
@@ -386,6 +386,8 @@ LLXMLNodePtr LLTextBox::getXML(bool save_children) const
386{ 386{
387 LLXMLNodePtr node = LLUICtrl::getXML(); 387 LLXMLNodePtr node = LLUICtrl::getXML();
388 388
389 node->setName(LL_TEXT_BOX_TAG);
390
389 // Attributes 391 // Attributes
390 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mFontGL)); 392 node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mFontGL));
391 node->createChild("halign", TRUE)->setStringValue(LLFontGL::nameFromHAlign(mHAlign)); 393 node->createChild("halign", TRUE)->setStringValue(LLFontGL::nameFromHAlign(mHAlign));
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 32106f1..7c05239 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -4296,6 +4296,8 @@ LLXMLNodePtr LLTextEditor::getXML(bool save_children) const
4296{ 4296{
4297 LLXMLNodePtr node = LLUICtrl::getXML(); 4297 LLXMLNodePtr node = LLUICtrl::getXML();
4298 4298
4299 node->setName(LL_SIMPLE_TEXT_EDITOR_TAG);
4300
4299 // Attributes 4301 // Attributes
4300 4302
4301 node->createChild("max_length", TRUE)->setIntValue(getMaxLength()); 4303 node->createChild("max_length", TRUE)->setIntValue(getMaxLength());
diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp
index 983cc53..07eb39b 100644
--- a/linden/indra/llui/lluictrlfactory.cpp
+++ b/linden/indra/llui/lluictrlfactory.cpp
@@ -86,6 +86,15 @@ public:
86 LLUICtrlLocate() : LLUICtrl(std::string("locate"), LLRect(0,0,0,0), FALSE, NULL, NULL) { setTabStop(FALSE); } 86 LLUICtrlLocate() : LLUICtrl(std::string("locate"), LLRect(0,0,0,0), FALSE, NULL, NULL) { setTabStop(FALSE); }
87 virtual void draw() { } 87 virtual void draw() { }
88 88
89 virtual LLXMLNodePtr getXML(bool save_children = true) const
90 {
91 LLXMLNodePtr node = LLUICtrl::getXML();
92
93 node->setName(LL_UI_CTRL_LOCATE_TAG);
94
95 return node;
96 }
97
89 static LLView *fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 98 static LLView *fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
90 { 99 {
91 std::string name("pad"); 100 std::string name("pad");
@@ -163,20 +172,24 @@ bool LLUICtrlFactory::getLayeredXMLNode(const std::string &xui_filename, LLXMLNo
163 std::string full_filename = gDirUtilp->findSkinnedFilename(sXUIPaths.front(), xui_filename); 172 std::string full_filename = gDirUtilp->findSkinnedFilename(sXUIPaths.front(), xui_filename);
164 if (full_filename.empty()) 173 if (full_filename.empty())
165 { 174 {
166 llwarns << "Couldn't find UI description file: " << sXUIPaths.front() + gDirUtilp->getDirDelimiter() + xui_filename << llendl;
167 return false;
168 }
169
170 if (!LLXMLNode::parseFile(full_filename, root, NULL))
171 {
172 // try filename as passed in since sometimes we load an xml file from a user-supplied path 175 // try filename as passed in since sometimes we load an xml file from a user-supplied path
173 if (!LLXMLNode::parseFile(xui_filename, root, NULL)) 176 if (gDirUtilp->fileExists(xui_filename))
174 { 177 {
175 llwarns << "Problem reading UI description file: " << xui_filename << llendl; 178 full_filename = xui_filename;
179 }
180 else
181 {
182 llwarns << "Couldn't find UI description file: " << sXUIPaths.front() + gDirUtilp->getDirDelimiter() + xui_filename << llendl;
176 return false; 183 return false;
177 } 184 }
178 } 185 }
179 186
187 if (!LLXMLNode::parseFile(full_filename, root, NULL))
188 {
189 llwarns << "Problem reading UI description file: " << full_filename << llendl;
190 return false;
191 }
192
180 LLXMLNodePtr updateRoot; 193 LLXMLNodePtr updateRoot;
181 194
182 std::vector<std::string>::const_iterator itor; 195 std::vector<std::string>::const_iterator itor;
diff --git a/linden/indra/llui/lluixmltags.h b/linden/indra/llui/lluixmltags.h
index 0456666..4166131 100644
--- a/linden/indra/llui/lluixmltags.h
+++ b/linden/indra/llui/lluixmltags.h
@@ -122,5 +122,10 @@ const std::string
122 LL_JOYSTICK_TURN("joystick_turn"), 122 LL_JOYSTICK_TURN("joystick_turn"),
123 LL_GROUP_DROP_TARGET_TAG("group_drop_target"), 123 LL_GROUP_DROP_TARGET_TAG("group_drop_target"),
124 LL_LAYOUT_STACK_TAG("layout_stack"), 124 LL_LAYOUT_STACK_TAG("layout_stack"),
125 LL_FLYOUT_BUTTON_TAG("flyout_button"); 125 LL_LAYOUT_PANEL_TAG("layout_panel"),
126 LL_FLYOUT_BUTTON_TAG("flyout_button"),
127 LL_FLYOUT_BUTTON_ITEM_TAG("flyout_button_item"),
128 LL_SIMPLE_TEXT_EDITOR_TAG("simple_text_editor"),
129 LL_RADIO_ITEM_TAG("radio_item"),
130 LL_PROGRESS_BAR_TAG("progress_bar");
126#endif 131#endif
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index 36bc850..8de376f 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -1943,7 +1943,7 @@ BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, LLView* o
1943// virtual 1943// virtual
1944LLXMLNodePtr LLView::getXML(bool save_children) const 1944LLXMLNodePtr LLView::getXML(bool save_children) const
1945{ 1945{
1946 //FIXME: need to provide actual derived type tag, probably outside this method 1946 //If called from a derived class, the derived class will override the node name
1947 LLXMLNodePtr node = new LLXMLNode("view", FALSE); 1947 LLXMLNodePtr node = new LLXMLNode("view", FALSE);
1948 1948
1949 node->createChild("name", TRUE)->setStringValue(getName()); 1949 node->createChild("name", TRUE)->setStringValue(getName());
@@ -2353,6 +2353,8 @@ LLView* LLView::findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESna
2353void LLView::registerEventListener(std::string name, LLSimpleListener* function) 2353void LLView::registerEventListener(std::string name, LLSimpleListener* function)
2354{ 2354{
2355 mDispatchList.insert(std::pair<std::string, LLSimpleListener*>(name, function)); 2355 mDispatchList.insert(std::pair<std::string, LLSimpleListener*>(name, function));
2356 lldebugs << getName() << " registered " << name << llendl;
2357
2356} 2358}
2357 2359
2358void LLView::deregisterEventListener(std::string name) 2360void LLView::deregisterEventListener(std::string name)
diff --git a/linden/indra/llui/llviewborder.cpp b/linden/indra/llui/llviewborder.cpp
index d4a9e9d..47323e2 100644
--- a/linden/indra/llui/llviewborder.cpp
+++ b/linden/indra/llui/llviewborder.cpp
@@ -303,6 +303,16 @@ BOOL LLViewBorder::getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel
303} 303}
304 304
305 305
306// virtual
307LLXMLNodePtr LLViewBorder::getXML(bool save_children) const
308{
309 LLXMLNodePtr node = LLView::getXML();
310
311 node->setName(LL_VIEW_BORDER_TAG);
312
313 return node;
314}
315
306// static 316// static
307LLView* LLViewBorder::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 317LLView* LLViewBorder::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
308{ 318{
diff --git a/linden/indra/llui/llviewborder.h b/linden/indra/llui/llviewborder.h
index a40e653..1d80b6b 100644
--- a/linden/indra/llui/llviewborder.h
+++ b/linden/indra/llui/llviewborder.h
@@ -51,6 +51,7 @@ public:
51 // llview functionality 51 // llview functionality
52 virtual void draw(); 52 virtual void draw();
53 53
54 virtual LLXMLNodePtr getXML(bool save_children = true) const;
54 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); 55 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory);
55 static BOOL getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel& bevel_style); 56 static BOOL getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel& bevel_style);
56 57
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index 44d1ad1..1146c44 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -154,7 +154,7 @@ BOOL LLChatBar::postBuild()
154 mInputEditor->setPassDelete(TRUE); 154 mInputEditor->setPassDelete(TRUE);
155 mInputEditor->setReplaceNewlinesWithSpaces(FALSE); 155 mInputEditor->setReplaceNewlinesWithSpaces(FALSE);
156 156
157 mInputEditor->setMaxTextLength(1023); 157 mInputEditor->setMaxTextLength(DB_CHAT_MSG_STR_LEN);
158 mInputEditor->setEnableLineHistory(TRUE); 158 mInputEditor->setEnableLineHistory(TRUE);
159 } 159 }
160 160
@@ -624,8 +624,12 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL
624 624
625 LLWString out_text = stripChannelNumber(wtext, &channel); 625 LLWString out_text = stripChannelNumber(wtext, &channel);
626 std::string utf8_out_text = wstring_to_utf8str(out_text); 626 std::string utf8_out_text = wstring_to_utf8str(out_text);
627 std::string utf8_text = wstring_to_utf8str(wtext); 627 if (!utf8_out_text.empty())
628 {
629 utf8_out_text = utf8str_truncate(utf8_out_text, MAX_MSG_STR_LEN);
630 }
628 631
632 std::string utf8_text = wstring_to_utf8str(wtext);
629 utf8_text = utf8str_trim(utf8_text); 633 utf8_text = utf8str_trim(utf8_text);
630 if (!utf8_text.empty()) 634 if (!utf8_text.empty())
631 { 635 {
diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp
index 5f8d9ed..5905bb0 100644
--- a/linden/indra/newview/llcolorswatch.cpp
+++ b/linden/indra/newview/llcolorswatch.cpp
@@ -219,12 +219,11 @@ void LLColorSwatchCtrl::draw()
219 gl_rect_2d(interior, mColor, TRUE); 219 gl_rect_2d(interior, mColor, TRUE);
220 LLColor4 opaque_color = mColor; 220 LLColor4 opaque_color = mColor;
221 opaque_color.mV[VALPHA] = 1.f; 221 opaque_color.mV[VALPHA] = 1.f;
222 gGL.color4fv(opaque_color.mV);
223 if (mAlphaGradientImage.notNull()) 222 if (mAlphaGradientImage.notNull())
224 { 223 {
225 gGL.pushMatrix(); 224 gGL.pushMatrix();
226 { 225 {
227 mAlphaGradientImage->draw(interior, mColor); 226 mAlphaGradientImage->draw(interior, opaque_color);
228 } 227 }
229 gGL.popMatrix(); 228 gGL.popMatrix();
230 } 229 }
@@ -348,6 +347,8 @@ LLXMLNodePtr LLColorSwatchCtrl::getXML(bool save_children) const
348{ 347{
349 LLXMLNodePtr node = LLUICtrl::getXML(); 348 LLXMLNodePtr node = LLUICtrl::getXML();
350 349
350 node->setName(LL_COLOR_SWATCH_CTRL_TAG);
351
351 node->createChild("color", TRUE)->setFloatValue(4, mColor.mV); 352 node->createChild("color", TRUE)->setFloatValue(4, mColor.mV);
352 353
353 node->createChild("border_color", TRUE)->setFloatValue(4, mBorderColor.mV); 354 node->createChild("border_color", TRUE)->setFloatValue(4, mBorderColor.mV);
diff --git a/linden/indra/newview/llhudeffectbeam.cpp b/linden/indra/newview/llhudeffectbeam.cpp
index 6cb3bef..a7c1214 100644
--- a/linden/indra/newview/llhudeffectbeam.cpp
+++ b/linden/indra/newview/llhudeffectbeam.cpp
@@ -312,6 +312,11 @@ void LLHUDEffectBeam::render()
312 } 312 }
313} 313}
314 314
315void LLHUDEffectBeam::renderForTimer()
316{
317 render();
318}
319
315void LLHUDEffectBeam::setupParticle(const S32 i) 320void LLHUDEffectBeam::setupParticle(const S32 i)
316{ 321{
317 LLVector3d start_pos_global; 322 LLVector3d start_pos_global;
diff --git a/linden/indra/newview/llhudeffectbeam.h b/linden/indra/newview/llhudeffectbeam.h
index 7365894..69e2b51 100644
--- a/linden/indra/newview/llhudeffectbeam.h
+++ b/linden/indra/newview/llhudeffectbeam.h
@@ -58,6 +58,7 @@ protected:
58 ~LLHUDEffectBeam(); 58 ~LLHUDEffectBeam();
59 59
60 /*virtual*/ void render(); 60 /*virtual*/ void render();
61 /*virtual*/ void renderForTimer();
61 /*virtual*/ void packData(LLMessageSystem *mesgsys); 62 /*virtual*/ void packData(LLMessageSystem *mesgsys);
62 /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum); 63 /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
63private: 64private:
diff --git a/linden/indra/newview/llhudeffecttrail.cpp b/linden/indra/newview/llhudeffecttrail.cpp
index 32b52f8..08f4c78 100644
--- a/linden/indra/newview/llhudeffecttrail.cpp
+++ b/linden/indra/newview/llhudeffecttrail.cpp
@@ -287,3 +287,8 @@ void LLHUDEffectSpiral::render()
287 return; 287 return;
288 } 288 }
289} 289}
290
291void LLHUDEffectSpiral::renderForTimer()
292{
293 render();
294}
diff --git a/linden/indra/newview/llhudeffecttrail.h b/linden/indra/newview/llhudeffecttrail.h
index 60836c2..033fbeb 100644
--- a/linden/indra/newview/llhudeffecttrail.h
+++ b/linden/indra/newview/llhudeffecttrail.h
@@ -68,6 +68,7 @@ protected:
68 ~LLHUDEffectSpiral(); 68 ~LLHUDEffectSpiral();
69 69
70 /*virtual*/ void render(); 70 /*virtual*/ void render();
71 /*virtual*/ void renderForTimer();
71 /*virtual*/ void packData(LLMessageSystem *mesgsys); 72 /*virtual*/ void packData(LLMessageSystem *mesgsys);
72 /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum); 73 /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
73private: 74private:
diff --git a/linden/indra/newview/llhudobject.cpp b/linden/indra/newview/llhudobject.cpp
index bdff492..ea6e0bf 100644
--- a/linden/indra/newview/llhudobject.cpp
+++ b/linden/indra/newview/llhudobject.cpp
@@ -308,6 +308,27 @@ void LLHUDObject::renderAllForSelect()
308} 308}
309 309
310// static 310// static
311void LLHUDObject::renderAllForTimer()
312{
313 LLHUDObject *hud_objp;
314
315 hud_object_list_t::iterator object_it;
316 for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
317 {
318 hud_object_list_t::iterator cur_it = object_it++;
319 hud_objp = (*cur_it);
320 if (hud_objp->getNumRefs() == 1)
321 {
322 sHUDObjects.erase(cur_it);
323 }
324 else if (hud_objp->isVisible())
325 {
326 hud_objp->renderForTimer();
327 }
328 }
329}
330
331// static
311void LLHUDObject::sortObjects() 332void LLHUDObject::sortObjects()
312{ 333{
313 sHUDObjects.sort(hud_object_further_away()); 334 sHUDObjects.sort(hud_object_further_away());
diff --git a/linden/indra/newview/llhudobject.h b/linden/indra/newview/llhudobject.h
index 2cd8abf..84c2f84 100644
--- a/linden/indra/newview/llhudobject.h
+++ b/linden/indra/newview/llhudobject.h
@@ -75,6 +75,7 @@ public:
75 static void updateAll(); 75 static void updateAll();
76 static void renderAll(); 76 static void renderAll();
77 static void renderAllForSelect(); 77 static void renderAllForSelect();
78 static void renderAllForTimer();
78 79
79 static void cleanupHUDObjects(); 80 static void cleanupHUDObjects();
80 81
@@ -106,6 +107,7 @@ protected:
106 107
107 virtual void render() = 0; 108 virtual void render() = 0;
108 virtual void renderForSelect() {}; 109 virtual void renderForSelect() {};
110 virtual void renderForTimer() {};
109 111
110protected: 112protected:
111 U8 mType; 113 U8 mType;
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 243ef49..9a044d7 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -1200,7 +1200,7 @@ void LLFloaterIMPanel::init(const std::string& session_label)
1200 1200
1201 setTitle(mSessionLabel); 1201 setTitle(mSessionLabel);
1202 1202
1203 mInputEditor->setMaxTextLength(1023); 1203 mInputEditor->setMaxTextLength(DB_IM_MSG_STR_LEN);
1204 // enable line history support for instant message bar 1204 // enable line history support for instant message bar
1205 mInputEditor->setEnableLineHistory(TRUE); 1205 mInputEditor->setEnableLineHistory(TRUE);
1206 1206
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index f0bfa00..97df7a3 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -1654,6 +1654,8 @@ LLXMLNodePtr LLInventoryPanel::getXML(bool save_children) const
1654{ 1654{
1655 LLXMLNodePtr node = LLPanel::getXML(false); // Do not print out children 1655 LLXMLNodePtr node = LLPanel::getXML(false); // Do not print out children
1656 1656
1657 node->setName(LL_INVENTORY_PANEL_TAG);
1658
1657 node->createChild("allow_multi_select", TRUE)->setBoolValue(mFolders->getAllowMultiSelect()); 1659 node->createChild("allow_multi_select", TRUE)->setBoolValue(mFolders->getAllowMultiSelect());
1658 1660
1659 return node; 1661 return node;
diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp
index 326c511..05c5e41 100644
--- a/linden/indra/newview/lljoystickbutton.cpp
+++ b/linden/indra/newview/lljoystickbutton.cpp
@@ -248,16 +248,10 @@ EJoystickQuadrant LLJoystick::quadrantFromName(const std::string& sQuadrant)
248 248
249LLXMLNodePtr LLJoystick::getXML(bool save_children) const 249LLXMLNodePtr LLJoystick::getXML(bool save_children) const
250{ 250{
251 LLXMLNodePtr node = LLUICtrl::getXML(); 251 LLXMLNodePtr node = LLButton::getXML();
252 252
253 node->createChild("halign", TRUE)->setStringValue(LLFontGL::nameFromHAlign(getHAlign()));
254 node->createChild("quadrant", TRUE)->setStringValue(nameFromQuadrant(mInitialQuadrant)); 253 node->createChild("quadrant", TRUE)->setStringValue(nameFromQuadrant(mInitialQuadrant));
255
256 addImageAttributeToXML(node,getImageUnselectedName(),getImageUnselectedID(),std::string("image_unselected"));
257 addImageAttributeToXML(node,getImageSelectedName(),getImageSelectedID(),std::string("image_selected"));
258 254
259 node->createChild("scale_image", TRUE)->setBoolValue(getScaleImage());
260
261 return node; 255 return node;
262} 256}
263 257
@@ -327,6 +321,15 @@ void LLJoystickAgentTurn::onHeldDown()
327 } 321 }
328} 322}
329 323
324LLXMLNodePtr LLJoystickAgentTurn::getXML(bool save_children) const
325{
326 LLXMLNodePtr node = LLJoystick::getXML();
327
328 node->setName(LL_JOYSTICK_TURN);
329
330 return node;
331}
332
330LLView* LLJoystickAgentTurn::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 333LLView* LLJoystickAgentTurn::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
331{ 334{
332 std::string name("button"); 335 std::string name("button");
@@ -435,6 +438,15 @@ void LLJoystickAgentSlide::onHeldDown()
435} 438}
436 439
437 440
441LLXMLNodePtr LLJoystickAgentSlide::getXML(bool save_children) const
442{
443 LLXMLNodePtr node = LLJoystick::getXML();
444
445 node->setName(LL_JOYSTICK_SLIDE);
446
447 return node;
448}
449
438// static 450// static
439LLView* LLJoystickAgentSlide::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 451LLView* LLJoystickAgentSlide::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
440{ 452{
diff --git a/linden/indra/newview/lljoystickbutton.h b/linden/indra/newview/lljoystickbutton.h
index 076a506..b26851f 100644
--- a/linden/indra/newview/lljoystickbutton.h
+++ b/linden/indra/newview/lljoystickbutton.h
@@ -97,6 +97,7 @@ public:
97 97
98 virtual void onHeldDown(); 98 virtual void onHeldDown();
99 99
100 virtual LLXMLNodePtr getXML(bool save_children = true) const;
100 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 101 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
101 102
102}; 103};
@@ -114,6 +115,7 @@ public:
114 virtual void onHeldDown(); 115 virtual void onHeldDown();
115 virtual void onMouseUp(); 116 virtual void onMouseUp();
116 117
118 virtual LLXMLNodePtr getXML(bool save_children = true) const;
117 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 119 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
118}; 120};
119 121
diff --git a/linden/indra/newview/llnameeditor.cpp b/linden/indra/newview/llnameeditor.cpp
index e4a6573..5997369 100644
--- a/linden/indra/newview/llnameeditor.cpp
+++ b/linden/indra/newview/llnameeditor.cpp
@@ -141,6 +141,16 @@ LLSD LLNameEditor::getValue() const
141 return LLSD(mNameID); 141 return LLSD(mNameID);
142} 142}
143 143
144// virtual
145LLXMLNodePtr LLNameEditor::getXML(bool save_children) const
146{
147 LLXMLNodePtr node = LLLineEditor::getXML();
148
149 node->setName(LL_NAME_EDITOR_TAG);
150
151 return node;
152}
153
144LLView* LLNameEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 154LLView* LLNameEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
145{ 155{
146 std::string name("name_editor"); 156 std::string name("name_editor");
diff --git a/linden/indra/newview/llnameeditor.h b/linden/indra/newview/llnameeditor.h
index bc5a678..964682c 100644
--- a/linden/indra/newview/llnameeditor.h
+++ b/linden/indra/newview/llnameeditor.h
@@ -62,6 +62,7 @@ public:
62 62
63 virtual ~LLNameEditor(); 63 virtual ~LLNameEditor();
64 64
65 virtual LLXMLNodePtr getXML(bool save_children = true) const;
65 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 66 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
66 67
67 void setNameID(const LLUUID& name_id, BOOL is_group); 68 void setNameID(const LLUUID& name_id, BOOL is_group);
diff --git a/linden/indra/newview/llnamelistctrl.cpp b/linden/indra/newview/llnamelistctrl.cpp
index baf0656..453cf7f 100644
--- a/linden/indra/newview/llnamelistctrl.cpp
+++ b/linden/indra/newview/llnamelistctrl.cpp
@@ -288,6 +288,8 @@ LLXMLNodePtr LLNameListCtrl::getXML(bool save_children) const
288{ 288{
289 LLXMLNodePtr node = LLScrollListCtrl::getXML(); 289 LLXMLNodePtr node = LLScrollListCtrl::getXML();
290 290
291 node->setName(LL_NAME_LIST_CTRL_TAG);
292
291 node->createChild("allow_calling_card_drop", TRUE)->setBoolValue(mAllowCallingCardDrop); 293 node->createChild("allow_calling_card_drop", TRUE)->setBoolValue(mAllowCallingCardDrop);
292 294
293 if (mNameColumnIndex != 0) 295 if (mNameColumnIndex != 0)
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index c4ea71e..5500973 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -969,6 +969,8 @@ LLXMLNodePtr LLTextureCtrl::getXML(bool save_children) const
969{ 969{
970 LLXMLNodePtr node = LLUICtrl::getXML(); 970 LLXMLNodePtr node = LLUICtrl::getXML();
971 971
972 node->setName(LL_TEXTURE_CTRL_TAG);
973
972 node->createChild("label", TRUE)->setStringValue(getLabel()); 974 node->createChild("label", TRUE)->setStringValue(getLabel());
973 975
974 node->createChild("default_image_name", TRUE)->setStringValue(getDefaultImageName()); 976 node->createChild("default_image_name", TRUE)->setStringValue(getDefaultImageName());
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 296c540..e5e2cd6 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -1555,6 +1555,16 @@ BOOL LLViewerTextEditor::exportBuffer( std::string& buffer )
1555 return TRUE; 1555 return TRUE;
1556} 1556}
1557 1557
1558// virtual
1559LLXMLNodePtr LLViewerTextEditor::getXML(bool save_children) const
1560{
1561 LLXMLNodePtr node = LLTextEditor::getXML();
1562
1563 node->setName(LL_TEXT_EDITOR_TAG);
1564
1565 return node;
1566}
1567
1558LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 1568LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
1559{ 1569{
1560 std::string name("text_editor"); 1570 std::string name("text_editor");
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h
index f29caee..c69b3f0 100644
--- a/linden/indra/newview/llviewertexteditor.h
+++ b/linden/indra/newview/llviewertexteditor.h
@@ -54,6 +54,7 @@ public:
54 54
55 virtual void makePristine(); 55 virtual void makePristine();
56 56
57 virtual LLXMLNodePtr getXML(bool save_children = true) const;
57 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 58 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
58 59
59 // mousehandler overrides 60 // mousehandler overrides
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index a2bfe68..c361f49 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -171,7 +171,7 @@ const F32 TIME_BEFORE_MESH_CLEANUP = 5.f; // seconds
171const S32 AVATAR_RELEASE_THRESHOLD = 10; // number of avatar instances before releasing memory 171const S32 AVATAR_RELEASE_THRESHOLD = 10; // number of avatar instances before releasing memory
172const F32 FOOT_GROUND_COLLISION_TOLERANCE = 0.25f; 172const F32 FOOT_GROUND_COLLISION_TOLERANCE = 0.25f;
173const F32 AVATAR_LOD_TWEAK_RANGE = 0.7f; 173const F32 AVATAR_LOD_TWEAK_RANGE = 0.7f;
174const S32 MAX_BUBBLE_CHAT_LENGTH = 1023; 174const S32 MAX_BUBBLE_CHAT_LENGTH = DB_CHAT_MSG_STR_LEN;
175const S32 MAX_BUBBLE_CHAT_UTTERANCES = 12; 175const S32 MAX_BUBBLE_CHAT_UTTERANCES = 12;
176const F32 CHAT_FADE_TIME = 8.0; 176const F32 CHAT_FADE_TIME = 8.0;
177const F32 BUBBLE_CHAT_TIME = CHAT_FADE_TIME * 3.f; 177const F32 BUBBLE_CHAT_TIME = CHAT_FADE_TIME * 3.f;
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 89cb62b..453b9d2 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -1012,6 +1012,16 @@ void LLWebBrowserTexture::resize( S32 new_width, S32 new_height )
1012 mLastBrowserDepth = media_depth; 1012 mLastBrowserDepth = media_depth;
1013} 1013}
1014 1014
1015// virtual
1016LLXMLNodePtr LLWebBrowserCtrl::getXML(bool save_children) const
1017{
1018 LLXMLNodePtr node = LLUICtrl::getXML();
1019
1020 node->setName(LL_WEB_BROWSER_CTRL_TAG);
1021
1022 return node;
1023}
1024
1015LLView* LLWebBrowserCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) 1025LLView* LLWebBrowserCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
1016{ 1026{
1017 std::string name("web_browser"); 1027 std::string name("web_browser");
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index 0f46aa1..0100807 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -191,6 +191,7 @@ class LLWebBrowserCtrl :
191 // Defaults to true. 191 // Defaults to true.
192 void setTakeFocusOnClick( bool take_focus ); 192 void setTakeFocusOnClick( bool take_focus );
193 193
194 virtual LLXMLNodePtr getXML(bool save_children = true) const;
194 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 195 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
195 196
196 // handle mouse related methods 197 // handle mouse related methods
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 4ea9e41..d3ee8b6 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -2724,12 +2724,20 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2724 2724
2725 LLVertexBuffer::unbind(); 2725 LLVertexBuffer::unbind();
2726 2726
2727 if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) 2727 if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
2728 { 2728 {
2729 // Render debugging beacons. 2729 if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
2730 gObjectList.renderObjectBeacons(); 2730 {
2731 LLHUDObject::renderAll(); 2731 // Render debugging beacons.
2732 gObjectList.resetObjectBeacons(); 2732 gObjectList.renderObjectBeacons();
2733 LLHUDObject::renderAll();
2734 gObjectList.resetObjectBeacons();
2735 }
2736 else
2737 {
2738 // Make sure particle effects disappear
2739 LLHUDObject::renderAllForTimer();
2740 }
2733 } 2741 }
2734 2742
2735 LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); 2743 LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
@@ -2954,6 +2962,11 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
2954 LLHUDObject::renderAll(); 2962 LLHUDObject::renderAll();
2955 gObjectList.resetObjectBeacons(); 2963 gObjectList.resetObjectBeacons();
2956 } 2964 }
2965 else
2966 {
2967 // Make sure particle effects disappear
2968 LLHUDObject::renderAllForTimer();
2969 }
2957 2970
2958 if (occlude) 2971 if (occlude)
2959 { 2972 {