Merged in shubham_meena/ryzomcore (pull request #71)

documentation for doxygen containing plugin management system
This commit is contained in:
Matthew Lagoe 2014-09-03 04:15:02 -07:00
commit fc5d684403
1093 changed files with 27695 additions and 7504 deletions

View file

@ -43,7 +43,6 @@ default_c
*.so *.so
*.so.* *.so.*
*_debug *_debug
core
*.pc *.pc
*.gch *.gch
@ -249,3 +248,5 @@ code/nel/tools/build_gamedata/processes/ai_wmap/ai_build_wmap.cfg
code/nel/tools/build_gamedata/processes/sheets/sheets_packer.cfg code/nel/tools/build_gamedata/processes/sheets/sheets_packer.cfg
code/nel/tools/build_gamedata/processes/rbank/build_rbank.cfg code/nel/tools/build_gamedata/processes/rbank/build_rbank.cfg
code/nel/tools/build_gamedata/processes/zone/debug_zone_dependencies.cfg code/nel/tools/build_gamedata/processes/zone/debug_zone_dependencies.cfg
code/web/public_php/config.php
code/web/public_php/is_installed

View file

@ -197,6 +197,10 @@ IF(WITH_TOOLS)
ADD_SUBDIRECTORY(tool) ADD_SUBDIRECTORY(tool)
ENDIF(WITH_TOOLS) ENDIF(WITH_TOOLS)
IF(WITH_STUDIO)
ADD_SUBDIRECTORY(studio)
ENDIF(WITH_STUDIO)
# To build the documention, you will have to enable it # To build the documention, you will have to enable it
# and then do the equivalent of "make DoxygenDoc". # and then do the equivalent of "make DoxygenDoc".
IF(BUILD_DOCUMENTATION) IF(BUILD_DOCUMENTATION)

View file

@ -229,6 +229,10 @@ Remove the CMakeCache.txt file and try again from another folder, e.g.:
ENDMACRO(CHECK_OUT_OF_SOURCE) ENDMACRO(CHECK_OUT_OF_SOURCE)
MACRO(NL_SETUP_DEFAULT_OPTIONS) MACRO(NL_SETUP_DEFAULT_OPTIONS)
IF(WITH_QT)
OPTION(WITH_STUDIO "Build Core Studio" OFF )
ENDIF(WITH_QT)
### ###
# Features # Features
### ###

View file

@ -86,6 +86,11 @@ public:
_BitmapName[bitmapType]=name; _BitmapName[bitmapType]=name;
} }
std::string getFileName (TBitmap bitmapType) const
{
return _BitmapName[bitmapType];
}
/// Get the additional orientation (CCW) for alpha texture. /// Get the additional orientation (CCW) for alpha texture.
uint8 getRotAlpha () uint8 getRotAlpha ()
{ {
@ -161,6 +166,9 @@ public:
{ {
return _Name; return _Name;
}; };
std::set<std::string> getTileSets() const{ return _TileSet; }
void setName (const std::string& name); void setName (const std::string& name);
void addTileSet (const std::string& name); void addTileSet (const std::string& name);
void removeTileSet (const std::string& name); void removeTileSet (const std::string& name);
@ -169,6 +177,8 @@ public:
return _TileSet.find (name)!=_TileSet.end(); return _TileSet.find (name)!=_TileSet.end();
} }
void clear(){ _TileSet.clear(); }
void serial(class NLMISC::IStream &f) throw(NLMISC::EStream); void serial(class NLMISC::IStream &f) throw(NLMISC::EStream);
private: private:

View file

