diff --git a/code/nel/include/nel/gui/widget_manager.h b/code/nel/include/nel/gui/widget_manager.h index 9f6f685c9..98fae80d6 100644 --- a/code/nel/include/nel/gui/widget_manager.h +++ b/code/nel/include/nel/gui/widget_manager.h @@ -49,6 +49,8 @@ namespace NLGUI virtual void addParentSizeAssociation( CInterfaceElement *element, const std::string &parentID ) = 0; virtual void addParentSizeMaxAssociation( CInterfaceElement *element, const std::string &parentID ) = 0; virtual void addLuaClassAssociation( CInterfaceGroup *group, const std::string &luaScript ) = 0; + virtual CInterfaceGroup* createGroupInstance( const std::string &templateName, const std::string &parentID, const std::pair< std::string, std::string > *templateParams, uint numParams, bool updateLinks = true ) = 0; + virtual CInterfaceGroup* createGroupInstance( const std::string &templateName, const std::string &parentID, std::vector< std::pair< std::string, std::string > > &templateParams, bool updateLinks = true ) = 0; }; /// Manages the GUI widgets diff --git a/code/ryzom/client/src/interface_v3/group_menu.cpp b/code/ryzom/client/src/interface_v3/group_menu.cpp index b0a062049..931571d0b 100644 --- a/code/ryzom/client/src/interface_v3/group_menu.cpp +++ b/code/ryzom/client/src/interface_v3/group_menu.cpp @@ -14,31 +14,32 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - - -// ------------------------------------------------------------------------------------------------ -#include "stdpch.h" -#include "interface_manager.h" +#include "nel/gui/interface_options.h" #include "nel/gui/interface_expr.h" #include "group_menu.h" #include "nel/misc/xml_auto_ptr.h" #include "nel/gui/view_bitmap.h" #include "nel/gui/action_handler.h" // Just for getAllParams #include "nel/gui/lua_ihm.h" -#include "lua_ihm_ryzom.h" - #include "nel/misc/i18n.h" +#include "nel/gui/widget_manager.h" +#include "nel/gui/group_list.h" +#include "nel/gui/ctrl_scroll.h" +#include "nel/gui/view_pointer_base.h" + using namespace NLMISC; using namespace std; -static const std::string ID_MENU_CHECKBOX = "menu_cb"; -static const std::string ID_MENU_SEPARATOR = "menu_separator"; -static const std::string ID_MENU_SUBMENU = "menu_sb"; - -static const uint MENU_WIDGET_X = 2; -static const uint LEFT_MENU_WIDGET_X = 4; +namespace +{ + const std::string ID_MENU_CHECKBOX = "menu_cb"; + const std::string ID_MENU_SEPARATOR = "menu_separator"; + const std::string ID_MENU_SUBMENU = "menu_sb"; + const uint MENU_WIDGET_X = 2; + const uint LEFT_MENU_WIDGET_X = 4; +} // ------------------------------------------------------------------------------------------------ // CGroupSubMenu @@ -235,7 +236,6 @@ void CGroupSubMenu::initOptions(CInterfaceGroup *parent) bool CGroupSubMenu::parse (xmlNodePtr cur, CInterfaceGroup *parent) { initOptions(parent); - CInterfaceManager *im = CInterfaceManager::getInstance(); // the children while (cur) { @@ -341,7 +341,7 @@ bool CGroupSubMenu::parse (xmlNodePtr cur, CInterfaceGroup *parent) } string completeId = _Parent->getId() + ":" + _Lines[_Lines.size()-1].Id; - CInterfaceGroup *pUGLeft = im->createGroupInstance((const char*)usergroup, completeId, vparams); + CInterfaceGroup *pUGLeft = CWidgetManager::parser->createGroupInstance((const char*)usergroup, completeId, vparams); if (pUGLeft) setUserGroupLeft((uint)_Lines.size()-1, pUGLeft, true); } @@ -356,7 +356,7 @@ bool CGroupSubMenu::parse (xmlNodePtr cur, CInterfaceGroup *parent) } string completeId = _Parent->getId() + ":" + _Lines[_Lines.size()-1].Id; - CInterfaceGroup *pUG = im->createGroupInstance((const char*)usergroup, completeId, vparams); + CInterfaceGroup *pUG = CWidgetManager::parser->createGroupInstance((const char*)usergroup, completeId, vparams); if (pUG) setUserGroupRight((uint)_Lines.size()-1, pUG, true); } @@ -866,7 +866,6 @@ void CGroupSubMenu::checkCoords() if (_GroupMenu == NULL) return; // if the mouse goes out the window, unselect all (because handleEvent may not be called) - CInterfaceManager *pIM = CInterfaceManager::getInstance(); sint xMouse= CWidgetManager::getInstance()->getPointer()->getX(); sint yMouse= CWidgetManager::getInstance()->getPointer()->getY(); if (!((xMouse >= _XReal) && @@ -982,7 +981,7 @@ bool CGroupSubMenu::handleEvent (const NLGUI::CEventDescriptor &event) // If a line is selected and the line is not grayed if ((_Selected != -1) && (!_Lines[i].ViewText->getGrayed())) { - CInterfaceManager *pIM = CInterfaceManager::getInstance(); + CAHManager::getInstance()->runActionHandler ( _Lines[_Selected].AHName, CWidgetManager::getInstance()->getCtrlLaunchingModal(), _Lines[_Selected].AHParams ); @@ -1135,15 +1134,15 @@ void CGroupSubMenu::addSeparatorAtIndex(uint index, const std::string &id) nlwarning("Bad index"); return; } - CInterfaceManager *im = CInterfaceManager::getInstance(); + // create the real separator. It may be larger than the group list, this is why we create a separate group - CInterfaceGroup *separator = im->createGroupInstance("menu_separator", "", NULL, 0); + CInterfaceGroup *separator = CWidgetManager::parser->createGroupInstance("menu_separator", "", NULL, 0); if (!separator) return; separator->setId(ID_MENU_SEPARATOR); addGroup(separator); separator->setParent(this); // create place holder group - CInterfaceGroup *ph = im->createGroupInstance("menu_separator_empty", "", NULL, 0); + CInterfaceGroup *ph = CWidgetManager::parser->createGroupInstance("menu_separator_empty", "", NULL, 0); if (!ph) { delGroup(separator); @@ -1935,7 +1934,7 @@ bool CGroupMenu::parse (xmlNodePtr in, CInterfaceGroup *parentGroup) CGroupSubMenu *gmExtended = NULL; if (prop) { - CInterfaceManager *im = CInterfaceManager::getInstance(); + CGroupMenu *gm = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(prop)); if (!gm) {