Merge with develop

This commit is contained in:
kervala 2015-04-20 13:38:51 +02:00
parent 32f74d9b39
commit 78eee4f222
31 changed files with 3607 additions and 2235 deletions

View file

@ -152,7 +152,6 @@ IF(WITH_NEL)
ENDIF(WITH_NEL_TESTS)
IF(WITH_GUI)
FIND_PACKAGE(Libwww REQUIRED)
FIND_PACKAGE(Luabind REQUIRED)
FIND_PACKAGE(CURL REQUIRED)

View file

@ -1,190 +0,0 @@
#
# Find the W3C libwww includes and library
#
# This module defines
# LIBWWW_INCLUDE_DIR, where to find tiff.h, etc.
# LIBWWW_LIBRARY, where to find the Libwww library.
# LIBWWW_FOUND, If false, do not try to use Libwww.
OPTION(WITH_LIBWWW_STATIC "Use only static libraries for libwww" OFF)
# also defined, but not for general use are
IF(LIBWWW_LIBRARIES AND LIBWWW_INCLUDE_DIR)
# in cache already
SET(Libwww_FIND_QUIETLY TRUE)
ENDIF(LIBWWW_LIBRARIES AND LIBWWW_INCLUDE_DIR)
FIND_PATH(LIBWWW_INCLUDE_DIR
WWWInit.h
PATHS
/usr/local/include
/usr/include
/sw/include
/opt/local/include
/opt/csw/include
/opt/include
PATH_SUFFIXES libwww w3c-libwww
)
# when installing libwww on mac os x using macports the file wwwconf.h resides
# in /opt/local/include and not in the real libwww include dir :/
FIND_PATH(LIBWWW_ADDITIONAL_INCLUDE_DIR
wwwconf.h
PATHS
/usr/local/include
/usr/include
/sw/include
/opt/local/include
/opt/csw/include
/opt/include
)
# combine both include directories into one variable
IF(LIBWWW_ADDITIONAL_INCLUDE_DIR)
SET(LIBWWW_INCLUDE_DIR ${LIBWWW_INCLUDE_DIR} ${LIBWWW_ADDITIONAL_INCLUDE_DIR})
ENDIF(LIBWWW_ADDITIONAL_INCLUDE_DIR)
# helper to find all the libwww sub libraries
MACRO(FIND_WWW_LIBRARY MYLIBRARY OPTION FILE)
IF(WITH_LIBWWW_STATIC AND UNIX AND NOT APPLE AND NOT WITH_STATIC_EXTERNAL)
SET(CMAKE_FIND_LIBRARY_SUFFIXES_OLD ${CMAKE_FIND_LIBRARY_SUFFIXES})
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
ENDIF(WITH_LIBWWW_STATIC AND UNIX AND NOT APPLE AND NOT WITH_STATIC_EXTERNAL)
FIND_LIBRARY(${MYLIBRARY}_RELEASE
NAMES ${FILE}
PATHS
/usr/local/lib
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/local/X11R6/lib
/usr/X11R6/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
FIND_LIBRARY(${MYLIBRARY}_DEBUG
NAMES ${FILE}d
PATHS
/usr/local/lib
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/local/X11R6/lib
/usr/X11R6/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
IF(CMAKE_FIND_LIBRARY_SUFFIXES_OLD)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_OLD})
ENDIF(CMAKE_FIND_LIBRARY_SUFFIXES_OLD)
IF(${MYLIBRARY}_RELEASE AND ${MYLIBRARY}_DEBUG)
IF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
SET(LIBWWW_LIBRARIES ${LIBWWW_LIBRARIES} optimized ${${MYLIBRARY}_RELEASE} debug ${${MYLIBRARY}_DEBUG})
ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
ELSEIF(${MYLIBRARY}_RELEASE)
IF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
SET(LIBWWW_LIBRARIES ${LIBWWW_LIBRARIES} ${${MYLIBRARY}_RELEASE})
ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
ELSEIF(${MYLIBRARY}_DEBUG)
IF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
SET(LIBWWW_LIBRARIES ${LIBWWW_LIBRARIES} ${${MYLIBRARY}_DEBUG})
ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC)
ELSE(${MYLIBRARY}_RELEASE AND ${MYLIBRARY}_DEBUG)
IF(NOT Libwww_FIND_QUIETLY AND NOT WIN32)
MESSAGE(STATUS "Warning: Libwww: Library not found: ${MYLIBRARY}")
ENDIF(NOT Libwww_FIND_QUIETLY AND NOT WIN32)
ENDIF(${MYLIBRARY}_RELEASE AND ${MYLIBRARY}_DEBUG)
MARK_AS_ADVANCED(${MYLIBRARY}_RELEASE ${MYLIBRARY}_DEBUG)
ENDMACRO(FIND_WWW_LIBRARY)
MACRO(LINK_WWW_LIBRARY MYLIBRARY OTHERLIBRARY SYMBOL)
IF(NOT WITH_LIBWWW_STATIC AND NOT WITH_STATIC_EXTERNAL)
LINK_DEPENDS(LIBWWW_LIBRARIES ${MYLIBRARY} ${OTHERLIBRARY} ${SYMBOL})
ENDIF(NOT WITH_LIBWWW_STATIC AND NOT WITH_STATIC_EXTERNAL)
ENDMACRO(LINK_WWW_LIBRARY)
# Find and link required libs for static or dynamic
FIND_WWW_LIBRARY(LIBWWWAPP_LIBRARY REQUIRED wwwapp) # cache core file ftp gopher html http mime news stream telnet trans utils zip xml xmlparse
FIND_WWW_LIBRARY(LIBWWWCORE_LIBRARY REQUIRED wwwcore) # utils
FIND_WWW_LIBRARY(LIBWWWFILE_LIBRARY REQUIRED wwwfile) # core trans utils html
FIND_WWW_LIBRARY(LIBWWWHTML_LIBRARY REQUIRED wwwhtml) # core utils
FIND_WWW_LIBRARY(LIBWWWHTTP_LIBRARY REQUIRED wwwhttp) # md5 core mime stream utils
FIND_WWW_LIBRARY(LIBWWWMIME_LIBRARY REQUIRED wwwmime) # core cache stream utils
# Required for static or if underlinking
FIND_WWW_LIBRARY(LIBWWWCACHE_LIBRARY OPTIONAL wwwcache) # core trans utils
FIND_WWW_LIBRARY(LIBWWWSTREAM_LIBRARY OPTIONAL wwwstream) # core file utils
FIND_WWW_LIBRARY(LIBWWWTRANS_LIBRARY REQUIRED wwwtrans) # core utils
FIND_WWW_LIBRARY(LIBWWWUTILS_LIBRARY REQUIRED wwwutils)
# Required only if underlinking
# Unused protocols
FIND_WWW_LIBRARY(LIBWWWFTP_LIBRARY OPTIONAL wwwftp) # core file utils
FIND_WWW_LIBRARY(LIBWWWGOPHER_LIBRARY OPTIONAL wwwgopher) # core html utils file
FIND_WWW_LIBRARY(LIBWWWNEWS_LIBRARY OPTIONAL wwwnews) # core html mime stream utils
FIND_WWW_LIBRARY(LIBWWWTELNET_LIBRARY OPTIONAL wwwtelnet) # core utils
# Other used by app
FIND_WWW_LIBRARY(LIBWWWDIR_LIBRARY OPTIONAL wwwdir) # file
FIND_WWW_LIBRARY(LIBWWWINIT_LIBRARY OPTIONAL wwwinit) # app cache core file html utils
FIND_WWW_LIBRARY(LIBWWWMUX_LIBRARY OPTIONAL wwwmux) # core stream trans utils
FIND_WWW_LIBRARY(LIBWWWXML_LIBRARY OPTIONAL wwwxml) # core utils xmlparse
FIND_WWW_LIBRARY(LIBWWWZIP_LIBRARY OPTIONAL wwwzip) # core utils
FIND_WWW_LIBRARY(LIBXMLPARSE_LIBRARY OPTIONAL xmlparse) # xmltok
# Other used by other
FIND_WWW_LIBRARY(LIBXMLTOK_LIBRARY OPTIONAL xmltok)
FIND_WWW_LIBRARY(LIBWWWSSL_LIBRARY OPTIONAL wwwssl)
FIND_WWW_LIBRARY(LIBMD5_LIBRARY OPTIONAL md5)
FIND_WWW_LIBRARY(LIBPICS_LIBRARY OPTIONAL pics)
# Other external libraries
FIND_PACKAGE(EXPAT QUIET)
FIND_PACKAGE(OpenSSL QUIET)
FIND_WWW_LIBRARY(LIBREGEX_LIBRARY OPTIONAL gnu_regex)
# Now link all libs together
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWCACHE_LIBRARY HTLoadCache)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWCACHE_LIBRARY HTCacheAppend)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWFTP_LIBRARY HTLoadFTP)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWGOPHER_LIBRARY HTLoadGopher)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWNEWS_LIBRARY HTLoadNews)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWTELNET_LIBRARY HTLoadTelnet)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWSTREAM_LIBRARY HTStreamToChunk)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWSTREAM_LIBRARY HTGuess_new)
LINK_WWW_LIBRARY(LIBWWWFILE_LIBRARY LIBWWWDIR_LIBRARY HTDir_new)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWINIT_LIBRARY HTProtocolInit)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWXML_LIBRARY HTXML_new)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBWWWZIP_LIBRARY HTZLib_inflate)
# libwwwxml can be linked to xmlparse or expat
LINK_WWW_LIBRARY(LIBWWWXML_LIBRARY LIBXMLPARSE_LIBRARY XML_ParserCreate)
IF(LIBXMLPARSE_LIBRARY_LINKED)
LINK_WWW_LIBRARY(LIBXMLPARSE_LIBRARY EXPAT_LIBRARY XmlInitEncoding)
ELSE(LIBXMLPARSE_LIBRARY_LINKED)
LINK_WWW_LIBRARY(LIBWWWXML_LIBRARY EXPAT_LIBRARY XML_ParserCreate)
ENDIF(LIBXMLPARSE_LIBRARY_LINKED)
LINK_WWW_LIBRARY(LIBWWWHTTP_LIBRARY LIBMD5_LIBRARY MD5Init)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY LIBREGEX_LIBRARY regexec)
LINK_WWW_LIBRARY(LIBWWWAPP_LIBRARY OPENSSL_LIBRARIES SSL_new)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Libwww DEFAULT_MSG
LIBWWW_LIBRARIES
LIBWWW_INCLUDE_DIR
)

View file

@ -25,14 +25,10 @@
#include "nel/gui/group_tree.h"
#include "nel/gui/ctrl_button.h"
#include "nel/gui/group_table.h"
#include "nel/gui/libwww_types.h"
typedef std::map<std::string, std::string> TStyle;
extern "C"
{
#include "WWWInit.h"
}
namespace NLGUI
{
class CCtrlButton;
@ -41,7 +37,8 @@ namespace NLGUI
class CDBGroupComboBox;
class CGroupParagraph;
extern std::string CurrentCookie;
extern std::string HTTPCurrentDomain;
// HTML group
/**
@ -55,15 +52,6 @@ namespace NLGUI
public:
DECLARE_UI_CLASS( CGroupHTML )
friend void TextAdd (struct _HText *me, const char * buf, int len);
friend void TextBeginElement (_HText *me, int element_number, const BOOL *present, const char ** value);
friend void TextEndElement (_HText *me, int element_number);
friend void TextLink (struct _HText *me, int element_number, int attribute_number, struct _HTChildAnchor *anchor, const BOOL *present, const char **value);
friend void TextBuild (HText * me, HTextStatus status);
friend void TextBeginUnparsedElement(HText *me, const char *buffer, int length);
friend void TextEndUnparsedElement(HText *me, const char *buffer, int length);
friend int requestTerminater (HTRequest * request, HTResponse * response, void * param, int status);
/// Web browser options for CGroupHTML
struct SWebOptions
{
@ -102,6 +90,9 @@ namespace NLGUI
// Browse
virtual void browse (const char *url);
// parse html string using libxml2 parser
virtual bool parseHtml(std::string htmlString);
// Refresh
void refresh();
@ -175,6 +166,34 @@ namespace NLGUI
std::string DefaultBackgroundBitmapView;
std::string CurrentLinkTitle;
struct TFormField {
public:
TFormField(const std::string &k, const std::string &v)
:name(k),value(v)
{}
std::string name;
std::string value;
};
struct SFormFields {
public:
SFormFields()
{
}
void clear()
{
Values.clear();
}
void add(const std::string &key, const std::string &value)
{
Values.push_back(TFormField(key, value));
}
std::vector<TFormField> Values;
};
// Browser home
std::string Home;
@ -199,6 +218,7 @@ namespace NLGUI
int luaBeginElement(CLuaState &ls);
int luaEndElement(CLuaState &ls);
int luaShowDiv(CLuaState &ls);
int luaParseHtml(CLuaState &ls);
REFLECT_EXPORT_START(CGroupHTML, CGroupScrollText)
REFLECT_LUA_METHOD("browse", luaBrowse)
@ -210,6 +230,7 @@ namespace NLGUI
REFLECT_LUA_METHOD("beginElement", luaBeginElement)
REFLECT_LUA_METHOD("endElement", luaEndElement)
REFLECT_LUA_METHOD("showDiv", luaShowDiv)
REFLECT_LUA_METHOD("parseHtml", luaParseHtml)
REFLECT_STRING("url", getURL, setURL)
REFLECT_FLOAT("timeout", getTimeout, setTimeout)
REFLECT_EXPORT_END
@ -228,10 +249,10 @@ namespace NLGUI
virtual void addText (const char * buf, int len);
// A link has been parsed
virtual void addLink (uint element_number, uint attribute_number, HTChildAnchor *anchor, const BOOL *present, const char **value);
virtual void addLink (uint element_number, const std::vector<bool> &present, const std::vector<const char *> &value);
// A new begin HTML element has been parsed (<IMG> for exemple)
virtual void beginElement (uint element_number, const BOOL *present, const char **value);
virtual void beginElement (uint element_number, const std::vector<bool> &present, const std::vector<const char *> &value);
// A new end HTML element has been parsed (</IMG> for exemple)
virtual void endElement (uint element_number);
@ -246,10 +267,14 @@ namespace NLGUI
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
// Add POST params to the libwww list
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
// the current request is terminated
virtual void requestTerminated(HTRequest *request);
virtual void requestTerminated();
// libxml2 html parser functions
void htmlElement(xmlNode *node, int element_number);
void htmlWalkDOM(xmlNode *a_node);
// Get Home URL
virtual std::string home();
@ -338,6 +363,7 @@ namespace NLGUI
bool _Connecting;
double _TimeoutValue; // the timeout in seconds
double _ConnectingTimeout;
uint32 _RedirectsRemaining;
// minimal embeded lua script support
// Note : any embeded script is executed immediately after the closing
@ -351,11 +377,8 @@ namespace NLGUI
bool _Object;
std::string _ObjectScript;
// Someone is conecting. We got problem with libwww : 2 connection requests can deadlock the client.
static CGroupHTML *_ConnectingLock;
// LibWWW data
class CLibWWWData *_LibWWW;
// Data container for active curl transfer
class CCurlWWWData * _CurlWWW;
// Current paragraph
std::string _DivName;
@ -668,6 +691,18 @@ namespace NLGUI
// read style attribute
void getStyleParams(const std::string &styleString, CStyleParams &style, bool inherit = true);
// load and render local html file (from bnp for example)
void doBrowseLocalFile(const std::string &filename);
// load remote content using either GET or POST
void doBrowseRemoteUrl(const std::string &url, const std::string &referer, bool doPost = false, const SFormFields &formfields = SFormFields());
// render html string as new browser page
bool renderHtmlString(const std::string &html);
// initialize formfields list from form elements on page
void buildHTTPPostParams (SFormFields &formfields);
private:
// decode all HTML entities
static ucstring decodeHTMLEntities(const ucstring &str);
@ -677,13 +712,16 @@ namespace NLGUI
struct CDataDownload
{
CDataDownload(CURL *c, const std::string &u, FILE *f, TDataType t, CViewBase *i, const std::string &s, const std::string &m) : curl(c), url(u), luaScript(s), md5sum(m), type(t), fp(f)
public:
CDataDownload(CURL *c, const std::string &u, const std::string &d, FILE *f, TDataType t, CViewBase *i, const std::string &s, const std::string &m) : curl(c), url(u), dest(d), luaScript(s), md5sum(m), type(t), fp(f)
{
if (t == ImgType) imgs.push_back(i);
}
public:
CURL *curl;
std::string url;
std::string dest;
std::string luaScript;
std::string md5sum;
TDataType type;
@ -699,6 +737,7 @@ namespace NLGUI
void checkImageDownload();
void addImageDownload(const std::string &url, CViewBase *img);
std::string localImageName(const std::string &url);
std::string getAbsoluteUrl(const std::string &url);
bool isTrustedDomain(const std::string &domain);
void setImage(CViewBase *view, const std::string &file);
@ -712,6 +751,13 @@ namespace NLGUI
void releaseDownloads();
void checkDownloads();
// HtmlType download finished
void htmlDownloadFinished(const std::string &content, const std::string &type, long code);
// cURL transfer callbacks
static size_t curlHeaderCallback(char *buffer, size_t size, size_t nmemb, void *pCCurlWWWData);
static size_t curlDataCallback(char *buffer, size_t size, size_t nmemb, void *pCCurlWWWData);
static size_t curlProgressCallback(void *pCCurlWWWData, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
};
// adapter group that store y offset for inputs inside an html form
@ -725,7 +771,6 @@ namespace NLGUI
xmlNodePtr serialize( xmlNodePtr parentNode, const char *type ) const;
virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
};
}
#endif

View file

@ -20,12 +20,10 @@
#ifndef CL_LIB_WWW_H
#define CL_LIB_WWW_H
extern "C"
{
#include "WWWInit.h"
}
#include <curl/curl.h>
#include "nel/misc/rgba.h"
#include "nel/gui/libwww_types.h"
namespace NLGUI
{
@ -35,14 +33,12 @@ namespace NLGUI
// ***************************************************************************
// Legacy function from libwww
SGML_dtd * HTML_dtd (void);
// Init the libwww
void initLibWWW();
// Get an url and setup a local domain
const std::string &setCurrentDomain(const std::string &url);
extern std::string CurrentCookie;
// ***************************************************************************
// Some DTD table
@ -230,46 +226,6 @@ namespace NLGUI
// ***************************************************************************
// A smart ptr for LibWWW strings
class C3WSmartPtr
{
public:
C3WSmartPtr ()
{
_Ptr = NULL;
}
C3WSmartPtr (const char *ptr)
{
_Ptr = ptr;
}
~C3WSmartPtr ()
{
clear();
}
void operator=(const char *str)
{
clear ();
_Ptr = str;
}
operator const char *() const
{
return _Ptr;
}
void clear()
{
if (_Ptr)
{
void *ptr = (void*)_Ptr;
HT_FREE(ptr);
}
_Ptr = NULL;
}
private:
const char *_Ptr;
};
// ***************************************************************************
// Read a width HTML parameter. "100" or "100%". Returns true if percent (0 ~ 1) else false
bool getPercentage (sint32 &width, float &percent, const char *str);
@ -280,15 +236,10 @@ namespace NLGUI
// ***************************************************************************
void _VerifyLibWWW(const char *function, bool ok, const char *file, int line);
#define VerifyLibWWW(a,b) _VerifyLibWWW(a,(b)!=FALSE,__FILE__,__LINE__)
const std::string &setCurrentDomain(const std::string &uri);
void receiveCookies (CURL *curl, const std::string &domain, bool trusted);
void sendCookies(CURL *curl, const std::string &domain, bool trusted);
// ***************************************************************************
// Standard request terminator
int requestTerminater (HTRequest * request, HTResponse * response, void * param, int status) ;
// ***************************************************************************
}
#endif

View file

@ -1,28 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef LIBWWW_NEL_STREAM_H
#define LIBWWW_NEL_STREAM_H
#include "HTProt.h"
extern "C" HTProtCallback HTLoadNeLFile;
extern "C" PUBLIC HTInputStream * HTNeLReader_new (HTHost * host, HTChannel * ch, void * param, int mode);
#endif // LIBWWW_NEL_STREAM_H

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,63 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CL_URL_PARSER_H
#define CL_URL_PARSER_H
#include <string>
namespace NLGUI
{
/**
* Simple URL parser
* \author Meelis Mägi
* \date 2015
*/
class CUrlParser
{
public:
CUrlParser(){}
// parse uri to components
CUrlParser(const std::string &url);
// parse uri to components
void parse(std::string uri);
// serialize URL back to string
std::string toString() const;
// inherit scheme, domain, path from given url
void inherit(const std::string &url);
// if current parts can compose absolute url or not
bool isAbsolute() const;
// resolve relative path like './a/../b' to absolute path '/a/b'
static void resolveRelativePath(std::string &path);
public:
std::string scheme;
std::string domain;
std::string path;
std::string query;
std::string hash;
};
}// namespace
#endif // CL_URL_PARSER_H

View file