@ -68,6 +68,8 @@ namespace NLGUI
return _GlobalInstance; return _GlobalInstance;
} }
void getActionHandlers( std::vector< std::string > &handlers );
/// return pointer to action handler or null if it doesn't exist /// return pointer to action handler or null if it doesn't exist
IActionHandler *getActionHandler(const std::string &name) const IActionHandler *getActionHandler(const std::string &name) const
{ {

View file

@ -171,7 +171,9 @@ namespace NLGUI
THotSpot _ToolTipPosRefAlt : 6; THotSpot _ToolTipPosRefAlt : 6;
protected: protected:
void convertTooltipHotSpot(const char *prop, THotSpot &parentHS, THotSpot &childHS); void convertTooltipHotSpot(const char *prop, THotSpot &parentHS, THotSpot &childHS);
void convertTooltipHotSpot(const char *prop, THotSpot &HS );
static std::string TooltipHotSpotToString( THotSpot parent, THotSpot child ); static std::string TooltipHotSpotToString( THotSpot parent, THotSpot child );
static std::string TooltipHotSpotToString( THotSpot HS );
void mapAHString( const std::string &key, const std::string &value ); void mapAHString( const std::string &key, const std::string &value );
std::string getAHString( const std::string &key ) const; std::string getAHString( const std::string &key ) const;

View file

@ -286,6 +286,12 @@ namespace NLGUI
*/ */
void flush (); void flush ();
/// Retrives a texture
bool getTexture( NLMISC::CBitmap &bm, const std::string &name );
/// Retrieve the texture names
void getTextureNames( std::vector< std::string > &textures );
/** /**
* get a texture file pointer from a string name. O(logN) * get a texture file pointer from a string name. O(logN)
* \param id : the id of the texture * \param id : the id of the texture

View file

@ -232,6 +232,9 @@ private:
// If not NULL, binary mode detected, use this stream in serials // If not NULL, binary mode detected, use this stream in serials
IStream *_BinaryStream; IStream *_BinaryStream;
// System dependant structure for locale
void* _Locale;
}; };

View file

@ -200,6 +200,10 @@ public:
*/ */
void getFileListByName(const std::string &extension, const std::string &name, std::vector<std::string> &filenames); void getFileListByName(const std::string &extension, const std::string &name, std::vector<std::string> &filenames);
/** Create a list of file having the requested string in the path and the requested extension.
*/
void getFileListByPath(const std::string &extension, const std::string &path, std::vector<std::string> &filenames);
/** Make a path relative to another if possible, else doesn't change it. /** Make a path relative to another if possible, else doesn't change it.
* \param basePath is the base path to be relative to. * \param basePath is the base path to be relative to.
* \param relativePath is the path to make relative to basePath. * \param relativePath is the path to make relative to basePath.
@ -492,6 +496,10 @@ public:
*/ */
static void getFileListByName(const std::string &extension, const std::string &name, std::vector<std::string> &filenames); static void getFileListByName(const std::string &extension, const std::string &name, std::vector<std::string> &filenames);
/** Create a list of file having the requested string in the path and the requested extension
*/
static void getFileListByPath(const std::string &extension, const std::string &path, std::vector<std::string> &filenames);
/** Make a path relative to another if possible, else doesn't change it. /** Make a path relative to another if possible, else doesn't change it.
* \param basePath is the base path to be relative to. * \param basePath is the base path to be relative to.
* \param relativePath is the path to make relative to basePath. * \param relativePath is the path to make relative to basePath.

View file

@ -364,6 +364,10 @@ typedef unsigned int uint; // at least 32bits (depend of processor)
#include <malloc.h> #include <malloc.h>
inline void *aligned_malloc(size_t size, size_t alignment) { return _aligned_malloc(size, alignment); } inline void *aligned_malloc(size_t size, size_t alignment) { return _aligned_malloc(size, alignment); }
inline void aligned_free(void *ptr) { _aligned_free(ptr); } inline void aligned_free(void *ptr) { _aligned_free(ptr); }
#elif defined(NL_OS_MAC)
// under Mac OS X, malloc is already aligned for SSE and Altivec (16 bytes alignment)
inline void *aligned_malloc(size_t size, size_t alignment) { return malloc(size); }
inline void aligned_free(void *ptr) { free(ptr); }
#else #else
#include <malloc.h> #include <malloc.h>
inline void *aligned_malloc(size_t size, size_t alignment) { return memalign(alignment, size); } inline void *aligned_malloc(size_t size, size_t alignment) { return memalign(alignment, size); }

View file

@ -450,14 +450,14 @@ PFNGLGETOCCLUSIONQUERYIVNVPROC nglGetOcclusionQueryivNV;
PFNGLGETOCCLUSIONQUERYUIVNVPROC nglGetOcclusionQueryuivNV; PFNGLGETOCCLUSIONQUERYUIVNVPROC nglGetOcclusionQueryuivNV;
// ARB_occlusion_query // ARB_occlusion_query
PFNGLGENQUERIESPROC nglGenQueriesARB; PFNGLGENQUERIESARBPROC nglGenQueriesARB;
PFNGLDELETEQUERIESPROC nglDeleteQueriesARB; PFNGLDELETEQUERIESARBPROC nglDeleteQueriesARB;
PFNGLISQUERYPROC nglIsQueryARB; PFNGLISQUERYARBPROC nglIsQueryARB;
PFNGLBEGINQUERYPROC nglBeginQueryARB; PFNGLBEGINQUERYARBPROC nglBeginQueryARB;
PFNGLENDQUERYPROC nglEndQueryARB; PFNGLENDQUERYARBPROC nglEndQueryARB;
PFNGLGETQUERYIVPROC nglGetQueryivARB; PFNGLGETQUERYIVARBPROC nglGetQueryivARB;
PFNGLGETQUERYOBJECTIVPROC nglGetQueryObjectivARB; PFNGLGETQUERYOBJECTIVARBPROC nglGetQueryObjectivARB;
PFNGLGETQUERYOBJECTUIVPROC nglGetQueryObjectuivARB; PFNGLGETQUERYOBJECTUIVARBPROC nglGetQueryObjectuivARB;
// GL_EXT_framebuffer_object // GL_EXT_framebuffer_object
PFNGLISRENDERBUFFEREXTPROC nglIsRenderbufferEXT; PFNGLISRENDERBUFFEREXTPROC nglIsRenderbufferEXT;
@ -1397,14 +1397,14 @@ static bool setupARBOcclusionQuery(const char *glext)
CHECK_EXT("ARB_occlusion_query"); CHECK_EXT("ARB_occlusion_query");
#ifndef USE_OPENGLES #ifndef USE_OPENGLES
CHECK_ADDRESS(PFNGLGENQUERIESPROC, glGenQueriesARB); CHECK_ADDRESS(PFNGLGENQUERIESARBPROC, glGenQueriesARB);
CHECK_ADDRESS(PFNGLDELETEQUERIESPROC, glDeleteQueriesARB); CHECK_ADDRESS(PFNGLDELETEQUERIESARBPROC, glDeleteQueriesARB);
CHECK_ADDRESS(PFNGLISQUERYPROC, glIsQueryARB); CHECK_ADDRESS(PFNGLISQUERYARBPROC, glIsQueryARB);
CHECK_ADDRESS(PFNGLBEGINQUERYPROC, glBeginQueryARB); CHECK_ADDRESS(PFNGLBEGINQUERYARBPROC, glBeginQueryARB);
CHECK_ADDRESS(PFNGLENDQUERYPROC, glEndQueryARB); CHECK_ADDRESS(PFNGLENDQUERYARBPROC, glEndQueryARB);
CHECK_ADDRESS(PFNGLGETQUERYIVPROC, glGetQueryivARB); CHECK_ADDRESS(PFNGLGETQUERYIVARBPROC, glGetQueryivARB);
CHECK_ADDRESS(PFNGLGETQUERYOBJECTIVPROC, glGetQueryObjectivARB); CHECK_ADDRESS(PFNGLGETQUERYOBJECTIVARBPROC, glGetQueryObjectivARB);
CHECK_ADDRESS(PFNGLGETQUERYOBJECTUIVPROC, glGetQueryObjectuivARB); CHECK_ADDRESS(PFNGLGETQUERYOBJECTUIVARBPROC, glGetQueryObjectuivARB);
#endif #endif
return true; return true;

View file

@ -744,14 +744,14 @@ extern PFNGLGETOCCLUSIONQUERYUIVNVPROC nglGetOcclusionQueryuivNV;
// ARB_occlusion_query // ARB_occlusion_query
//================================== //==================================
extern PFNGLGENQUERIESPROC nglGenQueriesARB; extern PFNGLGENQUERIESARBPROC nglGenQueriesARB;
extern PFNGLDELETEQUERIESPROC nglDeleteQueriesARB; extern PFNGLDELETEQUERIESARBPROC nglDeleteQueriesARB;
extern PFNGLISQUERYPROC nglIsQueryARB; extern PFNGLISQUERYARBPROC nglIsQueryARB;
extern PFNGLBEGINQUERYPROC nglBeginQueryARB; extern PFNGLBEGINQUERYARBPROC nglBeginQueryARB;
extern PFNGLENDQUERYPROC nglEndQueryARB; extern PFNGLENDQUERYARBPROC nglEndQueryARB;
extern PFNGLGETQUERYIVPROC nglGetQueryivARB; extern PFNGLGETQUERYIVARBPROC nglGetQueryivARB;
extern PFNGLGETQUERYOBJECTIVPROC nglGetQueryObjectivARB; extern PFNGLGETQUERYOBJECTIVARBPROC nglGetQueryObjectivARB;
extern PFNGLGETQUERYOBJECTUIVPROC nglGetQueryObjectuivARB; extern PFNGLGETQUERYOBJECTUIVARBPROC nglGetQueryObjectuivARB;
#ifdef NL_OS_WINDOWS #ifdef NL_OS_WINDOWS

View file

@ -408,6 +408,12 @@ void CInstanceLighter::light (const CInstanceGroup &igIn, CInstanceGroup &igOut,
string name= _Instances[i].Name; string name= _Instances[i].Name;
bool shapeFound= true; bool shapeFound= true;
if (toLower (CFile::getExtension (name)) == "pacs_prim")
{
nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str());
continue;
}
// Try to find the shape in the UseShapeMap. // Try to find the shape in the UseShapeMap.
std::map<string, IShape*>::const_iterator iteMap= lightDesc.UserShapeMap.find (name); std::map<string, IShape*>::const_iterator iteMap= lightDesc.UserShapeMap.find (name);

View file

@ -111,6 +111,18 @@ namespace NLGUI
} }
} }
void CAHManager::getActionHandlers( std::vector< std::string > &handlers )
{
handlers.clear();
std::map< string, IActionHandler* >::iterator itr = FactoryMap.begin();
while( itr != FactoryMap.end() )
{
handlers.push_back( itr->first );
++itr;
}
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
IActionHandler* CAHManager::getAH(const std::string &name, std::string &params) IActionHandler* CAHManager::getAH(const std::string &name, std::string &params)
{ {

View file

@ -86,7 +86,7 @@ namespace NLGUI
break; break;
} }
return ""; return "control";
} }
CCtrlBase::TToolTipParentType CCtrlBase::stringToToolTipParent( const std::string &str ) CCtrlBase::TToolTipParentType CCtrlBase::stringToToolTipParent( const std::string &str )
@ -220,28 +220,22 @@ namespace NLGUI
else else
if( name == "tooltip_posref" ) if( name == "tooltip_posref" )
{ {
std::string s; return TooltipHotSpotToString( _ToolTipPosRef );
if( ( _ToolTipParentPosRef == Hotspot_TTAuto ) && ( _ToolTipPosRef == Hotspot_TTAuto ) )
return "auto";
else{
s = CInterfaceElement::HotSpotToString( _ToolTipParentPosRef );
s += " ";
s += CInterfaceElement::HotSpotToString( _ToolTipPosRef );
return s;
} }
else
if( name == "tooltip_parent_posref" )
{
return TooltipHotSpotToString( _ToolTipParentPosRef );
} }
else else
if( name == "tooltip_posref_alt" ) if( name == "tooltip_posref_alt" )
{ {
std::string s; return TooltipHotSpotToString( _ToolTipPosRefAlt );
if( ( _ToolTipParentPosRefAlt == Hotspot_TTAuto ) && ( _ToolTipPosRefAlt == Hotspot_TTAuto ) )
return "auto";
else{
s = CInterfaceElement::HotSpotToString( _ToolTipParentPosRefAlt );
s += " ";
s += CInterfaceElement::HotSpotToString( _ToolTipPosRefAlt );
return s;
} }
else
if( name == "tooltip_parent_posref_alt" )
{
return TooltipHotSpotToString( _ToolTipParentPosRefAlt );
} }
else else
if( name == "instant_help" ) if( name == "instant_help" )
@ -293,21 +287,65 @@ namespace NLGUI
else else
if( name == "tooltip_posref" ) if( name == "tooltip_posref" )
{ {
THotSpot parentHS;
THotSpot HS; THotSpot HS;
convertTooltipHotSpot( value.c_str(), parentHS, HS ); convertTooltipHotSpot( value.c_str(), HS );
_ToolTipParentPosRef = parentHS;
_ToolTipPosRef = HS; _ToolTipPosRef = HS;
// When auto is set, both of them need to be auto
if( _ToolTipPosRef == Hotspot_TTAuto )
_ToolTipParentPosRef = Hotspot_TTAuto;
else
if( _ToolTipParentPosRef == Hotspot_TTAuto )
_ToolTipParentPosRef = _ToolTipPosRef;
return;
}
else
if( name == "tooltip_parent_posref" )
{
THotSpot HS;
convertTooltipHotSpot( value.c_str(), HS );
_ToolTipParentPosRef = HS;
// When auto is set, both of them need to be auto
if( _ToolTipParentPosRef == Hotspot_TTAuto )
_ToolTipPosRef = Hotspot_TTAuto;
else
if( _ToolTipPosRef == Hotspot_TTAuto )
_ToolTipPosRef = _ToolTipParentPosRef;
return; return;
} }
else else
if( name == "tooltip_posref_alt" ) if( name == "tooltip_posref_alt" )
{ {
THotSpot parentHS;
THotSpot HS; THotSpot HS;
convertTooltipHotSpot( value.c_str(), parentHS, HS ); convertTooltipHotSpot( value.c_str(), HS );
_ToolTipParentPosRefAlt = parentHS;
_ToolTipPosRefAlt = HS; _ToolTipPosRefAlt = HS;
// When auto is set, both of them need to be auto
if( _ToolTipPosRefAlt == Hotspot_TTAuto )
_ToolTipParentPosRefAlt = Hotspot_TTAuto;
else
if( _ToolTipParentPosRefAlt == Hotspot_TTAuto )
_ToolTipPosRefAlt = _ToolTipParentPosRefAlt;
return;
}
else
if( name == "tooltip_parent_posref_alt" )
{
THotSpot HS;
convertTooltipHotSpot( value.c_str(), HS );
_ToolTipParentPosRefAlt = HS;
// When auto is set, both of them need to be auto
if( _ToolTipParentPosRefAlt == Hotspot_TTAuto )
_ToolTipPosRefAlt = Hotspot_TTAuto;
else
if( _ToolTipPosRefAlt == Hotspot_TTAuto )
_ToolTipPosRefAlt = _ToolTipParentPosRefAlt;
return; return;
} }
else else
@ -374,6 +412,21 @@ namespace NLGUI
} }
} }
void CCtrlBase::convertTooltipHotSpot(const char *prop, THotSpot &HS )
{
if(prop)
{
const char *ptr = (const char*)prop;
if(stricmp(ptr, "auto")==0)
{
HS = Hotspot_TTAuto;
}
else if(strlen(ptr)==2)
{
HS = convertHotSpot(ptr);
}
}
}
std::string CCtrlBase::TooltipHotSpotToString( THotSpot parent, THotSpot child ) std::string CCtrlBase::TooltipHotSpotToString( THotSpot parent, THotSpot child )
{ {
@ -393,6 +446,20 @@ namespace NLGUI
return s; return s;
} }
std::string CCtrlBase::TooltipHotSpotToString( THotSpot HS )
{
std::string s;
if( HS == Hotspot_TTAuto )
{
s = "auto";
}
else
{
s = HotSpotToString( HS );
}
return s;
}
// *************************************************************************** // ***************************************************************************
bool CCtrlBase::emptyContextHelp() const bool CCtrlBase::emptyContextHelp() const
{ {

View file

@ -149,11 +149,16 @@ namespace NLGUI
} }
else else
if( name == "text_posref" ) if( name == "text_posref" )
{
std::string pr;
pr = CInterfaceElement::HotSpotToString( _TextPosRef );
return pr;
}
else
if( name == "text_parent_posref" )
{ {
std::string pr; std::string pr;
pr = CInterfaceElement::HotSpotToString( _TextParentPosRef ); pr = CInterfaceElement::HotSpotToString( _TextParentPosRef );
pr += " ";
pr += CInterfaceElement::HotSpotToString( _TextPosRef );
return pr; return pr;
} }
else else
@ -324,10 +329,13 @@ namespace NLGUI
else else
if( name == "text_posref" ) if( name == "text_posref" )
{ {
THotSpot parent, posref; _TextPosRef = convertHotSpot( value.c_str() );
CInterfaceElement::convertHotSpotCouple( value.c_str(), parent, posref ); return;
_TextPosRef = posref; }
_TextParentPosRef = parent; else
if( name == "text_parent_posref" )
{
_TextParentPosRef = convertHotSpot( value.c_str() );
return; return;
} }
else else

View file

@ -209,6 +209,8 @@ namespace NLGUI
} }
nlassert(false); nlassert(false);
return "";
} }
else else
if( name == "align" ) if( name == "align" )
@ -229,6 +231,8 @@ namespace NLGUI
} }
nlassert(false); nlassert(false);
return "";
} }
else else
if( name == "space" ) if( name == "space" )

View file

@ -89,6 +89,8 @@ namespace NLGUI
} }
nlassert(false); nlassert(false);
return "";
} }
else else
if( name == "valign" ) if( name == "valign" )
@ -106,6 +108,8 @@ namespace NLGUI
} }
nlassert(false); nlassert(false);
return "";
} }
else else
if( name == "left_margin" ) if( name == "left_margin" )

View file

@ -24,6 +24,8 @@ NLMISC_REGISTER_OBJECT(CViewBase, CInterfaceGroupWheel, std::string, "group_whee
namespace NLGUI namespace NLGUI
{ {
void force_link_group_wheel_cpp() { }
// ***************************************************************************************************************** // *****************************************************************************************************************
CInterfaceGroupWheel::CInterfaceGroupWheel(const TCtorParam &param) : CInterfaceGroup(param) CInterfaceGroupWheel::CInterfaceGroupWheel(const TCtorParam &param) : CInterfaceGroup(param)
{ {

View file

@ -130,12 +130,17 @@ namespace NLGUI
if( name == "posref" ) if( name == "posref" )
{ {
std::string posref; std::string posref;
posref = HotSpotToString( getParentPosRef() );
posref += " ";
posref += HotSpotToString( getPosRef() ); posref += HotSpotToString( getPosRef() );
return posref; return posref;
} }
else else
if( name == "parentposref" )
{
std::string parentPosRef;
parentPosRef = HotSpotToString( getParentPosRef() );
return parentPosRef;
}
else
if( name == "sizeref" ) if( name == "sizeref" )
{ {
return getSizeRefAsString( _SizeRef, _SizeDivW, _SizeDivH ); return getSizeRefAsString( _SizeRef, _SizeDivW, _SizeDivH );
@ -221,10 +226,15 @@ namespace NLGUI
else else
if( name == "posref" ) if( name == "posref" )
{ {
convertHotSpotCouple( value.c_str(), _ParentPosRef, _PosRef ); convertHotSpot( value.c_str() );
return; return;
} }
else else
if( name == "parentposref" )
{
convertHotSpot( value.c_str() );
}
else
if( name == "sizeref" ) if( name == "sizeref" )
{ {
parseSizeRef( value.c_str() ); parseSizeRef( value.c_str() );

View file

@ -26,6 +26,7 @@ namespace NLGUI
void ifexprufct_forcelink(); void ifexprufct_forcelink();
void force_link_dbgroup_select_number_cpp(); void force_link_dbgroup_select_number_cpp();
void force_link_dbgroup_combo_box_cpp(); void force_link_dbgroup_combo_box_cpp();
void force_link_group_wheel_cpp();
/// Necessary so the linker doesn't drop the code of these classes from the library /// Necessary so the linker doesn't drop the code of these classes from the library
void LinkHack() void LinkHack()
@ -37,5 +38,6 @@ namespace NLGUI
ifexprufct_forcelink(); ifexprufct_forcelink();
force_link_dbgroup_select_number_cpp(); force_link_dbgroup_select_number_cpp();
force_link_dbgroup_combo_box_cpp(); force_link_dbgroup_combo_box_cpp();
force_link_group_wheel_cpp();
} }
} }

View file

@ -1064,6 +1064,46 @@ namespace NLGUI
} }
} }
bool CViewRenderer::getTexture( NLMISC::CBitmap &bm, const std::string &name )
{
TTextureMap::const_iterator itr = _TextureMap.find( name );
if( itr == _TextureMap.end() )
return false;
sint32 id = itr->second;
SImage *si = getSImage( id );
NLMISC::CBitmap *src = si->GlobalTexturePtr->Texture->generateDatas();
if( src->getPixelFormat() != NLMISC::CBitmap::RGBA )
return false;
uint x0 = (uint)( si->UVMin.U * si->GlobalTexturePtr->Width );
uint y0 = (uint)( si->UVMin.V * si->GlobalTexturePtr->Height );
uint x1 = (uint)( si->UVMax.U * si->GlobalTexturePtr->Width );
uint y1 = (uint)( si->UVMax.V * si->GlobalTexturePtr->Height );
if( x1 == x0 )
return false;
if( y1 == y0 )
return false;
bm.resize( x1 - x0, y1 - y0 );
bm.blit( *src, x0, y0, ( x1 - x0 ), ( y1 - y0 ), 0, 0 );
return true;
}
void CViewRenderer::getTextureNames( std::vector< std::string > &textures )
{
TTextureMap::const_iterator itr = _TextureMap.begin();
while( itr != _TextureMap.end() )
{
textures.push_back( itr->first );
++itr;
}
}
/* /*
* getTextureIdFromName * getTextureIdFromName
*/ */

View file

@ -24,6 +24,11 @@
// Include from libxml2 // Include from libxml2
#include <libxml/xmlerror.h> #include <libxml/xmlerror.h>
#if defined(NL_OS_WINDOWS) && defined(NL_COMP_VC_VERSION) && NL_COMP_VC_VERSION >= 80
#define USE_LOCALE_ATOF
#include <locale.h>
#endif
using namespace std; using namespace std;
#define NLMISC_READ_BUFFER_SIZE 1024 #define NLMISC_READ_BUFFER_SIZE 1024
@ -46,6 +51,22 @@ const char SEPARATOR = ' ';
serialSeparatedBufferIn( number_as_string ); \ serialSeparatedBufferIn( number_as_string ); \
dest = (thetype)convfunc( number_as_string.c_str() ); dest = (thetype)convfunc( number_as_string.c_str() );
#ifdef USE_LOCALE_ATOF
#define readnumberlocale(dest,thetype,digits,convfunc) \
string number_as_string; \
serialSeparatedBufferIn( number_as_string ); \
dest = (thetype)convfunc( number_as_string.c_str(), (_locale_t)_Locale );
#define nl_atof _atof_l
#else
#define readnumberlocale(dest,thetype,digits,convfunc) readnumber(dest,thetype,digits,convfunc)
#define nl_atof atof
#endif
// *************************************************************************** // ***************************************************************************
inline void CIXml::flushContentString () inline void CIXml::flushContentString ()
@ -70,6 +91,13 @@ CIXml::CIXml () : IStream (true /* Input mode */)
_ErrorString = ""; _ErrorString = "";
_TryBinaryMode = false; _TryBinaryMode = false;
_BinaryStream = NULL; _BinaryStream = NULL;
#ifdef USE_LOCALE_ATOF
// create C numeric locale
_Locale = _create_locale(LC_NUMERIC, "C");
#else
_Locale = NULL;
#endif
} }
// *************************************************************************** // ***************************************************************************
@ -85,6 +113,13 @@ CIXml::CIXml (bool tryBinaryMode) : IStream (true /* Input mode */)
_ErrorString = ""; _ErrorString = "";
_TryBinaryMode = tryBinaryMode; _TryBinaryMode = tryBinaryMode;
_BinaryStream = NULL; _BinaryStream = NULL;
#ifdef USE_LOCALE_ATOF
// create C numeric locale
_Locale = _create_locale(LC_NUMERIC, "C");
#else
_Locale = NULL;
#endif
} }
// *************************************************************************** // ***************************************************************************
@ -93,6 +128,10 @@ CIXml::~CIXml ()
{ {
// Release // Release
release (); release ();
#ifdef USE_LOCALE_ATOF
if (_Locale) _free_locale((_locale_t)_Locale);
#endif
} }
// *************************************************************************** // ***************************************************************************
@ -546,7 +585,7 @@ void CIXml::serial(float &b)
} }
else else
{ {
readnumber( b, float, 128, atof ); readnumberlocale( b, float, 128, nl_atof );
} }
} }
@ -560,7 +599,7 @@ void CIXml::serial(double &b)
} }
else else
{ {
readnumber( b, double, 128, atof ); readnumberlocale( b, double, 128, nl_atof );
} }
} }

