From b73beb6715011ca81d8d9febb8d6f109aa9f2e4c Mon Sep 17 00:00:00 2001 From: Mm Alder Date: Sun, 3 Jan 2010 14:33:06 -0500 Subject: VWR-14475 Load from XML is broken --- linden/indra/llui/lluictrlfactory.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'linden/indra/llui') diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp index 983cc53..0074494 100644 --- a/linden/indra/llui/lluictrlfactory.cpp +++ b/linden/indra/llui/lluictrlfactory.cpp @@ -163,20 +163,24 @@ bool LLUICtrlFactory::getLayeredXMLNode(const std::string &xui_filename, LLXMLNo std::string full_filename = gDirUtilp->findSkinnedFilename(sXUIPaths.front(), xui_filename); if (full_filename.empty()) { - llwarns << "Couldn't find UI description file: " << sXUIPaths.front() + gDirUtilp->getDirDelimiter() + xui_filename << llendl; - return false; - } - - if (!LLXMLNode::parseFile(full_filename, root, NULL)) - { // try filename as passed in since sometimes we load an xml file from a user-supplied path - if (!LLXMLNode::parseFile(xui_filename, root, NULL)) + if (gDirUtilp->fileExists(xui_filename)) { - llwarns << "Problem reading UI description file: " << xui_filename << llendl; + full_filename = xui_filename; + } + else + { + llwarns << "Couldn't find UI description file: " << sXUIPaths.front() + gDirUtilp->getDirDelimiter() + xui_filename << llendl; return false; } } + if (!LLXMLNode::parseFile(full_filename, root, NULL)) + { + llwarns << "Problem reading UI description file: " << full_filename << llendl; + return false; + } + LLXMLNodePtr updateRoot; std::vector::const_iterator itor; -- cgit v1.1 From c17d74a59f10ad1fb9f9a7da2811688ff2944afa Mon Sep 17 00:00:00 2001 From: Mm Alder Date: Sun, 3 Jan 2010 14:40:37 -0500 Subject: VWR-15310 Save to XML doesn't set proper XML tags --- linden/indra/llui/llbutton.cpp | 2 + linden/indra/llui/llcheckboxctrl.cpp | 3 +- linden/indra/llui/llcombobox.cpp | 29 +++++++++++ linden/indra/llui/llcombobox.h | 1 + linden/indra/llui/llfloater.cpp | 11 ++++ linden/indra/llui/llfloater.h | 1 + linden/indra/llui/lliconctrl.cpp | 2 + linden/indra/llui/lllineeditor.cpp | 12 +++++ linden/indra/llui/lllineeditor.h | 1 + linden/indra/llui/llmenugl.cpp | 82 ++++++++++++++++++++++++++++-- linden/indra/llui/llmenugl.h | 5 ++ linden/indra/llui/llmultislider.cpp | 2 + linden/indra/llui/llmultisliderctrl.cpp | 2 + linden/indra/llui/llpanel.cpp | 45 +++++++++++++++- linden/indra/llui/llprogressbar.cpp | 10 ++++ linden/indra/llui/llprogressbar.h | 1 + linden/indra/llui/llradiogroup.cpp | 17 +++++-- linden/indra/llui/llradiogroup.h | 1 + linden/indra/llui/llscrollcontainer.cpp | 4 +- linden/indra/llui/llscrollingpanellist.cpp | 10 ++++ linden/indra/llui/llscrollingpanellist.h | 3 +- linden/indra/llui/llscrolllistctrl.cpp | 2 + linden/indra/llui/llslider.cpp | 9 ++++ linden/indra/llui/llsliderctrl.cpp | 2 + linden/indra/llui/llspinctrl.cpp | 2 + linden/indra/llui/lltabcontainer.cpp | 3 ++ linden/indra/llui/lltextbox.cpp | 2 + linden/indra/llui/lltexteditor.cpp | 2 + linden/indra/llui/lluictrlfactory.cpp | 9 ++++ linden/indra/llui/lluixmltags.h | 7 ++- linden/indra/llui/llview.cpp | 4 +- linden/indra/llui/llviewborder.cpp | 10 ++++ linden/indra/llui/llviewborder.h | 1 + 33 files changed, 283 insertions(+), 14 deletions(-) (limited to 'linden/indra/llui') 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_BUTTON_TAG); + node->createChild("label", TRUE)->setStringValue(getLabelUnselected()); node->createChild("label_selected", TRUE)->setStringValue(getLabelSelected()); 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() } - // virtual LLXMLNodePtr LLCheckBoxCtrl::getXML(bool save_children) const { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_CHECK_BOX_CTRL_TAG); + node->createChild("label", TRUE)->setStringValue(mLabel->getText()); 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_COMBO_BOX_TAG); + // Attributes node->createChild("allow_text_entry", TRUE)->setBoolValue(mAllowTextEntry); @@ -1172,6 +1174,33 @@ LLFlyoutButton::LLFlyoutButton( updateLayout(); } +// virtual +LLXMLNodePtr LLFlyoutButton::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLComboBox::getXML(); + + node->setName(LL_FLYOUT_BUTTON_TAG); + + LLXMLNodePtr child; + + for (child = node->getFirstChild(); child.notNull();) + { + if (child->hasName("combo_item")) + { + child->setName(LL_FLYOUT_BUTTON_ITEM_TAG); + + //setName does a delete and add, so we have to start over + child = node->getFirstChild(); + } + else + { + child = child->getNextSibling(); + } + } + + return node; +} + //static LLView* LLFlyoutButton::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { 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: void setToggleState(BOOL state); + virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); static void onActionButtonClick(void *userdata); 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( } +// virtual +LLXMLNodePtr LLMultiFloater::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLFloater::getXML(); + + node->setName(LL_MULTI_FLOATER_TAG); + + return node; +} void LLMultiFloater::open() /* Flawfinder: ignore */ { @@ -2936,6 +2945,8 @@ LLXMLNodePtr LLFloater::getXML(bool save_children) const { LLXMLNodePtr node = LLPanel::getXML(); + node->setName(LL_FLOATER_TAG); + node->createChild("title", TRUE)->setStringValue(getCurrentTitle()); 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: virtual ~LLMultiFloater() {}; virtual BOOL postBuild(); + virtual LLXMLNodePtr getXML(bool save_children = true) const; /*virtual*/ void open(); /* Flawfinder: ignore */ /*virtual*/ void onClose(bool app_quitting); /*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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_ICON_CTRL_TAG); + if (mImageName != "") { node->createChild("image_name", TRUE)->setStringValue(mImageName); diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp index fc33dcf..62759e6 100644 --- a/linden/indra/llui/lllineeditor.cpp +++ b/linden/indra/llui/lllineeditor.cpp @@ -2202,6 +2202,8 @@ LLXMLNodePtr LLLineEditor::getXML(bool save_children) const { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_LINE_EDITOR_TAG); + node->createChild("max_length", TRUE)->setIntValue(mMaxLengthBytes); node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mGLFont)); @@ -2791,6 +2793,16 @@ void LLSearchEditor::onClearSearch(void* user_data) } } +// virtual +LLXMLNodePtr LLSearchEditor::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLUICtrl::getXML(); + + node->setName(LL_SEARCH_EDITOR_TAG); + + return node; +} + // static LLView* LLSearchEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h index a670b21..e488165 100644 --- a/linden/indra/llui/lllineeditor.h +++ b/linden/indra/llui/lllineeditor.h @@ -385,6 +385,7 @@ public: /*virtual*/ void draw(); + virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 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 { LLXMLNodePtr node = LLView::getXML(); + node->setName(LL_MENU_ITEM_TAG); + node->createChild("type", TRUE)->setStringValue(getType()); node->createChild("label", TRUE)->setStringValue(mLabel); @@ -526,6 +528,8 @@ class LLMenuItemSeparatorGL : public LLMenuItemGL public: LLMenuItemSeparatorGL( const std::string &name = SEPARATOR_NAME ); + virtual LLXMLNodePtr getXML(bool save_children = true) const; + virtual std::string getType() const { return "separator"; } // doIt() - do the primary funcationality of the menu item. @@ -544,6 +548,16 @@ LLMenuItemSeparatorGL::LLMenuItemSeparatorGL( const std::string &name ) : { } + +LLXMLNodePtr LLMenuItemSeparatorGL::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLMenuItemGL::getXML(); + + node->setName(LL_MENU_ITEM_SEPARATOR_GL_TAG); + + return node; +} + void LLMenuItemSeparatorGL::draw( void ) { gGL.color4fv( getDisabledColor().mV ); @@ -624,6 +638,15 @@ LLMenuItemTearOffGL::LLMenuItemTearOffGL(LLHandle parent_floater_hand } +LLXMLNodePtr LLMenuItemTearOffGL::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLMenuItemGL::getXML(); + + node->setName(LL_MENU_ITEM_TEAR_OFF_GL_TAG); + + return node; +} + void LLMenuItemTearOffGL::doIt() { if (getMenu()->getTornOff()) @@ -821,6 +844,8 @@ LLXMLNodePtr LLMenuItemCallGL::getXML(bool save_children) const { LLXMLNodePtr node = LLMenuItemGL::getXML(); + node->setName(LL_MENU_ITEM_CALL_GL_TAG); + // Contents std::vector listeners = mDispatcher->getListeners(); @@ -830,6 +855,9 @@ LLXMLNodePtr LLMenuItemCallGL::getXML(bool save_children) const std::string listener_name = findEventListener((LLSimpleListener*)itor->listener); if (!listener_name.empty()) { + // *FIX: It's not always on_click. It could be on_check, on_enable or on_visible, + // but there's no way to get that from the data that is stored. + LLXMLNodePtr child_node = node->createChild("on_click", FALSE); child_node->createChild("function", TRUE)->setStringValue(listener_name); child_node->createChild("filter", TRUE)->setStringValue(itor->filter.asString()); @@ -971,6 +999,9 @@ void LLMenuItemCheckGL::setCheckedControl(std::string checked_control, LLView *c LLXMLNodePtr LLMenuItemCheckGL::getXML(bool save_children) const { LLXMLNodePtr node = LLMenuItemCallGL::getXML(); + + node->setName(LL_MENU_ITEM_CHECK_GL_TAG); + return node; } @@ -1734,6 +1765,8 @@ LLXMLNodePtr LLMenuGL::getXML(bool save_children) const { LLXMLNodePtr node = LLView::getXML(); + node->setName(LL_MENU_GL_TAG); + // Attributes node->createChild("opaque", TRUE)->setBoolValue(mBgVisible); @@ -1904,7 +1937,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory LLSimpleListener* callback = parent->getListenerByName(callback_name); - if (!callback) continue; + if (!callback) + { + lldebugs << "Ignoring \"on_check\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl; + continue; + } new_item->addListener(callback, "on_build", userdata); } @@ -1945,7 +1982,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory LLSimpleListener* callback = parent->getListenerByName(callback_name); - if (!callback) continue; + if (!callback) + { + lldebugs << "Ignoring \"on_click\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl; + continue; + } new_item->addListener(callback, "on_click", callback_data); } @@ -1975,7 +2016,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory LLSimpleListener* callback = parent->getListenerByName(callback_name); - if (!callback) continue; + if (!callback) + { + lldebugs << "Ignoring \"on_enable\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl; + continue; + } new_item->addListener(callback, "on_build", userdata); } @@ -2015,7 +2060,11 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory LLSimpleListener* callback = parent->getListenerByName(callback_name); - if (!callback) continue; + if (!callback) + { + lldebugs << "Ignoring \"on_visible\" \"" << item_name << "\" because \"" << callback_name << "\" is not registered" << llendl; + continue; + } new_item->addListener(callback, "on_build", userdata); } @@ -3033,6 +3082,8 @@ class LLPieMenuBranch : public LLMenuItemGL public: LLPieMenuBranch(const std::string& name, const std::string& label, LLPieMenu* branch); + virtual LLXMLNodePtr getXML(bool save_children = true) const; + // called to rebuild the draw label virtual void buildDrawLabel( void ); @@ -3055,6 +3106,17 @@ LLPieMenuBranch::LLPieMenuBranch(const std::string& name, mBranch->setParentMenuItem(this); } +// virtual +LLXMLNodePtr LLPieMenuBranch::getXML(bool save_children) const +{ + if (mBranch) + { + return mBranch->getXML(); + } + + return LLMenuItemGL::getXML(); +} + // called to rebuild the draw label void LLPieMenuBranch::buildDrawLabel( void ) { @@ -3136,6 +3198,16 @@ LLPieMenu::LLPieMenu(const std::string& name) } +// virtual +LLXMLNodePtr LLPieMenu::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLMenuGL::getXML(); + + node->setName(LL_PIE_MENU_TAG); + + return node; +} + void LLPieMenu::initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory) { LLXMLNodePtr child; @@ -3837,6 +3909,8 @@ LLXMLNodePtr LLMenuBarGL::getXML(bool save_children) const LLXMLNodePtr node = LLMenuGL::getXML(); + node->setName(LL_MENU_BAR_GL_TAG); + for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter) { 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: BOOL* toggle, KEY key = KEY_NONE, MASK mask = MASK_NONE ); + // there is no getXML() because we cannot reference the toggled global variable by XML + // use LLMenuItemCheckGL instead. + virtual std::string getType() const { return "toggle"; } // called to rebuild the draw label @@ -636,6 +639,7 @@ public: LLPieMenu(const std::string& name); virtual ~LLPieMenu() {} + virtual LLXMLNodePtr getXML(bool save_children = true) const; void initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory); // LLView Functionality @@ -800,6 +804,7 @@ class LLMenuItemTearOffGL : public LLMenuItemGL public: LLMenuItemTearOffGL( LLHandle parent_floater_handle = LLHandle()); + virtual LLXMLNodePtr getXML(bool save_children = true) const; virtual std::string getType() const { return "tearoff_menu"; } 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_MULTI_SLIDER_TAG); + node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue()); node->createChild("min_val", TRUE)->setFloatValue(getMinValue()); node->createChild("max_val", TRUE)->setFloatValue(getMaxValue()); diff --git a/linden/indra/llui/llmultisliderctrl.cpp b/linden/indra/llui/llmultisliderctrl.cpp index 8bcf9f9..d871947 100644 --- a/linden/indra/llui/llmultisliderctrl.cpp +++ b/linden/indra/llui/llmultisliderctrl.cpp @@ -501,6 +501,8 @@ LLXMLNodePtr LLMultiSliderCtrl::getXML(bool save_children) const { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_MULTI_SLIDER_CTRL_TAG); + node->createChild("show_text", TRUE)->setBoolValue(mShowText); 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) // virtual LLXMLNodePtr LLPanel::getXML(bool save_children) const { - LLXMLNodePtr node = LLView::getXML(); + LLXMLNodePtr node = LLUICtrl::getXML(); + + node->setName(LL_PANEL_TAG); if (mBorder && mBorder->getVisible()) { @@ -418,6 +420,15 @@ LLXMLNodePtr LLPanel::getXML(bool save_children) const { node->createChild("label", TRUE)->setStringValue(mLabel); } + + ui_string_map_t::const_iterator i = mUIStrings.begin(); + ui_string_map_t::const_iterator end = mUIStrings.end(); + for (; i != end; ++i) + { + LLXMLNodePtr child_node = node->createChild("string", FALSE); + child_node->setStringValue(i->second); + child_node->createChild("name", TRUE)->setStringValue(i->first); + } if (save_children) { @@ -1171,6 +1182,38 @@ void LLLayoutStack::removeCtrl(LLUICtrl* ctrl) LLXMLNodePtr LLLayoutStack::getXML(bool save_children) const { LLXMLNodePtr node = LLView::getXML(); + node->setName(LL_LAYOUT_STACK_TAG); + + if (mOrientation == HORIZONTAL) + { + node->createChild("orientation", TRUE)->setStringValue("horizontal"); + } + else + { + node->createChild("orientation", TRUE)->setStringValue("vertical"); + } + + if (save_children) + { + LLView::child_list_const_reverse_iter_t rit; + for (rit = getChildList()->rbegin(); rit != getChildList()->rend(); ++rit) + { + LLView* childp = *rit; + + if (childp->getSaveToXML()) + { + LLXMLNodePtr xml_node = childp->getXML(); + + if (xml_node->hasName(LL_PANEL_TAG)) + { + xml_node->setName(LL_LAYOUT_PANEL_TAG); + } + + node->addChild(xml_node); + } + } + } + return node; } 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) } +// virtual +LLXMLNodePtr LLProgressBar::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLView::getXML(); + + node->setName(LL_PROGRESS_BAR_TAG); + + return node; +} + // static LLView* LLProgressBar::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { 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: void setColorShadow(const LLColor4 &c); void setColorBackground(const LLColor4 &c); + virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); /*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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_RADIO_GROUP_TAG); + // Attributes node->createChild("draw_border", TRUE)->setBoolValue(mHasBorder); @@ -356,9 +358,7 @@ LLXMLNodePtr LLRadioGroup::getXML(bool save_children) const { LLRadioCtrl* radio = *iter; - LLXMLNodePtr child_node = radio->LLView::getXML(); - child_node->setStringValue(radio->getLabel()); - child_node->setName(std::string("radio_item")); + LLXMLNodePtr child_node = radio->getXML(); node->addChild(child_node); } @@ -515,3 +515,14 @@ void LLRadioCtrl::setValue(const LLSD& value) mButton->setTabStop(value.asBoolean()); } +// virtual +LLXMLNodePtr LLRadioCtrl::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLCheckBoxCtrl::getXML(); + + node->setName(LL_RADIO_ITEM_TAG); + + node->setStringValue(getLabel()); + + return node; +} 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: } /*virtual*/ ~LLRadioCtrl(); + virtual LLXMLNodePtr getXML(bool save_children = true) const; /*virtual*/ void setValue(const LLSD& value); }; 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 // virtual LLXMLNodePtr LLScrollableContainerView::getXML(bool save_children) const { - LLXMLNodePtr node = LLView::getXML(); + LLXMLNodePtr node = LLUICtrl::getXML(); + + node->setName(LL_SCROLLABLE_CONTAINER_VIEW_TAG); // Attributes 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() } +// virtual +LLXMLNodePtr LLScrollingPanelList::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLUICtrl::getXML(); + + node->setName(LL_SCROLLING_PANEL_LIST_TAG); + + return node; +} + // static LLView* LLScrollingPanelList::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { 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: virtual void setValue(const LLSD& value) {}; - virtual LLXMLNodePtr getXML(bool save_children) const { return LLUICtrl::getXML(); } - virtual void draw(); void clearPanels(); void addPanel( LLScrollingPanel* panel ); void updatePanels(BOOL allow_modify); + virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); private: 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_SCROLL_LIST_CTRL_TAG); + // Attributes 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + if (mVolumeSlider) + { + node->setName(LL_VOLUME_SLIDER_CTRL_TAG); + } + else + { + node->setName(LL_SLIDER_TAG); + } + node->createChild("initial_val", TRUE)->setFloatValue(getInitialValue()); node->createChild("min_val", TRUE)->setFloatValue(getMinValue()); 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_SLIDER_CTRL_TAG); + node->createChild("show_text", TRUE)->setBoolValue(mShowText); 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_SPIN_CTRL_TAG); + node->createChild("decimal_digits", TRUE)->setIntValue(mPrecision); 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) LLXMLNodePtr LLTabContainer::getXML(bool save_children) const { LLXMLNodePtr node = LLPanel::getXML(); + + node->setName(LL_TAB_CONTAINER_COMMON_TAG); + node->createChild("tab_position", TRUE)->setStringValue((getTabPosition() == TOP ? "top" : "bottom")); return node; } 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_TEXT_BOX_TAG); + // Attributes node->createChild("font", TRUE)->setStringValue(LLFontGL::nameFromFont(mFontGL)); 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 { LLXMLNodePtr node = LLUICtrl::getXML(); + node->setName(LL_SIMPLE_TEXT_EDITOR_TAG); + // Attributes node->createChild("max_length", TRUE)->setIntValue(getMaxLength()); diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp index 0074494..07eb39b 100644 --- a/linden/indra/llui/lluictrlfactory.cpp +++ b/linden/indra/llui/lluictrlfactory.cpp @@ -86,6 +86,15 @@ public: LLUICtrlLocate() : LLUICtrl(std::string("locate"), LLRect(0,0,0,0), FALSE, NULL, NULL) { setTabStop(FALSE); } virtual void draw() { } + virtual LLXMLNodePtr getXML(bool save_children = true) const + { + LLXMLNodePtr node = LLUICtrl::getXML(); + + node->setName(LL_UI_CTRL_LOCATE_TAG); + + return node; + } + static LLView *fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { std::string name("pad"); 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 LL_JOYSTICK_TURN("joystick_turn"), LL_GROUP_DROP_TARGET_TAG("group_drop_target"), LL_LAYOUT_STACK_TAG("layout_stack"), - LL_FLYOUT_BUTTON_TAG("flyout_button"); + LL_LAYOUT_PANEL_TAG("layout_panel"), + LL_FLYOUT_BUTTON_TAG("flyout_button"), + LL_FLYOUT_BUTTON_ITEM_TAG("flyout_button_item"), + LL_SIMPLE_TEXT_EDITOR_TAG("simple_text_editor"), + LL_RADIO_ITEM_TAG("radio_item"), + LL_PROGRESS_BAR_TAG("progress_bar"); #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 // virtual LLXMLNodePtr LLView::getXML(bool save_children) const { - //FIXME: need to provide actual derived type tag, probably outside this method + //If called from a derived class, the derived class will override the node name LLXMLNodePtr node = new LLXMLNode("view", FALSE); node->createChild("name", TRUE)->setStringValue(getName()); @@ -2353,6 +2353,8 @@ LLView* LLView::findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESna void LLView::registerEventListener(std::string name, LLSimpleListener* function) { mDispatchList.insert(std::pair(name, function)); + lldebugs << getName() << " registered " << name << llendl; + } void 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 } +// virtual +LLXMLNodePtr LLViewBorder::getXML(bool save_children) const +{ + LLXMLNodePtr node = LLView::getXML(); + + node->setName(LL_VIEW_BORDER_TAG); + + return node; +} + // static LLView* LLViewBorder::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { 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: // llview functionality virtual void draw(); + virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, class LLUICtrlFactory *factory); static BOOL getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel& bevel_style); -- cgit v1.1 From 9cbad86ad87780232b14e1d0bd0b6da81665e6de Mon Sep 17 00:00:00 2001 From: Mm Alder Date: Sun, 3 Jan 2010 15:02:59 -0500 Subject: SNOW-413 Potential null pointer exception in multi-slider control --- linden/indra/llui/llmultisliderctrl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden/indra/llui') diff --git a/linden/indra/llui/llmultisliderctrl.cpp b/linden/indra/llui/llmultisliderctrl.cpp index d871947..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 &LLLineEditor::prevalidateFloat ); mEditor->setFollowsLeft(); mEditor->setFollowsBottom(); - mEditor->setFocusReceivedCallback( &LLMultiSliderCtrl::onEditorGainFocus ); + mEditor->setFocusReceivedCallback( &LLMultiSliderCtrl::onEditorGainFocus, this ); mEditor->setIgnoreTab(TRUE); // don't do this, as selecting the entire text is single clicking in some cases // and double clicking in others -- cgit v1.1