@ -6,9 +6,9 @@ SOURCE_GROUP("src" FILES ${SRC})
NL_TARGET_LIB(nelgui ${SRC} ${HEADERS})
INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR} ${LUABIND_INCLUDE_DIR} ${LIBWWW_INCLUDE_DIR} ${CURL_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR} ${LUABIND_INCLUDE_DIR} ${CURL_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(nelgui nelmisc nel3d ${LUA_LIBRARIES} ${LUABIND_LIBRARIES} ${LIBXML2_LIBRARIES} ${LIBWWW_LIBRARIES} ${CURL_LIBRARIES})
TARGET_LINK_LIBRARIES(nelgui nelmisc nel3d ${LUA_LIBRARIES} ${LUABIND_LIBRARIES} ${LIBXML2_LIBRARIES} ${CURL_LIBRARIES})
SET_TARGET_PROPERTIES(nelgui PROPERTIES LINK_INTERFACE_LIBRARIES "")
NL_DEFAULT_PROPS(nelgui "NeL, Library: NeL GUI")
NL_ADD_RUNTIME_FLAGS(nelgui)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,312 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdpch.h"
#include <string>
#include <libxml/HTMLparser.h>
#include "nel/misc/types_nl.h"
#include "nel/gui/libwww.h"
#include "nel/gui/group_html.h"
#include "nel/gui/lua_ihm.h"
using namespace std;
using namespace NLMISC;
namespace NLGUI
{
// ***************************************************************************
void CGroupHTML::htmlElement(xmlNode *node, int element_number)
{
SGML_dtd *HTML_DTD = HTML_dtd ();
if (element_number < HTML_ELEMENTS)
{
CXMLAutoPtr ptr;
// load attributes into libwww structs
std::vector<bool> present;
std::vector<const char *>value;
std::string strvalues[MAX_ATTRIBUTES];
present.resize(30, false);
value.resize(30);
uint nbAttributes = std::min(MAX_ATTRIBUTES, HTML_DTD->tags[element_number].number_of_attributes);
for(uint i=0; i<nbAttributes; i++)
{
std::string name;
name = toLower(std::string(HTML_DTD->tags[element_number].attributes[i].name));
ptr = xmlGetProp(node, (const xmlChar *)name.c_str());
if (ptr)
{
// copy xmlChar to string (xmlChar will be released)
strvalues[i] = (const char *)(ptr);
// now use string pointer in value[] array
value[i] = strvalues[i].c_str();
present[i] = true;
}
}
if (element_number == HTML_A)
{
addLink(element_number, present, value);
}
beginElement(element_number, present, value);
}
else
{
beginUnparsedElement((const char *)(node->name), xmlStrlen(node->name));
}
// recursive - text content / child nodes
htmlWalkDOM(node->children);
// closing tag
if (element_number < HTML_ELEMENTS)
{
endElement(element_number);
}
else
{
endUnparsedElement((const char *)(node->name), xmlStrlen(node->name));
}
}
// ***************************************************************************
// recursive function to walk html document
void CGroupHTML::htmlWalkDOM(xmlNode *a_node)
{
SGML_dtd *HTML_DTD = HTML_dtd ();
uint element_number;
xmlNode *node = a_node;
while(node)
{
if (node->type == XML_TEXT_NODE)
{
addText((const char *)(node->content), xmlStrlen(node->content));
}
else
if (node->type == XML_ELEMENT_NODE)
{
// find libwww tag
for(element_number = 0; element_number<HTML_ELEMENTS; ++element_number)
{
if (xmlStrncasecmp(node->name, (const xmlChar *)HTML_DTD->tags[element_number].name.c_str(), xmlStrlen(node->name)) == 0)
break;
}
htmlElement(node, element_number);
}
// move into next sibling
node = node->next;
}
}
// ***************************************************************************
// http://stackoverflow.com/a/18335183
static std::string correct_non_utf_8(const std::string &str)
{
int i,f_size=str.size();
unsigned char c,c2,c3,c4;
std::string to;
to.reserve(f_size);
for(i=0 ; i<f_size ; i++){
c=(unsigned char)(str[i]);
if(c<32){//control char
if(c==9 || c==10 || c==13){//allow only \t \n \r
to.append(1,c);
}
continue;
}else if(c<127){//normal ASCII
to.append(1,c);
continue;
}else if(c<160){//control char (nothing should be defined here either ASCI, ISO_8859-1 or UTF8, so skipping)
if(c==128){//fix microsoft mess, add euro
to.append(1,226);
to.append(1,130);
to.append(1,172);
}
if(c==133){//fix IBM mess, add NEL = \n\r
to.append(1,10);
to.append(1,13);
}
continue;
}else if(c<192){//invalid for UTF8, converting ASCII
to.append(1,(unsigned char)194);
to.append(1,c);
continue;
}else if(c<194){//invalid for UTF8, converting ASCII
to.append(1,(unsigned char)195);
to.append(1,c-64);
continue;
}else if(c<224 && i+1<f_size){//possibly 2byte UTF8
c2=(unsigned char)(str[i+1]);
if(c2>127 && c2<192){//valid 2byte UTF8
if(c==194 && c2<160){//control char, skipping
;
}else{
to.append(1,c);
to.append(1,c2);
}
i++;
continue;
}
}else if(c<240 && i+2<f_size){//possibly 3byte UTF8
c2=(unsigned char)(str[i+1]);
c3=(unsigned char)(str[i+2]);
if(c2>127 && c2<192 && c3>127 && c3<192){//valid 3byte UTF8
to.append(1,c);
to.append(1,c2);
to.append(1,c3);
i+=2;
continue;
}
}else if(c<245 && i+3<f_size){//possibly 4byte UTF8
c2=(unsigned char)(str[i+1]);
c3=(unsigned char)(str[i+2]);
c4=(unsigned char)(str[i+3]);
if(c2>127 && c2<192 && c3>127 && c3<192 && c4>127 && c4<192){//valid 4byte UTF8
to.append(1,c);
to.append(1,c2);
to.append(1,c3);
to.append(1,c4);
i+=3;
continue;
}
}
//invalid UTF8, converting ASCII (c>245 || string too short for multi-byte))
to.append(1,(unsigned char)195);
to.append(1,c-64);
}
return to;
}
// ***************************************************************************
static void patchHtmlQuirks(std::string &htmlString)
{
size_t npos = std::string::npos;
size_t pos;
// get rid of BOM (some ingame help files does not show up otherwise)
if (htmlString.substr(0, 3) == "\xEF\xBB\xBF")
{
htmlString.erase(0, 3);
}
// if any element is before <html>, then parser adds <html><body>
// and original tags are ignored (their attributes not processed)
//
// only fix situation when there is <body> tag with attributes
//
// tags are considered to be lowercase
pos = htmlString.find("<body ");
if (pos != npos)
{
size_t start = htmlString.find("<");
// skip <!doctype html>
if (htmlString.substr(start, 2) == "<!")
start = htmlString.find("<", start + 1);
// if there is no html tag, then abort
size_t end = htmlString.find("<html>");
if (end != npos && start < end && end < pos)
{
// body tag end position
size_t insert = htmlString.find(">", pos);
if (insert != npos)
{
std::string str = htmlString.substr(start, end - start);
htmlString.insert(insert+1, str);
htmlString.erase(start, str.size());
}
}
}
// make sure </html> (if present) is last in document or tags coming after it are ignored
pos = htmlString.find("</html>");
if (pos != npos && htmlString.find("<", pos+1) > pos)
{
htmlString.erase(pos, 7);
htmlString += "</html>";
}
// if there is invalid utf-8 chars, then libxml will break everything after first it finds.
htmlString = correct_non_utf_8(htmlString);
}
// ***************************************************************************
bool CGroupHTML::parseHtml(std::string htmlString)
{
htmlParserCtxtPtr parser = htmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL, XML_CHAR_ENCODING_UTF8);
if (!parser)
{
nlwarning("Creating html parser context failed");
return false;
}
htmlCtxtUseOptions(parser, HTML_PARSE_NOBLANKS | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING | HTML_PARSE_NONET);
// parser is little strict on tag order, so fix whats needed
patchHtmlQuirks(htmlString);
htmlParseChunk(parser, htmlString.c_str(), htmlString.size(), 0);
htmlParseChunk(parser, "", 0, 1);
bool success = true;
if (parser->myDoc)
{
xmlNode *root = xmlDocGetRootElement(parser->myDoc);
if (root)
{
htmlWalkDOM(root);
}
else
{
nlwarning("html root node failed");
success = false;
}
}
else
{
nlwarning("htmlstring parsing failed");
success = false;
}
htmlFreeParserCtxt(parser);
return success;
}
// ***************************************************************************
int CGroupHTML::luaParseHtml(CLuaState &ls)
{
const char *funcName = "parseHtml";
CLuaIHM::checkArgCount(ls, funcName, 1);
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
std::string html = ls.toString(1);
parseHtml(html);
return 0;
}
}

View file