View file

@ -221,6 +221,67 @@ void CFileContainer::getFileListByName(const std::string &extension, const std::
} }
} }
void CPath::getFileListByPath(const std::string &extension, const std::string &path, std::vector<std::string> &filenames)
{
getInstance()->_FileContainer.getFileListByPath(extension, path, filenames);
}
void CFileContainer::getFileListByPath(const std::string &extension, const std::string &path, std::vector<std::string> &filenames)
{
if (!_MemoryCompressed)
{
TFiles::iterator first(_Files.begin()), last(_Files.end());
if( !path.empty() )
{
for (; first != last; ++ first)
{
string ext = SSMext.get(first->second.idExt);
string p = SSMpath.get(first->second.idPath);
if (p.find(path) != string::npos && (ext == extension || extension.empty()))
{
filenames.push_back(first->first);
}
}
}
// if extension is empty we keep all files
else
{
for (; first != last; ++ first)
{
filenames.push_back(first->first);
}
}
}
else
{
// compressed memory version
std::vector<CFileContainer::CMCFileEntry>::iterator first(_MCFiles.begin()), last(_MCFiles.end());
if( !path.empty() )
{
for (; first != last; ++ first)
{
string ext = SSMext.get(first->idExt);
string p = SSMpath.get(first->idPath);
if (strstr(p.c_str(), path.c_str()) != NULL && (ext == extension || extension.empty()))
{
filenames.push_back(first->Name);
}
}
}
// if extension is empty we keep all files
else
{
for (; first != last; ++ first)
{
filenames.push_back(first->Name);
}
}
}
}
void CPath::clearMap () void CPath::clearMap ()
{ {
getInstance()->_FileContainer.clearMap(); getInstance()->_FileContainer.clearMap();

View file

@ -59,7 +59,6 @@ IF(WITH_NEL_TOOLS AND WITH_3D)
IF(WITH_QT) IF(WITH_QT)
ADD_SUBDIRECTORY(tile_edit_qt) ADD_SUBDIRECTORY(tile_edit_qt)
ADD_SUBDIRECTORY(object_viewer_qt)
ADD_SUBDIRECTORY(object_viewer_widget) ADD_SUBDIRECTORY(object_viewer_widget)
ENDIF(WITH_QT) ENDIF(WITH_QT)

View file

@ -167,6 +167,12 @@ void CIgLighterLib::lightIg(CInstanceLighter &instanceLighter,
string name= igIn.getShapeName(i); string name= igIn.getShapeName(i);
bool shapeFound= true; bool shapeFound= true;
if (toLower (CFile::getExtension (name)) == "pacs_prim")
{
nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str());
continue;
}
// Try to find the shape in the UseShapeMap. // Try to find the shape in the UseShapeMap.
std::map<string, IShape*>::const_iterator iteMap= lightDesc.UserShapeMap.find (name); std::map<string, IShape*>::const_iterator iteMap= lightDesc.UserShapeMap.find (name);

View file

@ -1,7 +0,0 @@
#ifndef OVQT_CONFIG_H
#define OVQT_CONFIG_H
#define DATA_DIR "${NL_SHARE_ABSOLUTE_PREFIX}/object_viewer_qt"
#define PLUGINS_DIR "${NL_LIB_ABSOLUTE_PREFIX}/object_viewer_qt"
#endif

View file

@ -1,53 +0,0 @@
ADD_SUBDIRECTORY(3rdparty)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${LIBXML2_INCLUDE_DIR} ${NEL_INCLUDE_DIR} ${QT_INCLUDES})
INCLUDE( ${QT_USE_FILE} )
CONFIGURE_FILE(translations/translations.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc COPYONLY)
FILE(GLOB OBJECT_VIEWER_SRC extension_system/*.h
extension_system/*.cpp
*.h *.cpp)
SET(OBJECT_VIEWER_HDR extension_system/iplugin_manager.h
extension_system/plugin_manager.h)
SET(OBJECT_VIEWER_RCS object_viewer_qt.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
SET(OBJECT_VIEWER_TS translations/object_viewer_qt_en.ts
translations/object_viewer_qt_fr.ts
translations/object_viewer_qt_de.ts
translations/object_viewer_qt_ru.ts)
SET(QT_USE_QTGUI TRUE)
SET(QT_USE_QTOPENGL TRUE)
IF(WIN32)
SET(OBJECT_VIEWER_RC object_viewer_qt.rc)
ENDIF(WIN32)
QT4_ADD_TRANSLATION(OBJECT_VIEWER_QM ${OBJECT_VIEWER_TS})
QT4_ADD_RESOURCES( OBJECT_VIEWER_RC_SRCS ${OBJECT_VIEWER_RCS})
QT4_WRAP_CPP( OBJECT_VIEWER_MOC_SRCS ${OBJECT_VIEWER_HDR} )
SOURCE_GROUP(QtResources FILES ${OBJECT_VIEWER_RCS})
SOURCE_GROUP(QtGeneratedMocQrcSrc FILES ${OBJECT_VIEWER_MOC_SRCS} ${OBJECT_VIEWER_RC_SRCS})
ADD_EXECUTABLE(object_viewer_qt WIN32 MACOSX_BUNDLE
${OBJECT_VIEWER_SRC}
${OBJECT_VIEWER_MOC_SRCS}
${OBJECT_VIEWER_RC_SRCS}
${OBJECT_VIEWER_RC})
TARGET_LINK_LIBRARIES(object_viewer_qt
nelmisc
${QT_LIBRARIES}
${QT_QTMAIN_LIBRARY})
ADD_DEFINITIONS(-DQT_NO_KEYWORDS ${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS})
NL_DEFAULT_PROPS(object_viewer_qt "NeL, Tools, 3D: Object Viewer Qt")
NL_ADD_RUNTIME_FLAGS(object_viewer_qt)
ADD_SUBDIRECTORY(plugins)
INSTALL(TARGETS object_viewer_qt RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT runtime BUNDLE DESTINATION /Applications)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

View file

@ -1,163 +0,0 @@
// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2011 Adrian Jaekel <aj at elane2k dot com>
//
// 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 "formitem.h"
// Qt includes
// NeL includes
#include <nel/misc/o_xml.h>
#include <nel/georges/u_type.h>
#include <nel/georges/form.h>
namespace GeorgesQt
{
CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList<QVariant> &data, CFormItem *parent,
NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN)
{
parentItem = parent;
itemData = data;
formElm = elm;
whereV = wV;
whereN = wN;
}
CFormItem::~CFormItem()
{
qDeleteAll(childItems);
}
void CFormItem::appendChild(CFormItem *item)
{
childItems.append(item);
}
CFormItem *CFormItem::child(int row)
{
return childItems.value(row);
}
int CFormItem::childCount() const
{
return childItems.count();
}
int CFormItem::columnCount() const
{
//nlinfo("columnCount %d",itemData.count());
return itemData.count();
}
QVariant CFormItem::data(int column) const
{
return itemData.value(column);
}
CFormItem *CFormItem::parent()
{
return parentItem;
}
int CFormItem::row() const
{
if (parentItem)
return parentItem->childItems.indexOf(const_cast<CFormItem*>(this));
return 0;
}
bool CFormItem::setData(int column, const QVariant &value)
{
if (column < 0 || column >= itemData.size())
return false;
// TODO: default values
if (!formElm)
return false;
itemData[column] = value;
if (formElm->isAtom())
{
const NLGEORGES::UType *type = formElm->getType();
if (type)
{
switch (type->getType())
{
case NLGEORGES::UType::UnsignedInt:
case NLGEORGES::UType::SignedInt:
case NLGEORGES::UType::Double:
case NLGEORGES::UType::String:
if (parentItem->formElm->isArray())
{
//((NLGEORGES::CFormElm*)parentItem->formElm);//->arrayInsertNodeByName(
//if(parentItem->formElm->getArrayNode(elmName, num))
//{
//}
bool ok;
// TODO: the node can be renamed from eg "#0" to "foobar"
int arrayIndex = itemData[0].toString().remove("#").toInt(&ok);
if(ok)
{
NLGEORGES::UFormElm *elmt = 0;
if(parentItem->formElm->getArrayNode(&elmt, arrayIndex) && elmt)
{
if (elmt->isAtom())
{
((NLGEORGES::CFormElmAtom*)elmt)->setValue(value.toString().toUtf8().constData());
nldebug(QString("array element string %1 %2")
.arg(itemData[0].toString()).arg(value.toString())
.toUtf8().constData());
}
}
}
}
else
{
if(parentItem->formElm->setValueByName(
value.toString().toUtf8().constData(),
itemData[0].toString().toUtf8().constData()))
{
nldebug(QString("string %1 %2")
.arg(itemData[0].toString()).arg(value.toString())
.toUtf8().constData());
}
else
{
nldebug(QString("FAILED string %1 %2")
.arg(itemData[0].toString()).arg(value.toString())
.toUtf8().constData());
}
}
break;
case NLGEORGES::UType::Color:
nldebug("Color is TODO");
break;
default:
break;
}
}
}
else
{
nldebug("setting sth other than Atom");
}
//formElm->setValueByName();
return true;
}
}

View file

@ -1,5 +0,0 @@
<RCC>
<qresource>
<file>images/ic_nel_georges_editor.png</file>
</qresource>
</RCC>

View file

@ -1,704 +0,0 @@
// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2011 Adrian Jaekel <aj at elane2k dot com>
//
// 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 "georgesform_model.h"
#include "formitem.h"
// NeL includes
#include <nel/misc/types_nl.h>
#include <nel/misc/rgba.h>
#include <nel/misc/path.h>
#include <nel/georges/u_form_elm.h>
#include <nel/georges/u_type.h>
#include <nel/georges/u_form_dfn.h>
// Qt includes
#include <QColor>
#include <QBrush>
#include <QApplication>
#include <QStyle>
#include <QDebug>
#include <QStylePainter>
#include <QStyleOption>
#include <QLabel>
#include <QPixmap>
using namespace NLGEORGES;
namespace GeorgesQt
{
CGeorgesFormModel::CGeorgesFormModel(UFormElm *rootElm, QMap< QString, QStringList> deps,
QString comment, QStringList parents, bool *expanded, QObject *parent) : QAbstractItemModel(parent)
{
m_rootData << "Value" << "Data" << "Extra";// << "Type";
m_rootElm = rootElm;
m_rootItem = new CFormItem(m_rootElm, m_rootData);
m_dependencies = deps;
m_comments = comment;
m_parents = parents;
m_parentRows = new QList<const QModelIndex*>;
m_expanded = expanded;
setupModelData();
}
CGeorgesFormModel::~CGeorgesFormModel()
{
delete m_rootItem;
}
/******************************************************************************/
QVariant CGeorgesFormModel::data(const QModelIndex &p_index, int p_role) const
{
if (!p_index.isValid())
return QVariant();
switch (p_role)
{
case Qt::DisplayRole:
{
return getItem(p_index)->data(p_index.column());
}
case Qt::BackgroundRole:
{
QBrush defaultBrush = QBrush(QColor(255,0,0,30));
QBrush parentBrush = QBrush(QColor(0,255,0,30));
// if elm not existing it must be some kind of default or type value
if(!getItem(p_index)->getFormElm())
{
return defaultBrush;
}
// else it might be some parent elm
switch (getItem(p_index)->nodeFrom())
{
case NLGEORGES::UFormElm::NodeParentForm:
{
return parentBrush;
}
case NLGEORGES::UFormElm::NodeForm:
{
switch (getItem(p_index)->valueFrom())
{
case NLGEORGES::UFormElm::ValueParentForm:
{
return parentBrush;
}
default:
{
// parent status test kindof ugly, testing only 2 steps deep
// only needed for colorization as treeview default hides childs
// when parent is hidden
CFormItem *parent = getItem(p_index)->parent();
if (parent)
{
if (parent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm)
{
return parentBrush;
}
CFormItem *parentParent = parent->parent();
if (parentParent)
{
if (parentParent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm)
{
return parentBrush;
}
} // endif parentParent
} // endif parent
} // end default
} // end switch valueFrom
} // end case nodeForm
} // end switch nodeFrom
return QVariant();
}
case Qt::DecorationRole:
{
if (p_index.column() == 2)
{
//p_index.
QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent());
CFormItem *item = getItem(in);
QString value = item->data(1).toString();
//QString path = NLMISC::CPath::lookup(value.toUtf8().constData(),false).c_str();
/*if (value.contains(".shape"))
{
if (Modules::objViewInt())
{
QIcon *icon = Modules::objViewInt()->saveOneImage(value.toUtf8().constData());
if (icon)
{
if(icon->isNull())
return QIcon(":/images/pqrticles.png");
else
return QIcon(*icon);
}
else
{
return QIcon();
}
}
}*/
if(value.contains(".tga") || value.contains(".png"))
{
QString path = NLMISC::CPath::lookup(value.toUtf8().constData(),false).c_str();
if(path.isEmpty())
{
path = ":/images/pqrticles.png";
}
return QIcon(path);
}
}
return QVariant();
break;
}
case Qt::ToolTipRole:
{
if (p_index.column() == 2)
{
QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent());
CFormItem *item = getItem(in);
QString value = item->data(1).toString();
/*if (value.contains(".shape"))
{
if (Modules::objViewInt())
{
QIcon *icon = Modules::objViewInt()->saveOneImage(value.toUtf8().constData());
if (icon)
{
if(icon->isNull())
return QIcon(":/images/pqrticles.png");
else
return QIcon(*icon);
}
else
{
return QIcon();
}
}
}*/
if(value.contains(".tga") || value.contains(".png"))
{
QString path = NLMISC::CPath::lookup(value.toUtf8().constData(),false).c_str();
if(path.isEmpty())
{
path = ":/images/pqrticles.png";
}
QString imageTooltip = QString("<img src='%1'>").arg(path);
return imageTooltip;
}
}
return QVariant();
break;
}
default:
return QVariant();
}
}
/******************************************************************************/
CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const
{
if (index.isValid())
{
CFormItem *item = static_cast<CFormItem*>(index.internalPointer());
if (item)
return item;
}
return m_rootItem;
}
/******************************************************************************/
bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value,
int role)
{
if (role != Qt::EditRole)
return false;
CFormItem *item = getItem(index);
bool result = item->setData(index.column(), value);
Q_EMIT dataChanged(index, index);
//setupModelData();
return result;
}
/******************************************************************************/
Qt::ItemFlags CGeorgesFormModel::flags(const QModelIndex& index) const {
if (!index.isValid())
return 0;
Qt::ItemFlags returnValue = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
if(index.column() == 1)
returnValue |= Qt::ItemIsEditable;
return returnValue;
}
/******************************************************************************/
QVariant CGeorgesFormModel::headerData(int section,
Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal)
{
if (role == Qt::DisplayRole)
return m_rootItem->data(section);
if (role == Qt::TextAlignmentRole)
return Qt::AlignLeft;
if (section == 0 && role == Qt::DecorationRole)
{
// transparent pixmap as we paint it ourself with tree brach
// if we extend the HeaderView::paintSection for the CE_HeaderLabel
// we could drop this
QPixmap pixmap = QPixmap(
QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize),
QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize));
// Create new picture for transparent
QPixmap transparent(pixmap.size());
// Do transparency
transparent.fill(Qt::transparent);
QPainter p(&transparent);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.drawPixmap(0, 0, pixmap);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
// Set transparency level to 150 (possible values are 0-255)
// The alpha channel of a color specifies the transparency effect,
// 0 represents a fully transparent color, while 255 represents
// a fully opaque color.
p.fillRect(transparent.rect(), QColor(0, 0, 0, 0));
p.end();
// Set original picture's reference to new transparent one
pixmap = transparent;
return pixmap;
}
}
return QVariant();
}
/******************************************************************************/
QModelIndex CGeorgesFormModel::index(int row, int column, const QModelIndex &parent)
const
{
if (!hasIndex(row, column, parent))
return QModelIndex();
CFormItem *parentItem;
if (!parent.isValid())
parentItem = m_rootItem;
else
parentItem = static_cast<CFormItem*>(parent.internalPointer());
CFormItem *childItem = parentItem->child(row);
if (childItem)
return createIndex(row, column, childItem);
else
return QModelIndex();
}
/******************************************************************************/
QModelIndex CGeorgesFormModel::parent(const QModelIndex &index) const
{
if (!index.isValid())
return QModelIndex();
CFormItem *childItem = static_cast<CFormItem*>(index.internalPointer());
CFormItem *parentItem = childItem->parent();
if (parentItem == m_rootItem)
return QModelIndex();
return createIndex(parentItem->row(), 0, parentItem);
}
/******************************************************************************/
int CGeorgesFormModel::rowCount(const QModelIndex &parent) const {
CFormItem *parentItem;
if (parent.column() > 0)
return 0;
if (!parent.isValid())
parentItem = m_rootItem;
else
parentItem = static_cast<CFormItem*>(parent.internalPointer());
return parentItem->childCount();
}
/******************************************************************************/
int CGeorgesFormModel::columnCount(const QModelIndex &parent) const {
if (parent.isValid())
return static_cast<CFormItem*>(parent.internalPointer())->columnCount();
else
return m_rootItem->columnCount();
}
/******************************************************************************/
void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) {
if (!root)
return;
uint num = 0;
if (root->isStruct())
{
//((CFormElm*)root)->getForm()->getComment();
uint structSize = 0;
root->getStructSize(structSize);
while (num < structSize)
{
UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode;
UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
// Append a new item to the current parent's list of children.
std::string elmName;
if(root->getStructNodeName(num, elmName))
{
QList<QVariant> columnData;
//QVariant value;
std::string value;
//NLMISC::CRGBA value_color;
//uint value_uint;
//sint value_sint;
//double value_double;
QString elmtType;
UFormElm *elmt = 0;
if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true))
{
if (elmt)
{
if (elmt->isArray())
elmtType = "Array";
if (elmt->isStruct())
elmtType = "Struct";
if (elmt->isAtom())
{
elmtType = "Atom";
uint numDefinitions = 0;
const UType *type = elmt->getType();
if (type)
{
numDefinitions = type->getNumDefinition();
root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
switch (type->getType())
{
case UType::UnsignedInt:
{
uint v;
NLMISC::fromString(value, v);
value = NLMISC::toString(v);
elmtType.append("_uint");break;
}
case UType::SignedInt:
{
sint v;
NLMISC::fromString(value, v);
value = NLMISC::toString(v);
elmtType.append("_sint");break;
}
case UType::Double:
float v;
NLMISC::fromString(value, v);
value = NLMISC::toString(v);
elmtType.append("_double");break;
case UType::String:
elmtType.append("_string");break;
case UType::Color:
elmtType.append("_color");break;
default:
elmtType.append("_unknownType");
}
}
else
{
elmtType.append("_noType");
}
if (numDefinitions)
{
std::string l, v;
QString tmpLabel, tmpValue;
for (uint i = 0; i < numDefinitions; i++)
{
type->getDefinition(i,l,v);
tmpLabel = l.c_str();
tmpValue = v.c_str();
if (type->getType() == UType::SignedInt)
{
if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) {
value = l;
break;
}
}
if (type->getType() == UType::String)
{
if (QString(value.c_str()) == tmpValue)
{
value = l;
break;
}
}
}
}
}
if (elmt->isVirtualStruct())
{
root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
elmtType = "VirtualStruct";
}
switch (*whereN)
{
case UFormElm::NodeForm:
elmtType.append("_fromForm"); break;
case UFormElm::NodeParentForm:
elmtType.append("_fromParentForm"); break;
case UFormElm::NodeDfn:
elmtType.append("_isDFN"); break;
case UFormElm::NodeType:
elmtType.append("_isType"); break;
default:
elmtType.append("_noNode");
}
switch (*whereV)
{
case UFormElm::ValueForm:
elmtType.append("_formValue"); break;
case UFormElm::ValueParentForm:
elmtType.append("_parentValue"); break;
case UFormElm::ValueDefaultDfn:
elmtType.append("_dfnValue"); break;
case UFormElm::ValueDefaultType:
elmtType.append("_typeValue"); break;
default:
elmtType.append("_noValue");
}
columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN));
//if (parents.last()->childCount() > 0) {
// parents << parents.last()->child(parents.last()->childCount()-1);
//}
loadFormData(elmt, parent->child(parent->childCount()-1));
}
else
{
// add Defaults
// TODO: spams warnings for non ATOM values but i dont get type of non existing nodes
bool success = root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
switch (*whereN)
{
case UFormElm::NodeForm:
elmtType.append("_fromForm"); break;
case UFormElm::NodeParentForm:
elmtType.append("_fromParentForm"); break;
case UFormElm::NodeDfn:
elmtType.append("_isDFN"); break;
case UFormElm::NodeType:
elmtType.append("_isType"); break;
default:
elmtType.append("_noNode");
}
switch (*whereV)
{
case UFormElm::ValueForm:
elmtType.append("_formValue"); break;
case UFormElm::ValueParentForm:
elmtType.append("_parentValue"); break;
case UFormElm::ValueDefaultDfn:
elmtType.append("_dfnValue"); break;
case UFormElm::ValueDefaultType:
elmtType.append("_typeValue"); break;
default:
elmtType.append("_noValue");
}
columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN));
}
}
else
{
nlinfo("getNodeByName returned false");
}
}
num++;
}
}
if (root->isArray())
{
uint arraySize = 0;
root->getArraySize(arraySize);
while (num < arraySize)
{
std::string elmName;
if(root->getArrayNodeName(elmName, num))
{
QList<QVariant> columnData;
std::string value;
QString elmtType;
UFormElm *elmt = 0;
if(root->getArrayNode(&elmt,0) && elmt)
{
if (elmt->isArray())
elmtType = "Array";
if (elmt->isStruct()) {
elmtType = "Struct";
}
if (elmt->isAtom())
{
elmt->getValue(value);
elmtType = "Atom";
}
if (elmt->isVirtualStruct())
elmtType = "VirtualStruct";
elmtType.append("_arrayValue");
columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
parent->appendChild(new CFormItem(elmt, columnData, parent));
loadFormData(elmt, parent->child(parent->childCount()-1));
}
}
num++;
}
}
}
/******************************************************************************/
void CGeorgesFormModel::loadFormHeader()
{
if (m_parents.size())
{
CFormItem *fi_pars = new CFormItem(m_rootElm, QList<QVariant>() << "parents" << "" << "", m_rootItem);
m_rootItem->appendChild(fi_pars);
Q_FOREACH(QString str, m_parents)
{
fi_pars->appendChild(new CFormItem(m_rootElm, QList<QVariant>() << str << "" << "", fi_pars));
}
}
/*QStringList dfns = _dependencies["dfn"];
QStringList typs = _dependencies["typ"];
_dependencies.remove("dfn");
_dependencies.remove("typ");
CFormItem *fi_dep = new CFormItem(_rootElm, QList<QVariant>() << "dependencies", _rootItem);
_rootItem->appendChild(fi_dep);
if (!dfns.isEmpty()) {
CFormItem *fi_dfn = new CFormItem(_rootElm, QList<QVariant>() << "dfn", fi_dep);
fi_dep->appendChild(fi_dfn);
foreach(QString str, dfns) {
fi_dfn->appendChild(new CFormItem(_rootElm, QList<QVariant>() << str, fi_dfn));
}
}
if (!typs.isEmpty()) {
CFormItem *fi_typ = new CFormItem(_rootElm, QList<QVariant>() << "typ", fi_dep);
fi_dep->appendChild(fi_typ);
foreach(QString str, typs) {
fi_typ->appendChild(new CFormItem(_rootElm, QList<QVariant>() << str, fi_typ));
}
}
if (!_dependencies.isEmpty()) {
CFormItem *fi_other = new CFormItem(_rootElm, QList<QVariant>() << "other", fi_dep);
fi_dep->appendChild(fi_other);
foreach(QStringList list, _dependencies) {
foreach(QString str, list) {
fi_other->appendChild(new CFormItem(_rootElm, QList<QVariant>() << str, fi_other));
}
}
}*/
}
/******************************************************************************/
void CGeorgesFormModel::setupModelData()
{
loadFormHeader();
loadFormData(m_rootElm, m_rootItem);
}
/******************************************************************************/
void CGeorgesFormModel::setShowParents( bool show ) {
m_showParents = show;
Q_EMIT layoutAboutToBeChanged();
Q_EMIT layoutChanged();
}
void CGeorgesFormModel::setShowDefaults( bool show )
{
m_showDefaults = show;
Q_EMIT layoutAboutToBeChanged();
Q_EMIT layoutChanged();
}
void CGeorgesFormModel::addParentForm(QString parentForm)
{
beginResetModel();
m_parents.push_back(parentForm);
delete m_rootItem;
m_rootItem = new CFormItem(m_rootElm, m_rootData);
setupModelData();
endResetModel();
}
void CGeorgesFormModel::removeParentForm(QString parentForm)
{
beginResetModel();
m_parents.removeOne(parentForm);
delete m_rootItem;
m_rootItem = new CFormItem(m_rootElm, m_rootData);
setupModelData();
endResetModel();
}
} /* namespace GeorgesQt */
/* end of file */

