Added: home propertie of html group (so lua scripts can setup the home)

Fixed: adding new landmarks with lua don't remove respawn points if player is not in an island

--HG--
branch : compatibility-develop
hg/compatibility-develop
Ulukyn 6 years ago
parent 7d9b1f58f0
commit c582964448

@ -131,7 +131,7 @@ namespace NLGUI
// ImageDownload system
enum TDataType {ImgType= 0, BnpType};
enum TImageType {NormalImage=0, OverImage};
// Constructor
CGroupHTML(const TCtorParam &param);
~CGroupHTML();
@ -177,7 +177,7 @@ namespace NLGUI
// End of the paragraph
void endParagraph();
// add image download (used by view_bitmap.cpp to load web images)
void addImageDownload(const std::string &url, CViewBase *img, const CStyleParams &style = CStyleParams(), const TImageType type = NormalImage);
std::string localImageName(const std::string &url);
@ -264,6 +264,8 @@ namespace NLGUI
// Browser home
std::string Home;
// Get Home URL
virtual std::string home();
// Undo browse: Browse the precedent url browsed. no op if none
void browseUndo ();
@ -281,6 +283,8 @@ namespace NLGUI
std::string getHTML() const { return _DocumentHtml; }
void setHTML(const std::string &html);
void setHome(const std::string &home);
int luaClearRefresh(CLuaState &ls);
int luaClearUndoRedo(CLuaState &ls);
int luaBrowse(CLuaState &ls);
@ -313,6 +317,7 @@ namespace NLGUI
REFLECT_LUA_METHOD("setBackground", luaSetBackground)
REFLECT_STRING("url", getURL, setURL)
REFLECT_STRING("html", getHTML, setHTML)
REFLECT_STRING("home", home, setHome)
REFLECT_FLOAT("timeout", getTimeout, setTimeout)
REFLECT_EXPORT_END
@ -354,9 +359,6 @@ namespace NLGUI
void htmlElement(xmlNode *node, int element_number);
void htmlWalkDOM(xmlNode *a_node);
// Get Home URL
virtual std::string home();
// Clear style stack and restore default style
void resetCssStyle();
@ -425,7 +427,7 @@ namespace NLGUI
std::string _DocumentUrl;
std::string _DocumentDomain;
std::string _DocumentHtml; // not updated only set by first render
// Valid base href was found
bool _IgnoreBaseUrlTag;
// Fragment from loading url
@ -730,7 +732,7 @@ namespace NLGUI
return 0;
return _Indent.back();
}
// Current node is a title
@ -821,7 +823,7 @@ namespace NLGUI
private:
// decode all HTML entities
static ucstring decodeHTMLEntities(const ucstring &str);
struct CDataImageDownload
{
public:

@ -306,10 +306,10 @@ namespace NLGUI
sint32 height = style.Height;
sint32 maxw = style.MaxWidth;
sint32 maxh = style.MaxHeight;
sint32 imageWidth, imageHeight;
bool changed = true;
// get image texture size
// if image is being downloaded, then correct size is set after thats done
CCtrlButton *btn = dynamic_cast<CCtrlButton*>(view);
@ -334,14 +334,14 @@ namespace NLGUI
return;
}
}
// if width/height is not requested, then use image size
// else recalculate missing value, keep image ratio
if (width == -1 && height == -1)
{
width = imageWidth;
height = imageHeight;
changed = false;
}
else
@ -352,7 +352,7 @@ namespace NLGUI
else
height = width / ratio;
}
// apply max-width, max-height rules if asked
if (maxw > -1 || maxh > -1)
{
@ -1680,7 +1680,7 @@ namespace NLGUI
typedef pair<string, string> TTmplParam;
vector<TTmplParam> tmplParams;
string templateName;
if (!style.empty())
{
@ -1796,7 +1796,7 @@ namespace NLGUI
it = styles.find("background-repeat");
bool repeat = (it != styles.end() && it->second == "1");
// Webig only
it = styles.find("background-scale");
bool scale = (it != styles.end() && it->second == "1");
@ -3331,12 +3331,12 @@ namespace NLGUI
}
else
if( name == "error_color_global_color" )
{
{
return toString( ErrorColorGlobalColor );
}
else
if( name == "link_color_global_color" )
{
{
return toString( LinkColorGlobalColor );
}
else
@ -3346,67 +3346,67 @@ namespace NLGUI
}
else
if( name == "h1_color_global_color" )
{
{
return toString( H1ColorGlobalColor );
}
else
if( name == "h2_color_global_color" )
{
{
return toString( H2ColorGlobalColor );
}
else
if( name == "h3_color_global_color" )
{
{
return toString( H3ColorGlobalColor );
}
else
if( name == "h4_color_global_color" )
{
{
return toString( H4ColorGlobalColor );
}
else
if( name == "h5_color_global_color" )
{
{
return toString( H5ColorGlobalColor );
}
else
if( name == "h6_color_global_color" )
{
{
return toString( H6ColorGlobalColor );
}
else
if( name == "text_font_size" )
{
{
return toString( TextFontSize );
}
else
if( name == "h1_font_size" )
{
{
return toString( H1FontSize );
}
else
if( name == "h2_font_size" )
{
{
return toString( H2FontSize );
}
else
if( name == "h3_font_size" )
{
{
return toString( H3FontSize );
}
else
if( name == "h4_font_size" )
{
{
return toString( H4FontSize );
}
else
if( name == "h5_font_size" )
{
{
return toString( H5FontSize );
}
else
if( name == "h6_font_size" )
{
{
return toString( H6FontSize );
}
else
@ -3615,7 +3615,7 @@ namespace NLGUI
}
else
if( name == "error_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
ErrorColorGlobalColor = b;
@ -3623,7 +3623,7 @@ namespace NLGUI
}
else
if( name == "link_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
LinkColorGlobalColor = b;
@ -3639,7 +3639,7 @@ namespace NLGUI
}
else
if( name == "h1_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H1ColorGlobalColor = b;
@ -3647,7 +3647,7 @@ namespace NLGUI
}
else
if( name == "h2_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H2ColorGlobalColor = b;
@ -3655,7 +3655,7 @@ namespace NLGUI
}
else
if( name == "h3_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H3ColorGlobalColor = b;
@ -3663,7 +3663,7 @@ namespace NLGUI
}
else
if( name == "h4_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H4ColorGlobalColor = b;
@ -3671,7 +3671,7 @@ namespace NLGUI
}
else
if( name == "h5_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H5ColorGlobalColor = b;
@ -3679,7 +3679,7 @@ namespace NLGUI
}
else
if( name == "h6_color_global_color" )
{
{
bool b;
if( fromString( value, b ) )
H6ColorGlobalColor = b;
@ -3687,7 +3687,7 @@ namespace NLGUI
}
else
if( name == "text_font_size" )
{
{
uint i;
if( fromString( value, i ) )
TextFontSize = i;
@ -3695,7 +3695,7 @@ namespace NLGUI
}
else
if( name == "h1_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H1FontSize = i;
@ -3703,7 +3703,7 @@ namespace NLGUI
}
else
if( name == "h2_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H2FontSize = i;
@ -3711,7 +3711,7 @@ namespace NLGUI
}
else
if( name == "h3_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H3FontSize = i;
@ -3719,7 +3719,7 @@ namespace NLGUI
}
else
if( name == "h4_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H4FontSize = i;
@ -3727,7 +3727,7 @@ namespace NLGUI
}
else
if( name == "h5_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H5FontSize = i;
@ -3735,7 +3735,7 @@ namespace NLGUI
}
else
if( name == "h6_font_size" )
{
{
uint i;
if( fromString( value, i ) )
H6FontSize = i;
@ -3920,7 +3920,7 @@ namespace NLGUI
xmlSetProp( node, BAD_CAST "h4_color", BAD_CAST toString( H4Color ).c_str() );
xmlSetProp( node, BAD_CAST "h5_color", BAD_CAST toString( H5Color ).c_str() );
xmlSetProp( node, BAD_CAST "h6_color", BAD_CAST toString( H6Color ).c_str() );
xmlSetProp( node, BAD_CAST "error_color_global_color",
BAD_CAST toString( ErrorColorGlobalColor ).c_str() );
xmlSetProp( node, BAD_CAST "link_color_global_color",
@ -4580,7 +4580,7 @@ namespace NLGUI
getParagraph()->addChild (buttonGroup);
paragraphChange ();
}
}
else
{
@ -6094,14 +6094,14 @@ namespace NLGUI
}
// ***************************************************************************
int CGroupHTML::luaInsertText(CLuaState &ls)
int CGroupHTML::luaInsertText(CLuaState &ls)
{
const char *funcName = "insertText";
CLuaIHM::checkArgCount(ls, funcName, 3);
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
CLuaIHM::checkArgType(ls, funcName, 2, LUA_TSTRING);
CLuaIHM::checkArgType(ls, funcName, 3, LUA_TBOOLEAN);
string name = ls.toString(1);
ucstring text;
@ -6271,6 +6271,10 @@ namespace NLGUI
renderHtmlString(html);
}
void CGroupHTML::setHome(const std::string &home)
{
Home = home;
}
// ***************************************************************************
inline bool isDigit(ucchar c, uint base = 16)
@ -6732,7 +6736,7 @@ namespace NLGUI
maxw = std::max(minw, maxw);
maxh = std::max(minh, maxh);
float ratio = (float) width / std::max(1, height);
if (width > maxw)
{
@ -6791,7 +6795,7 @@ namespace NLGUI
height = minh;
}
}
// ***************************************************************************
std::string CGroupHTML::HTMLOListElement::getListMarkerText() const
{

@ -32,6 +32,7 @@
#include "nel/gui/action_handler.h"
#include "../dummy_progress.h"
#include "group_compas.h"
#include "group_html_cs.h"
#include "../connection.h"
#include "../net_manager.h"
#include "people_interraction.h" // for MaxNumPeopleInTeam
@ -114,10 +115,10 @@ static void popupLandMarkNameDialog()
gc->center();
CWidgetManager::getInstance()->setTopWindow(gc);
gc->enableBlink(1);
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(gc->getGroup("eb"));
if (!eb) return;
if (!eb) return;
// Load ComboBox for Landmarks & sort entries
CDBGroupComboBox *cb = dynamic_cast<CDBGroupComboBox *>(gc->getGroup("landmarktypes"));
cb->sortText();
@ -126,7 +127,7 @@ static void popupLandMarkNameDialog()
{
CGroupMap *map = dynamic_cast<CGroupMap *>(LastSelectedLandMark->getParent());
if (!map) return;
const CUserLandMark userLM = map->getUserLandMark(LastSelectedLandMark);
NLGUI::CDBManager::getInstance()->getDbProp( "UI:TEMP:LANDMARKTYPE" )->setValue8(cb->getTextPos(userLM.Type));
@ -1207,22 +1208,54 @@ void CGroupMap::checkCoords()
// **** retrieve pos of respawn and update it, or hide it if there's no target
uint i;
uint offset = 0;
if (!_ArkPoints.empty())
{
offset = _ArkPoints.size();
if (_ArkPoints.size() < _RespawnLM.size())
{
for (i = (uint)_ArkPoints.size(); i < _RespawnLM.size(); i++)
{
delCtrl(_RespawnLM[i]);
_RespawnLM[i] = NULL;
}
}
if (_ArkPoints.empty()) // Ark points replace Respawn Points
_RespawnLM.resize(_ArkPoints.size(), NULL);
for(i = 0; i < _ArkPoints.size(); i++)
{
if (_RespawnLM[i] == NULL)
{
_RespawnLM[i] = createArkPointButton(_ArkPoints[i]);
_RespawnLM[i]->setId(this->getId() + ":arklm_" + NLMISC::toString(i));
_RespawnLM[i]->setParent(this);
ucstring title;
title.fromUtf8(_ArkPoints[i].Title);
_RespawnLM[i]->setDefaultContextHelp(title);
_RespawnLM[i]->HandleEvents = true;
addCtrl(_RespawnLM[i]);
updateLMPosFromDBPos(_RespawnLM[i], _ArkPoints[i].x, _ArkPoints[i].y);
}
}
}
if (_ArkPoints.empty() || !isIsland())
{
if (_RespawnPos.size() < _RespawnLM.size())
if (offset + _RespawnPos.size() < _RespawnLM.size())
{
for (i = (uint)_RespawnPos.size(); i < _RespawnLM.size(); i++)
for (i = offset + _RespawnPos.size(); i < _RespawnLM.size(); i++)
{
delCtrl(_RespawnLM[i]);
_RespawnLM[i] = NULL;
}
}
_RespawnLM.resize(_RespawnPos.size(), NULL);
for(i = 0; i < _RespawnPos.size(); ++i)
_RespawnLM.resize(offset + _RespawnPos.size(), NULL);
for(int j = 0; j < _RespawnPos.size(); ++j)
{
i = offset + j;
if (_RespawnLM[i] == NULL)
{
_RespawnLM[i] = createLandMarkButton(_RespawnLMOptions);
@ -1245,38 +1278,11 @@ void CGroupMap::checkCoords()
addCtrl(_RespawnLM[i]);
}
if (_RespawnLM[i])
updateLMPosFromDBPos(_RespawnLM[i], _RespawnPos[i].x, _RespawnPos[i].y);
updateLMPosFromDBPos(_RespawnLM[i], _RespawnPos[j].x, _RespawnPos[j].y);
}
}
else
{
if (_ArkPoints.size() < _RespawnLM.size())
{
for (i = (uint)_ArkPoints.size(); i < _RespawnLM.size(); i++)
{
delCtrl(_RespawnLM[i]);
_RespawnLM[i] = NULL;
}
}
_RespawnLM.resize(_ArkPoints.size(), NULL);
for(i = 0; i < _ArkPoints.size(); i++)
{
if (_RespawnLM[i] == NULL)
{
_RespawnLM[i] = createArkPointButton(_ArkPoints[i]);
_RespawnLM[i]->setId(this->getId() + ":arklm_" + NLMISC::toString(i));
_RespawnLM[i]->setParent(this);
ucstring title;
title.fromUtf8(_ArkPoints[i].Title);
_RespawnLM[i]->setDefaultContextHelp(title);
_RespawnLM[i]->HandleEvents = true;
addCtrl(_RespawnLM[i]);
updateLMPosFromDBPos(_RespawnLM[i], _ArkPoints[i].x, _ArkPoints[i].y);
}
}
}
if ((_MapMode == MapMode_Death) || (_MapMode == MapMode_SpawnSquad))
{
if (_RespawnPosReseted)
@ -1381,7 +1387,7 @@ void CGroupMap::checkCoords()
{
if (_TeammateLM[i])
{
{
sint32 px, py;
if (_TeammatePosStates[i]->getPos(px, py))
@ -2271,6 +2277,21 @@ void CGroupMap::setMap(SMap *map)
invalidateCoords();
createContinentLandMarks();
nlinfo("setMap (%f,%f) (%f,%f)", _CurMap->MinX, _CurMap->MinY, _CurMap->MaxX, _CurMap->MaxY);
delArkPoints();
CGroupHTML *groupHtml = dynamic_cast<CGroupHTML*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:lm_events:html"));
if (groupHtml)
{
groupHtml->setHome(groupHtml->Home+toString("&min_x=%f&min_y=%f&max_x=%f&max_y=%f", _CurMap->MinX, _CurMap->MinY, _CurMap->MaxX, _CurMap->MaxY));
if (groupHtml->isBrowsing())
groupHtml->stopBrowse();
groupHtml->browse(groupHtml->Home.c_str());
}
if (_CurContinent != NULL)
_MapMaterial.setTexture(1, _CurContinent->FoW.Tx);
else
@ -2626,7 +2647,7 @@ static void hideTeleportButtonsInPopupMenuIfNotEnoughPriv()
CInterfaceElement *ie = CWidgetManager::getInstance()->getElementFromId("ui:interface:map_menu:teleport");
if(ie) ie->setActive(showTeleport);
ie = CWidgetManager::getInstance()->getElementFromId("ui:interface:map_menu_island:teleport");
if(ie) ie->setActive(showTeleport);
@ -2723,7 +2744,7 @@ CGroupMap::CLandMarkButton *CGroupMap::createArkPointButton(const CArkPoint &poi
lmb->setColorOver(point.Color);
lmb->setColorPushed(point.Color);
lmb->setModulateGlobalColorAll(false);
lmb->setPosRef(Hotspot_MM);
return lmb;
}
@ -2772,13 +2793,13 @@ void CGroupMap::addLandMark(TLandMarkButtonVect &destList, const NLMISC::CVector
void CGroupMap::addUserLandMark(const NLMISC::CVector2f &pos, const ucstring &title, NLMISC::CRGBA color)
{
if (_CurContinent == NULL) return;
CUserLandMark ulm;
mapToWorld(ulm.Pos, pos);
ulm.Title = title;
ulm.Type = 5;
_CurContinent->UserLandMarks.push_back(ulm);
CLandMarkOptions options(_UserLMOptions);
options.ColorNormal = options.ColorOver = options.ColorPushed = color;
// create a new button and add it to the list
@ -2894,7 +2915,7 @@ CUserLandMark CGroupMap::getUserLandMark(CCtrlButton *button) const
}
}
return ulm;
}
@ -2907,7 +2928,7 @@ uint CGroupMap::getNumUserLandMarks() const
//============================================================================================================
CLandMarkOptions CGroupMap::getUserLandMarkOptions(uint32 lmindex) const
{
if (_CurContinent == NULL || _CurContinent->UserLandMarks.size() < lmindex)
if (_CurContinent == NULL || _CurContinent->UserLandMarks.size() < lmindex)
return _UserLMOptions;
CLandMarkOptions clmo(_UserLMOptions);
@ -3936,9 +3957,9 @@ REGISTER_ACTION_HANDLER(CAHMapTeleport, "map_teleport");
//=========================================================================================================
// update LandMarks Colors
class CUpdateLandMarksColor : public IActionHandler{public: virtual void execute (CCtrlBase * /* pCaller */, const string &/* Params */)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
class CUpdateLandMarksColor : public IActionHandler{public: virtual void execute (CCtrlBase * /* pCaller */, const string &/* Params */)
{
CInterfaceManager *pIM = CInterfaceManager::getInstance();
CUserLandMark::_LandMarksColor[CUserLandMark::Misc] = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:LANDMARK:COLORS:MISC")->getValueRGBA();
CUserLandMark::_LandMarksColor[CUserLandMark::Tribe] = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:LANDMARK:COLORS:TRIBE")->getValueRGBA();
@ -3972,10 +3993,10 @@ class CUpdateLandMarksColor : public IActionHandler{public: virtual void execute
CUserLandMark::_LandMarksColor[CUserLandMark::Teleporter] = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:LANDMARK:COLORS:TELEPORTER")->getValueRGBA();
CGroupMap *pGM = dynamic_cast<CGroupMap *>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:actual_map"));
if (pGM == NULL) return;
pGM->updateUserLandMarks();
CGroupMap *pGM = dynamic_cast<CGroupMap *>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:actual_map"));
if (pGM == NULL) return;
pGM->updateUserLandMarks();
}};
REGISTER_ACTION_HANDLER (CUpdateLandMarksColor, "update_landmarks_color");

Loading…
Cancel
Save