@ -16,35 +16,21 @@
#include "stdpch.h"
#include "nel/gui/libwww.h"
#include "nel/gui/group_html.h"
// LibWWW
extern "C"
{
#include "WWWLib.h" /* Global Library Include file */
#include "WWWApp.h"
#include "WWWInit.h"
}
#include "nel/gui/group_html.h"
#include "nel/gui/libwww_nel_stream.h"
using namespace NLMISC;
// The HText structure for libwww
struct _HText
{
NLGUI::CGroupHTML *Parent;
};
namespace NLGUI
{
// ***************************************************************************
/// the cookie value for session identification (nel cookie)
std::string CurrentCookie;
/// store all cookies we receive and resent them depending of the domain
std::map<std::string, std::map<std::string, std::string> > HTTPCookies;
static std::map<std::string, std::map<std::string, std::string> > HTTPCookies;
std::string HTTPCurrentDomain; // The current domain that will be used to get which cookies to send
// ***************************************************************************
@ -213,7 +199,6 @@ namespace NLGUI
{ 0 }
};
HTAttr p_attr[] =
{
HTML_ATTR(P,QUICK_HELP_CONDITION),
@ -243,90 +228,6 @@ namespace NLGUI
// ***************************************************************************
void _VerifyLibWWW(const char *function, bool ok, const char *file, int line)
{
if (!ok)
nlwarning("%s(%d) : LIBWWW %s returned a bad status", file, line, function);
}
#define VerifyLibWWW(a,b) _VerifyLibWWW(a,(b)!=FALSE,__FILE__,__LINE__)
// ***************************************************************************
int NelPrinter (const char * fmt, va_list pArgs)
{
char info[1024];
int ret;
ret = vsnprintf(info, sizeof(info), fmt, pArgs);
nlinfo("%s", info);
return ret;
}
// ***************************************************************************
int NelTracer (const char * fmt, va_list pArgs)
{
char err[1024];
int ret;
ret = vsnprintf(err, sizeof(err), fmt, pArgs);
nlwarning ("%s", err);
return ret;
}
// ***************************************************************************
HText * TextNew (HTRequest * request,
HTParentAnchor * /* anchor */,
HTStream * /* output_stream */)
{
HText *text = new HText;
text->Parent = (CGroupHTML *) HTRequest_context(request);
return text;
}
// ***************************************************************************
BOOL TextDelete (HText * me)
{
delete me;
return YES;
}
// ***************************************************************************
void TextBuild (HText * me, HTextStatus status)
{
// Do the work in the class
if (status == HTEXT_BEGIN)
me->Parent->beginBuild ();
else if (status == HTEXT_END)
me->Parent->endBuild ();
}
// ***************************************************************************
void TextAdd (HText * me, const char * buf, int len)
{
// Do the work in the class
me->Parent->addText (buf, len);
}
// ***************************************************************************
void TextLink (HText * me,
int element_number,
int attribute_number,
HTChildAnchor * anchor,
const BOOL * present,
const char ** value)
{
// Do the work in the class
me->Parent->addLink (element_number, attribute_number, anchor, present, value);
}
// ***************************************************************************
// Read a width HTML parameter. "100" or "100%". Returns true if percent (0 ~ 1) else false
bool getPercentage (sint32 &width, float &percent, const char *str)
{
@ -383,307 +284,143 @@ namespace NLGUI
return dst;
}
// ***************************************************************************
void TextBeginElement (HText *me, int element_number, const BOOL *present, const char **value)
// set current HTTPCurrentDomain for cookie selection, return new domain
const std::string &setCurrentDomain(const std::string &uri)
{
// Do the work in the class
me->Parent->beginElement (element_number, present, value);
}
// ***************************************************************************
void TextEndElement (HText *me, int element_number)
{
// Do the work in the class
me->Parent->endElement (element_number);
}
// ***************************************************************************
void TextBeginUnparsedElement(HText *me, const char *buffer, int length)
{
me->Parent->beginUnparsedElement(buffer, length);
}
// ***************************************************************************
void TextEndUnparsedElement(HText *me, const char *buffer, int length)
{
me->Parent->endUnparsedElement(buffer, length);
}
// ***************************************************************************
void TextUnparsedEntity (HText * /* HText */, const char *buffer, int length)
{
std::string str(buffer, buffer+length);
nlinfo("Unparsed entity '%s'", str.c_str());
}
// ***************************************************************************
int requestTerminater (HTRequest * request, HTResponse * /* response */,
void * param, int /* status */)
{
/*
Yoyo and Boris: we had to make the request terminate by UID and not by pointer (param is an uid).
Because this method was called at mainLoop time, but for GroupHTML created/deleted at login time !!!
=> Memory Crash.
*/
// TestYoyo
//nlinfo("** requestTerminater(): uid%d", (uint32)param);
// the parameter is actually an uint32
if (param != 0)
{
CGroupHTML::TGroupHtmlByUIDMap::iterator it= CGroupHTML::_GroupHtmlByUID.find((uint32)(size_t)param);
if(it!=CGroupHTML::_GroupHtmlByUID.end())
{
// get the pointer. NB: the refptr should not be NULL
// since object removed from map when deleted
CGroupHTML *gh = it->second;
nlassert(gh);
// callback the browser
gh->requestTerminated(request);
}
}
return HT_OK;
}
// callback called when receiving a cookie
BOOL receiveCookie (HTRequest * /* request */, HTCookie * cookie, void * /* param */)
{
if (strcmp(HTCookie_name(cookie), "ryzomId") == 0)
{
// we receive the ryzom id cookie, store it
CurrentCookie = HTCookie_value(cookie);
}
if (uri.find("http://") == 0)
HTTPCurrentDomain = uri.substr(7, uri.find("/", 7) - 7);
else
{
// store the id/value cookie
HTTPCookies[HTTPCurrentDomain][HTCookie_name(cookie)] = HTCookie_value(cookie);
// nlwarning("get cookie for domain %s %s=%s", HTTPCurrentDomain.c_str(), HTCookie_name(cookie), HTCookie_value(cookie));
}
return YES;
}
// callback called to add cookie to a request before sending it to the server
HTAssocList *sendCookie (HTRequest * /* request */, void * /* param */)
{
HTAssocList * alist = 0;
if (!CurrentCookie.empty())
{
if(alist == 0) alist = HTAssocList_new(); /* Is deleted by the cookie module */
HTAssocList_addObject(alist, "ryzomId", CurrentCookie.c_str());
}
if(!HTTPCookies[HTTPCurrentDomain].empty())
{
if(alist == 0) alist = HTAssocList_new();
for(std::map<std::string, std::string>::iterator it = HTTPCookies[HTTPCurrentDomain].begin(); it != HTTPCookies[HTTPCurrentDomain].end(); it++)
{
HTAssocList_addObject(alist, it->first.c_str(), it->second.c_str());
// nlwarning("set cookie for domain '%s' %s=%s", HTTPCurrentDomain.c_str(), it->first.c_str(), it->second.c_str());
}
}
return alist;
}
// ***************************************************************************
HTAnchor * TextFindAnchor (HText * /* me */, int /* index */)
{
return NULL;
}
int HTMIME_location_custom (HTRequest * request, HTResponse * response, char * token, char * value)
{
char * location = HTStrip(value);
std::string finalLocation;
//nlinfo("redirect to '%s' '%s'", value, location);
// If not absolute URI (Error) then find the base
if (!HTURL_isAbsolute(location))
{
char * base = HTAnchor_address((HTAnchor *) HTRequest_anchor(request));
location = HTParse(location, base, PARSE_ALL);
//redirection = HTAnchor_findAddress(location);
finalLocation = location;
HT_FREE(base);
HT_FREE(location);
}
if (uri.find("https://") == 0)
HTTPCurrentDomain = uri.substr(8, uri.find("/", 8) - 8);
else
{
finalLocation = location;
}
//nlinfo("final location '%s'", finalLocation.c_str());
CGroupHTML *gh = (CGroupHTML *) HTRequest_context(request);
gh->setURL(finalLocation);
return HT_OK;
}
// ***************************************************************************
const std::string &setCurrentDomain(const std::string &url)
{
if(url.find("http://") == 0)
{
HTTPCurrentDomain = url.substr(7, url.find('/', 7)-7);
// nlinfo("****cd: %s", HTTPCurrentDomain.c_str());
}
if (uri.find("//") == 0)
HTTPCurrentDomain = uri.substr(2, uri.find("/", 2) - 2);
else
{
HTTPCurrentDomain.clear();
// nlinfo("****cd: clear the domain");
}
if (uri.find("/") != std::string::npos)
HTTPCurrentDomain = uri.substr(0, uri.find("/") - 1);
return HTTPCurrentDomain;
}
// update HTTPCookies list
static void receiveCookie(const char *nsformat, const std::string &domain, bool trusted)
{
// 0 1 2 3 4 5 6
// domain tailmatch path secure expires name value
// .app.ryzom.com TRUE / FALSE 1234 ryzomId AAAAAAAA|BBBBBBBB|CCCCCCCC
// #HttpOnly_app.ryzom.com FALSE / FALSE 0 PHPSESSID sess-id-value
std::string cookie(nsformat);
std::vector<std::string> chunks;
splitString(cookie, "\t", chunks);
if (chunks.size() < 6)
{
nlwarning("invalid cookie format '%s'", cookie.c_str());
}
if (chunks[0].find("#HttpOnly_") == 0)
{
chunks[0] = chunks[0].substr(10);
}
if (chunks[0] != domain && chunks[0] != std::string("." + domain))
{
// cookie is for different domain
//nlinfo("cookie for different domain ('%s')", nsformat);
return;
}
if (chunks[5] == "ryzomId")
{
// we receive this cookie because we are telling curl about this on send
// normally, this cookie should be set from client and not from headers
// it's used for R2 sessions
if (trusted && CurrentCookie != chunks[6])
{
CurrentCookie = chunks[6];
nlwarning("received ryzomId cookie '%s' from trusted domain '%s'", CurrentCookie.c_str(), domain.c_str());
}
}
else
{
uint32 expires = 0;
fromString(chunks[4], expires);
// expires == 0 is session cookie
if (expires > 0)
{
time_t now;
time(&now);
if (expires < now)
{
nlwarning("cookie expired, remove from list '%s'", nsformat);
HTTPCookies[domain].erase(chunks[5]);
return;
}
}
// this overrides cookies with same name, but different paths
//nlwarning("save domain '%s' cookie '%s' value '%s'", domain.c_str(), chunks[5].c_str(), nsformat);
HTTPCookies[domain][chunks[5]] = nsformat;
}
}
// update HTTPCookies with cookies received from curl
void receiveCookies (CURL *curl, const std::string &domain, bool trusted)
{
struct curl_slist *cookies = NULL;
if (curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies) == CURLE_OK)
{
struct curl_slist *nc;
nc = cookies;
while(nc)
{
//nlwarning("received cookie '%s'", nc->data);
receiveCookie(nc->data, domain, trusted);
nc = nc->next;
}
curl_slist_free_all(cookies);
}
}
// add all cookies for domain to curl handle
void sendCookies(CURL *curl, const std::string &domain, bool trusted)
{
if (domain.empty())
return;
if (trusted && !CurrentCookie.empty())
{
// domain tailmatch path secure expires name value
// .app.ryzom.com TRUE / FALSE 1234 ryzomId AAAAAAAA|BBBBBBBB|CCCCCCCC
// #HttpOnly_app.ryzom.com FALSE / FALSE 0 PHPSESSID sess-id-value
std::string cookie;
// set tailmatch
if (domain[0] != '.' && domain[0] != '#')
cookie = "." + domain + "\tTRUE";
else
cookie = domain + "\tFALSE";
cookie += "\t/\tFALSE\t0\tryzomId\t" + CurrentCookie;
curl_easy_setopt(curl, CURLOPT_COOKIELIST, cookie.c_str());
//nlwarning("domain '%s', cookie '%s'", domain.c_str(), cookie.c_str());
}
if(!HTTPCookies[domain].empty())
{
for(std::map<std::string, std::string>::iterator it = HTTPCookies[domain].begin(); it != HTTPCookies[domain].end(); it++)
{
curl_easy_setopt(curl, CURLOPT_COOKIELIST, it->second.c_str());
//nlwarning("set domain '%s' cookie '%s'", domain.c_str(), it->second.c_str());
}
}
}
void initLibWWW()
{
static bool initialized = false;
if (!initialized)
{
//HTProfile_newNoCacheClient("Ryzom", "1.1");
/* Need our own trace and print functions */
HTPrint_setCallback(NelPrinter);
HTTrace_setCallback(NelTracer);
/* Initiate libwww */
HTLib_setAppName( CGroupHTML::options.appName.c_str() );
HTLib_setAppVersion( CGroupHTML::options.appVersion.c_str() );
/* Set up TCP as transport */
VerifyLibWWW("HTTransport_add", HTTransport_add("buffered_tcp", HT_TP_SINGLE, HTReader_new, HTBufferWriter_new));
VerifyLibWWW("HTTransport_add", HTTransport_add("local", HT_TP_SINGLE, HTNeLReader_new, HTWriter_new));
// VerifyLibWWW("HTTransport_add", HTTransport_add("local", HT_TP_SINGLE, HTANSIReader_new, HTWriter_new));
// VerifyLibWWW("HTTransport_add", HTTransport_add("local", HT_TP_SINGLE, HTReader_new, HTWriter_new));
/* Set up HTTP as protocol */
VerifyLibWWW("HTProtocol_add", HTProtocol_add("http", "buffered_tcp", 80, NO, HTLoadHTTP, NULL));
VerifyLibWWW("HTProtocol_add", HTProtocol_add("file", "local", 0, YES, HTLoadNeLFile, NULL));
//VerifyLibWWW("HTProtocol_add", HTProtocol_add("file", "local", 0, YES, HTLoadFile, NULL));
// HTProtocol_add("cache", "local", 0, NO, HTLoadCache, NULL);
HTBind_init();
// HTCacheInit(NULL, 20);
/* Setup up transfer coders */
HTFormat_addTransferCoding((char*)"chunked", HTChunkedEncoder, HTChunkedDecoder, 1.0);
/* Setup MIME stream converters */
HTFormat_addConversion("message/rfc822", "*/*", HTMIMEConvert, 1.0, 0.0, 0.0);
HTFormat_addConversion("message/x-rfc822-foot", "*/*", HTMIMEFooter, 1.0, 0.0, 0.0);
HTFormat_addConversion("message/x-rfc822-head", "*/*", HTMIMEHeader, 1.0, 0.0, 0.0);
HTFormat_addConversion("message/x-rfc822-cont", "*/*", HTMIMEContinue, 1.0, 0.0, 0.0);
HTFormat_addConversion("message/x-rfc822-partial","*/*", HTMIMEPartial, 1.0, 0.0, 0.0);
HTFormat_addConversion("multipart/*", "*/*", HTBoundary, 1.0, 0.0, 0.0);
/* Setup HTTP protocol stream */
HTFormat_addConversion("text/x-http", "*/*", HTTPStatus_new, 1.0, 0.0, 0.0);
/* Setup the HTML parser */
HTFormat_addConversion("text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0);
/* Setup black hole stream */
HTFormat_addConversion("*/*", "www/debug", HTBlackHoleConverter, 1.0, 0.0, 0.0);
HTFormat_addConversion("*/*", "www/present", HTBlackHoleConverter, 0.3, 0.0, 0.0);
/* Set max number of sockets we want open simultaneously */
HTNet_setMaxSocket(32);
/* Register our HTML parser callbacks */
VerifyLibWWW("HText_registerCDCallback", HText_registerCDCallback (TextNew, TextDelete));
VerifyLibWWW("HText_registerBuildCallback", HText_registerBuildCallback (TextBuild));
VerifyLibWWW("HText_registerTextCallback", HText_registerTextCallback(TextAdd));
VerifyLibWWW("HText_registerLinkCallback", HText_registerLinkCallback (TextLink));
VerifyLibWWW("HText_registerElementCallback", HText_registerElementCallback (TextBeginElement, TextEndElement));
VerifyLibWWW("HText_registerUnparsedElementCallback", HText_registerUnparsedElementCallback(TextBeginUnparsedElement, TextEndUnparsedElement));
VerifyLibWWW("HText_registerUnparsedEntityCallback ", HText_registerUnparsedEntityCallback (TextUnparsedEntity ));
/* Register the default set of MIME header parsers */
struct {
const char * string;
HTParserCallback * pHandler;
} fixedHandlers[] = {
{"accept", &HTMIME_accept},
{"accept-charset", &HTMIME_acceptCharset},
{"accept-encoding", &HTMIME_acceptEncoding},
{"accept-language", &HTMIME_acceptLanguage},
{"accept-ranges", &HTMIME_acceptRanges},
{"authorization", NULL},
{"cache-control", &HTMIME_cacheControl},
{"connection", &HTMIME_connection},
{"content-encoding", &HTMIME_contentEncoding},
{"content-length", &HTMIME_contentLength},
{"content-range", &HTMIME_contentRange},
{"content-transfer-encoding", &HTMIME_contentTransferEncoding},
{"content-type", &HTMIME_contentType},
{"digest-MessageDigest", &HTMIME_messageDigest},
{"keep-alive", &HTMIME_keepAlive},
{"link", &HTMIME_link},
{"location", &HTMIME_location_custom},
{"max-forwards", &HTMIME_maxForwards},
{"mime-version", NULL},
{"pragma", &HTMIME_pragma},
{"protocol", &HTMIME_protocol},
{"protocol-info", &HTMIME_protocolInfo},
{"protocol-request", &HTMIME_protocolRequest},
{"proxy-authenticate", &HTMIME_authenticate},
{"proxy-authorization", &HTMIME_proxyAuthorization},
{"public", &HTMIME_public},
{"range", &HTMIME_range},
{"referer", &HTMIME_referer},
{"retry-after", &HTMIME_retryAfter},
{"server", &HTMIME_server},
{"trailer", &HTMIME_trailer},
{"transfer-encoding", &HTMIME_transferEncoding},
{"upgrade", &HTMIME_upgrade},
{"user-agent", &HTMIME_userAgent},
{"vary", &HTMIME_vary},
{"via", &HTMIME_via},
{"warning", &HTMIME_warning},
{"www-authenticate", &HTMIME_authenticate},
{"authentication-info", &HTMIME_authenticationInfo},
{"proxy-authentication-info", &HTMIME_proxyAuthenticationInfo}
};
for (uint i = 0; i < sizeof(fixedHandlers)/sizeof(fixedHandlers[0]); i++)
HTHeader_addParser(fixedHandlers[i].string, NO, fixedHandlers[i].pHandler);
/* Set up default event loop */
HTEventInit();
/* Add our own request terminate handler */
HTNet_addAfter(requestTerminater, NULL, 0, HT_ALL, HT_FILTER_LAST);
/* Setup cookies */
HTCookie_init();
HTCookie_setCookieMode(HTCookieMode(HT_COOKIE_ACCEPT | HT_COOKIE_SEND));
HTCookie_setCallbacks(receiveCookie, NULL, sendCookie, NULL);
/* Start the first request */
/* Go into the event loop... */
// HTEventList_newLoop();
// App_delete(app);
HTBind_add("htm", "text/html", NULL, "8bit", NULL, 1.0); /* HTML */
HTBind_add("html", "text/html", NULL, "8bit", NULL, 1.0); /* HTML */
HTBind_caseSensitive(NO);
// Change the HTML DTD
SGML_dtd *HTML_DTD = HTML_dtd ();
@ -710,16 +447,6 @@ namespace NLGUI
HTML_DTD->tags[HTML_SPAN].attributes = span_attr;
HTML_DTD->tags[HTML_SPAN].number_of_attributes = sizeof(span_attr) / sizeof(HTAttr) - 1;
// Set a request timeout
// HTHost_setEventTimeout (30000);
// HTHost_setActiveTimeout (30000);
// HTHost_setPersistTimeout (30000);
// libwww default value is 2000ms for POST/PUT requests on the first and 3000 on the second, smallest allowed value is 21ms
// too small values may create timeout problems but we want it low as possible
// second value is the timeout for the second try to we set that high
HTTP_setBodyWriteDelay(250, 3000);
// Initialized
initialized = true;
}

View file

@ -1,633 +0,0 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdpch.h"
#include <nel/misc/file.h>
extern "C"
{
/* Library Includes */
#include "wwwsys.h"
#include "WWWUtil.h"
#include "WWWCore.h"
#include "WWWDir.h"
#include "WWWTrans.h"
#include "HTReqMan.h"
#include "HTBind.h"
#include "HTMulti.h"
#include "HTNetMan.h"
#include "HTChannl.h"
#include "nel/gui/libwww_nel_stream.h" /* Implemented here */
}
using namespace std;
using namespace NLMISC;
extern "C"
{
/* Final states have negative value */
typedef enum _FileState
{
FS_RETRY = -4,
FS_ERROR = -3,
FS_NO_DATA = -2,
FS_GOT_DATA = -1,
FS_BEGIN = 0,
FS_PENDING,
FS_DO_CN,
FS_NEED_OPEN_FILE,
FS_NEED_BODY,
FS_PARSE_DIR,
FS_TRY_FTP
} FileState;
/* This is the context structure for the this module */
typedef struct _file_info
{
FileState state; /* Current state of the connection */
char * local; /* Local representation of file name */
struct stat stat_info; /* Contains actual file chosen */
HTNet * net;
HTTimer * timer;
} file_info;
struct _HTStream
{
const HTStreamClass * isa;
};
struct _HTInputStream
{
const HTInputStreamClass * isa;
HTChannel * ch;
HTHost * host;
char * write; /* Last byte written */
char * read; /* Last byte read */
int b_read;
char data [INPUT_BUFFER_SIZE]; /* buffer */
};
PRIVATE int FileCleanup (HTRequest *req, int status)
{
HTNet * net = HTRequest_net(req);
file_info * file = (file_info *) HTNet_context(net);
HTStream * input = HTRequest_inputStream(req);
/* Free stream with data TO Local file system */
if (input)
{
if (status == HT_INTERRUPTED)
(*input->isa->abort)(input, NULL);
else
(*input->isa->_free)(input);
HTRequest_setInputStream(req, NULL);
}
/*
** Remove if we have registered a timer function as a callback
*/
if (file->timer)
{
HTTimer_delete(file->timer);
file->timer = NULL;
}
if (file)
{
HT_FREE(file->local);
HT_FREE(file);
}
HTNet_delete(net, status);
return YES;
}
PRIVATE int FileEvent (SOCKET soc, void * pVoid, HTEventType type);
PUBLIC int HTLoadNeLFile (SOCKET soc, HTRequest * request)
{
file_info *file; /* Specific access information */
HTNet * net = HTRequest_net(request);
HTParentAnchor * anchor = HTRequest_anchor(request);
HTTRACE(PROT_TRACE, "HTLoadFile.. Looking for `%s\'\n" _ HTAnchor_physical(anchor));
if ((file = (file_info *) HT_CALLOC(1, sizeof(file_info))) == NULL) HT_OUTOFMEM("HTLoadFILE");
file->state = FS_BEGIN;
file->net = net;
HTNet_setContext(net, file);
HTNet_setEventCallback(net, FileEvent);
HTNet_setEventParam(net, file); /* callbacks get http* */
return FileEvent(soc, file, HTEvent_BEGIN); /* get it started - ops is ignored */
}
PRIVATE int ReturnEvent (HTTimer * timer, void * param, HTEventType /* type */)
{
file_info * file = (file_info *) param;
if (timer != file->timer) HTDEBUGBREAK("File timer %p not in sync\n" _ timer);
HTTRACE(PROT_TRACE, "HTLoadFile.. Continuing %p with timer %p\n" _ file _ timer);
/*
** Delete the timer
*/
HTTimer_delete(file->timer);
file->timer = NULL;
/*
** Now call the event again
*/
return FileEvent(INVSOC, file, HTEvent_READ);
}
PUBLIC int HTNeLFileOpen (HTNet * net, char * local, HTLocalMode /* mode */)
{
HTRequest * request = HTNet_request(net);
HTHost * host = HTNet_host(net);
CIFile* fp = new CIFile;
if (!fp->open (local))
{
HTRequest_addSystemError(request, ERR_FATAL, errno, NO, "CIFile::open");
return HT_ERROR;
}
HTHost_setChannel(host, HTChannel_new(INVSOC, (FILE*)fp, YES));
HTHost_getInput(host, HTNet_transport(net), NULL, 0);
HTHost_getOutput(host, HTNet_transport(net), NULL, 0);
return HT_OK;
}
PRIVATE int FileEvent (SOCKET /* soc */, void * pVoid, HTEventType type)
{
file_info *file = (file_info *)pVoid; /* Specific access information */
int status = HT_ERROR;
HTNet * net = file->net;
HTRequest * request = HTNet_request(net);
HTParentAnchor * anchor = HTRequest_anchor(request);
if (type == HTEvent_CLOSE)
{
/* Interrupted */
HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED,
NULL, 0, "HTLoadFile");
FileCleanup(request, HT_INTERRUPTED);
return HT_OK;
}
/* Now jump into the machine. We know the state from the previous run */
for(;;)
{
switch (file->state)
{
case FS_BEGIN:
/* We only support safe (GET, HEAD, etc) methods for the moment */
if (!HTMethod_isSafe(HTRequest_method(request))) {
HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_ALLOWED,
NULL, 0, "HTLoadFile");
file->state = FS_ERROR;
break;
}
/* Check whether we have access to local disk at all */
if (HTLib_secure())
{
HTTRACE(PROT_TRACE, "LoadFile.... No access to local file system\n");
file->state = FS_TRY_FTP;
break;
}
/*file->local = HTWWWToLocal(HTAnchor_physical(anchor), "",
HTRequest_userProfile(request));*/
{
string tmp = HTAnchor_physical(anchor);
if (strlwr(tmp).find("file:/") == 0)
{
tmp = tmp.substr(6, tmp.size()-6);
}
StrAllocCopy(file->local, tmp.c_str());
}
if (!file->local)
{
file->state = FS_TRY_FTP;
break;
}
/* Create a new host object and link it to the net object */
{
HTHost * host = NULL;
if ((host = HTHost_new("localhost", 0)) == NULL) return HT_ERROR;
HTNet_setHost(net, host);
if (HTHost_addNet(host, net) == HT_PENDING)
{
HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n");
/* move to the hack state */
file->state = FS_PENDING;
return HT_OK;
}
}
file->state = FS_DO_CN;
break;
case FS_PENDING:
{
HTHost * host = NULL;
if ((host = HTHost_new((char*)"localhost", 0)) == NULL) return HT_ERROR;
HTNet_setHost(net, host);
if (HTHost_addNet(host, net) == HT_PENDING)
{
HTTRACE(PROT_TRACE, "HTLoadFile.. Pending...\n");
file->state = FS_PENDING;
return HT_OK;
}
}
file->state = FS_DO_CN;
break;
case FS_DO_CN:
if (HTRequest_negotiation(request) &&
HTMethod_isSafe(HTRequest_method(request)))
{
HTAnchor_setPhysical(anchor, file->local);
HTTRACE(PROT_TRACE, "Load File... Found `%s\'\n" _ file->local);
}
else
{
if (HT_STAT(file->local, &file->stat_info) == -1)
{
HTTRACE(PROT_TRACE, "Load File... Not found `%s\'\n" _ file->local);
HTRequest_addError(request, ERR_FATAL, NO, HTERR_NOT_FOUND, NULL, 0, "HTLoadFile");
file->state = FS_ERROR;
break;
}
}
if (((file->stat_info.st_mode) & S_IFMT) == S_IFDIR)
{
if (HTRequest_method(request) == METHOD_GET)
{
file->state = FS_PARSE_DIR;
}
else
{
HTRequest_addError(request, ERR_INFO, NO, HTERR_NO_CONTENT, NULL, 0, "HTLoadFile");
file->state = FS_NO_DATA;
}
break;
}
{
BOOL editable = FALSE;
HTBind_getAnchorBindings(anchor);
if (editable) HTAnchor_appendAllow(anchor, METHOD_PUT);
/* Set the file size */
CIFile nelFile;
if (nelFile.open (file->local))
{
file->stat_info.st_size = nelFile.getFileSize();
}
nelFile.close();
if (file->stat_info.st_size)
HTAnchor_setLength(anchor, file->stat_info.st_size);
/* Set the file last modified time stamp */
if (file->stat_info.st_mtime > 0)
HTAnchor_setLastModified(anchor, file->stat_info.st_mtime);
/* Check to see if we can edit it */
if (!editable && !file->stat_info.st_size)
{
HTRequest_addError(request, ERR_INFO, NO, HTERR_NO_CONTENT, NULL, 0, "HTLoadFile");
file->state = FS_NO_DATA;
}
else
{
file->state = (HTRequest_method(request)==METHOD_GET) ? FS_NEED_OPEN_FILE : FS_GOT_DATA;
}
}
break;
case FS_NEED_OPEN_FILE:
status = HTNeLFileOpen(net, file->local, HT_FB_RDONLY);
if (status == HT_OK)
{
{
HTStream * rstream = HTStreamStack(HTAnchor_format(anchor),
HTRequest_outputFormat(request),
HTRequest_outputStream(request),
request, YES);
HTNet_setReadStream(net, rstream);
HTRequest_setOutputConnected(request, YES);
}
{
HTOutputStream * output = HTNet_getOutput(net, NULL, 0);
HTRequest_setInputStream(request, (HTStream *) output);
}
if (HTRequest_isSource(request) && !HTRequest_destinationsReady(request)) return HT_OK;
HTRequest_addError(request, ERR_INFO, NO, HTERR_OK, NULL, 0, "HTLoadFile");
file->state = FS_NEED_BODY;
if (HTEvent_isCallbacksRegistered())
{
if (!HTRequest_preemptive(request))
{
if (!HTNet_preemptive(net))
{
HTTRACE(PROT_TRACE, "HTLoadFile.. Returning\n");
HTHost_register(HTNet_host(net), net, HTEvent_READ);
}
else if (!file->timer)
{
HTTRACE(PROT_TRACE, "HTLoadFile.. Returning\n");
file->timer = HTTimer_new(NULL, ReturnEvent, file, 1, YES, NO);
}
return HT_OK;
}
}
}
else if (status == HT_WOULD_BLOCK || status == HT_PENDING)
{
return HT_OK;
}
else
{
HTRequest_addError(request, ERR_INFO, NO, HTERR_INTERNAL, NULL, 0, "HTLoadFile");
file->state = FS_ERROR; /* Error or interrupt */
}
break;
case FS_NEED_BODY:
status = HTHost_read(HTNet_host(net), net);
if (status == HT_WOULD_BLOCK)
{
return HT_OK;
}
else if (status == HT_LOADED || status == HT_CLOSED)
{
file->state = FS_GOT_DATA;
}
else
{
HTRequest_addError(request, ERR_INFO, NO, HTERR_FORBIDDEN, NULL, 0, "HTLoadFile");
file->state = FS_ERROR;
}
break;
case FS_TRY_FTP:
{
char *url = HTAnchor_physical(anchor);
HTAnchor *anchor;
char *newname = NULL;
StrAllocCopy(newname, "ftp:");
if (!strncmp(url, "file:", 5))
{
StrAllocCat(newname, url+5);
}
else
{
StrAllocCat(newname, url);
}
anchor = HTAnchor_findAddress(newname);
HTRequest_setAnchor(request, anchor);
HT_FREE(newname);
FileCleanup(request, HT_IGNORE);
return HTLoad(request, YES);
}
break;
case FS_GOT_DATA:
FileCleanup(request, HT_LOADED);
return HT_OK;
break;
case FS_NO_DATA:
FileCleanup(request, HT_NO_DATA);
return HT_OK;
break;
case FS_RETRY:
FileCleanup(request, HT_RETRY);
return HT_OK;
break;
case FS_ERROR:
FileCleanup(request, HT_ERROR);
return HT_OK;
break;
default:
break;
}
} /* End of while(1) */
}
// *************************************************************************
// HTNeLReader
// *************************************************************************
size_t nel_fread (void *buffer, uint size, FILE *fp)
{
CIFile *file = (CIFile *)fp;
int toRead = std::min ((int)(file->getFileSize () - file->getPos ()), (int)size);
file->serialBuffer((uint8*)buffer, toRead);
return toRead;
}
PRIVATE int HTNeLReader_read (HTInputStream * me)
{
FILE * fp = HTChannel_file(me->ch);
HTNet * net = HTHost_getReadNet(me->host);
int status;
/* Read the file desriptor */
while (fp)
{
if ((me->b_read = (int)nel_fread(me->data, FILE_BUFFER_SIZE, fp)) == 0)
{
HTAlertCallback *cbf = HTAlert_find(HT_PROG_DONE);
// HTTRACE(PROT_TRACE, "ANSI read... Finished loading file %p\n" _ fp);
if (cbf)
(*cbf)(net->request, HT_PROG_DONE, HT_MSG_NULL,NULL,NULL,NULL);
return HT_CLOSED;
}
/* Remember how much we have read from the input socket */
HTTRACEDATA(me->data, me->b_read, "HTANSIReader_read me->data:");
me->write = me->data;
me->read = me->data + me->b_read;
{
HTAlertCallback * cbf = HTAlert_find(HT_PROG_READ);
HTNet_addBytesRead(net, me->b_read);
if (cbf)
{
int tr = HTNet_bytesRead(net);
(*cbf)(net->request, HT_PROG_READ, HT_MSG_NULL, NULL, &tr, NULL);
}
}
if (!net->readStream)
return HT_ERROR;
/* Now push the data down the stream */
if ((status = (*net->readStream->isa->put_block)
(net->readStream, me->data, me->b_read)) != HT_OK)
{
if (status == HT_WOULD_BLOCK)
{
HTTRACE(PROT_TRACE, "ANSI read... Target WOULD BLOCK\n");
return HT_WOULD_BLOCK;
}
else if (status == HT_PAUSE)
{
HTTRACE(PROT_TRACE, "ANSI read... Target PAUSED\n");
return HT_PAUSE;
}
else if (status > 0)
{
/* Stream specific return code */
HTTRACE(PROT_TRACE, "ANSI read... Target returns %d\n" _ status);
me->write = me->data + me->b_read;
return status;
}
else
{
/* We have a real error */
HTTRACE(PROT_TRACE, "ANSI read... Target ERROR\n");
return status;
}
}
me->write = me->data + me->b_read;
}
HTTRACE(PROT_TRACE, "ANSI read... File descriptor is NULL...\n");
return HT_ERROR;
}
PRIVATE int HTNeLReader_close (HTInputStream * me)
{
CIFile *file = (CIFile *)HTChannel_file(me->ch);
if (file)
{
file->close();
}
int status = HT_OK;
HTNet * net = HTHost_getReadNet(me->host);
if (net && net->readStream)
{
if ((status = (*net->readStream->isa->_free)(net->readStream))==HT_WOULD_BLOCK) return HT_WOULD_BLOCK;
net->readStream = NULL;
}
HTTRACE(STREAM_TRACE, "Socket read. FREEING....\n");
HT_FREE(me);
return status;
}
PUBLIC int HTNeLReader_consumed (HTInputStream * me, size_t bytes)
{
me->write += bytes;
me->b_read -= (int)bytes;
HTHost_setRemainingRead(me->host, me->b_read);
return HT_OK;
}
PRIVATE int HTNeLReader_flush (HTInputStream * me)
{
HTNet * net = HTHost_getReadNet(me->host);
return net && net->readStream ? (*net->readStream->isa->flush)(net->readStream) : HT_OK;
}
PRIVATE int HTNeLReader_free (HTInputStream * me)
{
CIFile *file = (CIFile *)HTChannel_file(me->ch);
if (file)
{
delete file;
HTChannel_setFile (me->ch, NULL);
}
HTNet * net = HTHost_getReadNet(me->host);
if (net && net->readStream)
{
int status = (*net->readStream->isa->_free)(net->readStream);
if (status == HT_OK) net->readStream = NULL;
return status;
}
return HT_OK;
}
PRIVATE int HTNeLReader_abort (HTInputStream * me, HTList * /* e */)
{
HTNet * net = HTHost_getReadNet(me->host);
if (net && net->readStream)
{
int status = (*net->readStream->isa->abort)(net->readStream, NULL);
if (status != HT_IGNORE) net->readStream = NULL;
}
return HT_ERROR;
}
PRIVATE const HTInputStreamClass HTNeLReader =
{
"SocketReader",
HTNeLReader_flush,
HTNeLReader_free,
HTNeLReader_abort,
HTNeLReader_read,
HTNeLReader_close,
HTNeLReader_consumed
};
PUBLIC HTInputStream * HTNeLReader_new (HTHost * host, HTChannel * ch, void * /* param */, int /* mode */)
{
if (host && ch)
{
HTInputStream * me = HTChannel_input(ch);
if (me == NULL)
{
if ((me=(HTInputStream *) HT_CALLOC(1, sizeof(HTInputStream))) == NULL) HT_OUTOFMEM("HTNeLReader_new");
me->isa = &HTNeLReader;
me->ch = ch;
me->host = host;
HTTRACE(STREAM_TRACE, "Reader...... Created reader stream %p\n" _ me);
}
return me;
}
return NULL;
}
//PUBLIC unsigned int WWW_TraceFlag = 0;
} // extern "C"