View file

@ -1,174 +0,0 @@
// Object Viewer Qt GUI Editor plugin <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 "nel3d_widget.h"
#include "nel/3d/u_driver.h"
#include "nel/3d/text_context.h"
#include "nel/3d/driver_user.h"
#include "nel/misc/rgba.h"
#include "nel/misc/path.h"
#include "nel/misc/event_listener.h"
#include "nel/gui/event_listener.h"
#ifdef NL_OS_WINDOWS
#include <Windows.h>
#endif
namespace GUIEditor
{
Nel3DWidget::Nel3DWidget( QWidget *parent ) :
QWidget( parent )
{
driver = NULL;
textContext = NULL;
// Need to set this attribute with a NULL paintengine returned to Qt
// so that we can render the widget normally ourselves, without the image
// disappearing when a widget is resized or shown on top of us
setAttribute( Qt::WA_PaintOnScreen, true );
eventListener = NULL;
}
Nel3DWidget::~Nel3DWidget()
{
if( driver != NULL )
{
if( textContext != NULL )
{
driver->deleteTextContext( textContext );
textContext = NULL;
}
driver->release();
delete driver;
driver = NULL;
}
delete eventListener;
}
void Nel3DWidget::init()
{
nlassert( driver == NULL );
driver = NL3D::UDriver::createDriver( 0, false, 0 );
driver->setMatrixMode2D11();
driver->setDisplay( winId(), NL3D::UDriver::CMode( width(), height(), 32, true ) );
eventListener = new NLGUI::CEventListener();
eventListener->addToServer( &driver->EventServer );
}
void Nel3DWidget::createTextContext( std::string fontFile )
{
if( driver == NULL )
return;
std::string font;
try
{
font = NLMISC::CPath::lookup( fontFile );
}
catch( ... )
{
nlinfo( "Font %s cannot be found, cannot create textcontext!", fontFile.c_str() );
exit( EXIT_FAILURE );
}
if( textContext != NULL )
{
driver->deleteTextContext( textContext );
textContext = NULL;
}
textContext = driver->createTextContext( font );
}
void Nel3DWidget::clear()
{
if( driver == NULL )
return;
driver->clearBuffers( NLMISC::CRGBA::Black );
driver->swapBuffers();
}
#if defined ( NL_OS_WINDOWS )
typedef bool ( *winProc )( NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
bool Nel3DWidget::winEvent( MSG *message, long *result )
{
if( driver != NULL )
{
NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver();
if( iDriver != NULL )
{
winProc proc = (winProc)iDriver->getWindowProc();
return proc( iDriver, message->hwnd, message->message, message->wParam, message->lParam );
}
}
return false;
}
#elif defined( NL_OS_MAC )
typedef bool ( *cocoaProc )( NL3D::IDriver *, const void *e );
bool Nel3DWidget::macEvent( EventHandlerCallRef caller, EventRef event )
{
if( caller )
nlerror( "You are using QtCarbon! Only QtCocoa supported, please upgrade Qt" );
if( driver != NULL )
{
NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver();
if( iDriver != NULL )
{
cocoaProc proc = ( cocoaProc )iDriver->getWindowProc();
return proc( iDriver, event );
}
}
return false;
}
#elif defined( NL_OS_UNIX )
typedef bool ( *x11Proc )( NL3D::IDriver *drv, XEvent *e );
bool Nel3DWidget::x11Event( XEvent *event )
{
if( driver != NULL )
{
NL3D::IDriver *iDriver = dynamic_cast< NL3D::CDriverUser* >( driver )->getDriver();
if( driver != NULL )
{
x11Proc proc = ( x11Proc )iDriver->getWindowProc();
return proc( iDriver, event );
}
}
return false;
}
#endif
}

View file

@ -1,79 +0,0 @@
// Object Viewer Qt GUI Editor plugin <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 NEL3D_WIDGET_H
#define NEL3D_WIDGET_H
#include <QWidget>
#include "nel/misc/types_nl.h"
#include <string>
namespace NLGUI
{
class CEventListener;
}
namespace NL3D
{
class UDriver;
class UTextContext;
}
namespace GUIEditor
{
/// Nel 3D interface to Qt
class Nel3DWidget : public QWidget
{
Q_OBJECT
public:
Nel3DWidget( QWidget *parent = NULL );
virtual ~Nel3DWidget();
virtual void init();
void createTextContext( std::string fontFile );
NL3D::UDriver* getDriver() const{ return driver; }
NL3D::UTextContext* getTextContext() const{ return textContext; }
// Need to return NULL paintengine to Qt so that we can
// render the widget normally ourselves, without the image
// disappearing when a widget is resized or shown on top of us
QPaintEngine* paintEngine() const{ return NULL; }
public Q_SLOTS:
void clear();
protected:
#if defined(NL_OS_WINDOWS)
virtual bool winEvent( MSG *message, long *result );
#elif defined(NL_OS_MAC)
virtual bool macEvent( EventHandlerCallRef caller, EventRef event );
#elif defined(NL_OS_UNIX)
virtual bool x11Event( XEvent *event );
#endif
private:
NL3D::UDriver *driver;
NL3D::UTextContext *textContext;
NLGUI::CEventListener *eventListener;
};
}
#endif

View file

@ -1,173 +0,0 @@
// Object Viewer Qt GUI Editor plugin <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 "property_browser_ctrl.h"
#include "../../3rdparty/qtpropertybrowser/QtVariantPropertyManager"
#include "../../3rdparty/qtpropertybrowser/QtTreePropertyBrowser"
#include "nel/gui/interface_group.h"
#include "nel/gui/widget_manager.h"
#include <typeinfo>
#include "widget_info_tree.h"
namespace GUIEditor
{
CPropBrowserCtrl::CPropBrowserCtrl()
{
browser = NULL;
propertyMgr = new QtVariantPropertyManager;
}
CPropBrowserCtrl::~CPropBrowserCtrl()
{
delete propertyMgr;
propertyMgr = NULL;
browser = NULL;
}
void CPropBrowserCtrl::setBrowser( QtTreePropertyBrowser *b )
{
browser = b;
}
void CPropBrowserCtrl::setupWidgetInfo( CWidgetInfoTree *tree )
{
widgetInfo.clear();
std::vector< std::string > names;
tree->getNames( names );
std::vector< std::string >::const_iterator itr;
for( itr = names.begin(); itr != names.end(); ++itr )
{
CWidgetInfoTreeNode *node = tree->findNodeByName( *itr );
const SWidgetInfo &w = node->getInfo();
widgetInfo[ w.GUIName ] = w;
}
}
void CPropBrowserCtrl::clear()
{
browser->clear();
disconnect( propertyMgr, SIGNAL( propertyChanged( QtProperty* ) ),
this, SLOT( onPropertyChanged( QtProperty* ) ) );
}
void CPropBrowserCtrl::onSelectionChanged( std::string &id )
{
if( browser == NULL )
return;
disconnect( propertyMgr, SIGNAL( propertyChanged( QtProperty* ) ),
this, SLOT( onPropertyChanged( QtProperty* ) ) );
browser->clear();
CInterfaceElement *e = CWidgetManager::getInstance()->getElementFromId( id );
if( e == NULL )
{
connect( propertyMgr, SIGNAL( propertyChanged( QtProperty* ) ),
this, SLOT( onPropertyChanged( QtProperty* ) ) );
return;
}
currentElement = id;
std::string n = e->getClassName();
setupProperties( n, e );
connect( propertyMgr, SIGNAL( propertyChanged( QtProperty* ) ),
this, SLOT( onPropertyChanged( QtProperty* ) ) );
}
void CPropBrowserCtrl::onPropertyChanged( QtProperty *prop )
{
QString propName = prop->propertyName();
QString propValue = prop->valueText();
// for some reason booleans cannot be extracted from a QtProperty :(
if( propValue.isEmpty() )
{
QtVariantProperty *p = propertyMgr->variantProperty( prop );
if( p != NULL )
propValue = p->value().toString();
}
CInterfaceElement *e = CWidgetManager::getInstance()->getElementFromId( currentElement );
if( e == NULL )
return;
e->setProperty( propName.toUtf8().constData(), propValue.toUtf8().constData() );
// Make sure the changes are applied
bool active = e->getActive();
e->setActive( !active );
e->setActive( active );
}
void CPropBrowserCtrl::setupProperties( const std::string &type, const CInterfaceElement *element )
{
std::map< std::string, SWidgetInfo >::iterator itr = widgetInfo.find( type );
if( itr == widgetInfo.end() )
return;
SWidgetInfo &w = itr->second;
std::vector< SPropEntry >::const_iterator pItr;
for( pItr = w.props.begin(); pItr != w.props.end(); ++pItr )
{
const SPropEntry &prop = *pItr;
setupProperty( prop, element );
}
QtVariantEditorFactory *factory = new QtVariantEditorFactory;
browser->setFactoryForManager( propertyMgr, factory );
}
void CPropBrowserCtrl::setupProperty( const SPropEntry &prop, const CInterfaceElement *element )
{
QtVariantProperty *p = NULL;
QVariant v;
if( prop.propType == "string" )
{
p = propertyMgr->addProperty( QVariant::String, prop.propName.c_str() );
v = element->getProperty( prop.propName ).c_str();
}
else
if( prop.propType == "bool" )
{
p = propertyMgr->addProperty( QVariant::Bool, prop.propName.c_str() );
bool value = false;
NLMISC::fromString( element->getProperty( prop.propName ), value );
v = value;
}
else
if( prop.propType == "int" )
{
p = propertyMgr->addProperty( QVariant::Int, prop.propName.c_str() );
sint32 value = 0;
NLMISC::fromString( element->getProperty( prop.propName ), value );
v = value;
}
if( p == NULL )
return;
p->setValue( v );
browser->addProperty( p );
}
}

View file

@ -1,195 +0,0 @@
/*
Object Viewer Qt
Copyright (C) 2010 Dzmitry Kamiahin <dnk-88@tut.by>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stdpch.h"
#include "graphics_viewport.h"
// STL includes
// Qt includes
#include <QtGui/QAction>
#include <QtGui/QResizeEvent>
#include <QtGui/QColorDialog>
#include <QtGui/QFileDialog>
// NeL includes
#include <nel/misc/rgba.h>
#include <nel/misc/event_server.h>
#include <nel/misc/events.h>
#include <nel/3d/u_driver.h>
#include <nel/3d/driver_user.h>
// Project includes
#include "modules.h"
using namespace std;
using namespace NL3D;
namespace NLQT
{
CGraphicsViewport::CGraphicsViewport(QWidget *parent)
: QNLWidget(parent)
{
setAttribute(Qt::WA_OpaquePaintEvent);
setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_PaintOnScreen);
}
CGraphicsViewport::~CGraphicsViewport()
{
}
void CGraphicsViewport::init()
{
//H_AUTO2
nldebug("CGraphicsViewport::init");
#if defined(NL_OS_UNIX) && !defined(NL_OS_MAC)
makeCurrent();
#endif // defined(NL_OS_UNIX) && !defined(NL_OS_MAC)
Modules::objView().init((nlWindow)winId(), width(), height());
Modules::psEdit().init();
Modules::veget().init();
setMouseTracking(true);
setFocusPolicy(Qt::StrongFocus);
}
void CGraphicsViewport::release()
{
//H_AUTO2
nldebug("CGraphicsViewport::release");
Modules::veget().release();
Modules::psEdit().release();
Modules::objView().release();
}
QAction *CGraphicsViewport::createSaveScreenshotAction(QObject *parent)
{
QAction *action = new QAction(parent);
connect(action, SIGNAL(triggered()), this, SLOT(saveScreenshot()));
return action;
}
QAction *CGraphicsViewport::createSetBackgroundColor(QObject *parent)
{
QAction *action = new QAction(parent);
connect(action, SIGNAL(triggered()), this, SLOT(setBackgroundColor()));
return action;
}
void CGraphicsViewport::saveScreenshot()
{
Modules::objView().saveScreenshot("screenshot", false, true, false);
}
void CGraphicsViewport::setBackgroundColor()
{
QColor color = QColorDialog::getColor(QColor(Modules::objView().getBackgroundColor().R,
Modules::objView().getBackgroundColor().G,
Modules::objView().getBackgroundColor().B));
if (color.isValid())
Modules::objView().setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue()));
}
void CGraphicsViewport::resizeEvent(QResizeEvent *resizeEvent)
{
QWidget::resizeEvent(resizeEvent);
if (Modules::objView().getDriver())
Modules::objView().setSizeViewport(resizeEvent->size().width(), resizeEvent->size().height());
}
#if defined(NL_OS_WINDOWS)
typedef bool (*winProc)(NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
bool CGraphicsViewport::winEvent(MSG *message, long *result)
{
if (Modules::objView().getDriver() && Modules::objView().getDriver()->isActive())
{
NL3D::IDriver *driver = dynamic_cast<NL3D::CDriverUser *>(Modules::objView().getDriver())->getDriver();
if (driver)
{
winProc proc = (winProc)driver->getWindowProc();
// TODO: shouldn't it return false like the others?
// see macEvent() and x11Event() below
return proc(driver, message->hwnd, message->message, message->wParam, message->lParam);
}
}
return false;
}
#elif defined(NL_OS_MAC)
typedef bool (*cocoaProc)(NL3D::IDriver *, const void *e);
bool CGraphicsViewport::macEvent(EventHandlerCallRef caller, EventRef event)
{
if(caller)
nlerror("You are using QtCarbon! Only QtCocoa supported, please upgrade Qt");
if (Modules::objView().getDriver() && Modules::objView().getDriver()->isActive())
{
NL3D::IDriver *driver = dynamic_cast<NL3D::CDriverUser *>(Modules::objView().getDriver())->getDriver();
if (driver)
{
cocoaProc proc = (cocoaProc)driver->getWindowProc();
proc(driver, event);
}
}
// return false to let Qt handle the event as well,
// else the widget would never get focus
return false;
}
#elif defined(NL_OS_UNIX)
typedef bool (*x11Proc)(NL3D::IDriver *drv, XEvent *e);
bool CGraphicsViewport::x11Event(XEvent *event)
{
if (Modules::objView().getDriver() && Modules::objView().getDriver()->isActive())
{
NL3D::IDriver *driver = dynamic_cast<NL3D::CDriverUser *>(Modules::objView().getDriver())->getDriver();
if (driver)
{
x11Proc proc = (x11Proc)driver->getWindowProc();
proc(driver, event);
}
}
// return false to let Qt handle the event as well,
// else the widget would never get focus
// TODO: test me please, i have no linux at hand (rti)
return false;
}
#endif
} /* namespace NLQT */

View file

@ -1,48 +0,0 @@
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${LIBXML2_INCLUDE_DIR}
${QT_INCLUDES})
FILE(GLOB SRC *.cpp *.h)
SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_PLUG_SHEET_BUILDER_HDR sheetbuilderconfgdialog.h sheetbuilderdialog.h ovqt_sheet_builder.h)
SET(QT_USE_QTGUI TRUE)
SET(QT_USE_QTOPENGL TRUE)
QT4_WRAP_CPP(OVQT_PLUG_SHEET_BUILDER_MOC_SRC ${OVQT_PLUG_SHEET_BUILDER_HDR})
SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_PLUG_SHEET_BUILDER_MOC_SRC})
SOURCE_GROUP("Sheet builder Plugin" FILES ${SRC})
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_sheet_builder MODULE ${SRC} ${OVQT_PLUG_SHEET_BUILDER_MOC_SRC} ${OVQT_EXT_SYS_SRC})
TARGET_LINK_LIBRARIES(ovqt_plugin_sheet_builder ovqt_plugin_core nelmisc ${QT_LIBRARIES})
NL_DEFAULT_PROPS(ovqt_plugin_sheet_builder "NeL, Tools, 3D: Object Viewer Qt Plugin: Sheet builder")
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_sheet_builder)
NL_ADD_LIB_SUFFIX(ovqt_plugin_sheet_builder)
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
IF(WIN32)
IF(WITH_INSTALL_LIBRARIES)
INSTALL(TARGETS ovqt_plugin_sheet_builder LIBRARY DESTINATION ${OVQT_PLUGIN_DIR} ARCHIVE DESTINATION ${NL_LIB_PREFIX} RUNTIME DESTINATION ${OVQT_PLUGIN_DIR} COMPONENT tools3d)
ELSE(WITH_INSTALL_LIBRARIES)
INSTALL(TARGETS ovqt_plugin_sheet_builder LIBRARY DESTINATION ${OVQT_PLUGIN_DIR} RUNTIME DESTINATION ${OVQT_PLUGIN_DIR} COMPONENT tools3d)
ENDIF(WITH_INSTALL_LIBRARIES)
ELSE(WIN32)
IF(WITH_INSTALL_LIBRARIES)
INSTALL(TARGETS ovqt_plugin_sheet_builder LIBRARY DESTINATION ${OVQT_PLUGIN_DIR} ARCHIVE DESTINATION ${NL_LIB_PREFIX} RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT tools3d)
ELSE(WITH_INSTALL_LIBRARIES)
INSTALL(TARGETS ovqt_plugin_sheet_builder LIBRARY DESTINATION ${OVQT_PLUGIN_DIR} RUNTIME DESTINATION ${NL_BIN_PREFIX} COMPONENT tools3d)
ENDIF(WITH_INSTALL_LIBRARIES)
ENDIF(WIN32)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/ovqt_plugin_sheet_builder.xml DESTINATION ${OVQT_PLUGIN_SPECS_DIR} COMPONENT tools3d)

