diff --git a/code/nel/include/nel/gui/group_menu.h b/code/nel/include/nel/gui/group_menu.h index 70761d650..9c5b37589 100644 --- a/code/nel/include/nel/gui/group_menu.h +++ b/code/nel/include/nel/gui/group_menu.h @@ -31,7 +31,7 @@ namespace NLGUI class CViewBitmap; class CGroupList; class CGroupMenu; - class CGroupSubMenu; + /** * CViewTextMenu is an element of a sub menu @@ -50,7 +50,6 @@ namespace NLGUI _Checked = false; _Checkable = false; _CheckBox = NULL; - _ParentMenu = NULL; Over = false; } @@ -61,8 +60,6 @@ namespace NLGUI bool getCheckable() const { return _Checkable; } void setCheckable(bool c); void setCheckBox(CViewBitmap *checkBox) { _CheckBox = checkBox; } - void setParentMenu(CGroupSubMenu *parentMenu) { _ParentMenu = parentMenu; }; - void setActive (bool g); CViewBitmap * getCheckBox() const { return _CheckBox; } bool getFormatted () const { return getMultiLine (); } @@ -89,7 +86,6 @@ namespace NLGUI bool _Grayed; bool _Checked; bool _Checkable; - CGroupSubMenu *_ParentMenu; }; /** diff --git a/code/nel/src/gui/group_menu.cpp b/code/nel/src/gui/group_menu.cpp index d09eec039..e3e6d5937 100644 --- a/code/nel/src/gui/group_menu.cpp +++ b/code/nel/src/gui/group_menu.cpp @@ -114,19 +114,6 @@ namespace NLGUI OldShadowColorGrayed.A = OldColorGrayed.A = (uint8)a; } - // ------------------------------------------------------------------------------------------------ - void CViewTextMenu::setActive (bool state) - { - if (_ParentMenu) - _ParentMenu->setActive(state); - - if (_Active != state) - { - _Active = state; - invalidateCoords(); - } - } - // ------------------------------------------------------------------------------------------------ // CGroupSubMenu // ------------------------------------------------------------------------------------------------ @@ -303,9 +290,6 @@ namespace NLGUI if (cond) strCond = (const char*)cond; CXMLAutoPtr params((const char*) xmlGetProp (cur, (xmlChar*)"params")); if (params) strParams = (const char*)params; - CXMLAutoPtr icon((const char*) xmlGetProp (cur, (xmlChar*)"icon")); - if (icon) - strTexture = (const char*)icon; CXMLAutoPtr strCheckable((const char*) xmlGetProp (cur, (xmlChar*)"checkable")); bool bCheckable = false; if (strCheckable) bCheckable = convertBool (strCheckable); @@ -391,6 +375,23 @@ namespace NLGUI if (pUG) setUserGroupRight((uint)_Lines.size()-1, pUG, true); } + // usergroup from simple icon + CXMLAutoPtr icon((const char*) xmlGetProp (cur, (xmlChar*)"icon")); + if (icon) + { + typedef std::pair TTmplParams; + std::vector vparams; + uint lineIndex = _Lines.size()-1; + vparams.push_back(TTmplParams("id", toString("icon%d", lineIndex))); + vparams.push_back(TTmplParams("sizeref", "")); + vparams.push_back(TTmplParams("icon_texture", (const char*)icon)); + //vparams.push_back(TTmplParams("icon_color", options.ColorNormal.toString())); + string lineId = toString("%s:icon", pV->getId().c_str()); + + CInterfaceGroup *pUG = CWidgetManager::getInstance()->getParser()->createGroupInstance("menu_row_icon", lineId, vparams); + if (pUG) + setUserGroupLeft((uint)_Lines.size()-1, pUG, true); + } } cur = cur->next; } @@ -409,11 +410,11 @@ namespace NLGUI pVB->setSerializable( false ); pVB->setParent (this); pVB->setParentPos (parentPos); - pVB->setParentPosRef (Hotspot_BL); - pVB->setPosRef (Hotspot_BR); + pVB->setParentPosRef (Hotspot_ML); + pVB->setPosRef (Hotspot_MR); pVB->setTexture(texture); pVB->setModulateGlobalColor(false); - pVB->setX (MENU_WIDGET_X); + pVB->setX (-2); addView (pVB); return pVB; } @@ -583,8 +584,6 @@ namespace NLGUI CGroupFrame::updateCoords(); - bool mustUpdate = false; - if (_MaxVisibleLine > 0 && sint32(_Lines.size())>_MaxVisibleLine) { for(k = 0; k < _Lines.size(); ++k) @@ -592,14 +591,11 @@ namespace NLGUI { // compute max height of widgets on the left of text sint32 widgetMaxH = 0; - if (_Lines[k].ViewText->getActive()) - { - if (_Lines[k].UserGroupRight) widgetMaxH = _Lines[k].UserGroupRight->getHReal(); - if (_Lines[k].UserGroupLeft) widgetMaxH = std::max(widgetMaxH, _Lines[k].UserGroupLeft->getHReal()); - if (_Lines[k].CheckBox) widgetMaxH = std::max(widgetMaxH, _Lines[k].CheckBox->getHReal()); - if (_Lines[k].RightArrow) widgetMaxH = std::max(widgetMaxH, _Lines[k].RightArrow->getHReal()); - widgetMaxH = std::max(widgetMaxH, _Lines[k].ViewText->getHReal()); - } + if (_Lines[k].UserGroupRight) widgetMaxH = _Lines[k].UserGroupRight->getHReal(); + if (_Lines[k].UserGroupLeft) widgetMaxH = std::max(widgetMaxH, _Lines[k].UserGroupLeft->getHReal()); + if (_Lines[k].CheckBox) widgetMaxH = std::max(widgetMaxH, _Lines[k].CheckBox->getHReal()); + if (_Lines[k].RightArrow) widgetMaxH = std::max(widgetMaxH, _Lines[k].RightArrow->getHReal()); + widgetMaxH = std::max(widgetMaxH, _Lines[k].ViewText->getHReal()); _GroupList->setMaxH(widgetMaxH*_MaxVisibleLine+_GroupList->getSpace()*(_MaxVisibleLine-1)); if (_ScrollBar == NULL) { @@ -618,7 +614,6 @@ namespace NLGUI _SelectionView->setW (-8-8-2); _ScrollBar->setSerializable( false ); addCtrl(_ScrollBar); - mustUpdate = true; } break; } @@ -642,54 +637,39 @@ namespace NLGUI { // compute max height of widgets on the left of text sint32 widgetMaxH = 0; - sint32 textHReal = 0; - if (_Lines[k].ViewText->getActive()) - { - if (_Lines[k].UserGroupRight) widgetMaxH = _Lines[k].UserGroupRight->getHReal(); - if (_Lines[k].UserGroupLeft) widgetMaxH = std::max(widgetMaxH, _Lines[k].UserGroupLeft->getHReal()); - if (_Lines[k].CheckBox) widgetMaxH = std::max(widgetMaxH, _Lines[k].CheckBox->getHReal()); - if (_Lines[k].RightArrow) widgetMaxH = std::max(widgetMaxH, _Lines[k].RightArrow->getHReal()); - - textHReal = _Lines[k].ViewText->getHReal(); - } - - _Lines[k].HReal = max(widgetMaxH, textHReal); - _Lines[k].TextDY = textDYPos; + if (_Lines[k].UserGroupRight) widgetMaxH = _Lines[k].UserGroupRight->getHReal(); + if (_Lines[k].UserGroupLeft) widgetMaxH = std::max(widgetMaxH, _Lines[k].UserGroupLeft->getHReal()); + if (_Lines[k].CheckBox) widgetMaxH = std::max(widgetMaxH, _Lines[k].CheckBox->getHReal()); + if (_Lines[k].RightArrow) widgetMaxH = std::max(widgetMaxH, _Lines[k].RightArrow->getHReal()); + + sint32 textHReal= _Lines[k].ViewText->getHReal(); + _Lines[k].HReal= max(widgetMaxH, textHReal); + _Lines[k].TextDY= textDYPos; if(widgetMaxH>textHReal) - _Lines[k].TextDY += (widgetMaxH-textHReal) / 2; + _Lines[k].TextDY+= (widgetMaxH-textHReal) / 2; } } // *** Update Text Positions // sint32 currX = 0; - sint32 maxTextW = 0; for(k = 0; k < _Lines.size(); ++k) { if (_Lines[k].ViewText) { // Setup Y _Lines[k].ViewText->setY(_Lines[k].TextDY); - maxTextW = max(maxTextW, _Lines[k].ViewText->getW()); } } - - - if (mustUpdate) - { - CGroupFrame::updateCoords(); - } - + CGroupFrame::updateCoords(); // *** Setup SubMenus and CheckBoxes Positions sint32 maxViewW = 0; - for (i = 1; i < _Views.size(); ++i) { CViewBitmap *pVB = dynamic_cast(_Views[i]); if (pVB == NULL) continue; - if (pVB->getId() == ID_MENU_SUBMENU) { // Look for the next line of the menu that contains a sub menu @@ -1252,7 +1232,7 @@ namespace NLGUI pV->setCaseMode(_GroupMenu->getCaseMode()); if (formatted) { - pV->setMultiLine (true); + pV->setMultiLine (true); pV->setMultiLineMaxWOnly (true); pV->setTextFormatTaged (name); } @@ -1278,7 +1258,6 @@ namespace NLGUI _GroupList->addChild (pV); CViewBitmap *checkBox = NULL; - CViewBitmap *icon = NULL; if (checkable) { @@ -1287,6 +1266,15 @@ namespace NLGUI pV->setCheckBox(checkBox); } + CViewBitmap *icon = NULL; + if (!texture.empty()) + { + if (_GroupList->getNumChildren() == 1) + pV->setX(20); + icon = createIcon(pV, texture); + } + + tmp.ViewText = pV; tmp.Separator = NULL; tmp.AHName = ah; @@ -1300,39 +1288,12 @@ namespace NLGUI tmp.Id = id; pV->setId(_GroupMenu->getId()+":"+tmp.Id); - - { - typedef std::pair TTmplParams; - std::vector vparams; - uint lineIndex = _Lines.size()-1; - vparams.push_back(TTmplParams("id", toString("icon%d", lineIndex))); - vparams.push_back(TTmplParams("sizeref", "")); - vparams.push_back(TTmplParams("icon_texture", texture)); - //vparams.push_back(TTmplParams("icon_color", options.ColorNormal.toString())); - string lineId = toString("%s:icon", pV->getId().c_str()); - - CInterfaceGroup *pUGLeft = CWidgetManager::getInstance()->getParser()->createGroupInstance("menu_row_icon", lineId, vparams); - if (pUGLeft) - { - tmp.UserGroupLeft = pUGLeft; - tmp.UserGroupLeftOwnership = true; - addGroup(pUGLeft); - pUGLeft->setParent(this); - pUGLeft->setParentPos(this); - pUGLeft->setParentPosRef (Hotspot_BL); - pUGLeft->setPosRef (Hotspot_BL); - pUGLeft->setX(LEFT_MENU_WIDGET_X); - } - } - _Lines.push_back (tmp); - // Add an empty sub menu by default _SubMenus.push_back (NULL); - _GroupMenu->invalidateCoords(); return pV;