View file

@ -0,0 +1,797 @@
/**
libwww Copyright Notice
[This notice should be placed within redistributed or derivative software
code when appropriate. This particular formulation of W3C's notice for
inclusion in libwww code became active on August 14 1998.]
LIBWWW COPYRIGHT NOTICE
libwww: W3C's implementation of HTTP can be found at:
http://www.w3.org/Library/
Copyright ¨ 1995-2002 World Wide Web Consortium,
(Massachusetts Institute of Technology, Institut
National de Recherche en Informatique et en
Automatique, Keio University). All Rights Reserved.
This program is distributed under the W3C's
Intellectual Property License. This program is
distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See W3C License
http://www.w3.org/Consortium/Legal/ for more details.
Copyright ¨ 1995 CERN. "This product includes computer
software created and made available by CERN. This
acknowledgment shall be mentioned in full in any
product which includes the CERN computer software
included herein or parts thereof."
****************************************************************************/
#include "nel/gui/libwww_types.h"
namespace NLGUI
{
/*
** ATTRIBUTE DEFINITION MACROS (see HTMLPDTD.h)
*/
/*
* redefine the macros, so that the "stringized" attribute name
* is generated
*/
#undef HTML_ATTR
#define HTML_ATTR(t,a) { (char *) #a }
#undef HTML_ATTRIBUTES
#define HTML_ATTRIBUTES(t) { 0 }
/*
** ATTRIBUTE LISTS
*/
static HTAttr no_attr[1] = {
{ 0 }
};
static HTAttr body_attr[HTML_BODY_ATTRIBUTES+1] = { /* to catch images */
HTML_ATTR(BODY,ALINK),
HTML_ATTR(BODY,BACKGROUND),
HTML_ATTR(BODY,BGCOLOR),
HTML_ATTR(BODY,CLASS),
HTML_ATTR(BODY,DIR),
HTML_ATTR(BODY,ID),
HTML_ATTR(BODY,LANG),
HTML_ATTR(BODY,LINK),
HTML_ATTR(BODY,STYLE),
HTML_ATTR(BODY,TEXT),
HTML_ATTR(BODY,TITLE),
HTML_ATTR(BODY,VLINK),
HTML_ATTRIBUTES(BODY)
};
static HTAttr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */
HTML_ATTR(FRAME,CLASS),
HTML_ATTR(FRAME,FRAMEBORDER),
HTML_ATTR(FRAME,ID),
HTML_ATTR(FRAME,NAME),
HTML_ATTR(FRAME,MARGINHEIGHT),
HTML_ATTR(FRAME,MARGINWIDTH),
HTML_ATTR(FRAME,NORESIZE),
HTML_ATTR(FRAME,LONGDESC),
HTML_ATTR(FRAME,SCROLLING),
HTML_ATTR(FRAME,SRC),
HTML_ATTR(FRAME,STYLE),
HTML_ATTR(FRAME,TARGET),
HTML_ATTR(FRAME,TITLE),
HTML_ATTRIBUTES(FRAME)
};
static HTAttr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */
HTML_ATTR(FRAMESET,CLASS),
HTML_ATTR(FRAMESET,COLS),
HTML_ATTR(FRAMESET,ID),
HTML_ATTR(FRAMESET,ROWS),
HTML_ATTR(FRAMESET,STYLE),
HTML_ATTR(FRAMESET,TITLE),
HTML_ATTRIBUTES(FRAMESET)
};
static HTAttr a_attr[HTML_A_ATTRIBUTES+1] = { /* Anchor attributes */
HTML_ATTR(A,ACCESSKEY),
HTML_ATTR(A,CHARSET),
HTML_ATTR(A,CLASS),
HTML_ATTR(A,COORDS),
HTML_ATTR(A,DIR),
HTML_ATTR(A,HREF),
HTML_ATTR(A,HREFLANG),
HTML_ATTR(A,ID),
HTML_ATTR(A,NAME),
HTML_ATTR(A,REL),
HTML_ATTR(A,REV),
HTML_ATTR(A,SHAPE),
HTML_ATTR(A,STYLE),
HTML_ATTR(A,TABINDEX),
HTML_ATTR(A,TARGET),
HTML_ATTR(A,TYPE),
HTML_ATTR(A,TITLE),
HTML_ATTRIBUTES(A)
};
static HTAttr applet_attr[HTML_APPLET_ATTRIBUTES+1] = {
HTML_ATTR(APPLET,ALIGN),
HTML_ATTR(APPLET,ALT),
HTML_ATTR(APPLET,ARCHIVE),
HTML_ATTR(APPLET,CLASS),
HTML_ATTR(APPLET,CODE),
HTML_ATTR(APPLET,CODEBASE),
HTML_ATTR(APPLET,HEIGHT),
HTML_ATTR(APPLET,HSPACE),
HTML_ATTR(APPLET,ID),
HTML_ATTR(APPLET,NAME),
HTML_ATTR(APPLET,OBJECT),
HTML_ATTR(APPLET,STYLE),
HTML_ATTR(APPLET,TITLE),
HTML_ATTR(APPLET,VSPACE),
HTML_ATTR(APPLET,WIDTH),
HTML_ATTRIBUTES(APPLET)
};
static HTAttr area_attr[HTML_AREA_ATTRIBUTES+1] = { /* Area attributes */
HTML_ATTR(AREA,ACCESSKEY),
HTML_ATTR(AREA,ALT),
HTML_ATTR(AREA,CLASS),
HTML_ATTR(AREA,COORDS),
HTML_ATTR(AREA,DIR),
HTML_ATTR(AREA,HREF),
HTML_ATTR(AREA,ID),
HTML_ATTR(AREA,NAME),
HTML_ATTR(AREA,NOHREF),
HTML_ATTR(AREA,LANG),
HTML_ATTR(AREA,SHAPE),
HTML_ATTR(AREA,STYLE),
HTML_ATTR(AREA,TABINDEX),
HTML_ATTR(AREA,TARGET),
HTML_ATTR(AREA,TITLE),
HTML_ATTRIBUTES(AREA)
};
static HTAttr base_attr[HTML_BASE_ATTRIBUTES+1] = { /* BASE attributes */
HTML_ATTR(BASE,HREF),
HTML_ATTR(BASE,TARGET),
HTML_ATTRIBUTES(BASE)
};
static HTAttr bdo_attr[HTML_BDO_ATTRIBUTES+1] = {
HTML_ATTR(BDO,CLASS),
HTML_ATTR(BDO,DIR),
HTML_ATTR(BDO,ID),
HTML_ATTR(BDO,LANG),
HTML_ATTR(BDO,STYLE),
HTML_ATTR(BDO,TITLE),
HTML_ATTRIBUTES(BDO)
};
static HTAttr bq_attr[HTML_BQ_ATTRIBUTES+1] = {
HTML_ATTR(BQ,CITE),
HTML_ATTR(BQ,CLASS),
HTML_ATTR(BQ,DIR),
HTML_ATTR(BQ,ID),
HTML_ATTR(BQ,LANG),
HTML_ATTR(BQ,STYLE),
HTML_ATTR(BQ,TITLE),
HTML_ATTRIBUTES(BQ)
};
static HTAttr br_attr[HTML_BR_ATTRIBUTES+1] = {
HTML_ATTR(BR,CLASS),
HTML_ATTR(BR,CLEAR),
HTML_ATTR(BR,ID),
HTML_ATTR(BR,STYLE),
HTML_ATTR(BR,TITLE),
HTML_ATTRIBUTES(BR)
};
static HTAttr button_attr[HTML_BUTTON_ATTRIBUTES+1] = {
HTML_ATTR(BUTTON,ACCESSKEY),
HTML_ATTR(BUTTON,CLASS),
HTML_ATTR(BUTTON,DIR),
HTML_ATTR(BUTTON,DISABLED),
HTML_ATTR(BUTTON,ID),
HTML_ATTR(BUTTON,LANG),
HTML_ATTR(BUTTON,NAME),
HTML_ATTR(BUTTON,STYLE),
HTML_ATTR(BUTTON,TABINDEX),
HTML_ATTR(BUTTON,TITLE),
HTML_ATTR(BUTTON,TYPE),
HTML_ATTR(BUTTON,VALUE),
HTML_ATTRIBUTES(BUTTON),
};
static HTAttr col_attr[HTML_COL_ATTRIBUTES+1] = {
HTML_ATTR(COL,CLASS),
HTML_ATTR(COL,DIR),
HTML_ATTR(COL,ID),
HTML_ATTR(COL,LANG),
HTML_ATTR(COL,SPAN),
HTML_ATTR(COL,STYLE),
HTML_ATTR(COL,TITLE),
HTML_ATTR(COL,WIDTH),
HTML_ATTRIBUTES(COL)
};
static HTAttr changes_attr[HTML_CHANGES_ATTRIBUTES+1] = {
HTML_ATTR(CHANGES,CITE),
HTML_ATTR(CHANGES,CLASS),
HTML_ATTR(CHANGES,DATETIME),
HTML_ATTR(CHANGES,DIR),
HTML_ATTR(CHANGES,ID),
HTML_ATTR(CHANGES,LANG),
HTML_ATTR(CHANGES,STYLE),
HTML_ATTR(CHANGES,TITLE),
HTML_ATTRIBUTES(CHANGES)
};
static HTAttr font_attr[HTML_FONT_ATTRIBUTES+1] = {
HTML_ATTR(FONT,CLASS),
HTML_ATTR(FONT,COLOR),
HTML_ATTR(FONT,DIR),
HTML_ATTR(FONT,FACE),
HTML_ATTR(FONT,ID),
HTML_ATTR(FONT,LANG),
HTML_ATTR(FONT,SIZE),
HTML_ATTR(FONT,STYLE),
HTML_ATTR(FONT,TITLE),
HTML_ATTRIBUTES(FONT)
};
static HTAttr form_attr[HTML_FORM_ATTRIBUTES+1] = {
HTML_ATTR(FORM,ACCEPT),
{ (char *) "ACCEPT-CHARSET" }, /* HTML_ATTR(FORM,ACCEPT_CHARSET) */
HTML_ATTR(FORM,ACTION),
HTML_ATTR(FORM,CLASS),
HTML_ATTR(FORM,DIR),
HTML_ATTR(FORM,ENCTYPE),
HTML_ATTR(FORM,ID),
HTML_ATTR(FORM,LANG),
HTML_ATTR(FORM,METHOD),
HTML_ATTR(FORM,STYLE),
HTML_ATTR(FORM,TARGET),
HTML_ATTR(FORM,TITLE),
HTML_ATTRIBUTES(FORM)
};
static HTAttr gen_attr[HTML_GEN_ATTRIBUTES+1] = { /* General, for many things */
HTML_ATTR(GEN,CLASS),
HTML_ATTR(GEN,DIR),
HTML_ATTR(GEN,ID),
HTML_ATTR(GEN,LANG),
HTML_ATTR(GEN,STYLE),
HTML_ATTR(GEN,TITLE),
HTML_ATTRIBUTES(GEN)
};
static HTAttr block_attr[HTML_BLOCK_ATTRIBUTES+1] = { /* DIV, SPAN, H1-H6 */
HTML_ATTR(BLOCK,ALIGN),
HTML_ATTR(BLOCK,CLASS),
HTML_ATTR(BLOCK,DIR),
HTML_ATTR(BLOCK,ID),
HTML_ATTR(BLOCK,LANG),
HTML_ATTR(BLOCK,STYLE),
HTML_ATTR(BLOCK,TITLE),
HTML_ATTRIBUTES(BLOCK)
};
static HTAttr head_attr[HTML_HEAD_ATTRIBUTES+1] = {
HTML_ATTR(HEAD,DIR),
HTML_ATTR(HEAD,LANG),
HTML_ATTR(HEAD,PROFILE),
HTML_ATTRIBUTES(HEAD)
};
static HTAttr hr_attr[HTML_HR_ATTRIBUTES+1] = {
HTML_ATTR(HR,ALIGN),
HTML_ATTR(HR,CLASS),
HTML_ATTR(HR,DIR),
HTML_ATTR(HR,ID),
HTML_ATTR(HR,LANG),
HTML_ATTR(HR,NOSHADE),
HTML_ATTR(HR,SIZE),
HTML_ATTR(HR,STYLE),
HTML_ATTR(HR,TITLE),
HTML_ATTR(HR,WIDTH),
HTML_ATTRIBUTES(HR)
};
static HTAttr html_attr[HTML_HTML_ATTRIBUTES+1] = {
HTML_ATTR(HTML,DIR),
HTML_ATTR(HTML,LANG),
HTML_ATTR(HTML,VERSION),
HTML_ATTRIBUTES(HTML)
};
static HTAttr iframe_attr[HTML_IFRAME_ATTRIBUTES+1] = {
HTML_ATTR(IFRAME,ALIGN),
HTML_ATTR(IFRAME,CLASS),
HTML_ATTR(IFRAME,FRAMEBORDER),
HTML_ATTR(IFRAME,HEIGHT),
HTML_ATTR(IFRAME,ID),
HTML_ATTR(IFRAME,LONGDESC),
HTML_ATTR(IFRAME,MARGINHEIGHT),
HTML_ATTR(IFRAME,MARGINWIDTH),
HTML_ATTR(IFRAME,NAME),
HTML_ATTR(IFRAME,SCROLLING),
HTML_ATTR(IFRAME,SRC),
HTML_ATTR(IFRAME,STYLE),
HTML_ATTR(IFRAME,TARGET),
HTML_ATTR(IFRAME,TITLE),
HTML_ATTR(IFRAME,WIDTH),
HTML_ATTRIBUTES(IFRAME)
};
static HTAttr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* IMG attributes */
HTML_ATTR(IMG,ALIGN),
HTML_ATTR(IMG,ALT),
HTML_ATTR(IMG,BORDER),
HTML_ATTR(IMG,CLASS),
HTML_ATTR(IMG,DIR),
HTML_ATTR(IMG,HEIGHT),
HTML_ATTR(IMG,HSPACE),
HTML_ATTR(IMG,ID),
HTML_ATTR(IMG,ISMAP),
HTML_ATTR(IMG,LANG),
HTML_ATTR(IMG,LONGDESC),
HTML_ATTR(IMG,SRC),
HTML_ATTR(IMG,STYLE),
HTML_ATTR(IMG,TITLE),
HTML_ATTR(IMG,USEMAP),
HTML_ATTR(IMG,VSPACE),
HTML_ATTR(IMG,WIDTH),
HTML_ATTRIBUTES(IMG)
};
static HTAttr input_attr[HTML_INPUT_ATTRIBUTES+1] = {
HTML_ATTR(INPUT,ACCEPT),
HTML_ATTR(INPUT,ACCESSKEY),
HTML_ATTR(INPUT,ALIGN),
HTML_ATTR(INPUT,ALT),
HTML_ATTR(INPUT,CHECKED),
HTML_ATTR(INPUT,CLASS),
HTML_ATTR(INPUT,DIR),
HTML_ATTR(INPUT,DISABLED),
HTML_ATTR(INPUT,ID),
HTML_ATTR(INPUT,LANG),
HTML_ATTR(INPUT,MAXLENGTH),
HTML_ATTR(INPUT,NAME),
HTML_ATTR(INPUT,READONLY),
HTML_ATTR(INPUT,SIZE),
HTML_ATTR(INPUT,SRC),
HTML_ATTR(INPUT,STYLE),
HTML_ATTR(INPUT,TABINDEX),
HTML_ATTR(INPUT,TITLE),
HTML_ATTR(INPUT,TYPE),
HTML_ATTR(INPUT,USEMAP),
HTML_ATTR(INPUT,VALUE),
HTML_ATTRIBUTES(INPUT)
};
static HTAttr isindex_attr[HTML_ISINDEX_ATTRIBUTES+1] = {
HTML_ATTR(ISINDEX,CLASS),
HTML_ATTR(ISINDEX,DIR),
HTML_ATTR(ISINDEX,ID),
HTML_ATTR(ISINDEX,LANG),
HTML_ATTR(ISINDEX,PROMPT),
HTML_ATTR(ISINDEX,STYLE),
HTML_ATTR(ISINDEX,TITLE),
HTML_ATTRIBUTES(ISINDEX)
};
static HTAttr label_attr[HTML_LABEL_ATTRIBUTES+1] = {
HTML_ATTR(LABEL,ACCESSKEY),
HTML_ATTR(LABEL,CLASS),
HTML_ATTR(LABEL,DIR),
HTML_ATTR(LABEL,FOR),
HTML_ATTR(LABEL,ID),
HTML_ATTR(LABEL,LANG),
HTML_ATTR(LABEL,STYLE),
HTML_ATTR(LABEL,TITLE),
HTML_ATTRIBUTES(LABEL)
};
static HTAttr legend_attr[HTML_LEGEND_ATTRIBUTES+1] = {
HTML_ATTR(LEGEND,ACCESSKEY),
HTML_ATTR(LEGEND,ALIGN),
HTML_ATTR(LEGEND,CLASS),
HTML_ATTR(LEGEND,DIR),
HTML_ATTR(LEGEND,ID),
HTML_ATTR(LEGEND,LANG),
HTML_ATTR(LEGEND,STYLE),
HTML_ATTR(LEGEND,TITLE),
HTML_ATTRIBUTES(LEGEND)
};
static HTAttr li_attr[HTML_LI_ATTRIBUTES+1] = {
HTML_ATTR(LI,CLASS),
HTML_ATTR(LI,COMPACT),
HTML_ATTR(LI,DIR),
HTML_ATTR(LI,ID),
HTML_ATTR(LI,LANG),
HTML_ATTR(LI,STYLE),
HTML_ATTR(LI,TITLE),
HTML_ATTR(LI,TYPE),
HTML_ATTR(LI,VALUE),
HTML_ATTRIBUTES(LI)
};
static HTAttr link_attr[HTML_LINK_ATTRIBUTES+1] = { /* link attributes */
HTML_ATTR(LINK,CHARSET),
HTML_ATTR(LINK,CLASS),
HTML_ATTR(LINK,DIR),
HTML_ATTR(LINK,HREF),
HTML_ATTR(LINK,HREFLANG),
HTML_ATTR(LINK,ID),
HTML_ATTR(LINK,LANG),
HTML_ATTR(LINK,MEDIA),
HTML_ATTR(LINK,REL),
HTML_ATTR(LINK,REV),
HTML_ATTR(LINK,STYLE),
HTML_ATTR(LINK,TARGET),
HTML_ATTR(LINK,TITLE),
HTML_ATTR(LINK,TYPE),
HTML_ATTRIBUTES(LINK)
};
static HTAttr map_attr[HTML_MAP_ATTRIBUTES+1] = {
HTML_ATTR(MAP,CLASS),
HTML_ATTR(MAP,DIR),
HTML_ATTR(MAP,ID),
HTML_ATTR(MAP,LANG),
HTML_ATTR(MAP,NAME),
HTML_ATTR(MAP,STYLE),
HTML_ATTR(MAP,TITLE),
HTML_ATTRIBUTES(MAP)
};
static HTAttr meta_attr[HTML_META_ATTRIBUTES+1] = {
HTML_ATTR(META,CONTENT),
HTML_ATTR(META,DIR),
{ (char *)"HTTP-EQUIV" }, /* HTML_ATTR(META,HTTP_EQUIV) */
HTML_ATTR(META,LANG),
HTML_ATTR(META,NAME),
HTML_ATTR(META,SCHEME),
HTML_ATTRIBUTES(META)
};
static HTAttr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
{ (char *)"N" },
{ 0 } /* Terminate list */
};
static HTAttr object_attr[HTML_OBJECT_ATTRIBUTES+1] = { /* object attributes */
HTML_ATTR(OBJECT,ALIGN),
HTML_ATTR(OBJECT,ARCHIVE),
HTML_ATTR(OBJECT,BORDER),
HTML_ATTR(OBJECT,CLASS),
HTML_ATTR(OBJECT,CLASSID),
HTML_ATTR(OBJECT,CODEBASE),
HTML_ATTR(OBJECT,CODETYPE),
HTML_ATTR(OBJECT,DATA),
HTML_ATTR(OBJECT,DECLARE),
HTML_ATTR(OBJECT,DIR),
HTML_ATTR(OBJECT,HEIGHT),
HTML_ATTR(OBJECT,HSPACE),
HTML_ATTR(OBJECT,ID),
HTML_ATTR(OBJECT,LANG),
HTML_ATTR(OBJECT,NAME),
HTML_ATTR(OBJECT,STANDBY),
HTML_ATTR(OBJECT,STYLE),
HTML_ATTR(OBJECT,TABINDEX),
HTML_ATTR(OBJECT,TITLE),
HTML_ATTR(OBJECT,TYPE),
HTML_ATTR(OBJECT,USEMAP),
HTML_ATTR(OBJECT,VSPACE),
HTML_ATTR(OBJECT,WIDTH),
HTML_ATTRIBUTES(OBJECT)
};
static HTAttr ol_attr[HTML_OL_ATTRIBUTES+1] = {
HTML_ATTR(OL,CLASS),
HTML_ATTR(OL,COMPACT),
HTML_ATTR(OL,DIR),
HTML_ATTR(OL,ID),
HTML_ATTR(OL,LANG),
HTML_ATTR(OL,START),
HTML_ATTR(OL,STYLE),
HTML_ATTR(OL,TITLE),
HTML_ATTR(OL,TYPE),
HTML_ATTRIBUTES(OL)
};
static HTAttr optgroup_attr[HTML_OPTGROUP_ATTRIBUTES+1] = {
HTML_ATTR(OPTGROUP,CLASS),
HTML_ATTR(OPTGROUP,DISABLED),
HTML_ATTR(OPTGROUP,DIR),
HTML_ATTR(OPTGROUP,ID),
HTML_ATTR(OPTGROUP,LABEL),
HTML_ATTR(OPTGROUP,LANG),
HTML_ATTR(OPTGROUP,STYLE),
HTML_ATTR(OPTGROUP,TITLE),
HTML_ATTRIBUTES(OPTGROUP)
};
static HTAttr option_attr[HTML_OPTION_ATTRIBUTES+1] = {
HTML_ATTR(OPTION,CLASS),
HTML_ATTR(OPTION,DISABLED),
HTML_ATTR(OPTION,DIR),
HTML_ATTR(OPTION,ID),
HTML_ATTR(OPTION,LABEL),
HTML_ATTR(OPTION,LANG),
HTML_ATTR(OPTION,SELECTED),
HTML_ATTR(OPTION,STYLE),
HTML_ATTR(OPTION,TITLE),
HTML_ATTR(OPTION,VALUE),
HTML_ATTRIBUTES(OPTION)
};
static HTAttr param_attr[HTML_PARAM_ATTRIBUTES+1] = {
HTML_ATTR(PARAM,ID),
HTML_ATTR(PARAM,NAME),
HTML_ATTR(PARAM,TYPE),
HTML_ATTR(PARAM,VALUE),
HTML_ATTR(PARAM,VALUETYPE),
HTML_ATTRIBUTES(PARAM)
};
static HTAttr pre_attr[HTML_PRE_ATTRIBUTES+1] = {
HTML_ATTR(PRE,CLASS),
HTML_ATTR(PRE,DIR),
HTML_ATTR(PRE,ID),
HTML_ATTR(PRE,LANG),
HTML_ATTR(PRE,STYLE),
HTML_ATTR(PRE,TITLE),
HTML_ATTR(PRE,WIDTH),
HTML_ATTRIBUTES(PRE)
};
static HTAttr script_attr[HTML_SCRIPT_ATTRIBUTES+1] = {
HTML_ATTR(SCRIPT,CHARSET),
HTML_ATTR(SCRIPT,DEFER),
HTML_ATTR(SCRIPT,LANGUAGE),
HTML_ATTR(SCRIPT,SRC),
HTML_ATTR(SCRIPT,TYPE),
HTML_ATTRIBUTES(SCRIPT)
};
static HTAttr select_attr[HTML_SELECT_ATTRIBUTES+1] = {
HTML_ATTR(SELECT,CLASS),
HTML_ATTR(SELECT,DIR),
HTML_ATTR(SELECT,DISABLED),
HTML_ATTR(SELECT,ID),
HTML_ATTR(SELECT,LANG),
HTML_ATTR(SELECT,MULTIPLE),
HTML_ATTR(SELECT,NAME),
HTML_ATTR(SELECT,SIZE),
HTML_ATTR(SELECT,STYLE),
HTML_ATTR(SELECT,TABINDEX),
HTML_ATTR(SELECT,TITLE),
HTML_ATTRIBUTES(SELECT)
};
static HTAttr style_attr[HTML_STYLE_ATTRIBUTES+1] = {
HTML_ATTR(STYLE,DIR),
HTML_ATTR(STYLE,LANG),
HTML_ATTR(STYLE,MEDIA),
HTML_ATTR(STYLE,TITLE),
HTML_ATTR(STYLE,TYPE),
HTML_ATTRIBUTES(STYLE)
};
static HTAttr table_attr[HTML_TABLE_ATTRIBUTES+1] = {
HTML_ATTR(TABLE,ALIGN),
HTML_ATTR(TABLE,BGCOLOR),
HTML_ATTR(TABLE,BORDER),
HTML_ATTR(TABLE,CELLPADDING),
HTML_ATTR(TABLE,CELLSPACING),
HTML_ATTR(TABLE,CLASS),
HTML_ATTR(TABLE,DIR),
HTML_ATTR(TABLE,FRAME),
HTML_ATTR(TABLE,ID),
HTML_ATTR(TABLE,LANG),
HTML_ATTR(TABLE,RULES),
HTML_ATTR(TABLE,SUMMARY),
HTML_ATTR(TABLE,STYLE),
HTML_ATTR(TABLE,TITLE),
HTML_ATTR(TABLE,WIDTH),
HTML_ATTRIBUTES(TABLE)
};
static HTAttr tele_attr[HTML_TELE_ATTRIBUTES+1] = {
HTML_ATTR(TELE,ALIGN),
HTML_ATTR(TELE,CHAR),
HTML_ATTR(TELE,CHAROFF),
HTML_ATTR(TELE,CLASS),
HTML_ATTR(TELE,DIR),
HTML_ATTR(TELE,ID),
HTML_ATTR(TELE,LANG),
HTML_ATTR(TELE,STYLE),
HTML_ATTR(TELE,TITLE),
HTML_ATTR(TELE,VALIGN),
HTML_ATTRIBUTES(TELE)
};
static HTAttr td_attr[HTML_TD_ATTRIBUTES+1] = {
HTML_ATTR(TD,ABBR),
HTML_ATTR(TD,ALIGN),
HTML_ATTR(TD,AXIS),
HTML_ATTR(TD,BGCOLOR),
HTML_ATTR(TD,CHAR),
HTML_ATTR(TD,CHAROFF),
HTML_ATTR(TD,CLASS),
HTML_ATTR(TD,COLSPAN),
HTML_ATTR(TD,DIR),
HTML_ATTR(TD,ID),
HTML_ATTR(TD,HEADERS),
HTML_ATTR(TD,HEIGHT),
HTML_ATTR(TD,LANG),
HTML_ATTR(TD,NOWRAP),
HTML_ATTR(TD,ROWSPAN),
HTML_ATTR(TD,SCOPE),
HTML_ATTR(TD,STYLE),
HTML_ATTR(TD,TITLE),
HTML_ATTR(TD,VALIGN),
HTML_ATTR(TD,WIDTH),
HTML_ATTRIBUTES(TD)
};
static HTAttr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = {
HTML_ATTR(TEXTAREA,CLASS),
HTML_ATTR(TEXTAREA,COLS),
HTML_ATTR(TEXTAREA,DIR),
HTML_ATTR(TEXTAREA,DISABLED),
HTML_ATTR(TEXTAREA,ID),
HTML_ATTR(TEXTAREA,LANG),
HTML_ATTR(TEXTAREA,NAME),
HTML_ATTR(TEXTAREA,READONLY),
HTML_ATTR(TEXTAREA,ROWS),
HTML_ATTR(TEXTAREA,STYLE),
HTML_ATTR(TEXTAREA,TABINDEX),
HTML_ATTR(TEXTAREA,TITLE),
HTML_ATTRIBUTES(TEXTAREA)
};
static HTAttr title_attr[HTML_TITLE_ATTRIBUTES+1] = {
HTML_ATTR(TITLE,DIR),
HTML_ATTR(TITLE,LANG),
HTML_ATTRIBUTES(TITLE)
};
static HTAttr ul_attr[HTML_UL_ATTRIBUTES+1] = {
HTML_ATTR(UL,CLASS),
HTML_ATTR(UL,COMPACT),
HTML_ATTR(UL,DIR),
HTML_ATTR(UL,ID),
HTML_ATTR(UL,LANG),
HTML_ATTR(UL,STYLE),
HTML_ATTR(UL,TITLE),
HTML_ATTR(UL,TYPE),
HTML_ATTRIBUTES(UL)
};
/*
** ELEMENTS
** Must match definitions in HTMLPDTD.html!
** Must be in alphabetical order.
**
** Name, Attributes, content
*/
static HTTag tags[HTML_ELEMENTS] = {
{ "A" , a_attr, HTML_A_ATTRIBUTES },
{ "ABBR" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "ADDRESS" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "APPLET" , applet_attr, HTML_APPLET_ATTRIBUTES },
{ "AREA" , area_attr, HTML_AREA_ATTRIBUTES },
{ "B" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "BASE" , base_attr, HTML_BASE_ATTRIBUTES },
{ "BASEFONT", font_attr, HTML_FONT_ATTRIBUTES },
{ "BDO" , bdo_attr, HTML_BDO_ATTRIBUTES },
{ "BIG" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES },
{ "BODY" , body_attr, HTML_BODY_ATTRIBUTES },
{ "BR" , br_attr, HTML_BR_ATTRIBUTES },
{ "BUTTON" , button_attr, HTML_BUTTON_ATTRIBUTES },
{ "CAPTION" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "CENTER" , no_attr, 0 },
{ "CITE" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "CODE" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "COL" , col_attr, HTML_COL_ATTRIBUTES },
{ "COLGROUP", col_attr, HTML_COL_ATTRIBUTES },
{ "DD" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "DEL" , changes_attr, HTML_CHANGES_ATTRIBUTES },
{ "DFN" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "DIR" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "DIV" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "DL" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "DT" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "EM" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "FIELDSET", gen_attr, HTML_GEN_ATTRIBUTES },
{ "FONT" , font_attr, HTML_FONT_ATTRIBUTES },
{ "FORM" , form_attr, HTML_FORM_ATTRIBUTES },
{ "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES },
{ "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES },
{ "H1" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "H2" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "H3" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "H4" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "H5" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "H6" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "HEAD" , head_attr, HTML_HEAD_ATTRIBUTES },
{ "HR" , hr_attr, HTML_HR_ATTRIBUTES },
{ "HTML" , html_attr, HTML_HTML_ATTRIBUTES },
{ "I" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "IFRAME" , iframe_attr, HTML_IFRAME_ATTRIBUTES },
{ "IMG" , img_attr, HTML_IMG_ATTRIBUTES },
{ "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES },
{ "INS" , changes_attr, HTML_CHANGES_ATTRIBUTES },
{ "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES },
{ "KBD" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES },
{ "LEGEND" , legend_attr, HTML_LEGEND_ATTRIBUTES },
{ "LI" , li_attr, HTML_LI_ATTRIBUTES },
{ "LINK" , link_attr, HTML_LINK_ATTRIBUTES },
{ "MAP" , map_attr, HTML_MAP_ATTRIBUTES },
{ "MENU" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "META" , meta_attr, HTML_META_ATTRIBUTES },
{ "NEXTID" , nextid_attr, 1 },
{ "NOFRAMES", gen_attr, HTML_GEN_ATTRIBUTES },
{ "NOSCRIPT", gen_attr, HTML_GEN_ATTRIBUTES },
{ "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES },
{ "OL" , ol_attr, HTML_OL_ATTRIBUTES },
{ "OPTGROUP", optgroup_attr,HTML_OPTGROUP_ATTRIBUTES },
{ "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES },
{ "P" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES },
{ "PRE" , pre_attr, HTML_PRE_ATTRIBUTES },
{ "Q" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "S" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "SAMP" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES },
{ "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES },
{ "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "SPAN" , block_attr, HTML_BLOCK_ATTRIBUTES },
{ "STRIKE" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES },
{ "SUB" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "SUP" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES },
{ "TBODY" , tele_attr, HTML_TELE_ATTRIBUTES },
{ "TD" , td_attr, HTML_TD_ATTRIBUTES },
{ "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES },
{ "TFOOT" , tele_attr, HTML_TELE_ATTRIBUTES },
{ "TH" , td_attr, HTML_TD_ATTRIBUTES },
{ "THEAD" , tele_attr, HTML_TELE_ATTRIBUTES },
{ "TITLE" , title_attr, HTML_TITLE_ATTRIBUTES },
{ "TR" , tele_attr, HTML_TELE_ATTRIBUTES },
{ "TT" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "U" , gen_attr, HTML_GEN_ATTRIBUTES },
{ "UL" , ul_attr, HTML_UL_ATTRIBUTES },
{ "VAR" , gen_attr, HTML_GEN_ATTRIBUTES },
};
static SGML_dtd HTMLP_dtd = {
tags,
HTML_ELEMENTS
};
static SGML_dtd * DTD = &HTMLP_dtd;
SGML_dtd * HTML_dtd (void)
{
return DTD;
}
}// namespace

View file

@ -0,0 +1,222 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <string>
#include "nel/misc/types_nl.h"
#include "nel/gui/url_parser.h"
using namespace std;
namespace NLGUI
{
// ***************************************************************************
CUrlParser::CUrlParser(const std::string &uri)
{
parse(uri);
}
// ***************************************************************************
void CUrlParser::parse(std::string uri)
{
const size_t npos = std::string::npos;
size_t pos;
size_t offset = 0;
// strip fragment if present
pos = uri.find("#");
if (pos != npos)
{
hash = uri.substr(pos + 1);
uri = uri.substr(0, pos);
}
// scan for scheme
pos = uri.find(":");
if (pos != npos && pos >= 1)
{
for (uint i=0; i<pos; i++)
{
if (!isalnum(uri[i]))
{
pos = npos;
break;
}
}
if (pos != npos)
{
scheme = uri.substr(0, pos);
uri = uri.substr(pos + 1);
}
}
// scan for domain
if (uri.substr(0, 2) == "//")
{
pos = uri.find("/", 3);
domain = uri.substr(0, pos);
if (pos != npos)
uri = uri.substr(pos);
else
uri.clear();
}
// scan for query
pos = uri.find("?");
if (pos != npos)
{
query = uri.substr(pos + 1);
uri = uri.substr(0, pos);
}
// all that is remaining is path
path = uri;
}
void CUrlParser::inherit(const std::string &url)
{
// we have scheme, so we already absolute url
if (!scheme.empty())
return;
const size_t npos = std::string::npos;
size_t pos;
CUrlParser base(url);
scheme = base.scheme;
// if we already have domain, then ignore base path
if (!domain.empty())
return;
domain = base.domain;
if (path.empty())
{
path = base.path;
if (query.empty())
query = base.query;
}
else
if (path[0] != '/')
{
// find start of last path segment from base path
// if not found, then dont inherit base path at all
pos = base.path.find_last_of("/");
if (pos != npos)
path = base.path.substr(0, pos) + "/" + path;
}
resolveRelativePath(path);
}
void CUrlParser::resolveRelativePath(std::string &path)
{
const size_t npos = std::string::npos;
// no relative components in path. filename.ext is also matched, but that's fine
size_t pos = path.find(".");
if (pos == npos)
return;
// normalize path
size_t lhp = 0;
while(pos < path.size())
{
if (path[pos] == '.')
{
// scan ahead to see what we have
std::string sub = path.substr(pos, 2);
if (sub == "./" || sub == ".")
{
// starts with
if (pos == 0)
path.replace(pos, sub.size(), "/");
else
{
// full or last segment
sub = path.substr(pos-1, 3);
if (sub == "/./" || sub == "/.")
{
path.replace(pos, sub.size()-1, "");
// we just removed char that pos was pointing, so rewind
pos--;
}
}
}
else
if (sub == "..")
{
// starts with
if (pos == 0 && path.substr(pos, 3) == "../")
path.replace(pos, 3, "/");
else
if (pos > 0)
{
// full or last segment
sub = path.substr(pos-1, 4);
if (sub == "/../" || sub == "/..")
{
if (pos > 1)
lhp = path.find_last_of("/", pos - 2);
else
lhp = 0;
// pos points to first dot in ..
// lhp points to start slash (/) of last segment
pos += sub.size() - 1;
path.replace(lhp, pos - lhp, "/");
pos = lhp;
}
}
}// sub == ".."
} // path[pos] == '.'
pos++;
}// while
}
bool CUrlParser::isAbsolute() const
{
return !scheme.empty() && !domain.empty();
}
// serialize URL back to string
std::string CUrlParser::toString() const
{
std::string result;
if (!scheme.empty())
result += scheme + ":";
if (!domain.empty())
{
result += domain;
}
// path already has leading slash
if (!path.empty())
result += path;
if (!query.empty())
result += "?" + query;
if (!hash.empty())
result += "#" + hash;
return result;
}
}// namespace

View file

@ -252,7 +252,7 @@ namespace NLGUI
if (vLink->getMouseOverShape(tooltip, rot, col))
{
setString(ucstring(tooltip));
setString(ucstring::makeFromUtf8(tooltip));
sint32 texId = rVR.getTextureIdFromName ("curs_pick.tga");
CInterfaceGroup *stringCursor = hwMouse ? _StringCursorHardware : _StringCursor;
@ -408,7 +408,7 @@ namespace NLGUI
splitString(tooltipInfos, "@", tooltipInfosList);
texName = tooltipInfosList[0];
tooltip = tooltipInfosList[1];
setString(ucstring(tooltip));
setString(ucstring::makeFromUtf8(tooltip));
CViewRenderer &rVR = *CViewRenderer::getInstance();
sint32 texId = rVR.getTextureIdFromName (texName);

View file

@ -1,4 +1,4 @@
//Microsoft Developer Studio generated resource script.
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
@ -7,7 +7,7 @@
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
@ -26,141 +26,109 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// Dialog
//
IDD_PANEL DIALOG DISCARDABLE 0, 0, 108, 251
STYLE WS_CHILD | WS_VISIBLE
IDD_PANEL DIALOG 0, 0, 108, 251
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "Export model",ID_SAVEMODEL,10,10,85,15
PUSHBUTTON "Export model animations",ID_SAVE_MODEL_ANIM,10,90,85,15
PUSHBUTTON "View the scene",ID_VIEW,10,152,85,15
PUSHBUTTON "Export scene animations",ID_SAVE_SCENE_ANIM,10,110,85,
15
PUSHBUTTON "Export scene animations",ID_SAVE_SCENE_ANIM,10,110,85,15
PUSHBUTTON "Export skeleton weights",ID_SAVESWT,10,50,85,15
PUSHBUTTON "Export Instance Group",ID_EXPORTINSTANCEGROUP,10,70,85,
15
PUSHBUTTON "Export Instance Group",ID_EXPORTINSTANCEGROUP,10,70,85,15
PUSHBUTTON "Export skeleton",ID_SAVESKELETON,10,30,85,15
PUSHBUTTON "Options",ID_OPTIONS,10,173,85,15
PUSHBUTTON "Node properties",ID_NODE_PROPERTIES,10,194,85,15
PUSHBUTTON "Export Collision",ID_SAVECOLLISION,10,131,85,15
CTEXT "Can't read the version",IDC_VERSION,15,234,75,10
PUSHBUTTON "Test interface mesh",ID_TEST_INTERFACE_MESH,10,215,85,
15
PUSHBUTTON "Test interface mesh",ID_TEST_INTERFACE_MESH,10,215,85,15
END
IDD_SWT DIALOG DISCARDABLE 0, 0, 186, 63
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
IDD_SWT DIALOG 0, 0, 186, 63
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Choose the channel to export"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,129,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,129,42,50,14
CONTROL "All",IDC_ALLCHANNEL,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,7,23,10
CONTROL "Channel Position",IDC_CHANNELPOS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,23,69,10
CONTROL "Channel Rotation",IDC_CHANNELROT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,34,71,10
CONTROL "Channel Scale",IDC_CHANNELSCA,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,46,62,10
CONTROL "All",IDC_ALLCHANNEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,23,10
CONTROL "Channel Position",IDC_CHANNELPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,23,69,10
CONTROL "Channel Rotation",IDC_CHANNELROT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,34,71,10
CONTROL "Channel Scale",IDC_CHANNELSCA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,46,62,10
END
IDD_EXPORTSCENE DIALOG DISCARDABLE 0, 0, 171, 255
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
IDD_EXPORTSCENE DIALOG 0, 0, 171, 255
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Options"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,115,173,50,14
PUSHBUTTON "Cancel",IDCANCEL,115,190,50,14
CONTROL "Export Lighting",IDC_CHECKEXPORTLIGHTING,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,18,63,10
CONTROL "Export Lighting",IDC_CHECKEXPORTLIGHTING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,18,63,10
GROUPBOX "Light Method",IDC_STATIC,7,60,74,39,WS_GROUP
CONTROL "Raytrace",IDC_RADIONORMALEXPORTLIGHTING,"Button",
BS_AUTORADIOBUTTON,15,74,45,10
CONTROL "Soft Shadow",IDC_RADIORADIOSITYEXPORTLIGHTING,"Button",
BS_AUTORADIOBUTTON,15,84,57,10
CONTROL "Raytrace",IDC_RADIONORMALEXPORTLIGHTING,"Button",BS_AUTORADIOBUTTON,15,74,45,10
CONTROL "Soft Shadow",IDC_RADIORADIOSITYEXPORTLIGHTING,"Button",BS_AUTORADIOBUTTON,15,84,57,10
EDITTEXT IDC_EDITEXPORTLIGHTING,7,42,137,14,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_BUTTONEXPORTLIGHTING,151,42,13,14
LTEXT "Lumel Size in meter",IDC_STATIC,90,63,62,8
EDITTEXT IDC_EDITLUMELSIZE,90,73,40,14,ES_AUTOHSCROLL
GROUPBOX "OverSampling",IDC_STATIC,7,104,60,54,WS_GROUP
CONTROL "None",IDC_RADIOSS1,"Button",BS_AUTORADIOBUTTON,15,113,
33,10
CONTROL "4x",IDC_RADIOSS2,"Button",BS_AUTORADIOBUTTON,15,124,23,
10
CONTROL "16x",IDC_RADIOSS3,"Button",BS_AUTORADIOBUTTON,15,135,27,
10
CONTROL "64x",IDC_RADIOSS4,"Button",BS_AUTORADIOBUTTON,15,146,27,
10
CONTROL "Shadow",IDC_SHADOW,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,81,18,42,10
CONTROL "None",IDC_RADIOSS1,"Button",BS_AUTORADIOBUTTON,15,113,33,10
CONTROL "4x",IDC_RADIOSS2,"Button",BS_AUTORADIOBUTTON,15,124,23,10
CONTROL "16x",IDC_RADIOSS3,"Button",BS_AUTORADIOBUTTON,15,135,27,10
CONTROL "64x",IDC_RADIOSS4,"Button",BS_AUTORADIOBUTTON,15,146,27,10
CONTROL "Shadow",IDC_SHADOW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,18,42,10
CONTROL "Exclude non selected nodes from lighting",IDC_EXCLUDE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,145,10
CONTROL "Show Lumel",IDC_SHOWLUMEL,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,91,100,55,10
CONTROL "Export bg color",IDC_EXPORT_BG_COLOR,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,91,115,63,10
CONTROL "Test Surface Lighting",IDC_TEST_SURFACE_LIGHT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,173,84,10
CONTROL "Show Lumel",IDC_SHOWLUMEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,91,100,55,10
CONTROL "Export bg color",IDC_EXPORT_BG_COLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,91,115,63,10
CONTROL "Test Surface Lighting",IDC_TEST_SURFACE_LIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,173,84,10
EDITTEXT IDC_EDITCELLSIZE,15,198,65,15,ES_AUTOHSCROLL
LTEXT "Surface CellSize (in meter)",IDC_STATIC,15,188,85,10
EDITTEXT IDC_EDITCELLDELTAZ,15,228,65,15,ES_AUTOHSCROLL
LTEXT "Surface DeltaZ (in meter)",IDC_STATIC2,15,218,85,10
GROUPBOX "Surface Lighting",IDC_STATIC,7,163,98,85
CONTROL "Output lightmap log",IDC_CHECKOUTPUTLIGHTMAPLOG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,29,77,10
CONTROL "Output lightmap log",IDC_CHECKOUTPUTLIGHTMAPLOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,29,77,10
END
IDD_CALCULATING DIALOG DISCARDABLE 0, 0, 186, 181
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
IDD_CALCULATING DIALOG 0, 0, 186, 181
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Calculating..."
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Progress1",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,
7,41,172,14
LTEXT "Please wait intializing...",IDC_STATICTIMELEFT,7,7,172,
8
CONTROL "Progress1",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,7,41,172,14
LTEXT "Please wait intializing...",IDC_STATICTIMELEFT,7,7,172,8
PUSHBUTTON "Interrupt",IDC_BUTTONCANCEL,129,23,50,14,BS_NOTIFY
LTEXT "Object progression",IDC_STATIC,7,28,79,8
LTEXT "Lightmaps Information...",IDC_STATICINFO,7,60,172,114
END
IDD_LOD DIALOG DISCARDABLE 0, 0, 360, 200
STYLE WS_CHILD
IDD_LOD DIALOG 0, 0, 360, 200
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "LOD Root Properties",IDC_STATIC,5,5,172,95
LTEXT "List of lod mesh (ungrowing order):",IDC_STATIC,15,15,
108,10,SS_CENTERIMAGE
LISTBOX IDC_LIST1,15,25,111,70,LBS_NOINTEGRALHEIGHT | WS_VSCROLL |
WS_TABSTOP
LTEXT "List of lod mesh (ungrowing order):",IDC_STATIC,15,15,108,10,SS_CENTERIMAGE
LISTBOX IDC_LIST1,15,25,111,70,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add..",IDC_ADD,131,25,40,14
PUSHBUTTON "Remove",IDC_REMOVE,131,39,40,14
PUSHBUTTON "Up",IDC_UP,131,54,40,14
PUSHBUTTON "Down",IDC_DOWN,131,68,40,14
GROUPBOX "LOD Properties",IDC_STATIC,5,105,172,50
CONTROL "Blend in",IDC_BLEND_IN,"Button",BS_AUTO3STATE |
WS_TABSTOP,15,121,40,10
CONTROL "Blend out",IDC_BLEND_OUT,"Button",BS_AUTO3STATE |
WS_TABSTOP,15,130,45,10
CONTROL "Coarse mesh",IDC_COARSE_MESH,"Button",BS_AUTO3STATE |
WS_TABSTOP,15,140,55,10
CONTROL "Dynamic mesh",IDC_DYNAMIC_MESH,"Button",BS_AUTO3STATE |
WS_TABSTOP,80,120,60,10
CONTROL "Blend in",IDC_BLEND_IN,"Button",BS_AUTO3STATE | WS_TABSTOP,15,121,40,10
CONTROL "Blend out",IDC_BLEND_OUT,"Button",BS_AUTO3STATE | WS_TABSTOP,15,130,45,10
CONTROL "Coarse mesh",IDC_COARSE_MESH,"Button",BS_AUTO3STATE | WS_TABSTOP,15,140,55,10
CONTROL "Dynamic mesh",IDC_DYNAMIC_MESH,"Button",BS_AUTO3STATE | WS_TABSTOP,80,120,60,10
LTEXT "Dist Max:",IDC_STATIC,5,160,45,13,SS_CENTERIMAGE
EDITTEXT IDC_DIST_MAX,51,160,45,12,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Blend length:",IDC_STATIC,80,135,45,13,SS_CENTERIMAGE
EDITTEXT IDC_BLEND_LENGTH,125,135,45,12,ES_AUTOHSCROLL |
ES_NUMBER
EDITTEXT IDC_BLEND_LENGTH,125,135,45,12,ES_AUTOHSCROLL | ES_NUMBER
GROUPBOX "MRM properties",IDC_STATIC,185,5,172,95
CONTROL "Active MRM",IDC_ACTIVE_MRM,"Button",BS_AUTO3STATE |
WS_TABSTOP,195,20,60,10
CONTROL "Active MRM",IDC_ACTIVE_MRM,"Button",BS_AUTO3STATE | WS_TABSTOP,195,20,60,10
LTEXT "Skin reduction",IDC_STATIC,195,35,50,10,SS_CENTERIMAGE
CONTROL "Min",IDC_SKIN_REDUCTION_MIN,"Button",BS_AUTORADIOBUTTON,
195,45,45,8
CONTROL "Max",IDC_SKIN_REDUCTION_MAX,"Button",BS_AUTORADIOBUTTON,
195,55,45,8
CONTROL "Best",IDC_SKIN_REDUCTION_BEST,"Button",
BS_AUTORADIOBUTTON,195,65,45,8
CONTROL "Min",IDC_SKIN_REDUCTION_MIN,"Button",BS_AUTORADIOBUTTON,195,45,45,8
CONTROL "Max",IDC_SKIN_REDUCTION_MAX,"Button",BS_AUTORADIOBUTTON,195,55,45,8
CONTROL "Best",IDC_SKIN_REDUCTION_BEST,"Button",BS_AUTORADIOBUTTON,195,65,45,8
LTEXT "Steps count:",IDC_STATIC,260,20,45,13,SS_CENTERIMAGE
EDITTEXT IDC_NB_LOD,305,20,45,12,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Divisor poly:",IDC_STATIC,260,35,45,13,SS_CENTERIMAGE
@ -170,128 +138,91 @@ BEGIN
LTEXT "Dist middle:",IDC_STATIC,260,65,45,13,SS_CENTERIMAGE
EDITTEXT IDC_DIST_MIDDLE,305,65,45,12,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Dist coarsest:",IDC_STATIC,260,80,45,13,SS_CENTERIMAGE
EDITTEXT IDC_DIST_COARSEST,305,80,45,12,ES_AUTOHSCROLL |
ES_NUMBER
EDITTEXT IDC_DIST_COARSEST,305,80,45,12,ES_AUTOHSCROLL | ES_NUMBER
GROUPBOX "LOD Bones",IDC_STATIC,185,105,170,45
LTEXT "Disable Distance (0 means always activated) :",
IDC_STATIC,190,120,160,10
EDITTEXT IDC_BONE_LOD_DISTANCE,190,130,45,12,ES_AUTOHSCROLL |
ES_NUMBER
CONTROL "Export as Lod character (.clod)",IDC_EXPORT_CLOD,"Button",
BS_AUTO3STATE | WS_TABSTOP,190,160,150,10
LTEXT "Disable Distance (0 means always activated) :",IDC_STATIC,190,120,160,10
EDITTEXT IDC_BONE_LOD_DISTANCE,190,130,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "Export as Lod character (.clod)",IDC_EXPORT_CLOD,"Button",BS_AUTO3STATE | WS_TABSTOP,190,160,150,10
END
IDD_ACCEL DIALOG DISCARDABLE 0, 0, 360, 200
STYLE WS_CHILD
IDD_ACCEL DIALOG 0, 0, 360, 200
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Not an accelerator",IDC_RADIOACCELNO,"Button",
BS_AUTORADIOBUTTON,5,5,75,10
CONTROL "Portal",IDC_RADIOACCELPORTAL,"Button",
BS_AUTORADIOBUTTON,5,21,34,10
CONTROL "Cluster",IDC_RADIOACCELCLUSTER,"Button",
BS_AUTORADIOBUTTON,5,70,37,10
CONTROL "Father visible",IDC_FATHER_VISIBLE,"Button",
BS_AUTO3STATE | WS_TABSTOP,27,81,57,10
CONTROL "Visible from father",IDC_VISIBLE_FROM_FATHER,"Button",
BS_AUTO3STATE | WS_TABSTOP,27,92,71,10
CONTROL "Dynamic Portal",IDC_DYNAMIC_PORTAL,"Button",
BS_AUTO3STATE | WS_TABSTOP,27,44,63,10
CONTROL "Clusterize",IDC_CLUSTERIZE,"Button",BS_AUTO3STATE |
WS_TABSTOP,93,5,46,10
COMBOBOX IDC_OCC_MODEL,209,30,123,134,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "Not an accelerator",IDC_RADIOACCELNO,"Button",BS_AUTORADIOBUTTON,5,5,75,10
CONTROL "Portal",IDC_RADIOACCELPORTAL,"Button",BS_AUTORADIOBUTTON,5,21,34,10
CONTROL "Cluster",IDC_RADIOACCELCLUSTER,"Button",BS_AUTORADIOBUTTON,5,70,37,10
CONTROL "Father visible",IDC_FATHER_VISIBLE,"Button",BS_AUTO3STATE | WS_TABSTOP,27,81,57,10
CONTROL "Visible from father",IDC_VISIBLE_FROM_FATHER,"Button",BS_AUTO3STATE | WS_TABSTOP,27,92,71,10
CONTROL "Dynamic Portal",IDC_DYNAMIC_PORTAL,"Button",BS_AUTO3STATE | WS_TABSTOP,27,44,63,10
CONTROL "Clusterize",IDC_CLUSTERIZE,"Button",BS_AUTO3STATE | WS_TABSTOP,93,5,46,10
COMBOBOX IDC_OCC_MODEL,209,30,123,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Occlusion model",IDC_STATIC,134,30,68,12,SS_CENTERIMAGE
COMBOBOX IDC_OPEN_OCC_MODEL,209,44,123,116,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "Open portal occlusion model",IDC_STATIC,112,44,89,10,
SS_CENTERIMAGE
COMBOBOX IDC_OPEN_OCC_MODEL,209,44,123,116,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Open portal occlusion model",IDC_STATIC,112,44,89,10,SS_CENTERIMAGE
GROUPBOX "Audio properties",IDC_STATIC,105,19,237,141
RTEXT "Sound group",IDC_STATIC,111,86,90,14
COMBOBOX IDC_ENV_FX,209,106,123,87,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
COMBOBOX IDC_ENV_FX,209,106,123,87,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Environment FX",IDC_STATIC,112,106,89,10,SS_CENTERIMAGE
COMBOBOX IDC_SOUND_GROUP,209,86,123,101,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CONTROL "Father audible",IDC_FATHER_AUDIBLE,"Button",
BS_AUTO3STATE | WS_TABSTOP,210,135,61,10
CONTROL "Audible from father",IDC_AUDIBLE_FROM_FATHER,"Button",
BS_AUTO3STATE | WS_TABSTOP,210,145,81,10
CONTROL "Audible like visible",IDC_AUDIBLE_LIKE_VISIBLE,"Button",
BS_AUTO3STATE | WS_TABSTOP,210,125,73,10
COMBOBOX IDC_SOUND_GROUP,209,86,123,101,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
CONTROL "Father audible",IDC_FATHER_AUDIBLE,"Button",BS_AUTO3STATE | WS_TABSTOP,210,135,61,10
CONTROL "Audible from father",IDC_AUDIBLE_FROM_FATHER,"Button",BS_AUTO3STATE | WS_TABSTOP,210,145,81,10
CONTROL "Audible like visible",IDC_AUDIBLE_LIKE_VISIBLE,"Button",BS_AUTO3STATE | WS_TABSTOP,210,125,73,10
END
IDD_LIGHTMAP DIALOG DISCARDABLE 0, 0, 360, 211
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
IDD_LIGHTMAP DIALOGEX 0, 0, 360, 211
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
GROUPBOX "Properties for objects with lightmaps",IDC_STATIC,5,5,
150,70
LTEXT "Lumel Size Multiplier",IDC_STATIC,10,15,64,13,
SS_CENTERIMAGE
GROUPBOX "Properties for objects with lightmaps",IDC_STATIC,5,5,150,70
LTEXT "Lumel Size Multiplier",IDC_STATIC,10,15,64,13,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_LUMELSIZEMUL,96,15,40,14,ES_AUTOHSCROLL
LTEXT "Soft Shadow Radius",IDC_STATIC,10,35,66,13,
SS_CENTERIMAGE
LTEXT "Soft Shadow Radius",IDC_STATIC,10,35,66,13,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_SOFTSHADOW_RADIUS,96,35,40,14,ES_AUTOHSCROLL
LTEXT "Soft Shadow Cone Length",IDC_STATIC,10,55,84,13,
SS_CENTERIMAGE
EDITTEXT IDC_EDIT_SOFTSHADOW_CONELENGTH,96,55,40,14,
ES_AUTOHSCROLL
GROUPBOX "Properties for objects without lightmaps",IDC_STATIC,5,
80,150,60
CONTROL "If checked, use per vertex lighting attenuation else use global lighting attenuation for the object. Doesn't work with per pixel lighting shader.",
IDC_USE_LIGHT_LOCAL_ATTENUATION,"Button",BS_AUTO3STATE |
BS_TOP | BS_MULTILINE | WS_TABSTOP,15,95,120,41
LTEXT "Soft Shadow Cone Length",IDC_STATIC,10,55,84,13,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_SOFTSHADOW_CONELENGTH,96,55,40,14,ES_AUTOHSCROLL
GROUPBOX "Properties for objects without lightmaps",IDC_STATIC,5,80,150,60
CONTROL "If checked, use per vertex lighting attenuation else use global lighting attenuation for the object. Doesn't work with per pixel lighting shader.",IDC_USE_LIGHT_LOCAL_ATTENUATION,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,18,96,120,41
GROUPBOX "Properties for lights",IDC_STATIC,160,5,185,200
CONTROL "RealTime Light. If set, this light will light scene objects.",
IDC_EXPORT_REALTIME_LIGHT,"Button",BS_AUTO3STATE |
BS_TOP | BS_MULTILINE | WS_TABSTOP,170,15,165,20
CONTROL "RealTime Sun Light. If set, this DIRECTIONNAL light will be used as sun light to light scene objects.",
IDC_EXPORT_AS_SUN_LIGHT,"Button",BS_AUTO3STATE | BS_TOP |
BS_MULTILINE | WS_TABSTOP,170,34,170,25
CONTROL "LightMap Light. If set, this light will be used to compute the lightmaps of the project objects.",
IDC_EXPORT_LIGHTMAP_LIGHT,"Button",BS_AUTO3STATE |
BS_TOP | BS_MULTILINE | WS_TABSTOP,170,60,170,20
LTEXT "LightMap Animation Name. This is the name of the animation used to flick the light color.",
IDC_STATIC,170,135,170,20
EDITTEXT IDC_EXPORT_LIGHTMAP_NAME,170,155,85,15,ES_AUTOHSCROLL
CONTROL "RealTime Light. If set, this light will light scene objects.",IDC_EXPORT_REALTIME_LIGHT,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,174,18,168,18
CONTROL "RealTime Sun Light. If set, this DIRECTIONNAL light will be used as sun light to light scene objects.",IDC_EXPORT_AS_SUN_LIGHT,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,174,36,168,24
CONTROL "LightMap Light. If set, this light will be used to compute the lightmaps of the project objects.",IDC_EXPORT_LIGHTMAP_LIGHT,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,174,60,168,18
LTEXT "LightMap Animation Name. This is the name of the animation used to flick the light color.",IDC_STATIC,174,138,170,20
EDITTEXT IDC_EXPORT_LIGHTMAP_NAME,174,156,85,15,ES_AUTOHSCROLL
CONTROL "Animated Dynamic Light",IDC_EXPORT_LIGHTMAP_ANIMATED,
"Button",BS_AUTO3STATE | WS_TABSTOP,170,175,125,10
CONTROL "Always group",IDC_LIGHT_GROUP_ALWAYS,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,170,80,150,15
CONTROL "Sun group",IDC_LIGHT_GROUP_DAY,"Button",
BS_AUTORADIOBUTTON,170,95,150,15
CONTROL "Night group",IDC_LIGHT_GROUP_NIGHT,"Button",
BS_AUTORADIOBUTTON,170,110,150,15
"Button",BS_AUTO3STATE | WS_TABSTOP,174,177,125,10
CONTROL "Always on lightgroup (0)",IDC_LIGHT_GROUP_ALWAYS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,174,90,156,12
CONTROL "Day cycle (3)",IDC_LIGHT_GROUP_DAY_CYCLE,"Button",BS_AUTORADIOBUTTON,174,102,66,12
CONTROL "Night cycle (2)",IDC_LIGHT_GROUP_NIGHT_CYCLE,"Button",BS_AUTORADIOBUTTON,174,114,66,12
GROUPBOX "Misc",IDC_STATIC,5,145,150,60
CONTROL "Don't cast shadow for Interior. Known as Trick of the ""Matis serre""",
IDC_LIGHT_DONT_CAST_SHADOW_INTERIOR,"Button",
BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,15,
155,135,20
CONTROL "Don't cast shadow for Exterior. Known as Trick of the ""Matis serre""",
IDC_LIGHT_DONT_CAST_SHADOW_EXTERIOR,"Button",
BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,15,
175,135,20
CONTROL "Add Realtime Ambient Light With sun Ambient",
IDC_REALTIME_LIGHT_AMBIENT_ADD_SUN,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,170,190,160,10
CONTROL "Don't cast shadow for Interior. Known as Trick of the ""Matis serre""",IDC_LIGHT_DONT_CAST_SHADOW_INTERIOR,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,15,155,135,20
CONTROL "Don't cast shadow for Exterior. Known as Trick of the ""Matis serre""",IDC_LIGHT_DONT_CAST_SHADOW_EXTERIOR,
"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,15,175,135,20
CONTROL "Add Realtime Ambient Light With sun Ambient",IDC_REALTIME_LIGHT_AMBIENT_ADD_SUN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,192,160,10
CONTROL "Landscape Diffuse (Sun) (1)",IDC_LIGHT_GROUP_LANDSCAPE_DIFFUSE,
"Button",BS_AUTORADIOBUTTON,240,102,102,12
CONTROL "Landscape Ambient (4)",IDC_LIGHT_GROUP_LANDSCAPE_AMBIENT,
"Button",BS_AUTORADIOBUTTON,240,114,102,12
END
IDD_MISC DIALOG DISCARDABLE 0, 0, 360, 221
STYLE WS_CHILD
IDD_MISC DIALOG 0, 0, 360, 221
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Floating Object",IDC_FLOATING_OBJECT,"Button",
BS_AUTO3STATE | WS_TABSTOP,5,5,65,12
CONTROL "Floating Object",IDC_FLOATING_OBJECT,"Button",BS_AUTO3STATE | WS_TABSTOP,5,5,65,12
GROUPBOX "Ligoscape",IDC_STATIC,5,100,120,45
CONTROL "Symmetry",IDC_LIGO_SYMMETRY,"Button",BS_AUTO3STATE |
WS_TABSTOP,11,110,44,12
CONTROL "Symmetry",IDC_LIGO_SYMMETRY,"Button",BS_AUTO3STATE | WS_TABSTOP,11,110,44,12
LTEXT "Rotation:",IDC_STATIC,11,125,30,13,SS_CENTERIMAGE
EDITTEXT IDC_LIGO_ROTATE,60,126,57,14,ES_AUTOHSCROLL
LTEXT "Weight (0~1):",IDC_STATIC,10,75,43,13,SS_CENTERIMAGE
EDITTEXT IDC_SWT_WEIGHT,60,75,60,14,ES_AUTOHSCROLL
CONTROL "Enable",IDC_SWT,"Button",BS_AUTO3STATE | WS_TABSTOP,10,
60,40,10
CONTROL "Enable",IDC_SWT,"Button",BS_AUTO3STATE | WS_TABSTOP,10,60,40,10
GROUPBOX "Skeleton template weight",IDC_STATIC,5,50,120,45
GROUPBOX "Radial Normals",IDC_STATIC,135,5,130,105
LTEXT "Smooth group 29",IDC_STATIC,140,45,55,13,SS_CENTERIMAGE
@ -302,144 +233,104 @@ BEGIN
EDITTEXT IDC_RADIAL_NORMAL_31,200,75,57,14,ES_AUTOHSCROLL
LTEXT "Smooth group 32",IDC_STATIC,140,90,55,13,SS_CENTERIMAGE
EDITTEXT IDC_RADIAL_NORMAL_32,200,90,57,14,ES_AUTOHSCROLL
LTEXT "For the 4 last smoothing group, choose the node you want to use the position to compute radial normals from it.",
IDC_STATIC,140,15,120,25
LTEXT "For the 4 last smoothing group, choose the node you want to use the position to compute radial normals from it.",IDC_STATIC,140,15,120,25
GROUPBOX "Mesh interfaces",IDC_STATIC,134,110,219,56
LTEXT "Interface .max file",IDC_STATIC,141,120,61,15,
SS_CENTERIMAGE
LTEXT "Interface .max file",IDC_STATIC,141,120,61,15,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INTERFACE_FILE,221,120,110,14,ES_AUTOHSCROLL
LTEXT "Interface weld threshold",IDC_STATIC,141,137,77,15,
SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INTERFACE_THRESHOLD,221,137,110,14,
ES_AUTOHSCROLL
LTEXT "Interface weld threshold",IDC_STATIC,141,137,77,15,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INTERFACE_THRESHOLD,221,137,110,14,ES_AUTOHSCROLL
GROUPBOX "Bone Scale",IDC_STATIC,5,150,120,60
CONTROL "Enable",IDC_EXPORT_BONE_SCALE,"Button",BS_AUTO3STATE |
WS_TABSTOP,10,160,38,10
LTEXT "Bone Reference Name extension:",IDC_STATIC,10,175,110,
13,SS_CENTERIMAGE
EDITTEXT IDC_EXPORT_BONE_SCALE_NAME_EXT,10,190,75,14,
ES_AUTOHSCROLL
CONTROL "Get interface normals from scene objects",
IDC_GET_INTERFACE_NORMAL_FROM_SCENE_OBJECTS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,142,151,145,15
CONTROL "Enable",IDC_EXPORT_BONE_SCALE,"Button",BS_AUTO3STATE | WS_TABSTOP,10,160,38,10
LTEXT "Bone Reference Name extension:",IDC_STATIC,10,175,110,13,SS_CENTERIMAGE
EDITTEXT IDC_EXPORT_BONE_SCALE_NAME_EXT,10,190,75,14,ES_AUTOHSCROLL
CONTROL "Get interface normals from scene objects",IDC_GET_INTERFACE_NORMAL_FROM_SCENE_OBJECTS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,151,145,15
GROUPBOX "Remanence",IDC_STATIC,134,169,219,45
CONTROL "Use remanence",IDC_USE_REMANENCE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,137,178,66,9
CONTROL "Use remanence",IDC_USE_REMANENCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,137,178,66,9
LTEXT "Slice number :",IDC_STATIC,138,191,47,10,SS_CENTERIMAGE
EDITTEXT IDC_REMANENCE_SLICE_NUMBER,186,189,19,14,ES_AUTOHSCROLL
LTEXT "Sampling period :",IDC_STATIC,210,192,54,10,
SS_CENTERIMAGE
EDITTEXT IDC_REMANENCE_SAMPLING_PERIOD,266,190,20,14,
ES_AUTOHSCROLL
CONTROL "Shift texture at start of animation",
IDC_REMANENCE_SHIFTING_TEXTURE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,207,178,116,9
LTEXT "Sampling period :",IDC_STATIC,210,192,54,10,SS_CENTERIMAGE
EDITTEXT IDC_REMANENCE_SAMPLING_PERIOD,266,190,20,14,ES_AUTOHSCROLL
CONTROL "Shift texture at start of animation",IDC_REMANENCE_SHIFTING_TEXTURE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,207,178,116,9
LTEXT "Rollup ratio :",IDC_ROLLUP_RATIO,290,192,41,8
EDITTEXT IDC_REMANENCE_ROLLUP_RATIO,332,190,16,14,ES_AUTOHSCROLL
END
IDD_VEGETABLE DIALOG DISCARDABLE 0, 0, 360, 200
STYLE WS_CHILD
IDD_VEGETABLE DIALOG 0, 0, 360, 200
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Vegetable",IDC_VEGETABLE,"Button",BS_AUTO3STATE |
WS_TABSTOP,5,5,50,12
CONTROL "Alpha Blend ON (double sided)",
IDC_VEGETABLE_ALPHA_BLEND_ON,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,21,30,112,15
CONTROL "Alpha Blend OFF",IDC_VEGETABLE_ALPHA_BLEND_OFF,"Button",
BS_AUTORADIOBUTTON,20,74,85,15
CONTROL "Lighted - precomputed",
IDC_VEGETABLE_AB_ON_LIGHTED_PRECOMPUTED,"Button",
BS_AUTORADIOBUTTON | WS_GROUP,50,45,85,15
CONTROL "Unlighted",IDC_VEGETABLE_AB_ON_UNLIGHTED,"Button",
BS_AUTORADIOBUTTON,50,61,90,15
CONTROL "Lighted - precomputed",
IDC_VEGETABLE_AB_OFF_LIGHTED_PRECOMPUTED,"Button",
BS_AUTORADIOBUTTON | WS_GROUP,50,90,85,15
CONTROL "Vegetable",IDC_VEGETABLE,"Button",BS_AUTO3STATE | WS_TABSTOP,5,5,50,12
CONTROL "Alpha Blend ON (double sided)",IDC_VEGETABLE_ALPHA_BLEND_ON,
"Button",BS_AUTORADIOBUTTON | WS_GROUP,21,30,112,15
CONTROL "Alpha Blend OFF",IDC_VEGETABLE_ALPHA_BLEND_OFF,"Button",BS_AUTORADIOBUTTON,20,74,85,15
CONTROL "Lighted - precomputed",IDC_VEGETABLE_AB_ON_LIGHTED_PRECOMPUTED,
"Button",BS_AUTORADIOBUTTON | WS_GROUP,50,45,85,15
CONTROL "Unlighted",IDC_VEGETABLE_AB_ON_UNLIGHTED,"Button",BS_AUTORADIOBUTTON,50,61,90,15
CONTROL "Lighted - precomputed",IDC_VEGETABLE_AB_OFF_LIGHTED_PRECOMPUTED,
"Button",BS_AUTORADIOBUTTON | WS_GROUP,50,90,85,15
CONTROL "Lighted - dynamic",IDC_VEGETABLE_AB_OFF_LIGHTED_DYNAMIC,
"Button",BS_AUTORADIOBUTTON,50,105,90,15
CONTROL "Unighted",IDC_VEGETABLE_AB_OFF_UNLIGHTED,"Button",
BS_AUTORADIOBUTTON,50,120,85,15
CONTROL "Double sided",IDC_VEGETABLE_AB_OFF_DOUBLE_SIDED,"Button",
BS_AUTO3STATE | WS_TABSTOP,50,135,85,15
CONTROL "Unighted",IDC_VEGETABLE_AB_OFF_UNLIGHTED,"Button",BS_AUTORADIOBUTTON,50,120,85,15
CONTROL "Double sided",IDC_VEGETABLE_AB_OFF_DOUBLE_SIDED,"Button",BS_AUTO3STATE | WS_TABSTOP,50,135,85,15
GROUPBOX "Alpha mode",IDC_STATIC,15,20,135,155
GROUPBOX "Bend center",IDC_STATIC,160,20,105,45
CONTROL "Center Null",IDC_CENTER_NULL,"Button",
BS_AUTORADIOBUTTON | WS_GROUP,166,30,50,15
CONTROL "Center Z",IDC_CENTER_Z,"Button",BS_AUTORADIOBUTTON,166,
45,50,15
CONTROL "Center Null",IDC_CENTER_NULL,"Button",BS_AUTORADIOBUTTON | WS_GROUP,166,30,50,15
CONTROL "Center Z",IDC_CENTER_Z,"Button",BS_AUTORADIOBUTTON,166,45,50,15
LTEXT "Bend Factor (0 - 1)",IDC_STATIC,160,75,60,8
EDITTEXT IDC_VEGETABLE_BEND_FACTOR,226,70,40,14,ES_AUTOHSCROLL
CONTROL "Force Best Sided Lighting",
IDC_VEGETABLE_FORCE_BEST_SIDED_LIGHTING,"Button",
BS_AUTO3STATE | WS_TABSTOP,20,155,120,15
CONTROL "Force Best Sided Lighting",IDC_VEGETABLE_FORCE_BEST_SIDED_LIGHTING,
"Button",BS_AUTO3STATE | WS_TABSTOP,20,155,120,15
END
IDD_INSTANCE DIALOG DISCARDABLE 0, 0, 360, 226
STYLE WS_CHILD
IDD_INSTANCE DIALOG 0, 0, 360, 226
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Instance shape",IDC_STATIC,5,5,51,15,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INSTANCE_GROUP_SHAPE,80,5,110,14,ES_AUTOHSCROLL
LTEXT "Name of the instancied object. (ex: ""table.shape"").",
IDC_STATIC,195,5,160,8,SS_CENTERIMAGE
LTEXT "Name of the instancied object. (ex: ""table.shape"").",IDC_STATIC,195,5,160,8,SS_CENTERIMAGE
LTEXT "Instance name",IDC_STATIC,5,25,49,15,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INSTANCE_NAME,80,25,110,14,ES_AUTOHSCROLL
LTEXT "String associed with the instance in the instance group file. Enter ... to erase all.",
IDC_STATIC,195,26,160,16
LTEXT "Instance group name",IDC_STATIC,5,45,70,15,
SS_CENTERIMAGE
LTEXT "String associed with the instance in the instance group file. Enter ... to erase all.",IDC_STATIC,195,26,160,16
LTEXT "Instance group name",IDC_STATIC,5,45,70,15,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_INSTANCE_GROUP_NAME,80,45,110,14,ES_AUTOHSCROLL
LTEXT "Name of the instance group where this instance will be inserted. Enter ... to erase all",
IDC_STATIC,195,45,160,15
CONTROL "Don't add to scene. If checked, this instance will not be added in the scene.",
IDC_DONT_ADD_TO_SCENE,"Button",BS_AUTO3STATE |
WS_TABSTOP,5,71,255,10
CONTROL "Don't export the shape. If checked, no shape file will be exported from this object.",
IDC_DONT_EXPORT,"Button",BS_AUTO3STATE | WS_TABSTOP,5,86,
271,10
LTEXT "Name of the instance group where this instance will be inserted. Enter ... to erase all",IDC_STATIC,195,45,160,15
CONTROL "Don't add to scene. If checked, this instance will not be added in the scene.",IDC_DONT_ADD_TO_SCENE,
"Button",BS_AUTO3STATE | WS_TABSTOP,5,71,255,10
CONTROL "Don't export the shape. If checked, no shape file will be exported from this object.",IDC_DONT_EXPORT,
"Button",BS_AUTO3STATE | WS_TABSTOP,5,86,271,10
GROUPBOX "Collision",IDC_STATIC,5,180,170,40
CONTROL "Collision Mesh",IDC_CHECK_COLLISION,"Button",
BS_AUTO3STATE | WS_TABSTOP,15,191,110,10
CONTROL "Collision Mesh",IDC_CHECK_COLLISION,"Button",BS_AUTO3STATE | WS_TABSTOP,15,191,110,10
CONTROL "Collision Mesh Exterior",IDC_CHECK_COLLISION_EXTERIOR,
"Button",BS_AUTO3STATE | WS_TABSTOP,15,204,110,10
LTEXT "Enter ... to erase all.",IDC_STATIC,195,15,108,10
GROUPBOX "Camera Collision",IDC_STATIC,5,105,270,70
CONTROL "Automatic (collision only if mesh is lightmapped)",
IDC_CAMERA_COL_RADIO1,"Button",BS_AUTORADIOBUTTON,15,115,
230,10
CONTROL "Disable (don't collision with camera)",
IDC_CAMERA_COL_RADIO2,"Button",BS_AUTORADIOBUTTON,15,130,
230,10
CONTROL "Forced (collision with camera, even if not lightmapped)",
IDC_CAMERA_COL_RADIO3,"Button",BS_AUTORADIOBUTTON,15,145,
230,10
CONTROL "Camera collision only (mesh not displayed)",
IDC_CAMERA_COL_RADIO4,"Button",BS_AUTORADIOBUTTON,15,160,
230,10
CONTROL "Automatic (collision only if mesh is lightmapped)",IDC_CAMERA_COL_RADIO1,
"Button",BS_AUTORADIOBUTTON,15,115,230,10
CONTROL "Disable (don't collision with camera)",IDC_CAMERA_COL_RADIO2,
"Button",BS_AUTORADIOBUTTON,15,130,230,10
CONTROL "Forced (collision with camera, even if not lightmapped)",IDC_CAMERA_COL_RADIO3,
"Button",BS_AUTORADIOBUTTON,15,145,230,10
CONTROL "Camera collision only (mesh not displayed)",IDC_CAMERA_COL_RADIO4,
"Button",BS_AUTORADIOBUTTON,15,160,230,10
END
IDD_ANIM DIALOG DISCARDABLE 0, 0, 360, 221
STYLE WS_CHILD
IDD_ANIM DIALOG 0, 0, 360, 221
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Export note track",IDC_EXPORT_NOTE_TRACK,"Button",
BS_AUTO3STATE | WS_TABSTOP,5,50,75,10
CONTROL "Export animated materials",
IDC_EXPORT_ANIMATED_MATERIALS,"Button",BS_AUTO3STATE |
WS_TABSTOP,5,35,98,10
CONTROL "Export node animation",IDC_EXPORT_NODE_ANIMATION,"Button",
BS_AUTO3STATE | WS_TABSTOP,5,5,98,10
CONTROL "Prefixe tracks with node name (Instance name or, if emtpy, node name)",
IDC_EXPORT_ANIMATION_PREFIXE_NAME,"Button",BS_AUTO3STATE |
BS_MULTILINE | WS_TABSTOP,5,20,245,10
CONTROL "Allow automatic animation. If the shape is ""obj.shape"", then it will bind ""obj.anim"" automatically.",
IDC_AUTOMATIC_ANIM,"Button",BS_AUTO3STATE | BS_MULTILINE |
WS_TABSTOP,5,65,315,10
CONTROL "Export SSS track (Skeleton Spawn Script)",
IDC_EXPORT_SSS_TRACK,"Button",BS_AUTO3STATE | WS_TABSTOP,
5,80,310,10
CONTROL "Export note track",IDC_EXPORT_NOTE_TRACK,"Button",BS_AUTO3STATE | WS_TABSTOP,5,50,75,10
CONTROL "Export animated materials",IDC_EXPORT_ANIMATED_MATERIALS,
"Button",BS_AUTO3STATE | WS_TABSTOP,5,35,98,10
CONTROL "Export node animation",IDC_EXPORT_NODE_ANIMATION,"Button",BS_AUTO3STATE | WS_TABSTOP,5,5,98,10
CONTROL "Prefixe tracks with node name (Instance name or, if emtpy, node name)",IDC_EXPORT_ANIMATION_PREFIXE_NAME,
"Button",BS_AUTO3STATE | BS_MULTILINE | WS_TABSTOP,5,20,245,10
CONTROL "Allow automatic animation. If the shape is ""obj.shape"", then it will bind ""obj.anim"" automatically.",IDC_AUTOMATIC_ANIM,
"Button",BS_AUTO3STATE | BS_MULTILINE | WS_TABSTOP,5,65,315,10
CONTROL "Export SSS track (Skeleton Spawn Script)",IDC_EXPORT_SSS_TRACK,
"Button",BS_AUTO3STATE | WS_TABSTOP,5,80,310,10
END
@ -449,7 +340,7 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
GUIDELINES DESIGNINFO
BEGIN
IDD_PANEL, DIALOG
BEGIN
@ -548,18 +439,18 @@ END
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
@ -568,7 +459,6 @@ END
#endif // APSTUDIO_INVOKED
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
@ -591,17 +481,13 @@ BEGIN
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "Based on Kinetix 3D Studio Max 3.0 plugin sample\0"
VALUE "CompanyName", "Ryzom Core\0"
VALUE "Comments", "Based on Kinetix 3D Studio Max 3.0 plugin sample"
VALUE "CompanyName", "Ryzom Core"
VALUE "FileVersion", "0.12.0\0"
VALUE "InternalName", "CNelExport\0"
VALUE "LegalCopyright", "\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "CNelExport.dlu\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "Ryzom Core\0"
VALUE "InternalName", "CNelExport"
VALUE "OriginalFilename", "CNelExport.dlu"
VALUE "ProductName", "Ryzom Core"
VALUE "ProductVersion", "0.12.0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
@ -610,15 +496,13 @@ BEGIN
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
STRINGTABLE
BEGIN
IDS_LIBDESCRIPTION "Geometry Export/View"
IDS_CATEGORY "Nel Tools"
@ -645,8 +529,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
// Dialog
//
IDD_NODE_PROPERTIES_PANEL DIALOG DISCARDABLE 0, 0, 384, 290
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
IDD_NODE_PROPERTIES_PANEL DIALOG 0, 0, 384, 290
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Node properties"
FONT 8, "MS Sans Serif"
BEGIN
@ -655,76 +539,57 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,327,267,50,15
END
IDD_VERTEX_PROGRAM DIALOG DISCARDABLE 0, 0, 361, 211
STYLE WS_CHILD
IDD_VERTEX_PROGRAM DIALOG 0, 0, 361, 211
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "VertexProgram :",IDC_VP_TEXT,5,5,70,10
COMBOBOX IDC_COMBO_VP,80,0,105,55,CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT "Can't use vp (needed by material shader)",IDC_BYPASS_VP,
196,3,132,9
LTEXT "Can't use vp (needed by material shader)",IDC_BYPASS_VP,196,3,132,9
END
IDD_VP_WINDTREE DIALOG DISCARDABLE 0, 0, 356, 191
STYLE WS_CHILD
IDD_VP_WINDTREE DIALOG 0, 0, 356, 191
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Use VP SpecularLighting",IDC_CHECK_VP_SPECLIGHT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,10,5,105,10
CONTROL "Use VP SpecularLighting",IDC_CHECK_VP_SPECLIGHT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,5,105,10
LTEXT "Frequency Scale :",IDC_STATIC,120,5,60,10
LTEXT "Distance Scale :",IDC_STATIC,245,5,60,10
EDITTEXT IDC_EDIT_VPWT_FREQ_SCALE,190,5,35,12,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT_VPWT_DIST_SCALE,305,5,35,12,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT_VPWT_FREQ_SCALE,190,5,35,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_EDIT_VPWT_DIST_SCALE,305,5,35,12,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
GROUPBOX "Level 0 (eg: Tree Trunk)",IDC_STATIC,0,20,355,50
GROUPBOX "Level 1 (eg: branch)",IDC_STATIC,0,75,355,55
GROUPBOX "Level 2 (eg: leaves)",IDC_STATIC,0,135,355,55
LTEXT "Frequency :",IDC_STATIC,5,31,50,10
LTEXT "DistanceXY :",IDC_STATIC,5,41,50,10
LTEXT "Distance Bias :",IDC_STATIC,5,51,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L0,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,30,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L0,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,41,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L0,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,30,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L0,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,41,100,11
LTEXT "FreqWindDep :",IDC_STATIC,180,31,50,10
LTEXT "DistanceZ :",IDC_STATIC,180,40,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L0,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,30,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L0,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,40,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L0,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,51,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L0,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,30,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L0,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,40,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L0,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,51,100,11
LTEXT "Frequency :",IDC_STATIC,5,90,50,10
LTEXT "DistanceXY :",IDC_STATIC,5,101,50,10
LTEXT "Distance Bias :",IDC_STATIC,5,112,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L1,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,91,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L1,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,101,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,91,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,101,100,11
LTEXT "FreqWindDep :",IDC_STATIC,180,92,50,10
LTEXT "DistanceZ :",IDC_STATIC,180,100,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L1,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,90,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L1,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,100,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L1,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,112,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,90,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,100,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L1,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,112,100,11
LTEXT "Frequency :",IDC_STATIC,5,150,50,10
LTEXT "DistanceXY :",IDC_STATIC,5,160,50,10
LTEXT "Distance Bias :",IDC_STATIC,5,170,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L2,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,150,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L2,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,160,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQ_L2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,150,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTXY_L2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,160,100,11
LTEXT "FreqWindDep :",IDC_STATIC,180,153,50,10
LTEXT "DistanceZ :",IDC_STATIC,180,162,50,10
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L2,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,151,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L2,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,162,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L2,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,170,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_FREQWD_L2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,151,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_DISTZ_L2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,230,162,100,11
CONTROL "Slider1",IDC_SLIDER_VPWT_BIAS_L2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,170,100,11
LTEXT "-0.12",IDC_STATIC_VPWT_FREQ_L0,155,31,20,10,SS_SUNKEN
LTEXT "0.12",IDC_STATIC_VPWT_DISTXY_L0,155,41,20,10,SS_SUNKEN
LTEXT "0.12",IDC_STATIC_VPWT_BIAS_L0,155,51,20,10,SS_SUNKEN
@ -748,8 +613,8 @@ BEGIN
LTEXT "+2",IDC_STATIC,145,180,10,8
END
IDD_LIGHTMAP2 DIALOG DISCARDABLE 0, 0, 361, 211
STYLE WS_CHILD
IDD_LIGHTMAP2 DIALOG 0, 0, 361, 211
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "LMC: 8Bits Lightmap compression",IDC_STATIC,5,5,195,190
@ -757,67 +622,45 @@ BEGIN
LTEXT "Sun Group",IDC_LMC_STATIC3,10,115,40,10
LTEXT "Night Group",IDC_LMC_STATIC6,10,155,45,10
LTEXT "Ambient:",IDC_LMC_STATIC1,10,90,45,10
CONTROL "Custom1",IDC_LM_ALWAYS_AMBIENT,"ColorSwatch",WS_TABSTOP,
65,85,30,15
CONTROL "Custom1",IDC_LM_ALWAYS_AMBIENT,"ColorSwatch",WS_TABSTOP,65,85,30,15
LTEXT "Diffuse:",IDC_LMC_STATIC2,105,90,45,10
CONTROL "Custom1",IDC_LM_ALWAYS_DIFFUSE,"ColorSwatch",WS_TABSTOP,
160,85,30,15
CONTROL "Custom1",IDC_LM_ALWAYS_DIFFUSE,"ColorSwatch",WS_TABSTOP,160,85,30,15
LTEXT "Ambient:",IDC_LMC_STATIC4,10,130,45,10
CONTROL "Custom1",IDC_LM_DAY_AMBIENT,"ColorSwatch",WS_TABSTOP,65,
125,30,15
CONTROL "Custom1",IDC_LM_DAY_AMBIENT,"ColorSwatch",WS_TABSTOP,65,125,30,15
LTEXT "Diffuse:",IDC_LMC_STATIC5,105,130,45,10
CONTROL "Custom1",IDC_LM_DAY_DIFFUSE,"ColorSwatch",WS_TABSTOP,
160,125,30,15
CONTROL "Custom1",IDC_LM_DAY_DIFFUSE,"ColorSwatch",WS_TABSTOP,160,125,30,15
LTEXT "Ambient:",IDC_LMC_STATIC7,10,170,45,10
CONTROL "Custom1",IDC_LM_NIGHT_AMBIENT,"ColorSwatch",WS_TABSTOP,
65,165,30,15
CONTROL "Custom1",IDC_LM_NIGHT_AMBIENT,"ColorSwatch",WS_TABSTOP,65,165,30,15
LTEXT "Diffuse:",IDC_LMC_STATIC8,105,170,45,10
CONTROL "Custom1",IDC_LM_NIGHT_DIFFUSE,"ColorSwatch",WS_TABSTOP,
160,165,30,15
CONTROL "Use 8Bits lightmaps",IDC_LM_COMPRESS_8BIT,"Button",
BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,10,20,
90,10
CONTROL "Custom1",IDC_LM_NIGHT_DIFFUSE,"ColorSwatch",WS_TABSTOP,160,165,30,15
CONTROL "Use 8Bits lightmaps",IDC_LM_COMPRESS_8BIT,"Button",BS_AUTO3STATE | BS_TOP | BS_MULTILINE | WS_TABSTOP,10,20,90,10
PUSHBUTTON "Auto Setup All",IDC_LMC_AUTO_SETUP,15,45,65,15
PUSHBUTTON "Auto Setup Visible",IDC_LMC_AUTO_SETUP_VISIBLEONLY,95,
45,90,15
PUSHBUTTON "Auto Setup Visible",IDC_LMC_AUTO_SETUP_VISIBLEONLY,95,45,90,15
PUSHBUTTON "Copy From",IDC_LMC_COPY_FROM,120,20,65,15
END
IDD_LMC_CHOOSE_FROM DIALOG DISCARDABLE 0, 0, 217, 290
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
IDD_LMC_CHOOSE_FROM DIALOG 0, 0, 217, 290
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Choose LMC setup from object"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,160,240,50,14
PUSHBUTTON "Cancel",IDCANCEL,160,265,50,14
LISTBOX IDC_LMC_COPY_LIST,5,20,120,260,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_LMC_COPY_LIST,5,20,120,260,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LTEXT "List of objects in LMC mode.",IDC_STATIC,5,10,120,10
CONTROL "Custom1",IDC_LMC_COPY_ALWAYS_DIFFUSE,"ColorSwatch",
WS_TABSTOP,180,45,30,15
CONTROL "Custom1",IDC_LMC_COPY_ALWAYS_AMBIENT,"ColorSwatch",
WS_TABSTOP,140,45,30,15
CONTROL "Custom1",IDC_LMC_COPY_SUN_AMBIENT,"ColorSwatch",
WS_TABSTOP,140,90,30,15
CONTROL "Custom1",IDC_LMC_COPY_SUN_DIFFUSE,"ColorSwatch",
WS_TABSTOP,180,90,30,15
CONTROL "Custom1",IDC_LMC_COPY_NIGHT_DIFFUSE,"ColorSwatch",
WS_TABSTOP,180,135,30,15
CONTROL "Custom1",IDC_LMC_COPY_NIGHT_AMBIENT,"ColorSwatch",
WS_TABSTOP,140,135,30,15
CONTROL "Custom1",IDC_LMC_COPY_ALWAYS_DIFFUSE,"ColorSwatch",WS_TABSTOP,180,45,30,15
CONTROL "Custom1",IDC_LMC_COPY_ALWAYS_AMBIENT,"ColorSwatch",WS_TABSTOP,140,45,30,15
CONTROL "Custom1",IDC_LMC_COPY_SUN_AMBIENT,"ColorSwatch",WS_TABSTOP,140,90,30,15
CONTROL "Custom1",IDC_LMC_COPY_SUN_DIFFUSE,"ColorSwatch",WS_TABSTOP,180,90,30,15
CONTROL "Custom1",IDC_LMC_COPY_NIGHT_DIFFUSE,"ColorSwatch",WS_TABSTOP,180,135,30,15
CONTROL "Custom1",IDC_LMC_COPY_NIGHT_AMBIENT,"ColorSwatch",WS_TABSTOP,140,135,30,15
LTEXT "Colors for this node:",IDC_STATIC,140,25,70,10
CONTROL "Get",IDC_LMC_COPY_ALWAYS_AMBIENT_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,65,30,10
CONTROL "Get",IDC_LMC_COPY_ALWAYS_DIFFUSE_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,180,65,30,10
CONTROL "Get",IDC_LMC_COPY_SUN_DIFFUSE_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,180,110,30,10
CONTROL "Get",IDC_LMC_COPY_SUN_AMBIENT_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,110,30,10
CONTROL "Get",IDC_LMC_COPY_NIGHT_AMBIENT_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,155,30,10
CONTROL "Get",IDC_LMC_COPY_NIGHT_DIFFUSE_FILTER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,180,155,30,10
CONTROL "Get",IDC_LMC_COPY_ALWAYS_AMBIENT_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,65,30,10
CONTROL "Get",IDC_LMC_COPY_ALWAYS_DIFFUSE_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,65,30,10
CONTROL "Get",IDC_LMC_COPY_SUN_DIFFUSE_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,110,30,10
CONTROL "Get",IDC_LMC_COPY_SUN_AMBIENT_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,110,30,10
CONTROL "Get",IDC_LMC_COPY_NIGHT_AMBIENT_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,155,30,10
CONTROL "Get",IDC_LMC_COPY_NIGHT_DIFFUSE_FILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,155,30,10
PUSHBUTTON "Clear All",IDC_LMC_COPY_CLEAR,140,175,70,15
PUSHBUTTON "Get All",IDC_LMC_COPY_GET_ALL,140,195,70,15
END
@ -829,7 +672,7 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
GUIDELINES DESIGNINFO
BEGIN
IDD_NODE_PROPERTIES_PANEL, DIALOG
BEGIN

View file

@ -1054,7 +1054,7 @@ INT_PTR CALLBACK LightmapDialogCallback (
// Set enable disable
LightingStateChanged (hwndDlg, currentParam);
CheckRadioButton (hwndDlg, IDC_LIGHT_GROUP_ALWAYS, IDC_LIGHT_GROUP_NIGHT, IDC_LIGHT_GROUP_ALWAYS+(currentParam->LightGroup%3));
CheckRadioButton (hwndDlg, IDC_LIGHT_GROUP_ALWAYS, IDC_LIGHT_GROUP_LANDSCAPE_AMBIENT, IDC_LIGHT_GROUP_ALWAYS+(currentParam->LightGroup%5));
}
break;
@ -1096,10 +1096,14 @@ INT_PTR CALLBACK LightmapDialogCallback (
// Get the acceleration type
if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_ALWAYS) == BST_CHECKED)
currentParam->LightGroup = 0;
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_DAY) == BST_CHECKED)
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_LANDSCAPE_DIFFUSE) == BST_CHECKED)
currentParam->LightGroup = 1;
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_NIGHT) == BST_CHECKED)
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_NIGHT_CYCLE) == BST_CHECKED)
currentParam->LightGroup = 2;
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_DAY_CYCLE) == BST_CHECKED)
currentParam->LightGroup = 3;
else if (IsDlgButtonChecked (hwndDlg, IDC_LIGHT_GROUP_LANDSCAPE_AMBIENT) == BST_CHECKED)
currentParam->LightGroup = 4;
else
currentParam->LightGroup = -1;
}