View file

@ -612,6 +612,10 @@ static void computeIGBBox(const NL3D::CInstanceGroup &ig, CLightingBBox &result,
{ {
nlwarning("Unable to find shape '%s'", it->Name.c_str()); nlwarning("Unable to find shape '%s'", it->Name.c_str());
} }
else if (toLower (CFile::getExtension (shapePathName)) == "pacs_prim")
{
nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", shapePathName.c_str());
}
else else
{ {
CIFile shapeInputFile; CIFile shapeInputFile;

View file

@ -410,6 +410,12 @@ int main(int argc, char* argv[])
if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior) if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior)
continue; continue;
if (toLower (CFile::getExtension (name)) == "pacs_prim")
{
nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str());
continue;
}
// Add a .shape at the end ? // Add a .shape at the end ?
if (!name.empty()) if (!name.empty())
{ {

View file

@ -202,7 +202,7 @@ static void loadIGFromContinent(NLMISC::CConfigFile &parameter, std::list<CInsta
// Load the form // Load the form
NLGEORGES::UFormLoader *loader = NLGEORGES::UFormLoader::createLoader(); NLGEORGES::UFormLoader *loader = NLGEORGES::UFormLoader::createLoader();
// //
std::string pathName = level_design_world_directory.asString() + "/" + continentName; std::string pathName = CPath::lookup(continentName); // level_design_world_directory.asString() + "/" + continentName;
if (pathName.empty()) if (pathName.empty())
{ {
nlwarning("Can't find continent form : %s", continentName.c_str()); nlwarning("Can't find continent form : %s", continentName.c_str());
@ -699,6 +699,12 @@ int main(int argc, char* argv[])
if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior) if(group->getInstance(instance).DontCastShadow || group->getInstance(instance).DontCastShadowForExterior)
continue; continue;
if (toLower (CFile::getExtension (name)) == "pacs_prim")
{
nlwarning("EXPORT BUG: Can't read %s (not a shape), should not be part of .ig!", name.c_str());
continue;
}
// PS ? // PS ?
if (toLower (CFile::getExtension (name)) == "ps") if (toLower (CFile::getExtension (name)) == "ps")
continue; continue;

View file

@ -0,0 +1,9 @@
title Ryzom Core: 3_install.py
3_install.py
title Ryzom Core: a1_worldedit_data.py
a1_worldedit_data.py
title Ryzom Core: b1_client_dev.py
b1_client_dev.py
title Ryzom Core: b2_shard_data.py
b2_shard_data.py
title Ryzom Core: Ready

View file

@ -56,6 +56,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -36,6 +36,7 @@ fn runNelMaxExport inputMaxFile =
-- Select all collision mesh -- Select all collision mesh
max select none max select none
clearSelection()
for m in geometry do for m in geometry do
( (
if (isToBeExported m) == true then if (isToBeExported m) == true then

View file

@ -61,6 +61,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0
@ -109,6 +110,7 @@ fn runNelMaxExport inputMaxFile =
( (
-- Select none -- Select none
max select none max select none
clearSelection()
-- Select all node in this ig -- Select all node in this ig
for node in geometry do for node in geometry do

View file

@ -10,6 +10,7 @@ fn runNelMaxExport inputMaxFile =
-- Select none -- Select none
max select none max select none
clearSelection()
-- Select all PACS primitives -- Select all PACS primitives
for i in geometry do for i in geometry do

View file

@ -199,6 +199,7 @@ fn runNelMaxExportSub inputMaxFile retryCount =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -46,6 +46,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -40,6 +40,7 @@ fn runNelMaxExport inputMaxFile =
-- Select none -- Select none
max select none max select none
clearSelection()
-- Found it ? -- Found it ?
find = false find = false

View file

@ -122,6 +122,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -127,6 +127,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0
@ -175,6 +176,7 @@ fn runNelMaxExport inputMaxFile =
( (
-- Select none -- Select none
max select none max select none
clearSelection()
-- Select all node in this ig -- Select all node in this ig
for node in geometry do for node in geometry do

View file

@ -228,6 +228,7 @@ fn exportCollisionsFromZone outputNelDir filename =
( (
-- Select all collision mesh -- Select all collision mesh
max select none max select none
clearSelection()
for m in geometry do for m in geometry do
( (
if (isToBeExportedCollision m) == true then if (isToBeExportedCollision m) == true then
@ -311,6 +312,7 @@ fn exportInstanceGroupFromZone inputFile outputPath igName transitionZone cellSi
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0
@ -372,6 +374,7 @@ fn exportInstanceGroupFromZone inputFile outputPath igName transitionZone cellSi
( (
-- Select none -- Select none
max select none max select none
clearSelection()
for node in objects where classOf node == XRefObject do for node in objects where classOf node == XRefObject do
( (

View file

@ -76,6 +76,7 @@ fn runNelMaxExport inputMaxFile =
-- Select none -- Select none
max select none max select none
clearSelection()
-- Select all PACS primitives -- Select all PACS primitives
for i in geometry do for i in geometry do

View file

@ -102,6 +102,7 @@ fn runNelMaxExport inputMaxFile =
-- Select all collision mesh -- Select all collision mesh
max select none max select none
clearSelection()
for m in geometry do for m in geometry do
( (
if (isToBeExported m) == true then if (isToBeExported m) == true then

View file

@ -69,6 +69,7 @@ if BuildShadowSkinEnabled:
printLog(log, ">>> Setup build directories <<<") printLog(log, ">>> Setup build directories <<<")
mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)

View file

@ -77,16 +77,19 @@ else:
# copy lightmap_not_optimized to lightmap # copy lightmap_not_optimized to lightmap
printLog(log, ">>> Optimize lightmaps <<<") printLog(log, ">>> Optimize lightmaps <<<")
loPathLightmapsOriginal = ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory loPathLightmapsOriginal = ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory
loPathShapesOriginal = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory
mkPath(log, loPathLightmapsOriginal) mkPath(log, loPathLightmapsOriginal)
loPathLightmaps = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory loPathLightmaps = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory
loPathShapes = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory loPathShapes = ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory
loPathTags = ExportBuildDirectory + "/" + ShapeTagExportDirectory loPathTags = ExportBuildDirectory + "/" + ShapeTagExportDirectory
mkPath(log, loPathLightmaps) mkPath(log, loPathLightmaps)
mkPath(log, loPathShapes) mkPath(log, loPathShapes)
mkPath(log, loPathTags) mkPath(log, loPathTags)
if needUpdateDirByTagLog(log, loPathLightmapsOriginal, ".txt", loPathLightmaps, ".txt") or needUpdateDirNoSubdir(log, loPathLightmapsOriginal, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathShapes, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathTags, loPathLightmaps): if needUpdateDirByTagLog(log, loPathLightmapsOriginal, ".txt", loPathLightmaps, ".txt") or needUpdateDirNoSubdir(log, loPathLightmapsOriginal, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathShapesOriginal, loPathShapes) or needUpdateDirNoSubdir(log, loPathShapes, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathTags, loPathLightmaps):
removeFilesRecursive(log, loPathLightmaps) removeFilesRecursive(log, loPathLightmaps)
copyFiles(log, loPathLightmapsOriginal, loPathLightmaps) copyFiles(log, loPathLightmapsOriginal, loPathLightmaps)
removeFilesRecursive(log, loPathShapes)
copyFiles(log, loPathShapesOriginal, loPathShapes)
# Optimize lightmaps if any. Additionnaly, output a file indicating which lightmaps are 8 bits # Optimize lightmaps if any. Additionnaly, output a file indicating which lightmaps are 8 bits
# lightmap_optimizer <path_lightmaps> <path_shapes> [path_tags] [path_flag8bit] # lightmap_optimizer <path_lightmaps> <path_shapes> [path_tags] [path_flag8bit]
subprocess.call([ LightmapOptimizer, loPathLightmaps, loPathShapes, loPathTags, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ]) subprocess.call([ LightmapOptimizer, loPathLightmaps, loPathShapes, loPathTags, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ])

View file

@ -46,8 +46,8 @@ printLog(log, "")
printLog(log, ">>> Install shape <<<") printLog(log, ">>> Install shape <<<")
installPath = InstallDirectory + "/" + ShapeInstallDirectory installPath = InstallDirectory + "/" + ShapeInstallDirectory
mkPath(log, installPath) mkPath(log, installPath)
mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, installPath, ".shape") copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory, installPath, ".shape")
mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".shape") copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".shape")
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".dds") copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory, installPath, ".dds")

View file

@ -265,6 +265,7 @@ fn runNelMaxExportSub inputMaxFile retryCount =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -112,6 +112,7 @@ fn runNelMaxExport inputMaxFile =
-- unselect -- unselect
max select none max select none
clearSelection()
-- Exported object count -- Exported object count
exported = 0 exported = 0

View file

@ -103,6 +103,7 @@ fn runNelMaxExport inputMaxFile =
-- Select none -- Select none
max select none max select none
clearSelection()
-- Found it ? -- Found it ?
find = false find = false

View file

@ -55,6 +55,7 @@ for dir in WaterMapSourceDirectories:
destDir = DatabaseDirectory + "/" + dir destDir = DatabaseDirectory + "/" + dir
mkPath(log, destDir) mkPath(log, destDir)
copyFilesExtNoTreeIfNeeded(log, srcDir, destDir, ".tga") copyFilesExtNoTreeIfNeeded(log, srcDir, destDir, ".tga")
copyFilesExtNoTreeIfNeeded(log, srcDir, destDir, ".png")
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -68,12 +68,12 @@ IF(APPLE)
SET_TARGET_PROPERTIES(ryzom_client PROPERTIES OUTPUT_NAME ${MACOSX_BUNDLE_BUNDLE_NAME}) SET_TARGET_PROPERTIES(ryzom_client PROPERTIES OUTPUT_NAME ${MACOSX_BUNDLE_BUNDLE_NAME})
SET_TARGET_PROPERTIES(ryzom_client PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${MAC_RESOURCES_DIR}/Info.plist) SET_TARGET_PROPERTIES(ryzom_client PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${MAC_RESOURCES_DIR}/Info.plist)
ADD_CUSTOM_COMMAND(TARGET ryzom_client PRE_BUILD COMMAND mkdir -p ${RYZOM_RESOURCES_DIR}) ADD_CUSTOM_COMMAND(TARGET ryzom_client PRE_BUILD COMMAND mkdir -p ${RYZOM_RESOURCES_DIR})
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS ${MAC_RESOURCES_DIR}/PkgInfo ${RYZOM_CONTENTS_DIR}) ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS -p ${MAC_RESOURCES_DIR}/PkgInfo ${RYZOM_CONTENTS_DIR})
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS ${MAC_RESOURCES_DIR}/ryzom.icns ${RYZOM_RESOURCES_DIR}) ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS -p ${MAC_RESOURCES_DIR}/ryzom.icns ${RYZOM_RESOURCES_DIR})
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/ryzom/client/client_default.cfg ${RYZOM_RESOURCES_DIR}) ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS -p ${CMAKE_SOURCE_DIR}/ryzom/client/client_default.cfg ${RYZOM_RESOURCES_DIR})
IF(RYZOM_DATA_DIR) IF(RYZOM_DATA_DIR)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp -R ARGS ${RYZOM_DATA_DIR} ${RYZOM_RESOURCES_DIR}) ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS -RpX ${RYZOM_DATA_DIR} ${RYZOM_RESOURCES_DIR})
ENDIF(RYZOM_DATA_DIR) ENDIF(RYZOM_DATA_DIR)
ENDIF(APPLE) ENDIF(APPLE)

View file

@ -2747,8 +2747,8 @@ void updateInventoryFromStream (NLMISC::CBitMemStream &impulse, const CInventory
impulse.serial( slotIndex, CInventoryCategoryTemplate::SlotBitSize ); impulse.serial( slotIndex, CInventoryCategoryTemplate::SlotBitSize );
// Access the database leaf // Access the database leaf
CCDBNodeBranch *slotNode = static_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)slotIndex )); CCDBNodeBranch *slotNode = safe_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)slotIndex ));
ICDBNode *leafNode = slotNode->find( INVENTORIES::InfoVersionStr ); CCDBNodeLeaf *leafNode = type_cast<CCDBNodeLeaf*>(slotNode->find( INVENTORIES::InfoVersionStr ));
BOMB_IF( !leafNode, "Inventory slot property missing in database", continue ); BOMB_IF( !leafNode, "Inventory slot property missing in database", continue );
// Apply or increment Info Version in database // Apply or increment Info Version in database
@ -2756,13 +2756,13 @@ void updateInventoryFromStream (NLMISC::CBitMemStream &impulse, const CInventory
{ {
uint32 infoVersion; uint32 infoVersion;
impulse.serial( infoVersion, INVENTORIES::InfoVersionBitSize ); impulse.serial( infoVersion, INVENTORIES::InfoVersionBitSize );
((CCDBNodeLeaf*)leafNode)->setPropCheckGC( serverTick, infoVersion ); leafNode->setPropCheckGC( serverTick, infoVersion );
} }
else else
{ {
// NB: don't need to check GC on a info version upgrade, since this is always a delta of +1 // NB: don't need to check GC on a info version upgrade, since this is always a delta of +1
// the order of received of this impulse is not important // the order of received of this impulse is not important
((CCDBNodeLeaf*)leafNode)->setValue64( ((CCDBNodeLeaf*)leafNode)->getValue64() + 1 ); leafNode->setValue64( leafNode->getValue64() + 1 );
} }
} }
@ -2777,10 +2777,10 @@ void updateInventoryFromStream (NLMISC::CBitMemStream &impulse, const CInventory
//nldebug( "Inv %s Update %u", CInventoryCategoryTemplate::InventoryStr[invId], itemSlot.getSlotIndex() ); //nldebug( "Inv %s Update %u", CInventoryCategoryTemplate::InventoryStr[invId], itemSlot.getSlotIndex() );
// Apply all properties to database // Apply all properties to database
CCDBNodeBranch *slotNode = static_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)itemSlot.getSlotIndex() )); CCDBNodeBranch *slotNode = safe_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)itemSlot.getSlotIndex() ));
for ( uint i=0; i!=INVENTORIES::NbItemPropId; ++i ) for ( uint i=0; i!=INVENTORIES::NbItemPropId; ++i )
{ {
CCDBNodeLeaf *leafNode = static_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[i]) )); CCDBNodeLeaf *leafNode = type_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[i]) ));
SKIP_IF( !leafNode, "Inventory slot property missing in database", continue ); SKIP_IF( !leafNode, "Inventory slot property missing in database", continue );
leafNode->setPropCheckGC( serverTick, (sint64)itemSlot.getItemProp( ( INVENTORIES::TItemPropId)i ) ); leafNode->setPropCheckGC( serverTick, (sint64)itemSlot.getItemProp( ( INVENTORIES::TItemPropId)i ) );
} }
@ -2796,8 +2796,8 @@ void updateInventoryFromStream (NLMISC::CBitMemStream &impulse, const CInventory
//nldebug( "Inv %s Prop %u %s", CInventoryCategoryTemplate::InventoryStr[invId], itemSlot.getSlotIndex(), INVENTORIES::CItemSlot::ItemPropStr[itemSlot.getOneProp().ItemPropId] ); //nldebug( "Inv %s Prop %u %s", CInventoryCategoryTemplate::InventoryStr[invId], itemSlot.getSlotIndex(), INVENTORIES::CItemSlot::ItemPropStr[itemSlot.getOneProp().ItemPropId] );
// Apply property to database // Apply property to database
CCDBNodeBranch *slotNode = static_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)itemSlot.getSlotIndex() )); CCDBNodeBranch *slotNode = safe_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)itemSlot.getSlotIndex() ));
CCDBNodeLeaf *leafNode = safe_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[itemSlot.getOneProp().ItemPropId]) )); CCDBNodeLeaf *leafNode = type_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[itemSlot.getOneProp().ItemPropId]) ));
SKIP_IF( !leafNode, "Inventory slot property missing in database", continue ); SKIP_IF( !leafNode, "Inventory slot property missing in database", continue );
leafNode->setPropCheckGC( serverTick, (sint64)itemSlot.getOneProp().ItemPropValue ); leafNode->setPropCheckGC( serverTick, (sint64)itemSlot.getOneProp().ItemPropValue );
@ -2809,13 +2809,14 @@ void updateInventoryFromStream (NLMISC::CBitMemStream &impulse, const CInventory
//nldebug( "Inv %s Reset %u", CInventoryCategoryTemplate::InventoryStr[invId], slotIndex ); //nldebug( "Inv %s Reset %u", CInventoryCategoryTemplate::InventoryStr[invId], slotIndex );
// Reset all properties in database // Reset all properties in database
CCDBNodeBranch *slotNode = static_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)slotIndex )); CCDBNodeBranch *slotNode = safe_cast<CCDBNodeBranch*>(inventoryNode->getNode( (uint16)slotIndex ));
for ( uint i=0; i!=INVENTORIES::NbItemPropId; ++i ) for ( uint i=0; i!=INVENTORIES::NbItemPropId; ++i )
{ {
// Instead of clearing all leaves (by index), we must find and clear only the // Instead of clearing all leaves (by index), we must find and clear only the
// properties in TItemPropId, because the actual database leaves may have // properties in TItemPropId, because the actual database leaves may have
// less properties, and because we must not clear the leaf INFO_VERSION. // less properties, and because we must not clear the leaf INFO_VERSION.
CCDBNodeLeaf *leafNode = safe_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[i]) )); // NOTE: For example, only player BAG inventory has WORNED leaf.
CCDBNodeLeaf *leafNode = type_cast<CCDBNodeLeaf*>(slotNode->find( string(INVENTORIES::CItemSlot::ItemPropStr[i]) ));
SKIP_IF( !leafNode, "Inventory slot property missing in database", continue ); SKIP_IF( !leafNode, "Inventory slot property missing in database", continue );
leafNode->setPropCheckGC( serverTick, 0 ); leafNode->setPropCheckGC( serverTick, 0 );
} }