View file

@ -1,5 +1,5 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Microsoft Visual C++ generated include file.
// Used by nel_export.rc
//
#define IDS_LIBDESCRIPTION 1
@ -7,7 +7,6 @@
#define IDS_CLASS_NAME 3
#define IDC_ADD 3
#define IDS_PARAMS 4
#define IDC_STATIC -1
#define IDC_REMOVE 4
#define IDS_SPIN 5
#define IDC_UP 5
@ -225,9 +224,6 @@
#define IDC_OPEN_OCC_MODEL 1529
#define IDC_ENV_FX 1531
#define IDC_SOUND_GROUP 1532
#define IDC_LIGHT_GROUP_ALWAYS 1533
#define IDC_LIGHT_GROUP_DAY 1534
#define IDC_LIGHT_GROUP_NIGHT 1535
#define IDC_LIGHT_DONT_CAST_SHADOW_INTERIOR 1536
#define IDC_LIGHT_DONT_CAST_SHADOW_EXTERIOR 1537
#define IDC_8BITS_LIGHTMAP 1537
@ -270,6 +266,12 @@
#define IDC_LMC_COPY_ALWAYS_DIFFUSE 1567
#define IDC_LMC_COPY_LIST 1568
#define IDC_REALTIME_LIGHT_AMBIENT_ADD_SUN 1569
#define IDC_LIGHT_GROUP_ALWAYS 1570
#define IDC_LIGHT_GROUP_LANDSCAPE_DIFFUSE 1571
#define IDC_LIGHT_GROUP_NIGHT_CYCLE 1572
#define IDC_LIGHT_GROUP_DAY_CYCLE 1573
#define IDC_LIGHT_GROUP_LANDSCAPE_AMBIENT 1574
#define IDC_STATIC -1
// Next default values for new objects
//

View file

@ -71,7 +71,7 @@ void initIG()
{
// Initialize lightmaps colors for the fireworks.
// Fireworks is group 3
// Fireworks is group 5
Scene->setLightGroupColor (LightGroupFireworks, CRGBA(0,0,0));
}// initIG //

View file

@ -70,7 +70,7 @@ void CGroupHTMLCS::addHTTPGetParams (string &url, bool /*trustedDomain*/)
// ***************************************************************************
void CGroupHTMLCS::addHTTPPostParams (HTAssocList *formfields, bool /*trustedDomain*/)
void CGroupHTMLCS::addHTTPPostParams (SFormFields &formfields, bool /*trustedDomain*/)
{
std::vector<CParameter> parameters;
getParameters (parameters, false);
@ -78,7 +78,7 @@ void CGroupHTMLCS::addHTTPPostParams (HTAssocList *formfields, bool /*trustedDom
uint i;
for (i=0; i<parameters.size(); i++)
{
HTParseFormInput(formfields, (parameters[i].Name+"="+parameters[i].Value).c_str());
formfields.add(parameters[i].Name, parameters[i].Value);
}
}

View file

@ -40,7 +40,7 @@ public:
// From CGroupHTML
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
virtual std::string home();
private:

View file

@ -83,7 +83,7 @@ void CGroupHTMLForum::addHTTPGetParams (string &url, bool /*trustedDomain*/)
// ***************************************************************************
void CGroupHTMLForum::addHTTPPostParams (HTAssocList *formfields, bool /*trustedDomain*/)
void CGroupHTMLForum::addHTTPPostParams (SFormFields &formfields, bool /*trustedDomain*/)
{
ucstring user_name = UserEntity->getLoginName ();
const SGuild &guild = CGuildManager::getInstance()->getGuild();
@ -91,10 +91,10 @@ void CGroupHTMLForum::addHTTPPostParams (HTAssocList *formfields, bool /*trusted
if (!gname.empty())
{
HTParseFormInput(formfields, ("shard="+toString(CharacterHomeSessionId)).c_str());
HTParseFormInput(formfields, ("user_login="+user_name.toString()).c_str());
HTParseFormInput(formfields, ("forum="+gname).c_str());
HTParseFormInput(formfields, ("session_cookie="+NetMngr.getLoginCookie().toString()).c_str());
formfields.add("shard", toString(CharacterHomeSessionId));
formfields.add("user_login", user_name.toString());
formfields.add("forum", gname);
formfields.add("session_cookie", NetMngr.getLoginCookie().toString());
}
else
{

View file

@ -40,7 +40,7 @@ public:
// From CGroupHTML
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
virtual std::string home();
virtual void handle ();

View file

@ -62,13 +62,13 @@ void CGroupHTMLMail::addHTTPGetParams (string &url, bool /*trustedDomain*/)
// ***************************************************************************
void CGroupHTMLMail::addHTTPPostParams (HTAssocList *formfields, bool /*trustedDomain*/)
void CGroupHTMLMail::addHTTPPostParams (SFormFields &formfields, bool /*trustedDomain*/)
{
ucstring user_name = UserEntity->getLoginName ();
HTParseFormInput(formfields, ("shard="+toString(CharacterHomeSessionId)).c_str());
HTParseFormInput(formfields, ("user_login="+user_name.toString()).c_str());
HTParseFormInput(formfields, ("session_cookie="+NetMngr.getLoginCookie().toString()).c_str());
HTParseFormInput(formfields, ("lang="+CI18N::getCurrentLanguageCode()).c_str());
formfields.add("shard", toString(CharacterHomeSessionId));
formfields.add("user_login", user_name.toString());
formfields.add("session_cookie", NetMngr.getLoginCookie().toString());
formfields.add("lang", CI18N::getCurrentLanguageCode());
}
// ***************************************************************************

View file

@ -40,7 +40,7 @@ public:
// From CGroupHTML
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
virtual std::string home();
virtual void handle ();

View file

@ -307,19 +307,19 @@ void CGroupHTMLAuth::addHTTPGetParams (string &url, bool trustedDomain)
// ***************************************************************************
void CGroupHTMLAuth::addHTTPPostParams (HTAssocList *formfields, bool trustedDomain)
void CGroupHTMLAuth::addHTTPPostParams (SFormFields &formfields, bool trustedDomain)
{
if(!UserEntity) return;
uint32 cid = NetMngr.getLoginCookie().getUserId() * 16 + PlayerSelectedSlot;
HTParseFormInput(formfields, ("shardid="+toString(CharacterHomeSessionId)).c_str());
HTParseFormInput(formfields, ("name="+UserEntity->getLoginName().toUtf8()).c_str());
HTParseFormInput(formfields, ("lang="+CI18N::getCurrentLanguageCode()).c_str());
HTParseFormInput(formfields, "ig=1");
formfields.add("shardid", toString(CharacterHomeSessionId));
formfields.add("name", UserEntity->getLoginName().toUtf8());
formfields.add("lang", CI18N::getCurrentLanguageCode());
formfields.add("ig", "1");
if (trustedDomain)
{
HTParseFormInput(formfields, ("cid="+toString(cid)).c_str());
HTParseFormInput(formfields, ("authkey="+getWebAuthKey()).c_str());
formfields.add("cid", toString(cid));
formfields.add("authkey", getWebAuthKey());
}
}
@ -365,7 +365,7 @@ void CGroupHTMLWebIG::addHTTPGetParams (string &url, bool trustedDomain)
// ***************************************************************************
void CGroupHTMLWebIG::addHTTPPostParams (HTAssocList *formfields, bool trustedDomain)
void CGroupHTMLWebIG::addHTTPPostParams (SFormFields &formfields, bool trustedDomain)
{
CGroupHTMLAuth::addHTTPPostParams(formfields, trustedDomain);
}

View file

@ -33,7 +33,7 @@ public:
// From CGroupHTML
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
virtual std::string home();
virtual void handle ();
@ -55,7 +55,7 @@ public:
/// From CGroupHTMLAuth
virtual void addHTTPGetParams (std::string &url, bool trustedDomain);
virtual void addHTTPPostParams (HTAssocList *formfields, bool trustedDomain);
virtual void addHTTPPostParams (SFormFields &formfields, bool trustedDomain);
virtual std::string home();
virtual void handle ();

View file

@ -215,7 +215,7 @@ void CGroupQuickHelp::setGroupTextSize (CInterfaceGroup *group, bool selected)
extern CActionsContext ActionsContext;
void CGroupQuickHelp::beginElement (uint element_number, const BOOL *present, const char **value)
void CGroupQuickHelp::beginElement (uint element_number, const std::vector<bool> &present, const std::vector<const char *>&value)
{
CGroupHTML::beginElement (element_number, present, value);

View file

@ -48,7 +48,7 @@ private:
virtual void updateCoords();
// From CGroupHTML
virtual void beginElement (uint element_number, const BOOL *present, const char **value);
virtual void beginElement (uint element_number, const std::vector<bool> &present, const std::vector<const char *>&value);
virtual void endBuild ();
virtual void browse (const char *url);
virtual std::string home();

View file

@ -354,11 +354,17 @@ void CLightCycleManager::setHour(float hour, const CWeatherManagerClient &wm, NL
{
CRGBA color;
color.add(_LastDiffuse, lightningColor);
Scene->setLightGroupColor (LightGroupDay, color);
Scene->setLightGroupColor(LightGroupLandscapeDiffuse, color);
color.add(_LastAmbient, lightningColor);
Scene->setLightGroupColor(LightGroupLandscapeAmbient, color);
float nightLevel = _LightLevel*255.f;
clamp (nightLevel, 0, 255);
color.set ((uint8)nightLevel, (uint8)nightLevel, (uint8)nightLevel);
Scene->setLightGroupColor (LightGroupNight, color);
uint8 nightLevelColor = (uint8)nightLevel;
color.set (nightLevelColor, nightLevelColor, nightLevelColor);
Scene->setLightGroupColor (LightGroupNightCycle, color);
uint8 dayLevelColor = 255 - nightLevel;
color.set (dayLevelColor, dayLevelColor, dayLevelColor);
Scene->setLightGroupColor (LightGroupDayCycle, color);
}
if (Landscape)

View file

@ -65,9 +65,11 @@ class CPlayerSheet;
enum TLightGroup
{
LightGroupAlways = 0,
LightGroupDay,
LightGroupNight,
LightGroupFireworks,
LightGroupLandscapeDiffuse = 1,
LightGroupNightCycle = 2,
LightGroupDayCycle = 3,
LightGroupLandscapeAmbient = 4,
LightGroupFireworks
};
class CSeeds;