View file

@ -16,9 +16,9 @@ ELSEIF(APPLE)
SET(OVQT_PLUGIN_DIR "plugins") SET(OVQT_PLUGIN_DIR "plugins")
SET(OVQT_DATA_DIR ".") SET(OVQT_DATA_DIR ".")
ELSE(WIN32) ELSE(WIN32)
SET(OVQT_PLUGIN_SPECS_DIR ${NL_SHARE_PREFIX}/object_viewer_qt/plugins) SET(OVQT_PLUGIN_SPECS_DIR ${NL_SHARE_PREFIX}/studio/plugins)
SET(OVQT_PLUGIN_DIR ${NL_LIB_PREFIX}/object_viewer_qt) SET(OVQT_PLUGIN_DIR ${NL_LIB_PREFIX}/studio)
SET(OVQT_DATA_DIR ${NL_SHARE_PREFIX}/object_viewer_qt/data) SET(OVQT_DATA_DIR ${NL_SHARE_PREFIX}/studio/data)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ovqt_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ovqt_config.h) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ovqt_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ovqt_config.h)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
@ -27,7 +27,7 @@ ELSE(WIN32)
ENDIF(WIN32) ENDIF(WIN32)
IF(UNIX AND WITH_STATIC) IF(UNIX AND WITH_STATIC)
MESSAGE(FATAL_ERROR "OVQT does not work with static NeL builds on Unix atm.") MESSAGE(FATAL_ERROR "Studio does not work with static NeL builds on Unix atm.")
ENDIF() ENDIF()
ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(src)

View file

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

View file

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 187 KiB

View file

@ -0,0 +1,7 @@
#ifndef OVQT_CONFIG_H
#define OVQT_CONFIG_H
#define DATA_DIR "${NL_SHARE_ABSOLUTE_PREFIX}/studio"
#define PLUGINS_DIR "${NL_LIB_ABSOLUTE_PREFIX}/studio"
#endif

View file

@ -96,3 +96,5 @@ ADD_DEFINITIONS(-DQT_SHARED)
NL_DEFAULT_PROPS(qt_property_browser "3rdParty: Qt Property Browser 2.5") NL_DEFAULT_PROPS(qt_property_browser "3rdParty: Qt Property Browser 2.5")
NL_ADD_RUNTIME_FLAGS(qt_property_browser) NL_ADD_RUNTIME_FLAGS(qt_property_browser)
NL_ADD_LIB_SUFFIX(qt_property_browser) NL_ADD_LIB_SUFFIX(qt_property_browser)
INSTALL(TARGETS qt_property_browser LIBRARY DESTINATION ${NL_LIB_PREFIX} ARCHIVE DESTINATION ${NL_LIB_PREFIX} COMPONENT libraries)

Some files were not shown because too many files have changed in this diff Show more