merge from default
|
@ -144,6 +144,8 @@ external
|
|||
external_stlport
|
||||
3rdParty
|
||||
.svn
|
||||
thumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# build
|
||||
code/nel/build/*
|
||||
|
|
|
@ -14,17 +14,22 @@ FIND_PATH(DXSDK_DIR
|
|||
"Include/dxsdkver.h"
|
||||
PATHS
|
||||
"$ENV{DXSDK_DIR}"
|
||||
"C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)"
|
||||
"C:/Program Files/Microsoft DirectX SDK (June 2010)"
|
||||
"C:/Program Files (x86)/Microsoft DirectX SDK (February 2010)"
|
||||
"C:/Program Files/Microsoft DirectX SDK (February 2010)"
|
||||
"C:/Program Files (x86)/Microsoft DirectX SDK (November 2007)"
|
||||
"C:/Program Files/Microsoft DirectX SDK (November 2007)"
|
||||
"C:/Program Files (x86)/Microsoft DirectX SDK"
|
||||
"C:/Program Files/Microsoft DirectX SDK"
|
||||
)
|
||||
|
||||
MACRO(FIND_DXSDK_LIBRARY MYLIBRARY MYLIBRARYNAME)
|
||||
FIND_LIBRARY(${MYLIBRARY}
|
||||
NAMES ${MYLIBRARYNAME}
|
||||
PATHS
|
||||
"${DXSDK_LIBRARY_DIR}"
|
||||
"$ENV{DXSDK_DIR}"
|
||||
"$ENV{DXSDK_DIR}/Lib"
|
||||
"$ENV{DXSDK_DIR}/Lib/x86"
|
||||
)
|
||||
"${DXSDK_LIBRARY_DIR}"
|
||||
)
|
||||
ENDMACRO(FIND_DXSDK_LIBRARY MYLIBRARY MYLIBRARYNAME)
|
||||
|
||||
IF(DXSDK_DIR)
|
||||
|
|
|
@ -37,7 +37,9 @@ ENDMACRO(NL_TARGET_DRIVER)
|
|||
# Argument:
|
||||
###
|
||||
MACRO(NL_DEFAULT_PROPS name label)
|
||||
SET_TARGET_PROPERTIES(${name} PROPERTIES PROJECT_LABEL ${label})
|
||||
IF(NOT MSVC10)
|
||||
SET_TARGET_PROPERTIES(${name} PROPERTIES PROJECT_LABEL ${label})
|
||||
ENDIF(NOT MSVC10)
|
||||
GET_TARGET_PROPERTY(type ${name} TYPE)
|
||||
IF(${type} STREQUAL SHARED_LIBRARY)
|
||||
# Set versions only if target is a shared library
|
||||
|
@ -302,27 +304,66 @@ MACRO(NL_SETUP_BUILD)
|
|||
ENDIF(CMAKE_BUILD_TYPE MATCHES "Release")
|
||||
ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
|
||||
SET(HOST_CPU ${CMAKE_SYSTEM_PROCESSOR})
|
||||
|
||||
# Determine target CPU
|
||||
# IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86")
|
||||
IF(NOT CMAKE_SIZEOF_VOID_P)
|
||||
INCLUDE (CheckTypeSize)
|
||||
CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P)
|
||||
ENDIF(NOT CMAKE_SIZEOF_VOID_P)
|
||||
IF(NOT TARGET_CPU)
|
||||
SET(TARGET_CPU $ENV{DEB_HOST_GNU_CPU})
|
||||
ENDIF(NOT TARGET_CPU)
|
||||
|
||||
# Using 32 or 64 bits libraries
|
||||
# If not specified, use the same CPU as host
|
||||
IF(NOT TARGET_CPU)
|
||||
SET(TARGET_CPU ${CMAKE_SYSTEM_PROCESSOR})
|
||||
ENDIF(NOT TARGET_CPU)
|
||||
|
||||
IF(TARGET_CPU MATCHES "amd64")
|
||||
SET(TARGET_CPU "x86_64")
|
||||
ELSEIF(TARGET_CPU MATCHES "i.86")
|
||||
SET(TARGET_CPU "x86")
|
||||
ENDIF(TARGET_CPU MATCHES "amd64")
|
||||
|
||||
# DEB_HOST_ARCH_ENDIAN is 'little' or 'big'
|
||||
# DEB_HOST_ARCH_BITS is '32' or '64'
|
||||
|
||||
# If target and host CPU are the same
|
||||
IF("${HOST_CPU}" STREQUAL "${TARGET_CPU}")
|
||||
# x86-compatible CPU
|
||||
IF(HOST_CPU MATCHES "x86")
|
||||
IF(NOT CMAKE_SIZEOF_VOID_P)
|
||||
INCLUDE (CheckTypeSize)
|
||||
CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P)
|
||||
ENDIF(NOT CMAKE_SIZEOF_VOID_P)
|
||||
|
||||
# Using 32 or 64 bits libraries
|
||||
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
SET(TARGET_CPU "x86_64")
|
||||
ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
SET(TARGET_CPU "x86")
|
||||
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
ENDIF(HOST_CPU MATCHES "x86")
|
||||
# TODO: add checks for ARM and PPC
|
||||
ELSE("${HOST_CPU}" STREQUAL "${TARGET_CPU}")
|
||||
MESSAGE(STATUS "Compiling on ${HOST_CPU} for ${TARGET_CPU}")
|
||||
ENDIF("${HOST_CPU}" STREQUAL "${TARGET_CPU}")
|
||||
|
||||
IF(TARGET_CPU STREQUAL "x86_64")
|
||||
SET(TARGET_X64 1)
|
||||
SET(PLATFORM_CFLAGS "-DHAVE_X86_64")
|
||||
ELSEIF(TARGET_CPU STREQUAL "x86")
|
||||
SET(TARGET_X86 1)
|
||||
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
SET(ARCH "x86_64")
|
||||
SET(TARGET_X64 1)
|
||||
ADD_DEFINITIONS(-DHAVE_X86_64)
|
||||
ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
SET(ARCH "x86")
|
||||
ADD_DEFINITIONS(-DHAVE_X86)
|
||||
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# ADD_DEFINITIONS(-DHAVE_IA64)
|
||||
# ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86")
|
||||
SET(PLATFORM_CFLAGS "-DHAVE_X86")
|
||||
ENDIF(TARGET_CPU STREQUAL "x86_64")
|
||||
|
||||
IF(WIN32)
|
||||
# Fix library paths suffixes for Debian MultiArch
|
||||
IF(NOT CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(CMAKE_LIBRARY_ARCHITECTURE $ENV{DEB_HOST_MULTIARCH})
|
||||
ENDIF(NOT CMAKE_LIBRARY_ARCHITECTURE)
|
||||
|
||||
IF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(CMAKE_LIBRARY_PATH "/lib/${CMAKE_LIBRARY_ARCHITECTURE};/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE};${CMAKE_LIBRARY_PATH}")
|
||||
ENDIF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
|
||||
IF(MSVC)
|
||||
IF(MSVC10)
|
||||
# /Ox is working with VC++ 2010, but custom optimizations don't exist
|
||||
SET(SPEED_OPTIMIZATIONS "/Ox /GF /GS-")
|
||||
|
@ -364,8 +405,17 @@ MACRO(NL_SETUP_BUILD)
|
|||
SET(NL_RELEASE_CFLAGS "/MD /D NDEBUG ${SPEED_OPTIMIZATIONS}")
|
||||
SET(NL_DEBUG_LINKFLAGS "/NODEFAULTLIB:msvcrt /INCREMENTAL:YES")
|
||||
SET(NL_RELEASE_LINKFLAGS "/OPT:REF /OPT:ICF /INCREMENTAL:NO")
|
||||
ELSE(WIN32)
|
||||
SET(PLATFORM_CFLAGS "-g -pipe -ftemplate-depth-48 -D_REENTRANT -Wall -ansi -W -Wpointer-arith -Wsign-compare -Wno-deprecated-declarations -Wno-multichar -Wno-unused -fno-strict-aliasing")
|
||||
ELSE(MSVC)
|
||||
IF(HOST_CPU STREQUAL "x86_64" AND TARGET_CPU STREQUAL "x86")
|
||||
SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -m32 -march=i686")
|
||||
ENDIF(HOST_CPU STREQUAL "x86_64" AND TARGET_CPU STREQUAL "x86")
|
||||
|
||||
IF(HOST_CPU STREQUAL "x86" AND TARGET_CPU STREQUAL "x86_64")
|
||||
SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -m64")
|
||||
ENDIF(HOST_CPU STREQUAL "x86" AND TARGET_CPU STREQUAL "x86_64")
|
||||
|
||||
SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -g -D_REENTRANT -pipe -ftemplate-depth-48 -Wall -ansi -W -Wpointer-arith -Wsign-compare -Wno-deprecated-declarations -Wno-multichar -Wno-unused -fno-strict-aliasing")
|
||||
|
||||
IF(WITH_COVERAGE)
|
||||
SET(PLATFORM_CFLAGS "-fprofile-arcs -ftest-coverage ${PLATFORM_CFLAGS}")
|
||||
ENDIF(WITH_COVERAGE)
|
||||
|
@ -382,12 +432,12 @@ MACRO(NL_SETUP_BUILD)
|
|||
SET(PLATFORM_CXXFLAGS ${PLATFORM_CFLAGS})
|
||||
|
||||
IF(NOT APPLE)
|
||||
SET(PLATFORM_LINKFLAGS "-Wl,--no-undefined -Wl,--as-needed")
|
||||
SET(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--no-undefined -Wl,--as-needed")
|
||||
ENDIF(NOT APPLE)
|
||||
|
||||
SET(NL_DEBUG_CFLAGS "-DNL_DEBUG -D_DEBUG")
|
||||
SET(NL_RELEASE_CFLAGS "-DNL_RELEASE -DNDEBUG -O6")
|
||||
ENDIF(WIN32)
|
||||
ENDIF(MSVC)
|
||||
ENDMACRO(NL_SETUP_BUILD)
|
||||
|
||||
MACRO(NL_SETUP_BUILD_FLAGS)
|
||||
|
@ -451,7 +501,11 @@ MACRO(NL_SETUP_PREFIX_PATHS)
|
|||
IF(WIN32)
|
||||
SET(NL_LIB_PREFIX "../lib" CACHE PATH "Installation path for libraries.")
|
||||
ELSE(WIN32)
|
||||
SET(NL_LIB_PREFIX "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation path for libraries.")
|
||||
IF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(NL_LIB_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}" CACHE PATH "Installation path for libraries.")
|
||||
ELSE(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(NL_LIB_PREFIX "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation path for libraries.")
|
||||
ENDIF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
ENDIF(WIN32)
|
||||
ENDIF(NOT NL_LIB_PREFIX)
|
||||
|
||||
|
@ -460,7 +514,11 @@ MACRO(NL_SETUP_PREFIX_PATHS)
|
|||
IF(WIN32)
|
||||
SET(NL_DRIVER_PREFIX "../lib" CACHE PATH "Installation path for drivers.")
|
||||
ELSE(WIN32)
|
||||
SET(NL_DRIVER_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/nel" CACHE PATH "Installation path for drivers.")
|
||||
IF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(NL_DRIVER_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}/nel" CACHE PATH "Installation path for drivers.")
|
||||
ELSE(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
SET(NL_DRIVER_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/nel" CACHE PATH "Installation path for drivers.")
|
||||
ENDIF(CMAKE_LIBRARY_ARCHITECTURE)
|
||||
ENDIF(WIN32)
|
||||
ENDIF(NOT NL_DRIVER_PREFIX)
|
||||
|
||||
|
|
|
@ -342,6 +342,8 @@ std::string secondsToHumanReadable (uint32 time);
|
|||
/// Get a bytes or time in string format and convert it in seconds or bytes
|
||||
uint32 fromHumanReadable (const std::string &str);
|
||||
|
||||
/// Add digit grouping seperator to if value >= 10 000. Assumes input is numerical string.
|
||||
std::string formatThousands(const std::string& s);
|
||||
|
||||
/// This function executes a program in the background and returns instantly (used for example to launch services in AES).
|
||||
/// The program will be launched in the current directory
|
||||
|
|
|
@ -146,6 +146,8 @@ public:
|
|||
|
||||
TAdditionalInfoCb EntityInfoCallback;
|
||||
|
||||
static void removeShardFromName(ucstring& name);
|
||||
|
||||
private:
|
||||
// get all eid for a user using the user name or the user id
|
||||
void getByUser (uint32 uid, std::vector<NLMISC::CEntityId> &res);
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
* \param server
|
||||
*/
|
||||
virtual void submitEvents(CEventServer & server, bool allWindows) = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Instruct the event emitter to send CGDMouseMove instead of CEventMouseMove.
|
||||
*
|
||||
|
|
|
@ -75,7 +75,7 @@ public:
|
|||
enum TProp {
|
||||
PropUInt8, PropUInt16, PropUInt32, PropUInt64,
|
||||
PropSInt8, PropSInt16, PropSInt32, PropSInt64,
|
||||
PropBool, PropFloat, PropDouble, PropString, PropDataSetRow, PropSheetId, PropUKN };
|
||||
PropBool, PropFloat, PropDouble, PropString, PropDataSetRow, PropSheetId, PropUCString, PropUKN };
|
||||
// PropBool, PropFloat, PropDouble, PropString, PropDataSetRow, PropEntityId, PropSheetId, PropUKN };
|
||||
|
||||
|
||||
|
@ -160,6 +160,7 @@ public:
|
|||
case PropString: nlassert(sizeof(T) == sizeof (std::string)); break;
|
||||
// case PropEntityId: nlassert(sizeof(T) == sizeof (NLMISC::CEntityId)); break;
|
||||
case PropSheetId: nlassert(sizeof(T) == sizeof (NLMISC::CSheetId)); break;
|
||||
case PropUCString: nlassert(sizeof(T) == sizeof (ucstring)); break;
|
||||
default: nlerror ("property %s have unknown type %d", name.c_str(), type);
|
||||
}
|
||||
|
||||
|
|
|
@ -1228,7 +1228,7 @@ bool CDriverD3D::init (uint windowIcon, emptyProc exitFunc)
|
|||
ExitFunc = exitFunc;
|
||||
|
||||
createCursors();
|
||||
|
||||
|
||||
// Register a window class
|
||||
WNDCLASSW wc;
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ void CDriverGL::setLightInternal(uint8 num, const CLight& light)
|
|||
}
|
||||
else
|
||||
{
|
||||
// Deactivate spot properties
|
||||
// Disable spot properties
|
||||
#ifdef USE_OPENGLES
|
||||
glLightf (lightNum, GL_SPOT_CUTOFF, 180.f);
|
||||
glLightf (lightNum, GL_SPOT_EXPONENT, 0.f);
|
||||
|
|
|
@ -978,7 +978,7 @@ void CDriverGL::setupGlArraysStd(CVertexBufferInfo &vb)
|
|||
// Check type
|
||||
nlassert (vb.Type[CVertexBuffer::Normal]==CVertexBuffer::Float3);
|
||||
_DriverGLStates.enableNormalArray(true);
|
||||
nglArrayObjectATI(GL_NORMAL_ARRAY, 3, GL_FLOAT, vb.VertexSize, vb.VertexObjectId, (ptrdiff_t) vb.ValuePtr[CVertexBuffer::Normal]);
|
||||
nglArrayObjectATI(GL_NORMAL_ARRAY, 3, GL_FLOAT, vb.VertexSize, vb.VertexObjectId, (ptrdiff_t) vb.ValuePtr[CVertexBuffer::Normal]);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -149,14 +149,28 @@ static NLMISC::TKey virtualKeycodeToNelKey(unsigned short keycode)
|
|||
|
||||
bool CCocoaEventEmitter::pasteTextFromClipboard(ucstring &text)
|
||||
{
|
||||
#warning "OpenGL Driver: Missing Mac Implementation for pasteTextFromClipboard"
|
||||
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
||||
NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
|
||||
NSDictionary *options = [NSDictionary dictionary];
|
||||
|
||||
BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
|
||||
if (ok)
|
||||
{
|
||||
NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options];
|
||||
NSString *nstext = [objectsToPaste objectAtIndex:0];
|
||||
text.fromUtf8([nstext UTF8String]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CCocoaEventEmitter::copyTextToClipboard(const ucstring &text)
|
||||
{
|
||||
#warning "OpenGL Driver: Missing Mac Implementation for copyTextToClipboard"
|
||||
return false;
|
||||
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
||||
[pasteboard clearContents];
|
||||
NSArray *copiedObjects = [NSArray arrayWithObject:[NSString stringWithUTF8String:text.toUtf8().c_str()]];
|
||||
[pasteboard writeObjects:copiedObjects];
|
||||
return true;
|
||||
}
|
||||
|
||||
/// convert modifier key state to nel internal modifier key state
|
||||
|
|
|
@ -4851,8 +4851,10 @@ typedef ptrdiff_t GLsizeiptrARB;
|
|||
#ifndef GL_ARB_shader_objects
|
||||
/* GL types for program/shader text and shader object handles */
|
||||
typedef char GLcharARB;
|
||||
#if !defined(MAC_OS_X_VERSION_10_7)
|
||||
typedef unsigned int GLhandleARB;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* GL type for "half" precision (s10e5) float data in host memory */
|
||||
#ifndef GL_ARB_half_float_pixel
|
||||
|
|
|
@ -58,7 +58,7 @@ bool CNELU::initDriver (uint w, uint h, uint bpp, bool windowed, nlWindow syst
|
|||
CNELU::Driver = NULL;
|
||||
|
||||
// Init driver.
|
||||
#if defined(NL_OS_WINDOWS)
|
||||
#ifdef NL_OS_WINDOWS
|
||||
if (direct3d)
|
||||
{
|
||||
CNELU::Driver= CDRU::createD3DDriver();
|
||||
|
@ -75,6 +75,7 @@ bool CNELU::initDriver (uint w, uint h, uint bpp, bool windowed, nlWindow syst
|
|||
nlwarning ("CNELU::initDriver: no driver found");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!CNELU::Driver->init())
|
||||
{
|
||||
nlwarning ("CNELU::initDriver: init() failed");
|
||||
|
|
|
@ -1018,8 +1018,8 @@ void CPatchDLMContext::computeTextureFar()
|
|||
// compute src pixel
|
||||
const CRGBA *srcPixel= pTile->getPixels(CTileFarBank::diffuse, CTileFarBank::order1);
|
||||
// compute src info, for this tile rot and 256x256 context.
|
||||
sint srcDeltaX;
|
||||
sint srcDeltaY;
|
||||
sint srcDeltaX = 0;
|
||||
sint srcDeltaY = 0;
|
||||
srcPixel= computeTileFarSrcDeltas(nRot, is256x256, uvOff, srcPixel, srcDeltaX, srcDeltaY);
|
||||
|
||||
// compute dst coordinate. start writing at pixel (1,1)
|
||||
|
|
|
@ -2118,7 +2118,7 @@ bool CPrimAlias::read (xmlNodePtr xmlNode, const char *filename, uint version, C
|
|||
xmlNodePtr ptNode = CIXml::getFirstChildNode (xmlNode, "ALIAS");
|
||||
if (ptNode)
|
||||
{
|
||||
int val;
|
||||
sint val = 0;
|
||||
if (ReadInt ("VALUE", val, filename, ptNode))
|
||||
{
|
||||
_Alias = uint32(val);
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "nel/misc/command.h"
|
||||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/i18n.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -526,6 +527,31 @@ void toUpper(char *str)
|
|||
}
|
||||
}
|
||||
|
||||
std::string formatThousands(const std::string& s)
|
||||
{
|
||||
int i, k;
|
||||
int remaining = s.length() - 1;
|
||||
static std::string separator = NLMISC::CI18N::get("uiThousandsSeparator").toUtf8();
|
||||
|
||||
// Don't add separator if the number is < 10k
|
||||
if (remaining < 4) return s;
|
||||
|
||||
std::string ns;
|
||||
|
||||
do
|
||||
{
|
||||
for (i = remaining, k = 0; i >= 0 && k < 3; --i, ++k )
|
||||
{
|
||||
ns = s[i] + ns; // New char is added to front of ns
|
||||
if ( i > 0 && k == 2) ns = separator + ns; // j > 0 means still more digits
|
||||
}
|
||||
|
||||
remaining -= 3;
|
||||
}
|
||||
while (remaining >= 0);
|
||||
|
||||
return ns;
|
||||
}
|
||||
|
||||
//
|
||||
// Exceptions
|
||||
|
|
|
@ -417,6 +417,17 @@ void CEntityIdTranslator::checkEntity (const CEntityId &eid, const ucstring &ent
|
|||
}
|
||||
}
|
||||
|
||||
void CEntityIdTranslator::removeShardFromName(ucstring& name)
|
||||
{
|
||||
// The string must contain a '(' and a ')'
|
||||
ucstring::size_type p0= name.find('(');
|
||||
ucstring::size_type p1= name.find(')');
|
||||
if (p0 == ucstring::npos || p1 == ucstring::npos || p1 <= p0)
|
||||
return;
|
||||
|
||||
name = name.substr(0, p0) + name.substr(p1 + 1);
|
||||
}
|
||||
|
||||
// this callback is call when the file is changed
|
||||
void cbInvalidEntityNamesFilename(const std::string &invalidEntityNamesFilename)
|
||||
{
|
||||
|
|
|
@ -178,7 +178,7 @@ static const CStringConversion<TKey>::CPair stringTable [] =
|
|||
{ "KeyZOOM", KeyZOOM },
|
||||
{ "KeyNONAME", KeyNONAME },
|
||||
{ "KeyPA1", KeyPA1 },
|
||||
{ "KeyOEM_CLEAR", KeyOEM_CLEAR },
|
||||
{ "KeyOEM_CLEAR", KeyOEM_CLEAR }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
#include "nel/misc/noise_value.h"
|
||||
#include "nel/misc/fast_floor.h"
|
||||
|
||||
#include "nel/misc/random.h"
|
||||
|
||||
|
||||
namespace NLMISC
|
||||
|
@ -45,7 +45,8 @@ public:
|
|||
CRandomGrid3D()
|
||||
{
|
||||
//seed
|
||||
srand(0);
|
||||
CRandom Random;
|
||||
Random.srand(0);
|
||||
|
||||
// init the grid
|
||||
for(uint z=0; z<NL3D_NOISE_GRID_SIZE; z++)
|
||||
|
@ -56,7 +57,7 @@ public:
|
|||
{
|
||||
uint id= x + (y<<NL3D_NOISE_GRID_SIZE_SHIFT) + (z<<(NL3D_NOISE_GRID_SIZE_SHIFT*2));
|
||||
// take higher bits of rand gives better result.
|
||||
uint v= rand() >> 5;
|
||||
uint v= Random.rand() >> 5;
|
||||
_Texture3d[id]= v&255;
|
||||
}
|
||||
}
|
||||
|
@ -80,9 +81,9 @@ public:
|
|||
// init LevelPhases.
|
||||
for(i=0; i<NL3D_NOISE_LEVEL; i++)
|
||||
{
|
||||
_LevelPhase[i].x= frand(NL3D_NOISE_GRID_SIZE);
|
||||
_LevelPhase[i].y= frand(NL3D_NOISE_GRID_SIZE);
|
||||
_LevelPhase[i].z= frand(NL3D_NOISE_GRID_SIZE);
|
||||
_LevelPhase[i].x= Random.frand(NL3D_NOISE_GRID_SIZE);
|
||||
_LevelPhase[i].y= Random.frand(NL3D_NOISE_GRID_SIZE);
|
||||
_LevelPhase[i].z= Random.frand(NL3D_NOISE_GRID_SIZE);
|
||||
}
|
||||
// not for level 0.
|
||||
_LevelPhase[0]= CVector::Null;
|
||||
|
|
|
@ -643,6 +643,8 @@ bool CRGBA::convertToHLS(float &h, float &l, float &s) const
|
|||
{
|
||||
h = 2.f + (b - r) / diff;
|
||||
}
|
||||
#if defined(GCC_VERSION) && (GCC_VERSION == 40204)
|
||||
// use the fix only if using the specific GCC version
|
||||
else if (maxV == b)
|
||||
{
|
||||
h = 4.f + (r - g) / diff;
|
||||
|
@ -652,6 +654,12 @@ bool CRGBA::convertToHLS(float &h, float &l, float &s) const
|
|||
// this case is to fix a compiler bug
|
||||
h = (g - b) / diff;
|
||||
}
|
||||
#else
|
||||
else
|
||||
{
|
||||
h = 4.f + (r - g) / diff;
|
||||
}
|
||||
#endif
|
||||
|
||||
h *= 60.f; // scale to [0..360]
|
||||
|
||||
|
|
|
@ -153,6 +153,13 @@ bool CWinEventEmitter::processMessage (HWND hWnd, uint32 msg, WPARAM wParam, LPA
|
|||
if ((int)wParam==VK_SHIFT)
|
||||
_ShiftButton=false;
|
||||
|
||||
// As Print Screen button does not trigger a WM_KEYDOWN msg, simulate it here
|
||||
if ((int)wParam==VK_SNAPSHOT)
|
||||
{
|
||||
if (wParam < KeyCount)
|
||||
server->postEvent (new CEventKeyDown ((NLMISC::TKey)wParam, getKeyButton(_AltButton, _ShiftButton, _CtrlButton), true, this));
|
||||
}
|
||||
|
||||
// Post the message
|
||||
if (wParam < KeyCount)
|
||||
server->postEvent (new CEventKeyUp ((NLMISC::TKey)wParam, getKeyButton(_AltButton, _ShiftButton, _CtrlButton), this));
|
||||
|
|
|
@ -77,7 +77,7 @@ string typeToString (CTransportClass::TProp type)
|
|||
string conv[] = {
|
||||
"PropUInt8", "PropUInt16", "PropUInt32", "PropUInt64",
|
||||
"PropSInt8", "PropSInt16", "PropSInt32", "PropSInt64",
|
||||
"PropBool", "PropFloat", "PropDouble", "PropString", "PropDataSetRow", "PropSheetId", "PropUKN" };
|
||||
"PropBool", "PropFloat", "PropDouble", "PropString", "PropDataSetRow", "PropSheetId", "PropUCString", "PropUKN" };
|
||||
// "PropBool", "PropFloat", "PropDouble", "PropString", "PropDataSetRow", "PropEntityId", "PropSheetId", "PropUKN" };
|
||||
|
||||
if (type > CTransportClass::PropUKN)
|
||||
|
@ -352,6 +352,7 @@ void CTransportClass::init ()
|
|||
// nlassert (PropDataSetRow < PropUKN); DummyProp[PropDataSetRow] = new CTransportClass::CRegisteredProp<TDataSetRow>;
|
||||
// nlassert (PropEntityId < PropUKN); DummyProp[PropEntityId] = new CTransportClass::CRegisteredProp<CEntityId>;
|
||||
nlassert (PropSheetId < PropUKN); DummyProp[PropSheetId] = new CTransportClass::CRegisteredProp<CSheetId>;
|
||||
nlassert (PropUCString < PropUKN); DummyProp[PropUCString] = new CTransportClass::CRegisteredProp<ucstring>;
|
||||
|
||||
// we have to know when a service comes, so add callback (put the callback before all other one because we have to send this message first)
|
||||
CUnifiedNetwork::getInstance()->setServiceUpCallback("*", cbTCUpService, NULL, false);
|
||||
|
|
|
@ -8,6 +8,7 @@ ADD_SUBDIRECTORY(object_viewer)
|
|||
ADD_SUBDIRECTORY(georges_editor)
|
||||
ADD_SUBDIRECTORY(translation_manager)
|
||||
ADD_SUBDIRECTORY(tile_editor)
|
||||
ADD_SUBDIRECTORY(bnp_manager)
|
||||
# Note: Temporarily disabled until development continues.
|
||||
#ADD_SUBDIRECTORY(zone_painter)
|
||||
# Ryzom Specific Plugins
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
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_BNP_MANAGER_HDR bnp_manager_plugin.h
|
||||
bnp_manager_window.h
|
||||
bnp_dirtree_dialog.h
|
||||
bnp_filesystem_model.h
|
||||
bnp_file.h
|
||||
bnp_filelist_dialog.h
|
||||
bnp_proxy_model.h
|
||||
)
|
||||
SET(OVQT_PLUG_BNP_MANAGER_UIS bnp_dirtree_form.ui
|
||||
bnp_filelist_dialog.ui
|
||||
)
|
||||
|
||||
SET(OVQT_PLUGIN_BNP_MANAGER_RCS bnp_manager.qrc)
|
||||
|
||||
SET(QT_USE_QTGUI TRUE)
|
||||
|
||||
QT4_ADD_RESOURCES(OVQT_PLUGIN_BNP_MANAGER_RC_SRCS ${OVQT_PLUGIN_BNP_MANAGER_RCS})
|
||||
QT4_WRAP_CPP(OVQT_PLUG_BNP_MANAGER_MOC_SRC ${OVQT_PLUG_BNP_MANAGER_HDR})
|
||||
QT4_WRAP_UI(OVQT_PLUG_BNP_MANAGER_UI_HDRS ${OVQT_PLUG_BNP_MANAGER_UIS})
|
||||
|
||||
SOURCE_GROUP(QtResources FILES ${OVQT_PLUG_BNP_MANAGER_UIS} ${OVQT_PLUGIN_BNP_MANAGER_RCS})
|
||||
SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_PLUG_BNP_MANAGER_UI_HDRS})
|
||||
SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_PLUG_BNP_MANAGER_MOC_SRC})
|
||||
SOURCE_GROUP("BNP Manager Plugin" FILES ${SRC})
|
||||
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
|
||||
|
||||
ADD_LIBRARY(ovqt_plugin_bnp_manager MODULE ${SRC} ${OVQT_PLUG_BNP_MANAGER_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUGIN_BNP_MANAGER_RC_SRCS} ${OVQT_PLUG_BNP_MANAGER_UI_HDRS})
|
||||
|
||||
TARGET_LINK_LIBRARIES(ovqt_plugin_bnp_manager ovqt_plugin_core nelmisc nelgeorges ${QT_LIBRARIES})
|
||||
|
||||
NL_DEFAULT_PROPS(ovqt_plugin_bnp_manager "NeL, Tools, 3D: Object Viewer Qt Plugin: BNP Manager")
|
||||
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_bnp_manager)
|
||||
NL_ADD_LIB_SUFFIX(ovqt_plugin_bnp_manager)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
|
||||
|
||||
INSTALL(TARGETS ovqt_plugin_bnp_manager LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
|
@ -0,0 +1,93 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
// Project includes
|
||||
#include "bnp_dirtree_dialog.h"
|
||||
#include "bnp_filesystem_model.h"
|
||||
#include "bnp_proxy_model.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QWidget>
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
CBnpDirTreeDialog::CBnpDirTreeDialog(QString bnpPath, QWidget *parent)
|
||||
: QDockWidget(parent),
|
||||
m_DataPath(bnpPath)
|
||||
{
|
||||
// Setup the dialog
|
||||
m_ui.setupUi(this);
|
||||
|
||||
// Filter settings to only display files with bnp extension.
|
||||
// Could be changed to display all files and react according to the extension:
|
||||
// Bnp file: opened and displayed
|
||||
// all other files: added to the currently opened bnp file
|
||||
QStringList filter;
|
||||
//filter << tr("*.bnp");
|
||||
|
||||
// Setup the directory tree model
|
||||
m_dirModel= new BNPFileSystemModel();
|
||||
m_proxyModel = new BNPSortProxyModel();
|
||||
m_dirModel->setRootPath(m_DataPath);
|
||||
m_dirModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::AllEntries);
|
||||
m_dirModel->setNameFilters(filter);
|
||||
m_dirModel->setNameFilterDisables(0);
|
||||
|
||||
m_proxyModel->setSourceModel(m_dirModel);
|
||||
|
||||
m_ui.dirTree->setModel(m_proxyModel);
|
||||
|
||||
m_ui.dirTree->setRootIndex( m_proxyModel->mapFromSource (m_dirModel->index(m_DataPath) ) );
|
||||
m_ui.dirTree->setSortingEnabled(true);
|
||||
|
||||
// Trigger if one filename is activated
|
||||
// In future drag&drop should be also possible
|
||||
connect(m_ui.dirTree, SIGNAL(activated(QModelIndex)),
|
||||
this, SLOT(fileSelected(QModelIndex)));
|
||||
}
|
||||
// ***************************************************************************
|
||||
CBnpDirTreeDialog::~CBnpDirTreeDialog()
|
||||
{
|
||||
|
||||
}
|
||||
// ***************************************************************************
|
||||
void CBnpDirTreeDialog::fileSelected(QModelIndex index)
|
||||
{
|
||||
QModelIndex source = m_proxyModel->mapToSource(index);
|
||||
if (source.isValid() && !m_dirModel->isDir(source))
|
||||
{
|
||||
// emit the according signal to BNPManagerWindow class
|
||||
Q_EMIT selectedFile(m_dirModel->fileInfo(source).filePath());
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
void CBnpDirTreeDialog::changeFile(QString file)
|
||||
{
|
||||
|
||||
}
|
||||
// ***************************************************************************
|
||||
void CBnpDirTreeDialog::BnpPathChanged(QString path)
|
||||
{
|
||||
|
||||
}
|
||||
// ***************************************************************************
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_DIRTREE_DIALOG_H
|
||||
#define BNP_DIRTREE_DIALOG_H
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QWidget>
|
||||
|
||||
// STL includes
|
||||
|
||||
// NeL includes
|
||||
|
||||
// Project includes
|
||||
#include "ui_bnp_dirtree_form.h"
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
class BNPFileSystemModel;
|
||||
class BNPSortProxyModel;
|
||||
|
||||
class CBnpDirTreeDialog : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* \param path to root directory, which should be displayed
|
||||
*/
|
||||
CBnpDirTreeDialog(QString bnpPath, QWidget *parent = 0);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~CBnpDirTreeDialog();
|
||||
|
||||
/**
|
||||
* Change the root path for the dir tree view
|
||||
* \param data path to the new directory
|
||||
*/
|
||||
void BnpPathChanged(QString);
|
||||
|
||||
private:
|
||||
|
||||
Ui::CBnpDirTreeDialog m_ui;
|
||||
|
||||
// path ro data root directory
|
||||
QString m_DataPath;
|
||||
|
||||
BNPFileSystemModel *m_dirModel;
|
||||
|
||||
BNPSortProxyModel *m_proxyModel;
|
||||
|
||||
Q_SIGNALS:
|
||||
void selectedFile(const QString);
|
||||
|
||||
private Q_SLOTS:
|
||||
/**
|
||||
* Triggered if the user activates (double klick on windows)
|
||||
* a file name in the dir tree view
|
||||
* \param selected ModelIndex (filename)
|
||||
*/
|
||||
void fileSelected(QModelIndex index);
|
||||
|
||||
void changeFile(QString file);
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CBnpDirTreeDialog</class>
|
||||
<widget class="QDockWidget" name="CBnpDirTreeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>200</width>
|
||||
<height>141</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="features">
|
||||
<set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>BNP Datapath</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QTreeView" name="dirTree">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../object_viewer_qt.qrc"/>
|
||||
<include location="../core/core.qrc"/>
|
||||
<include location="bnp_manager.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,313 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
// Project includes
|
||||
#include "bnp_file.h"
|
||||
|
||||
// Nel includes
|
||||
#include <nel/misc/debug.h>
|
||||
#include <nel/misc/file.h>
|
||||
#include <nel/misc/path.h>
|
||||
#include <nel/misc/algo.h>
|
||||
#include <nel/misc/common.h>
|
||||
|
||||
// Qt includes
|
||||
|
||||
using namespace NLMISC;
|
||||
using namespace std;
|
||||
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
PackedFile::PackedFile()
|
||||
{
|
||||
m_size = 0;
|
||||
m_pos = 0;
|
||||
}
|
||||
|
||||
NLMISC_SAFE_SINGLETON_IMPL(BNPFileHandle);
|
||||
|
||||
BNPFileHandle::BNPFileHandle()
|
||||
{
|
||||
m_offsetFromBeginning = 0;
|
||||
}
|
||||
// ***************************************************************************
|
||||
BNPFileHandle::~BNPFileHandle()
|
||||
{
|
||||
// Erase the list
|
||||
m_packedFiles.clear();
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::releaseInstance()
|
||||
{
|
||||
if (_Instance)
|
||||
{
|
||||
NLMISC::INelContext::getInstance().releaseSingletonPointer("BNPFileHandle", _Instance);
|
||||
delete _Instance;
|
||||
_Instance = NULL;
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
bool BNPFileHandle::unpack(const string &dirName, const vector<string>& fileList)
|
||||
{
|
||||
CIFile bnp;
|
||||
bnp.open(m_openedBNPFile);
|
||||
|
||||
TPackedFilesList::iterator it_files = m_packedFiles.begin();
|
||||
|
||||
for (it_files; it_files != m_packedFiles.end(); it_files++)
|
||||
{
|
||||
// Check if the file should be unpacked or not
|
||||
if (find(fileList.begin(), fileList.end(), it_files->m_name) != fileList.end())
|
||||
{
|
||||
string filename = dirName + "/" + it_files->m_name;
|
||||
|
||||
COFile out;
|
||||
if ( out.open(filename) )
|
||||
{
|
||||
bnp.seek(it_files->m_pos, IStream::begin);
|
||||
uint8 *ptr = new uint8[it_files->m_size];
|
||||
bnp.serialBuffer(ptr,it_files->m_size);
|
||||
out.serialBuffer(ptr,it_files->m_size);
|
||||
delete [] ptr;
|
||||
}
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
bnp.close();
|
||||
return true;
|
||||
}
|
||||
// ***************************************************************************
|
||||
// Read the header from a big file
|
||||
bool BNPFileHandle::readHeader(const std::string &filePath)
|
||||
{
|
||||
m_packedFiles.clear();
|
||||
|
||||
m_openedBNPFile = filePath;
|
||||
|
||||
CIFile bnp;
|
||||
bnp.open (filePath);
|
||||
|
||||
bnp.seek(0, IStream::end);
|
||||
uint32 nFileSize = bnp.getFileSize();
|
||||
bnp.seek(nFileSize-sizeof(uint32), IStream::begin);
|
||||
|
||||
uint32 nOffsetFromBegining;
|
||||
|
||||
bnp.serial(nOffsetFromBegining);
|
||||
|
||||
if ( !bnp.seek (nOffsetFromBegining, IStream::begin) )
|
||||
{
|
||||
nlwarning("Could not read offset from begining");
|
||||
bnp.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 nNbFile;
|
||||
bnp.serial(nNbFile);
|
||||
|
||||
for (uint32 i = 0; i < nNbFile; ++i)
|
||||
{
|
||||
uint8 nStringSize;
|
||||
char sName[256];
|
||||
|
||||
bnp.serial(nStringSize);
|
||||
bnp.serialBuffer( (uint8*)sName, nStringSize);
|
||||
sName[nStringSize] = 0;
|
||||
|
||||
PackedFile tmpPackedFile;
|
||||
tmpPackedFile.m_name = sName;
|
||||
tmpPackedFile.m_path = m_openedBNPFile;
|
||||
|
||||
bnp.serial(tmpPackedFile.m_size);
|
||||
bnp.serial(tmpPackedFile.m_pos);
|
||||
|
||||
m_packedFiles.push_back (tmpPackedFile);
|
||||
}
|
||||
|
||||
bnp.close();
|
||||
return true;
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::list(TPackedFilesList& FileList)
|
||||
{
|
||||
PackedFile tmpFile;
|
||||
TPackedFilesList::iterator it = m_packedFiles.begin();
|
||||
while (it != m_packedFiles.end() )
|
||||
{
|
||||
tmpFile.m_name = it->m_name;
|
||||
tmpFile.m_pos = it->m_pos;
|
||||
tmpFile.m_size = it->m_size;
|
||||
tmpFile.m_path = it->m_path;
|
||||
FileList.push_back(tmpFile);
|
||||
it++;
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
bool BNPFileHandle::writeHeader( const std::string &filePath, uint32 offset )
|
||||
{
|
||||
COFile bnp;
|
||||
bnp.open(filePath, true);
|
||||
if ( !bnp.isOpen() )
|
||||
return false;
|
||||
|
||||
uint32 nNbFile = (uint32)m_packedFiles.size();
|
||||
bnp.serial(nNbFile);
|
||||
|
||||
for (uint32 i = 0; i < nNbFile; ++i)
|
||||
{
|
||||
uint8 nStringSize = (uint8)m_packedFiles[i].m_name.size();
|
||||
bnp.serial( nStringSize );
|
||||
bnp.serialBuffer( (uint8*)m_packedFiles[i].m_name.c_str(), nStringSize );
|
||||
bnp.serial(m_packedFiles[i].m_size);
|
||||
bnp.serial(m_packedFiles[i].m_pos);
|
||||
}
|
||||
|
||||
bnp.serial(offset);
|
||||
|
||||
bnp.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::fileNames(std::vector<std::string> &fileNames)
|
||||
{
|
||||
TPackedFilesList::iterator it = m_packedFiles.begin();
|
||||
while (it != m_packedFiles.end() )
|
||||
{
|
||||
fileNames.push_back(it->m_name);
|
||||
it++;
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::addFiles( const vector<string> &filePathes)
|
||||
{
|
||||
uint32 OffsetFromBegining = 0;
|
||||
|
||||
// create packed files and add them to the private vector
|
||||
vector<string>::const_iterator it_vec = filePathes.begin();
|
||||
while (it_vec != filePathes.end() )
|
||||
{
|
||||
PackedFile tmpFile;
|
||||
tmpFile.m_name = CFile::getFilename (*it_vec);
|
||||
// Leave position to 0 and set the value during the new bnp file is creating
|
||||
// We need the position only for the header at the end
|
||||
tmpFile.m_pos = 0;
|
||||
tmpFile.m_size = CFile::getFileSize(*it_vec);
|
||||
tmpFile.m_path = *it_vec;
|
||||
m_packedFiles.push_back( tmpFile );
|
||||
|
||||
it_vec++;
|
||||
}
|
||||
|
||||
// sort packed files alphabetic
|
||||
std::sort ( m_packedFiles.begin(), m_packedFiles.end(), compare );
|
||||
|
||||
// create a new temporary bnp file with extension *.tmp
|
||||
TPackedFilesList::iterator it_packed = m_packedFiles.begin();
|
||||
while (it_packed != m_packedFiles.end() )
|
||||
{
|
||||
append(m_openedBNPFile + ".tmp", *it_packed);
|
||||
// Set now the new offset for the new header
|
||||
it_packed->m_pos = OffsetFromBegining;
|
||||
OffsetFromBegining += it_packed->m_size;
|
||||
|
||||
it_packed++;
|
||||
}
|
||||
|
||||
writeHeader(m_openedBNPFile + ".tmp", OffsetFromBegining);
|
||||
|
||||
CFile::deleteFile( m_openedBNPFile );
|
||||
string src = m_openedBNPFile + ".tmp";
|
||||
CFile::moveFile( m_openedBNPFile.c_str(), src.c_str() );
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::deleteFiles( const vector<string>& fileNames)
|
||||
{
|
||||
vector<string>::const_iterator it_vec;
|
||||
TPackedFilesList::iterator it_packed;
|
||||
uint32 OffsetFromBegining = 0;
|
||||
string tmpFile = m_openedBNPFile + ".tmp";
|
||||
|
||||
// create a new temporary bnp file with extension *.tmp
|
||||
it_packed = m_packedFiles.begin();
|
||||
while (it_packed != m_packedFiles.end() )
|
||||
{
|
||||
// check each packed file if it should be deleted
|
||||
it_vec = find (fileNames.begin(), fileNames.end(), it_packed->m_name );
|
||||
if ( it_vec != fileNames.end() )
|
||||
{
|
||||
nlinfo("Deleting file %s.", it_packed->m_name.c_str() );
|
||||
it_packed = m_packedFiles.erase(it_packed);
|
||||
}
|
||||
else
|
||||
{
|
||||
append(tmpFile, *it_packed);
|
||||
// Set now the new offset for the new header
|
||||
it_packed->m_pos = OffsetFromBegining;
|
||||
OffsetFromBegining += it_packed->m_size;
|
||||
|
||||
it_packed++;
|
||||
}
|
||||
}
|
||||
|
||||
writeHeader(tmpFile, OffsetFromBegining);
|
||||
|
||||
CFile::deleteFile( m_openedBNPFile );
|
||||
string src = m_openedBNPFile + ".tmp";
|
||||
CFile::moveFile( m_openedBNPFile.c_str(), src.c_str() );
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPFileHandle::append(const string &destination, const PackedFile &source)
|
||||
{
|
||||
// check if the file exists and create one if not
|
||||
if ( !CFile::fileExists(destination) )
|
||||
CFile::createEmptyFile( destination );
|
||||
|
||||
COFile bnpfile;
|
||||
CIFile packedfile;
|
||||
bnpfile.open(destination, true);
|
||||
packedfile.open(source.m_path);
|
||||
if ( !bnpfile.isOpen() ) return;
|
||||
|
||||
|
||||
uint8 *ptr = new uint8[source.m_size];
|
||||
|
||||
// check if the source is a bnp file.
|
||||
if ( nlstricmp( CFile::getExtension(source.m_path), "bnp" ) == 0 )
|
||||
{
|
||||
// Jump to the file position inside the bnp
|
||||
packedfile.seek(source.m_pos, IStream::begin);
|
||||
}
|
||||
// Read the source
|
||||
packedfile.serialBuffer(ptr, source.m_size);
|
||||
|
||||
// Append the data to the destination
|
||||
bnpfile.serialBuffer(ptr, source.m_size);
|
||||
|
||||
delete [] ptr;
|
||||
|
||||
packedfile.close();
|
||||
bnpfile.close();
|
||||
}
|
||||
// ***************************************************************************
|
||||
bool BNPFileHandle::compare(const PackedFile &left, const PackedFile &right)
|
||||
{
|
||||
return nlstricmp (left.m_name.c_str(), right.m_name.c_str()) < 0;
|
||||
}
|
||||
} // namespace BNPManager
|
|
@ -0,0 +1,139 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_FILE_H
|
||||
#define BNP_FILE_H
|
||||
|
||||
// Project includes
|
||||
|
||||
// Nel includes
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include <nel/misc/singleton.h>
|
||||
|
||||
// Qt includes
|
||||
#include <QString>
|
||||
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
struct PackedFile
|
||||
{
|
||||
PackedFile();
|
||||
std::string m_name;
|
||||
uint32 m_size;
|
||||
uint32 m_pos;
|
||||
std::string m_path;
|
||||
};
|
||||
|
||||
typedef std::vector<PackedFile> TPackedFilesList;
|
||||
|
||||
class BNPFileHandle
|
||||
{
|
||||
NLMISC_SAFE_SINGLETON_DECL(BNPFileHandle)
|
||||
|
||||
/**
|
||||
* Private constructor
|
||||
*/
|
||||
BNPFileHandle();
|
||||
|
||||
/**
|
||||
* Private destructor
|
||||
*/
|
||||
~BNPFileHandle();
|
||||
|
||||
public:
|
||||
// release memory
|
||||
static void releaseInstance();
|
||||
|
||||
/*void append (const QString destFilename, const QString origFilename, uint32 sizeToRead);
|
||||
void packRecurse();*/
|
||||
|
||||
/**
|
||||
* Read the header from the bnp file and create a filelist
|
||||
* \param filename (consisting the whole path)
|
||||
*/
|
||||
bool readHeader (const std::string &filePath);
|
||||
|
||||
bool writeHeader (const std::string &filePath, uint32 offset);
|
||||
|
||||
/**
|
||||
* Append the header to a created bnp file
|
||||
* \param filename (consisting the whole path)
|
||||
*/
|
||||
void appendHeader (const std::string &filename) {};
|
||||
|
||||
/**
|
||||
* Create a vector of all packed files inside the bnp file
|
||||
* \param reference to the vector, which has to be filled
|
||||
*/
|
||||
void list (TPackedFilesList& FileList);
|
||||
|
||||
/**
|
||||
* Create a vector of all file names inside the bnp file
|
||||
* \param reference to the vector, which has to be filled
|
||||
*/
|
||||
void fileNames( std::vector<std::string>& fileNames );
|
||||
|
||||
/**
|
||||
* Add files to the current aktive bnp file
|
||||
* \param vector of file pathes to add
|
||||
*/
|
||||
void addFiles( const std::vector<std::string>& filePathes );
|
||||
|
||||
/**
|
||||
* Delete files from the current aktive bnp file
|
||||
* \param vector of files names
|
||||
*/
|
||||
void deleteFiles (const std::vector<std::string>& fileNames);
|
||||
|
||||
/**
|
||||
* Unpack the selected packed files into user defined dir
|
||||
* \param directory path, where the files should be unpacked
|
||||
* \param list of files, which has to be unpacked
|
||||
*/
|
||||
bool unpack (const std::string &dirName, const std::vector<std::string>& fileList);
|
||||
|
||||
/**
|
||||
* Compares two filenames
|
||||
* \param left: left packed file
|
||||
* \param right: right packed file
|
||||
* \return: TODO
|
||||
*/
|
||||
static bool compare(const PackedFile &left, const PackedFile &right);
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Append one file to an existing bnp file
|
||||
* \param destination: the active bnp file to append the file
|
||||
* \param source: the source file to pack
|
||||
*/
|
||||
void append( const std::string& destination, const PackedFile& source );
|
||||
|
||||
TPackedFilesList m_packedFiles;
|
||||
|
||||
// currently opened and displayed bnp file
|
||||
std::string m_openedBNPFile;
|
||||
|
||||
// offset where the header of the bnp file begins
|
||||
uint32 m_offsetFromBeginning;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,145 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
// Project includes
|
||||
#include "bnp_filelist_dialog.h"
|
||||
#include "bnp_file.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QWidget>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QMimeData>
|
||||
#include <QUrl>
|
||||
#include <QEvent>
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
BnpFileListDialog::BnpFileListDialog(QString bnpPath, QWidget *parent)
|
||||
: QDockWidget(parent),
|
||||
m_DataPath(bnpPath)
|
||||
{
|
||||
m_ui.setupUi(this);
|
||||
setAcceptDrops(true);
|
||||
}
|
||||
// ***************************************************************************
|
||||
BnpFileListDialog::~BnpFileListDialog()
|
||||
{
|
||||
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BnpFileListDialog::setupTable(int nbrows)
|
||||
{
|
||||
// delete all old entries
|
||||
m_ui.tableWidget->clear();
|
||||
|
||||
// set 2 colums: filename and size
|
||||
m_ui.tableWidget->setColumnCount(2);
|
||||
|
||||
// set number of rows according to the number of files in the bnp file
|
||||
m_ui.tableWidget->setRowCount(nbrows);
|
||||
|
||||
// only entire rows can be selected
|
||||
m_ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
||||
// set the horizontal headers
|
||||
QStringList labels;
|
||||
labels << tr("Filename") << tr("Size");
|
||||
m_ui.tableWidget->setHorizontalHeaderLabels(labels);
|
||||
|
||||
m_ui.tableWidget->horizontalHeader()->setResizeMode(0, QHeaderView::Interactive);
|
||||
m_ui.tableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch );
|
||||
m_ui.tableWidget->verticalHeader()->hide();
|
||||
|
||||
// set vertical size a little bit smaller
|
||||
m_ui.tableWidget->verticalHeader()->setDefaultSectionSize(15);
|
||||
m_ui.tableWidget->setShowGrid(false);
|
||||
m_ui.tableWidget->setObjectName("tablewidget");
|
||||
}
|
||||
// ***************************************************************************
|
||||
bool BnpFileListDialog::loadTable(const QString filePath)
|
||||
{
|
||||
// reference to the BNPFileHandle singletone instance
|
||||
BNPFileHandle& myBNPFileHandle = BNPFileHandle::getInstance();
|
||||
// string vector of all packed files inside a bnp
|
||||
TPackedFilesList filelist;
|
||||
int row = 0;
|
||||
|
||||
// read the header from the bnp file
|
||||
if (!myBNPFileHandle.readHeader( filePath.toStdString()) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
myBNPFileHandle.list( filelist );
|
||||
|
||||
// create table with number of rows
|
||||
setupTable(filelist.size());
|
||||
|
||||
// fill the table items
|
||||
TPackedFilesList::iterator it = filelist.begin();
|
||||
while (it != filelist.end() )
|
||||
{
|
||||
QTableWidgetItem *nameItem = new QTableWidgetItem (it->m_name.c_str() );
|
||||
QTableWidgetItem *sizeItem = new QTableWidgetItem (tr("%1 KB").arg(it->m_size));
|
||||
m_ui.tableWidget->setItem(row, 0, nameItem);
|
||||
m_ui.tableWidget->setItem(row, 1, sizeItem);
|
||||
it++;
|
||||
row++;
|
||||
}
|
||||
|
||||
// Set the file path as the widgets title
|
||||
setWindowTitle(filePath);
|
||||
|
||||
return true;
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BnpFileListDialog::getSelections(TSelectionList& SelectionList)
|
||||
{
|
||||
QModelIndex index;
|
||||
QAbstractItemModel *model = m_ui.tableWidget->model();
|
||||
QItemSelectionModel *selection = m_ui.tableWidget->selectionModel();
|
||||
QModelIndexList indexes = selection->selectedRows();
|
||||
|
||||
Q_FOREACH(index, indexes)
|
||||
{
|
||||
QVariant data = model->data(index);
|
||||
QString filename = data.toString();
|
||||
SelectionList.push_back( filename.toStdString() );
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BnpFileListDialog::dragEnterEvent(QDragEnterEvent *event)
|
||||
{
|
||||
// Accept only one file
|
||||
// In the future a tabbed FileListDialog would accept more
|
||||
if ( event->mimeData()->hasUrls() && event->mimeData()->urls().count() == 1)
|
||||
event->acceptProposedAction();
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BnpFileListDialog::dropEvent(QDropEvent *event)
|
||||
{
|
||||
// Excraft the local file url from the drop object and fill the table
|
||||
const QMimeData *mimeData = event->mimeData();
|
||||
QList<QUrl> urlList = mimeData->urls();
|
||||
loadTable( urlList.first().toLocalFile() );
|
||||
}
|
||||
|
||||
} // namespace BNPManager
|
|
@ -0,0 +1,83 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_FILELIST_DIALOG_H
|
||||
#define BNP_FILELIST_DIALOG_H
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QWidget>
|
||||
|
||||
// STL includes
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
// NeL includes
|
||||
|
||||
// Project includes
|
||||
#include "ui_bnp_filelist_dialog.h"
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
typedef std::vector<std::string> TSelectionList;
|
||||
|
||||
class BnpFileListDialog : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
BnpFileListDialog(QString bnpPath, QWidget *parent = 0);
|
||||
|
||||
// Destructor
|
||||
~BnpFileListDialog();
|
||||
|
||||
/**
|
||||
* Load the bnp file and setup the table view
|
||||
* \param Filename
|
||||
* \return true if everything went well
|
||||
*/
|
||||
bool loadTable(const QString filePath);
|
||||
|
||||
/**
|
||||
* Set the dimension of the table
|
||||
* \param number of rows
|
||||
*/
|
||||
void setupTable(int nbrows);
|
||||
|
||||
/**
|
||||
* Fill the files selected in the table view to
|
||||
* unpack them.
|
||||
* \param reference to a vector of filenames.
|
||||
* \return true if everything went well
|
||||
*/
|
||||
void getSelections(TSelectionList& SelectionList);
|
||||
|
||||
protected:
|
||||
void dragEnterEvent (QDragEnterEvent *event);
|
||||
void dropEvent(QDropEvent *event);
|
||||
private:
|
||||
Ui::BnpFileListDialog m_ui;
|
||||
|
||||
// common data path as root folder for the dirtree view
|
||||
QString m_DataPath;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>BnpFileListDialog</class>
|
||||
<widget class="QDockWidget" name="BnpFileListDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>200</width>
|
||||
<height>141</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="acceptDrops">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="features">
|
||||
<set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>BNP File List</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTableWidget" name="tableWidget">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="showGrid">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderMinimumSectionSize">
|
||||
<number>15</number>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../object_viewer_qt.qrc"/>
|
||||
<include location="../core/core.qrc"/>
|
||||
<include location="bnp_manager.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,51 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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 "bnp_filesystem_model.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QStyle>
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
BNPFileSystemModel::BNPFileSystemModel(QObject *parent)
|
||||
: QFileSystemModel(parent)
|
||||
{
|
||||
}
|
||||
// ***************************************************************************
|
||||
BNPFileSystemModel::~BNPFileSystemModel()
|
||||
{
|
||||
|
||||
}
|
||||
// ***************************************************************************
|
||||
int BNPFileSystemModel::columnCount(const QModelIndex &) const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
// ***************************************************************************
|
||||
QVariant BNPFileSystemModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
|
||||
if (role == Qt::DecorationRole)
|
||||
{
|
||||
if (isDir(index))
|
||||
return QApplication::style()->standardIcon(QStyle::SP_DirIcon);
|
||||
}
|
||||
return QFileSystemModel::data(index, role);
|
||||
}
|
||||
// ***************************************************************************
|
||||
} // namespace BNPManager
|
|
@ -0,0 +1,49 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>
|
||||
|
||||
#ifndef BNP_FILESYSTEM_MODEL_H
|
||||
#define BNP_FILESYSTEM_MODEL_H
|
||||
|
||||
#include <QtGui/QFileSystemModel>
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
class BNPFileSystemModel : public QFileSystemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
BNPFileSystemModel(QObject *parent = 0);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~BNPFileSystemModel();
|
||||
|
||||
int columnCount(const QModelIndex &) const;
|
||||
|
||||
QVariant data(const QModelIndex& index, int role) const ;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,9 @@
|
|||
<RCC>
|
||||
<qresource>
|
||||
<file>images/ic_nel_bnp_make.png</file>
|
||||
<file>images/ic_nel_delete_item.png</file>
|
||||
<file>images/ic_nel_add_item.png</file>
|
||||
<file>images/ic_nel_export.png</file>
|
||||
<file>images/ic_nel_reset_all.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -0,0 +1,37 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_MANAGER_CONSTANTS_H
|
||||
#define BNP_MANAGER_CONSTANTS_H
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
namespace Constants
|
||||
{
|
||||
//settings
|
||||
const char * const BNP_MANAGER_SECTION = "BNPManager";
|
||||
|
||||
//resources
|
||||
const char *const ICON_ADD = ":/images/ic_nel_add_item.png";
|
||||
const char *const ICON_DELETE = ":/images/ic_nel_delete_item.png";
|
||||
const char *const ICON_UNPACK = ":/images/ic_nel_export.png";
|
||||
const char *const ICON_CLOSE = ":/images/ic_nel_reset_all.png";
|
||||
|
||||
|
||||
} // namespace Constants
|
||||
} // namespace Plugin
|
||||
|
||||
#endif
|
|
@ -0,0 +1,89 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
// Project includes
|
||||
#include "bnp_manager_plugin.h"
|
||||
#include "bnp_manager_window.h"
|
||||
|
||||
#include "../core/icore.h"
|
||||
#include "../core/core_constants.h"
|
||||
#include "../core/menu_manager.h"
|
||||
|
||||
// NeL includes
|
||||
#include "nel/misc/debug.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QMainWindow>
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
BNPManagerPlugin::BNPManagerPlugin()
|
||||
{
|
||||
}
|
||||
|
||||
BNPManagerPlugin::~BNPManagerPlugin()
|
||||
{
|
||||
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
|
||||
{
|
||||
m_plugMan->removeObject(obj);
|
||||
}
|
||||
qDeleteAll(m_autoReleaseObjects);
|
||||
m_autoReleaseObjects.clear();
|
||||
}
|
||||
|
||||
bool BNPManagerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
|
||||
{
|
||||
Q_UNUSED(errorString);
|
||||
m_plugMan = pluginManager;
|
||||
|
||||
addAutoReleasedObject(new BNPManagerContext(this));
|
||||
return true;
|
||||
}
|
||||
|
||||
void BNPManagerPlugin::extensionsInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
void BNPManagerPlugin::shutdown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void BNPManagerPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
// Ensure that a context doesn't exist yet.
|
||||
// This only applies to platforms without PIC, e.g. Windows.
|
||||
nlassert(!NLMISC::INelContext::isContextInitialised());
|
||||
#endif // NL_OS_WINDOWS
|
||||
m_libContext = new NLMISC::CLibraryContext(*nelContext);
|
||||
}
|
||||
|
||||
void BNPManagerPlugin::addAutoReleasedObject(QObject *obj)
|
||||
{
|
||||
m_plugMan->addObject(obj);
|
||||
m_autoReleaseObjects.prepend(obj);
|
||||
}
|
||||
|
||||
/*void BNPManagerContext::open()
|
||||
{
|
||||
m_BnpManagerWindow->open();
|
||||
}*/
|
||||
}
|
||||
|
||||
Q_EXPORT_PLUGIN(BNPManager::BNPManagerPlugin)
|
|
@ -0,0 +1,130 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_MANAGER_PLUGIN_H
|
||||
#define BNP_MANAGER_PLUGIN_H
|
||||
|
||||
// Project includes
|
||||
#include "../../extension_system/iplugin.h"
|
||||
#include "../core/icontext.h"
|
||||
#include "bnp_manager_window.h"
|
||||
|
||||
// NeL includes
|
||||
#include "nel/misc/app_context.h"
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QIcon>
|
||||
|
||||
namespace NLMISC
|
||||
{
|
||||
class CLibraryContext;
|
||||
}
|
||||
|
||||
namespace ExtensionSystem
|
||||
{
|
||||
class IPluginSpec;
|
||||
}
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
class m_BnpManagerWindow;
|
||||
|
||||
class BNPManagerPlugin : public QObject, public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(ExtensionSystem::IPlugin)
|
||||
|
||||
public:
|
||||
BNPManagerPlugin();
|
||||
virtual ~BNPManagerPlugin();
|
||||
|
||||
virtual bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
|
||||
virtual void extensionsInitialized();
|
||||
virtual void shutdown();
|
||||
virtual void setNelContext(NLMISC::INelContext *nelContext);
|
||||
|
||||
void addAutoReleasedObject(QObject *obj);
|
||||
|
||||
protected:
|
||||
|
||||
NLMISC::CLibraryContext *m_libContext;
|
||||
|
||||
private:
|
||||
|
||||
ExtensionSystem::IPluginManager *m_plugMan;
|
||||
QList<QObject *> m_autoReleaseObjects;
|
||||
};
|
||||
|
||||
/**
|
||||
* Implementation of the IContext interface
|
||||
*
|
||||
* \date 2011
|
||||
*/
|
||||
|
||||
class BNPManagerContext : public Core::IContext
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
BNPManagerContext(QObject *parent = 0) : IContext(parent)
|
||||
{
|
||||
// run new manager window app
|
||||
m_BnpManagerWindow = new BNPManagerWindow();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
virtual ~BNPManagerContext() {}
|
||||
|
||||
virtual QString id() const
|
||||
{
|
||||
return QLatin1String("BNPManagerContext");
|
||||
}
|
||||
virtual QString trName() const
|
||||
{
|
||||
return tr("BNP Manager");
|
||||
}
|
||||
virtual QIcon icon() const
|
||||
{
|
||||
return QIcon(":/images/ic_nel_bnp_make.png");
|
||||
}
|
||||
|
||||
virtual void open()
|
||||
{
|
||||
m_BnpManagerWindow->open();
|
||||
}
|
||||
|
||||
virtual QUndoStack *undoStack()
|
||||
{
|
||||
return m_BnpManagerWindow->m_undoStack;
|
||||
}
|
||||
|
||||
virtual QWidget *widget()
|
||||
{
|
||||
return m_BnpManagerWindow;
|
||||
}
|
||||
|
||||
BNPManagerWindow *m_BnpManagerWindow;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Plugin
|
||||
|
||||
|
||||
|
||||
#endif // BNP_MANAGER_PLUGIN_H
|
|
@ -0,0 +1,291 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
// Project includes
|
||||
#include "bnp_manager_window.h"
|
||||
#include "bnp_manager_constants.h"
|
||||
#include "bnp_dirtree_dialog.h"
|
||||
#include "bnp_filelist_dialog.h"
|
||||
#include "bnp_file.h"
|
||||
|
||||
#include "../core/icore.h"
|
||||
#include "../core/menu_manager.h"
|
||||
#include "../core/core_constants.h"
|
||||
#include "../../extension_system/iplugin_spec.h"
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/debug.h>
|
||||
#include <nel/misc/path.h>
|
||||
|
||||
// Qt includes
|
||||
#include <QDebug>
|
||||
#include <QFileDialog>
|
||||
#include <QToolBar>
|
||||
#include <QTableWidget>
|
||||
#include <QMessageBox>
|
||||
#include <QSettings>
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
BNPManagerWindow::BNPManagerWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
{
|
||||
// add new mainwindow for sheet dockwidgets
|
||||
QTableWidget* hideWidget = new QTableWidget(0,0,this);
|
||||
setCentralWidget(hideWidget);
|
||||
hideWidget->hide();
|
||||
|
||||
// Read the settings
|
||||
readSettings();
|
||||
|
||||
// create main dialogs and display them
|
||||
createDialogs();
|
||||
|
||||
// create actions like open, close, add etc.
|
||||
createActions();
|
||||
|
||||
// create a toolbar with icons
|
||||
createToolBars();
|
||||
|
||||
// this SLOT is triggered if the user activates a bnp files in the
|
||||
// dirtree view
|
||||
connect(m_BnpDirTreeDialog, SIGNAL(selectedFile(const QString)),
|
||||
this, SLOT(loadFile(const QString)));
|
||||
|
||||
// not used
|
||||
m_undoStack = new QUndoStack(this);
|
||||
}
|
||||
// ***************************************************************************
|
||||
BNPManagerWindow::~BNPManagerWindow()
|
||||
{
|
||||
writeSettings();
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::createDialogs()
|
||||
{
|
||||
// create dialog to list the contents of the specified
|
||||
// bnp data file directory
|
||||
m_BnpDirTreeDialog = new CBnpDirTreeDialog(tr(m_DataPath.toStdString().c_str()),this);
|
||||
addDockWidget(Qt::LeftDockWidgetArea, m_BnpDirTreeDialog);
|
||||
m_BnpDirTreeDialog->setVisible(true);
|
||||
restoreDockWidget(m_BnpDirTreeDialog);
|
||||
|
||||
// create dialog to list the packed file contents of bnp files on
|
||||
// the right hand side
|
||||
m_BnpFileListDialog = new BnpFileListDialog(m_DataPath,this);
|
||||
addDockWidget(Qt::RightDockWidgetArea, m_BnpFileListDialog);
|
||||
m_BnpFileListDialog->setVisible(true);
|
||||
restoreDockWidget(m_BnpFileListDialog);
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::createActions()
|
||||
{
|
||||
// open action
|
||||
m_openAction = new QAction(tr("&Open..."), this);
|
||||
m_openAction->setIcon(QIcon(Core::Constants::ICON_OPEN));
|
||||
m_openAction->setStatusTip(tr("Open file"));
|
||||
connect(m_openAction, SIGNAL(triggered()), this, SLOT( open() ));
|
||||
|
||||
// close action
|
||||
m_closeAction = new QAction(tr("&Close..."), this);
|
||||
m_closeAction->setIcon(QIcon(Constants::ICON_CLOSE));
|
||||
m_closeAction->setStatusTip(tr("Close the BNP File"));
|
||||
connect(m_closeAction, SIGNAL(triggered()), this, SLOT( close() ));
|
||||
|
||||
// add files into the bnp file
|
||||
m_addFilesAction = new QAction(tr("&Add..."), this);
|
||||
m_addFilesAction->setIcon(QIcon(Constants::ICON_ADD));
|
||||
m_addFilesAction->setStatusTip(tr("Add Files to BNP"));
|
||||
connect(m_addFilesAction, SIGNAL(triggered()), this, SLOT( addFiles() ));
|
||||
|
||||
// delete files from the bnp file
|
||||
m_deleteFilesAction = new QAction(tr("&Delete..."), this);
|
||||
m_deleteFilesAction->setIcon(QIcon(Constants::ICON_DELETE));
|
||||
m_deleteFilesAction->setStatusTip(tr("Delete Files"));
|
||||
connect(m_deleteFilesAction, SIGNAL(triggered()), this, SLOT( deleteFiles() ));
|
||||
|
||||
// unpack selected files into user defined dir
|
||||
m_unpackFilesAction = new QAction(tr("&Unpack..."), this);
|
||||
m_unpackFilesAction->setIcon(QIcon(Constants::ICON_UNPACK));
|
||||
m_unpackFilesAction->setStatusTip(tr("Unpack Files"));
|
||||
connect(m_unpackFilesAction, SIGNAL(triggered()), this, SLOT( unpackFiles() ));
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::createToolBars()
|
||||
{
|
||||
m_fileToolBar = addToolBar(tr("&File"));
|
||||
m_fileToolBar->addAction(m_openAction);
|
||||
m_fileToolBar->addAction(m_closeAction);
|
||||
|
||||
m_toolsBar = addToolBar(tr("&Tools"));
|
||||
m_toolsBar->addAction(m_addFilesAction);
|
||||
m_toolsBar->addAction(m_deleteFilesAction);
|
||||
m_toolsBar->addAction(m_unpackFilesAction);
|
||||
}
|
||||
// ***************************************************************************
|
||||
bool BNPManagerWindow::loadFile(const QString fileName)
|
||||
{
|
||||
m_BnpFileListDialog->loadTable(fileName);
|
||||
return true;
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::open()
|
||||
{
|
||||
QString fileName;
|
||||
// file dialog to select with file should be opened
|
||||
fileName = QFileDialog::getOpenFileName(this,
|
||||
tr("Open BNP file"), tr(m_DataPath.toStdString().c_str()), tr("BNP Files (*.bnp)"));
|
||||
|
||||
// Check if filename is empty
|
||||
if (fileName.isNull())
|
||||
return;
|
||||
|
||||
m_openedBNPFile = fileName;
|
||||
loadFile(fileName);
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::close()
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::addFiles()
|
||||
{
|
||||
// reference to the BNPFileHandle singletone instance
|
||||
BNPFileHandle& myBNPFileHandle = BNPFileHandle::getInstance();
|
||||
|
||||
// vector of all current packed filenames
|
||||
vector<string> currentFiles;
|
||||
|
||||
// vector of files to add
|
||||
vector<string> addFiles;
|
||||
|
||||
// open a file dialog and to add files
|
||||
QStringList FileList;
|
||||
|
||||
FileList = QFileDialog::getOpenFileNames(this,tr("Add Files..."),
|
||||
QDir::currentPath(), tr("All Files (*.*)") );
|
||||
|
||||
// get all current filenames from the opened bnp file
|
||||
myBNPFileHandle.fileNames(currentFiles);
|
||||
|
||||
QStringList::iterator it_list = FileList.begin();
|
||||
while (it_list != FileList.end() )
|
||||
{
|
||||
string fileName = CFile::getFilename (it_list->toStdString() );
|
||||
if ( std::find(currentFiles.begin(), currentFiles.end(), fileName ) != currentFiles.end() )
|
||||
{
|
||||
// Ask the user if he wants to override the existing file
|
||||
// atm only warn the user and do not override
|
||||
QMessageBox::warning(this, tr("BNP Manager"),
|
||||
tr("File is already in the list!"),
|
||||
QMessageBox::Ok,
|
||||
QMessageBox::Ok);
|
||||
}
|
||||
else
|
||||
{
|
||||
addFiles.push_back( it_list->toStdString() );
|
||||
// log it
|
||||
nlinfo("Add file %s", fileName.c_str() );
|
||||
}
|
||||
it_list++;
|
||||
}
|
||||
|
||||
if ( !addFiles.empty() )
|
||||
{
|
||||
myBNPFileHandle.addFiles( addFiles );
|
||||
}
|
||||
loadFile(m_openedBNPFile);
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::deleteFiles()
|
||||
{
|
||||
QFileDialog filedialog(this);
|
||||
BNPFileHandle& myBNPFileHandle = BNPFileHandle::getInstance();
|
||||
vector<string> selectedRows;
|
||||
|
||||
m_BnpFileListDialog->getSelections(selectedRows);
|
||||
|
||||
// Check if files were selected. If not, inform the user.
|
||||
if (selectedRows.empty())
|
||||
{
|
||||
QMessageBox::information(this, tr("BNP Manager"),
|
||||
tr("No files selected!"),
|
||||
QMessageBox::Ok,
|
||||
QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
myBNPFileHandle.deleteFiles(selectedRows);
|
||||
loadFile(m_openedBNPFile);
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::unpackFiles()
|
||||
{
|
||||
QFileDialog filedialog(this);
|
||||
BNPFileHandle& myBNPFileHandle = BNPFileHandle::getInstance();
|
||||
vector<string> selectedrows;
|
||||
|
||||
m_BnpFileListDialog->getSelections(selectedrows);
|
||||
|
||||
// Check if files were selected. If not, inform the user.
|
||||
// TODO: Ask the user if nothing was selected, if he wants to unpack all
|
||||
// files. This is more like Winzip.
|
||||
if (selectedrows.empty())
|
||||
{
|
||||
QMessageBox::information(this, tr("BNP Manager"),
|
||||
tr("No files selected!"),
|
||||
QMessageBox::Ok,
|
||||
QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
|
||||
tr(m_DataPath.toStdString().c_str()),
|
||||
QFileDialog::ShowDirsOnly
|
||||
| QFileDialog::DontResolveSymlinks);
|
||||
|
||||
// If anything went wrong or the user pressed "cancel"
|
||||
if ( dir.isEmpty() )
|
||||
return;
|
||||
|
||||
if (myBNPFileHandle.unpack(dir.toStdString(),selectedrows))
|
||||
{
|
||||
QMessageBox::information(this, tr("BNP Manager"),
|
||||
tr("All files has been exported successfully."),
|
||||
QMessageBox::Ok,
|
||||
QMessageBox::Ok);
|
||||
}
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::readSettings()
|
||||
{
|
||||
QSettings *settings = Core::ICore::instance()->settings();
|
||||
|
||||
settings->beginGroup(Core::Constants::DATA_PATH_SECTION);
|
||||
m_DataPath = settings->value(Core::Constants::ASSETS_PATH, "w:/database").toString();
|
||||
settings->endGroup();
|
||||
}
|
||||
// ***************************************************************************
|
||||
void BNPManagerWindow::writeSettings()
|
||||
{
|
||||
}
|
||||
} // namespace BNPManager
|
|
@ -0,0 +1,145 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>.
|
||||
|
||||
#ifndef BNP_MANAGER_WINDOW_H
|
||||
#define BNP_MANAGER_WINDOW_H
|
||||
|
||||
// Project includes
|
||||
//#include "ui_bnp_manager_window.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QLabel>
|
||||
#include <QtGui/QUndoStack>
|
||||
#include <QtGui/QTableWidget>
|
||||
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
class CBnpDirTreeDialog;
|
||||
class BnpFileListDialog;
|
||||
class BNPFileHandle;
|
||||
|
||||
/**
|
||||
* Main window class. Derived from QMainWindow and implements
|
||||
* the basic layout like menue, toolbars and dialogs.
|
||||
*
|
||||
* \date 2011
|
||||
*/
|
||||
|
||||
class BNPManagerWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
BNPManagerWindow(QWidget *parent = 0);
|
||||
|
||||
//Destructor
|
||||
~BNPManagerWindow();
|
||||
|
||||
|
||||
QUndoStack *m_undoStack;
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
/**
|
||||
* Open a file dialog to choose which file should be opened.
|
||||
* \return Filename string
|
||||
*/
|
||||
void open();
|
||||
|
||||
/**
|
||||
* Load a certain bnp file into the manager
|
||||
* \param Filename
|
||||
* \return true if everything went well
|
||||
*/
|
||||
bool loadFile(const QString fileName);
|
||||
|
||||
/**
|
||||
* close an opened bnp file and reset all views
|
||||
*/
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Add files into an opened bnp file.
|
||||
* \param Filelist
|
||||
*/
|
||||
void addFiles();
|
||||
|
||||
/**
|
||||
* Unpack the files marked in the filelist dialog into user defined
|
||||
* directory.
|
||||
* \param TBD
|
||||
* \return true if everything went well
|
||||
*/
|
||||
void unpackFiles();
|
||||
|
||||
/**
|
||||
* Delete marked files from the bnp file
|
||||
* \param TBD
|
||||
*/
|
||||
void deleteFiles();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Read plugin settings and set the window accordingly
|
||||
*/
|
||||
void readSettings();
|
||||
|
||||
/**
|
||||
* Write plugin settings
|
||||
*/
|
||||
void writeSettings();
|
||||
|
||||
/**
|
||||
* Create all plugin dialogs
|
||||
*/
|
||||
void createDialogs();
|
||||
|
||||
/**
|
||||
* Create all plugin actions
|
||||
*/
|
||||
void createActions();
|
||||
|
||||
/**
|
||||
* Create the plugin toolbar
|
||||
*/
|
||||
void createToolBars();
|
||||
|
||||
QToolBar *m_fileToolBar;
|
||||
QToolBar *m_toolsBar;
|
||||
|
||||
QAction *m_openAction;
|
||||
QAction *m_closeAction;
|
||||
QAction *m_addFilesAction;
|
||||
QAction *m_unpackFilesAction;
|
||||
QAction *m_deleteFilesAction;
|
||||
|
||||
CBnpDirTreeDialog *m_BnpDirTreeDialog;
|
||||
BnpFileListDialog *m_BnpFileListDialog;
|
||||
|
||||
QString m_DataPath;
|
||||
QString m_openedBNPFile;
|
||||
|
||||
}; /* class BNPManagerWindow */
|
||||
|
||||
} /* namespace Plugin */
|
||||
|
||||
#endif
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>BNPManagerWindow</class>
|
||||
<widget class="QMainWindow" name="BNPManagerWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>BNP Manager</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget#centralwidget {
|
||||
image: url(:/images/ic_nel_georges_editor.png);
|
||||
}</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QTableWidget" name="tableWidget"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QTreeView" name="treeView"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="toolBar">
|
||||
<property name="windowTitle">
|
||||
<string>toolBar</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="bnp_manager.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,56 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
// project includes
|
||||
#include "bnp_proxy_model.h"
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
bool BNPSortProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
|
||||
{
|
||||
if ( sourceModel()->hasChildren(left) )
|
||||
{
|
||||
if ( !sourceModel()->hasChildren(right) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
QString leftString = sourceModel()->data( left ).toString();
|
||||
QString rightString = sourceModel()->data( right ).toString();
|
||||
return QString::localeAwareCompare(leftString, rightString) < 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( sourceModel()->hasChildren(right) )
|
||||
return false;
|
||||
else
|
||||
{
|
||||
QString leftString = sourceModel()->data( left ).toString();
|
||||
QString rightString = sourceModel()->data( right ).toString();
|
||||
return QString::localeAwareCompare(leftString, rightString) < 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} /* namespace Plugin */
|
||||
|
||||
/* end of file */
|
|
@ -0,0 +1,44 @@
|
|||
// Object Viewer Qt - BNP Manager Plugin - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2011 Roland Winklmeier <roland.m.winklmeier@googlemail.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/>
|
||||
|
||||
#ifndef BNP_PROXY_MODEL_H
|
||||
#define BNP_PROXY_MODEL_H
|
||||
|
||||
// Qt includes
|
||||
#include <QSortFilterProxyModel>
|
||||
|
||||
namespace BNPManager
|
||||
{
|
||||
|
||||
class BNPSortProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
|
||||
public:
|
||||
BNPSortProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent)
|
||||
{
|
||||
}
|
||||
~BNPSortProxyModel()
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool lessThan ( const QModelIndex & left, const QModelIndex & right ) const;
|
||||
|
||||
};/* class BNPSortProxyModel */
|
||||
|
||||
} // BNPManager
|
||||
|
||||
#endif // BNP_PROXY_MODEL_H
|
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 30 KiB |
|
@ -0,0 +1,10 @@
|
|||
<plugin-spec>
|
||||
<library-name>ovqt_plugin_bnp_manager</library-name>
|
||||
<name>BNPManager</name>
|
||||
<version>0.1</version>
|
||||
<vendor>Krolock</vendor>
|
||||
<description>Edit BNP Files</description>
|
||||
<dependencies>
|
||||
<dependency plugin-name="Core" version="0.8"/>
|
||||
</dependencies>
|
||||
</plugin-spec>
|
|
@ -91,7 +91,7 @@
|
|||
<item>
|
||||
<widget class="QPushButton" name="bankButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
|
|
|
@ -186,12 +186,11 @@ void CAttribWidget::changeUseScheme(int index)
|
|||
|
||||
void CAttribWidget::openSchemeBankDialog()
|
||||
{
|
||||
CSchemeBankDialog *dialog = new CSchemeBankDialog(this);
|
||||
dialog->setModal(true);
|
||||
dialog->show();
|
||||
dialog->exec();
|
||||
delete dialog;
|
||||
//updateUi();
|
||||
CSchemeBankDialog dialog(this);
|
||||
dialog.setModal(true);
|
||||
dialog.show();
|
||||
dialog.exec();
|
||||
updateUi();
|
||||
}
|
||||
|
||||
void CAttribWidget::inputValueUpdate(void)
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
/// Force to update dialog content
|
||||
void updateUi();
|
||||
|
||||
/// Сonnects all the slots with signals
|
||||
/// Connects all the slots with signals
|
||||
void init();
|
||||
|
||||
/// Sets the pointer CWorkspaceNode* in the wrappers.
|
||||
|
@ -192,6 +192,7 @@ protected:
|
|||
QDialog *_SchemeWidget;
|
||||
|
||||
Ui::CAttribWidget _ui;
|
||||
friend class CSchemeBankDialog;
|
||||
}; /* class CAttribWidget */
|
||||
|
||||
/**
|
||||
|
|
|
@ -73,11 +73,14 @@ void CParticleEditor::release()
|
|||
{
|
||||
stop();
|
||||
closeWorkspace();
|
||||
delete _SchemeManager;
|
||||
}
|
||||
|
||||
void CParticleEditor::setActiveNode(CWorkspaceNode *node)
|
||||
{
|
||||
if (node == _ActiveNode) return;
|
||||
if (node == 0)
|
||||
_ActiveNode->getPSModel()->hide();
|
||||
_ActiveNode = node;
|
||||
|
||||
bool wasRunning = _State == State::RunningSingle;
|
||||
|
|
|
@ -378,6 +378,7 @@ void CParticleWorkspace::removeNode(uint index)
|
|||
{
|
||||
nlassert(index < _Nodes.size());
|
||||
_Nodes[index] = NULL; // delete the smart-ptr target
|
||||
delete _Nodes[index];
|
||||
_Nodes.erase(_Nodes.begin() + index);
|
||||
touch();
|
||||
}
|
||||
|
|
|
@ -305,6 +305,8 @@ void CParticleWorkspaceDialog::customContextMenu()
|
|||
_instanciateAction->setEnabled(stopped);
|
||||
_savePSAction->setEnabled(stopped);
|
||||
_saveAsPSAction->setEnabled(stopped);
|
||||
_removeFromWSAction->setEnabled(stopped);
|
||||
_clearContentAction->setEnabled(stopped);
|
||||
|
||||
popurMenu->exec(QCursor::pos());
|
||||
delete popurMenu;
|
||||
|
@ -369,13 +371,14 @@ void CParticleWorkspaceDialog::clearContent()
|
|||
|
||||
void CParticleWorkspaceDialog::removePS()
|
||||
{
|
||||
if (_treeModel->getOwnerNode(_currentItem) == Modules::psEdit().getActiveNode())
|
||||
CWorkspaceNode *node = _currentItem->getNode();
|
||||
if (node == Modules::psEdit().getActiveNode())
|
||||
Modules::psEdit().setActiveNode(NULL);
|
||||
|
||||
QModelIndex index = _ui.treeView->currentIndex();
|
||||
_ui.treeView->setCurrentIndex(index.parent());
|
||||
clickedItem(index.parent());
|
||||
Modules::psEdit().getParticleWorkspace()->removeNode(static_cast<CParticleTreeItem *>(index.internalPointer())->getNode());
|
||||
Modules::psEdit().getParticleWorkspace()->removeNode(node);
|
||||
_treeModel->removeRows(index.row(), index.parent());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,33 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// 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
|
||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// 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/>.
|
||||
|
||||
// Project includes
|
||||
#include "stdpch.h"
|
||||
#include "scheme_bank_dialog.h"
|
||||
#include "scheme_manager.h"
|
||||
#include "modules.h"
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/file.h>
|
||||
|
||||
// Qt includes
|
||||
#include <QFileDialog>
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
namespace NLQT
|
||||
{
|
||||
|
||||
|
@ -27,6 +36,16 @@ CSchemeBankDialog::CSchemeBankDialog(CAttribWidget *attribWidget, QWidget *paren
|
|||
{
|
||||
_ui.setupUi(this);
|
||||
_attribWidget = attribWidget;
|
||||
|
||||
connect(_ui.createButton, SIGNAL(clicked()), this, SLOT(createScheme()));
|
||||
connect(_ui.currentButton, SIGNAL(clicked()), this, SLOT(setCurrentScheme()));
|
||||
connect(_ui.removeButton, SIGNAL(clicked()), this, SLOT(removeScheme()));
|
||||
connect(_ui.loadButton, SIGNAL(clicked()), this, SLOT(loadBank()));
|
||||
connect(_ui.saveButton, SIGNAL(clicked()), this, SLOT(saveBank()));
|
||||
connect(_ui.listWidget, SIGNAL(itemSelectionChanged()), this, SLOT(enableButtons()));
|
||||
connect(_ui.listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(changeNameScheme(QListWidgetItem *)));
|
||||
|
||||
buildList();
|
||||
}
|
||||
|
||||
CSchemeBankDialog::~CSchemeBankDialog()
|
||||
|
@ -35,27 +54,125 @@ CSchemeBankDialog::~CSchemeBankDialog()
|
|||
|
||||
void CSchemeBankDialog::createScheme()
|
||||
{
|
||||
bool ok;
|
||||
QString text = QInputDialog::getText(this, tr("Insert new scheme"),
|
||||
tr("Set name:"), QLineEdit::Normal,
|
||||
"new scheme", &ok);
|
||||
if (ok && !text.isEmpty())
|
||||
{
|
||||
NL3D::CPSAttribMakerBase *attribMakerBase = _attribWidget->getCurrentSchemePtr()->clone();
|
||||
Modules::psEdit().getSchemeManager()->insertScheme(text.toStdString(), attribMakerBase);
|
||||
|
||||
CSchemeItem *item = new CSchemeItem(text, _ui.listWidget);
|
||||
item->setUserData(attribMakerBase);
|
||||
item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::setCurrentScheme()
|
||||
{
|
||||
//SchemeManager.insertScheme(cn.getName(), getCurrentSchemePtr()->clone());
|
||||
CSchemeItem *item = dynamic_cast<CSchemeItem *>(_ui.listWidget->currentItem());
|
||||
|
||||
NL3D::CPSAttribMakerBase *attrib = item->getUserData();
|
||||
nlassert(attrib);
|
||||
|
||||
_attribWidget->setCurrentSchemePtr(attrib->clone());
|
||||
_attribWidget->updateUi();
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::removeScheme()
|
||||
{
|
||||
CSchemeItem *item = dynamic_cast<CSchemeItem *>(_ui.listWidget->currentItem());
|
||||
|
||||
NL3D::CPSAttribMakerBase *attrib = item->getUserData();
|
||||
nlassert(attrib);
|
||||
Modules::psEdit().getSchemeManager()->remove(attrib);
|
||||
_ui.listWidget->removeItemWidget(item);
|
||||
delete item;
|
||||
|
||||
if (_ui.listWidget->count() == 0)
|
||||
{
|
||||
_ui.currentButton->setEnabled(false);
|
||||
_ui.removeButton->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::saveBank()
|
||||
{
|
||||
QString fileName = QFileDialog::getSaveFileName(this,
|
||||
tr("Save scheme bank file"), ".",
|
||||
tr("Scheme bank files (*.scb)"));
|
||||
|
||||
if (!fileName.isEmpty())
|
||||
{
|
||||
try
|
||||
{
|
||||
NLMISC::COFile iF;
|
||||
iF.open(fileName.toStdString());
|
||||
NLQT::CSchemeManager *schemeManager = Modules::psEdit().getSchemeManager();
|
||||
iF.serial(*schemeManager);
|
||||
}
|
||||
catch (std::exception &e)
|
||||
{
|
||||
QMessageBox::critical(this, "Scheme manager", tr("Error saving scheme bank : %1").arg(e.what()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::loadBank()
|
||||
{
|
||||
QString fileName = QFileDialog::getOpenFileName(this,
|
||||
tr("Open scheme bank file"), ".",
|
||||
tr("Scheme bank files (*.scb)"));
|
||||
|
||||
if (!fileName.isEmpty())
|
||||
{
|
||||
NLQT::CSchemeManager sm;
|
||||
try
|
||||
{
|
||||
NLMISC::CIFile iF;
|
||||
iF.open(fileName.toStdString());
|
||||
iF.serial(sm);
|
||||
Modules::psEdit().getSchemeManager()->swap(sm);
|
||||
}
|
||||
catch (std::exception &e)
|
||||
{
|
||||
QMessageBox::critical(this, "Scheme manager", tr("Error loading scheme bank : %1").arg(e.what()));
|
||||
return;
|
||||
}
|
||||
buildList();
|
||||
}
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::buildList()
|
||||
void CSchemeBankDialog::changeNameScheme(QListWidgetItem *item)
|
||||
{
|
||||
CSchemeItem *schemeItem = dynamic_cast<CSchemeItem *>(item);
|
||||
|
||||
NL3D::CPSAttribMakerBase *attrib = schemeItem->getUserData();
|
||||
nlassert(attrib);
|
||||
|
||||
Modules::psEdit().getSchemeManager()->rename(attrib, item->text().toStdString());
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::enableButtons()
|
||||
{
|
||||
_ui.currentButton->setEnabled(true);
|
||||
_ui.removeButton->setEnabled(true);
|
||||
}
|
||||
|
||||
void CSchemeBankDialog::buildList()
|
||||
{
|
||||
_ui.listWidget->clear();
|
||||
typedef std::vector<NLQT::CSchemeManager::TSchemeInfo> TSchemeVect;
|
||||
static TSchemeVect schemes;
|
||||
Modules::psEdit().getSchemeManager()->getSchemes(_attribWidget->getCurrentSchemePtr()->getType(), schemes);
|
||||
for (TSchemeVect::const_iterator it = schemes.begin(); it != schemes.end(); ++it)
|
||||
{
|
||||
CSchemeItem *item = new CSchemeItem(it->first.c_str(), _ui.listWidget);
|
||||
item->setUserData(it->second);
|
||||
item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
} /* namespace NLQT */
|
|
@ -1,17 +1,17 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// 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
|
||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// 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 SCHEME_BANK_DIALOG_H
|
||||
|
@ -27,12 +27,37 @@
|
|||
#include "nel/3d/particle_system.h"
|
||||
|
||||
// Project includes
|
||||
#include "attrib_widget.h"
|
||||
#include "ps_wrapper.h"
|
||||
|
||||
namespace NLQT
|
||||
{
|
||||
class CAttribWidget;
|
||||
|
||||
/**
|
||||
@class CSchemeItem
|
||||
@brief Contain pointer to NL3D::CPSAttribMakerBase.
|
||||
*/
|
||||
class CSchemeItem: public QListWidgetItem
|
||||
{
|
||||
public:
|
||||
CSchemeItem(const QString &text, QListWidget *parent = 0, int type = UserType ):
|
||||
QListWidgetItem(text, parent, type), _attrib(NULL) {}
|
||||
|
||||
void setUserData(NL3D::CPSAttribMakerBase *attrib)
|
||||
{
|
||||
_attrib = attrib;
|
||||
}
|
||||
NL3D::CPSAttribMakerBase *getUserData() const
|
||||
{
|
||||
return _attrib;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
NL3D::CPSAttribMakerBase *_attrib;
|
||||
}; /* class CSchemeItem */
|
||||
|
||||
class CSchemeBankDialog: public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -47,9 +72,11 @@ private Q_SLOTS:
|
|||
void removeScheme();
|
||||
void saveBank();
|
||||
void loadBank();
|
||||
void enableButtons();
|
||||
void changeNameScheme(QListWidgetItem *item);
|
||||
|
||||
private:
|
||||
void buildList();
|
||||
void buildList();
|
||||
|
||||
CAttribWidget *_attribWidget;
|
||||
Ui::CSchemeBankDialog _ui;
|
||||
|
|
|
@ -14,31 +14,27 @@
|
|||
<string>Sceme bank</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" rowspan="8">
|
||||
<item row="0" column="0" rowspan="7">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="createButton">
|
||||
<property name="text">
|
||||
<string>Create</string>
|
||||
<string>Put current</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="renameButton">
|
||||
<property name="text">
|
||||
<string>Rename</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QPushButton" name="removeButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<item row="4" column="1">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -51,24 +47,33 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="loadButton">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Load bank</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="6" column="1">
|
||||
<widget class="QPushButton" name="saveButton">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save bank</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<item row="7" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
|
@ -105,7 +110,10 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="setCurrentButton">
|
||||
<widget class="QPushButton" name="currentButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Set current</string>
|
||||
</property>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include "scheme_manager.h"
|
||||
#include "nel/3d/ps_attrib_maker.h"
|
||||
|
||||
namespace NLQT
|
||||
namespace NLQT
|
||||
{
|
||||
|
||||
CSchemeManager::~CSchemeManager()
|
||||
|
@ -34,7 +34,7 @@ void CSchemeManager::insertScheme(const std::string &name, NL3D::CPSAttribMakerB
|
|||
{
|
||||
nlassert(scheme);
|
||||
TSchemeInfo si(std::string(name), scheme);
|
||||
_SchemeMap.insert(TSchemeMap::value_type(std::string(scheme->getType()), si));
|
||||
_SchemeMap.insert(TSchemeMap::value_type(std::string(scheme->getType()), si));
|
||||
}
|
||||
|
||||
void CSchemeManager::getSchemes(const std::string &type, std::vector<TSchemeInfo> &dest)
|
||||
|
@ -49,30 +49,30 @@ void CSchemeManager::getSchemes(const std::string &type, std::vector<TSchemeInfo
|
|||
|
||||
void CSchemeManager::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
|
||||
{
|
||||
|
||||
|
||||
f.serialCheck((uint32) '_GNM');
|
||||
f.serialCheck((uint32) 'MHCS');
|
||||
f.serialVersion(1);
|
||||
if (!f.isReading())
|
||||
{
|
||||
sint32 size = (sint32)_SchemeMap.size();
|
||||
f.serial(size);
|
||||
{
|
||||
sint32 size = (sint32)_SchemeMap.size();
|
||||
f.serial(size);
|
||||
for (TSchemeMap::iterator smIt = _SchemeMap.begin(); smIt != _SchemeMap.end(); ++smIt)
|
||||
{
|
||||
f.serial(smIt->second.first); // name
|
||||
f.serialPolyPtr(smIt->second.second); // scheme
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_SchemeMap.clear();
|
||||
|
||||
|
||||
std::string name;
|
||||
NL3D::CPSAttribMakerBase *scheme = NULL;
|
||||
sint32 size;
|
||||
f.serial(size);
|
||||
for (sint32 k = 0; k < size; ++k)
|
||||
{
|
||||
{
|
||||
f.serial(name);
|
||||
f.serialPolyPtr(scheme);
|
||||
insertScheme(name, scheme);
|
||||
|
@ -80,12 +80,12 @@ void CSchemeManager::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
|
|||
}
|
||||
}
|
||||
|
||||
void CSchemeManager::swap(CSchemeManager &other)
|
||||
void CSchemeManager::swap(CSchemeManager &other)
|
||||
{
|
||||
this->_SchemeMap.swap(other._SchemeMap);
|
||||
}
|
||||
|
||||
void CSchemeManager::remove(NL3D::CPSAttribMakerBase *am)
|
||||
void CSchemeManager::remove(NL3D::CPSAttribMakerBase *am)
|
||||
{
|
||||
TSchemeMap::iterator smIt;
|
||||
for (smIt = _SchemeMap.begin(); smIt != _SchemeMap.end(); ++smIt)
|
||||
|
@ -101,7 +101,7 @@ void CSchemeManager::remove(NL3D::CPSAttribMakerBase *am)
|
|||
}
|
||||
|
||||
// rename a scheme, given a pointer on it
|
||||
void CSchemeManager::rename(NL3D::CPSAttribMakerBase *am, const std::string &newName)
|
||||
void CSchemeManager::rename(NL3D::CPSAttribMakerBase *am, const std::string &newName)
|
||||
{
|
||||
TSchemeMap::iterator smIt;
|
||||
for (smIt = _SchemeMap.begin(); smIt != _SchemeMap.end(); ++smIt)
|
||||
|
@ -110,7 +110,7 @@ void CSchemeManager::rename(NL3D::CPSAttribMakerBase *am, const std::string &ne
|
|||
}
|
||||
if (smIt != _SchemeMap.end())
|
||||
{
|
||||
smIt->second.first = newName;
|
||||
smIt->second.first = newName;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,25 +10,23 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
|
||||
|
||||
SET(OVQT_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h
|
||||
translation_manager_main_window.h
|
||||
translation_manager_settings_page.h
|
||||
translation_manager_editor.h
|
||||
source_selection.h
|
||||
ftp_selection.h
|
||||
editor_worksheet.h
|
||||
editor_phrase.h
|
||||
extract_new_sheet_names.h
|
||||
extract_bot_names.h)
|
||||
translation_manager_main_window.h
|
||||
translation_manager_settings_page.h
|
||||
translation_manager_editor.h
|
||||
source_selection.h
|
||||
ftp_selection.h
|
||||
editor_worksheet.h
|
||||
editor_phrase.h
|
||||
)
|
||||
|
||||
SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui
|
||||
translation_manager_main_window.ui
|
||||
source_selection.ui
|
||||
ftp_selection.ui)
|
||||
translation_manager_main_window.ui
|
||||
source_selection.ui
|
||||
ftp_selection.ui)
|
||||
|
||||
SET(OVQT_PLUG_TRANSLATION_MANAGER_RCS ftp_selection.qrc)
|
||||
|
||||
SET(QT_USE_QTGUI TRUE)
|
||||
SET(QT_USE_QTOPENGL TRUE)
|
||||
SET(QT_USE_QTNETWORK TRUE)
|
||||
|
||||
QT4_WRAP_CPP(OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC ${OVQT_PLUG_TRANSLATION_MANAGER_HDR})
|
||||
|
@ -42,7 +40,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
|
|||
|
||||
ADD_LIBRARY(ovqt_plugin_translation_manager MODULE ${SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS})
|
||||
|
||||
TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d nelligo nelgeorges ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY} ${QT_QTNETWORK_LIBRARY} )
|
||||
TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nelligo nelgeorges ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY} ${QT_QTNETWORK_LIBRARY} )
|
||||
|
||||
NL_DEFAULT_PROPS(ovqt_plugin_translation_manager "NeL, Tools, 3D: Object Viewer Qt Plugin: Translation Manager")
|
||||
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_translation_manager)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
|
@ -15,32 +14,32 @@
|
|||
// 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/>.
|
||||
|
||||
// Project includes
|
||||
#include "editor_phrase.h"
|
||||
#include "translation_manager_constants.h"
|
||||
|
||||
// Nel includes
|
||||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/diff_tool.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QTextCodec>
|
||||
#include <QtCore/QTextStream>
|
||||
#include <QtGui/QTextCursor>
|
||||
#include <QtGui/QErrorMessage>
|
||||
#include <QtCore/qfileinfo.h>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QCloseEvent>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/qtextcodec.h>
|
||||
#include <QtGui/QTextCursor>
|
||||
#include <QtCore/qtextstream.h>
|
||||
#include <QtCore/qtextcodec.h>
|
||||
|
||||
// Project includes
|
||||
#include "editor_phrase.h"
|
||||
#include "translation_manager_constants.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace TranslationManager {
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
void CEditorPhrase::open(QString filename)
|
||||
{
|
||||
vector<STRING_MANAGER::TPhrase> phrases;
|
||||
std::vector<STRING_MANAGER::TPhrase> phrases;
|
||||
if(readPhraseFile(filename.toStdString(), phrases, false))
|
||||
{
|
||||
text_edit = new CTextEdit(this);
|
||||
|
@ -53,26 +52,28 @@ void CEditorPhrase::open(QString filename)
|
|||
QFile file(filename);
|
||||
file.open(QIODevice::ReadOnly | QIODevice::Text);
|
||||
QTextStream in(&file);
|
||||
// set the file content to the text edit
|
||||
// set the file content to the text edit
|
||||
QString data = in.readAll();
|
||||
text_edit->append(data);
|
||||
// window settings
|
||||
setCurrentFile(filename);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
editor_type = Constants::ED_PHRASE;
|
||||
current_file = filename;
|
||||
connect(text_edit->document(), SIGNAL(contentsChanged()), this, SLOT(docContentsChanged()));
|
||||
connect(text_edit->document(), SIGNAL(undoCommandAdded()), this, SLOT(newUndoCommandAdded()));
|
||||
} else {
|
||||
QErrorMessage error;
|
||||
error.showMessage("This file is not a phrase file.");
|
||||
error.exec();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QErrorMessage error;
|
||||
error.showMessage("This file is not a phrase file.");
|
||||
error.exec();
|
||||
}
|
||||
}
|
||||
|
||||
void CEditorPhrase::newUndoCommandAdded()
|
||||
{
|
||||
current_stack->push(new CUndoPhraseNewCommand(text_edit));
|
||||
current_stack->push(new CUndoPhraseNewCommand(text_edit));
|
||||
}
|
||||
|
||||
void CEditorPhrase::docContentsChanged()
|
||||
|
@ -97,44 +98,37 @@ void CEditorPhrase::saveAs(QString filename)
|
|||
QTextStream out(&file);
|
||||
out.setCodec("UTF-8");
|
||||
out.setGenerateByteOrderMark(true);
|
||||
out<<text_edit->toPlainText();
|
||||
out << text_edit->toPlainText();
|
||||
current_file = filename;
|
||||
setCurrentFile(current_file);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CEditorPhrase::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
if(isWindowModified())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText("The document has been modified.");
|
||||
msgBox.setInformativeText("Do you want to save your changes?");
|
||||
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Save);
|
||||
int ret = msgBox.exec();
|
||||
switch (ret)
|
||||
{
|
||||
case QMessageBox::Save:
|
||||
save();
|
||||
event->accept();
|
||||
close();
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
event->accept();
|
||||
close();
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
event->ignore();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
event->accept();
|
||||
close();
|
||||
}
|
||||
if(isWindowModified())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setIcon(QMessageBox::Question);
|
||||
msgBox.setText(tr("The document has been modified."));
|
||||
msgBox.setInformativeText(tr("Do you want to save your changes?"));
|
||||
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Save);
|
||||
|
||||
int ret = msgBox.exec();
|
||||
switch (ret)
|
||||
{
|
||||
case QMessageBox::Save:
|
||||
save();
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
}
|
||||
event->accept();
|
||||
close();
|
||||
}
|
||||
|
||||
}
|
|
@ -18,6 +18,9 @@
|
|||
#ifndef EDITOR_PHRASE_H
|
||||
#define EDITOR_PHRASE_H
|
||||
|
||||
// Project includes
|
||||
#include "translation_manager_editor.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QFile>
|
||||
|
@ -32,23 +35,23 @@
|
|||
#include <QtGui/QErrorMessage>
|
||||
#include <QKeyEvent>
|
||||
|
||||
// Project includes
|
||||
#include "translation_manager_editor.h"
|
||||
|
||||
namespace TranslationManager {
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
class CTextEdit : public QTextEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
QUndoStack* m_undoStack;
|
||||
QUndoStack *m_undoStack;
|
||||
|
||||
public:
|
||||
CTextEdit(QWidget* parent = 0) : QTextEdit(parent)
|
||||
{
|
||||
CTextEdit(QWidget *parent = 0) : QTextEdit(parent)
|
||||
{
|
||||
setUndoRedoEnabled(true);
|
||||
}
|
||||
//void keyPressEvent(QKeyEvent *event);
|
||||
void setUndoStack(QUndoStack* undoStack)
|
||||
void setUndoStack(QUndoStack *undoStack)
|
||||
{
|
||||
m_undoStack = undoStack;
|
||||
}
|
||||
|
@ -57,20 +60,22 @@ public:
|
|||
class CEditorPhrase : public CEditor
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CTextEdit *text_edit;
|
||||
public:
|
||||
CEditorPhrase(QMdiArea* parent) : CEditor(parent) {}
|
||||
CEditorPhrase() : CEditor() {}
|
||||
void open(QString filename);
|
||||
void save();
|
||||
void saveAs(QString filename);
|
||||
void activateWindow();
|
||||
CEditorPhrase(QMdiArea *parent) : CEditor(parent) {}
|
||||
CEditorPhrase() : CEditor() {}
|
||||
void open(QString filename);
|
||||
void save();
|
||||
void saveAs(QString filename);
|
||||
void activateWindow();
|
||||
void closeEvent(QCloseEvent *event);
|
||||
|
||||
public Q_SLOTS:
|
||||
void docContentsChanged();
|
||||
void newUndoCommandAdded();
|
||||
|
||||
private:
|
||||
CTextEdit *text_edit;
|
||||
};
|
||||
|
||||
class CUndoPhraseNewCommand : public QUndoCommand
|
||||
|
@ -79,7 +84,7 @@ public:
|
|||
CUndoPhraseNewCommand(CTextEdit *textEdit, QUndoCommand *parent = 0)
|
||||
: QUndoCommand("Inserting/Removing characters", parent),
|
||||
m_textEdit(textEdit)
|
||||
{ }
|
||||
{}
|
||||
|
||||
~CUndoPhraseNewCommand() {}
|
||||
|
||||
|
@ -92,96 +97,102 @@ public:
|
|||
{
|
||||
m_textEdit->redo();
|
||||
}
|
||||
|
||||
private:
|
||||
CTextEdit* m_textEdit;
|
||||
CTextEdit *m_textEdit;
|
||||
};
|
||||
|
||||
class SyntaxHighlighter : public QSyntaxHighlighter
|
||||
{
|
||||
public:
|
||||
SyntaxHighlighter(QTextEdit *parent) : QSyntaxHighlighter(parent)
|
||||
{
|
||||
HighlightingRule rule;
|
||||
{
|
||||
HighlightingRule rule;
|
||||
|
||||
translateStringFormat.setFontWeight(QFont::Bold);
|
||||
translateStringFormat.setForeground(Qt::darkMagenta);
|
||||
rule.pattern = QRegExp("\\[.+\\]");
|
||||
rule.format = translateStringFormat;
|
||||
highlightingRules.append(rule);
|
||||
translateStringFormat.setFontWeight(QFont::Bold);
|
||||
translateStringFormat.setForeground(Qt::darkMagenta);
|
||||
rule.pattern = QRegExp("\\[.+\\]");
|
||||
rule.format = translateStringFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
singleLineCommentFormat.setForeground(Qt::red);
|
||||
rule.pattern = QRegExp("//[^\n]*");
|
||||
rule.format = singleLineCommentFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
singleLineCommentFormat.setForeground(Qt::red);
|
||||
rule.pattern = QRegExp("//[^\n]*");
|
||||
rule.format = singleLineCommentFormat;
|
||||
highlightingRules.append(rule);
|
||||
multiLineCommentFormat.setForeground(Qt::red);
|
||||
|
||||
multiLineCommentFormat.setForeground(Qt::red);
|
||||
quotationFormat.setForeground(Qt::darkGreen);
|
||||
rule.pattern = QRegExp("\".*\"");
|
||||
rule.format = quotationFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
quotationFormat.setForeground(Qt::darkGreen);
|
||||
rule.pattern = QRegExp("\".*\"");
|
||||
rule.format = quotationFormat;
|
||||
highlightingRules.append(rule);
|
||||
functionFormat.setFontItalic(true);
|
||||
functionFormat.setForeground(Qt::blue);
|
||||
rule.pattern = QRegExp("\\(.+\\)");
|
||||
rule.format = functionFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
functionFormat.setFontItalic(true);
|
||||
functionFormat.setForeground(Qt::blue);
|
||||
rule.pattern = QRegExp("\\(.+\\)");
|
||||
rule.format = functionFormat;
|
||||
highlightingRules.append(rule);
|
||||
|
||||
commentStartExpression = QRegExp("/\\*");
|
||||
commentEndExpression = QRegExp("\\*/");
|
||||
commentStartExpression = QRegExp("/\\*");
|
||||
commentEndExpression = QRegExp("\\*/");
|
||||
}
|
||||
|
||||
void highlightBlock(const QString &text)
|
||||
{
|
||||
Q_FOREACH(const HighlightingRule &rule, highlightingRules) {
|
||||
QRegExp expression(rule.pattern);
|
||||
int index = expression.indexIn(text);
|
||||
while (index >= 0) {
|
||||
int length = expression.matchedLength();
|
||||
setFormat(index, length, rule.format);
|
||||
index = expression.indexIn(text, index + length);
|
||||
}
|
||||
}
|
||||
setCurrentBlockState(0);
|
||||
void highlightBlock(const QString &text)
|
||||
{
|
||||
Q_FOREACH(const HighlightingRule &rule, highlightingRules)
|
||||
{
|
||||
QRegExp expression(rule.pattern);
|
||||
int index = expression.indexIn(text);
|
||||
while (index >= 0)
|
||||
{
|
||||
int length = expression.matchedLength();
|
||||
setFormat(index, length, rule.format);
|
||||
index = expression.indexIn(text, index + length);
|
||||
}
|
||||
}
|
||||
setCurrentBlockState(0);
|
||||
|
||||
int startIndex = 0;
|
||||
if (previousBlockState() != 1)
|
||||
startIndex = commentStartExpression.indexIn(text);
|
||||
int startIndex = 0;
|
||||
if (previousBlockState() != 1)
|
||||
startIndex = commentStartExpression.indexIn(text);
|
||||
|
||||
while (startIndex >= 0) {
|
||||
int endIndex = commentEndExpression.indexIn(text, startIndex);
|
||||
int commentLength;
|
||||
if (endIndex == -1) {
|
||||
setCurrentBlockState(1);
|
||||
commentLength = text.length() - startIndex;
|
||||
} else {
|
||||
commentLength = endIndex - startIndex
|
||||
+ commentEndExpression.matchedLength();
|
||||
}
|
||||
setFormat(startIndex, commentLength, multiLineCommentFormat);
|
||||
startIndex = commentStartExpression.indexIn(text, startIndex + commentLength);
|
||||
}
|
||||
}
|
||||
while (startIndex >= 0)
|
||||
{
|
||||
int endIndex = commentEndExpression.indexIn(text, startIndex);
|
||||
int commentLength;
|
||||
if (endIndex == -1)
|
||||
{
|
||||
setCurrentBlockState(1);
|
||||
commentLength = text.length() - startIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
commentLength = endIndex - startIndex
|
||||
+ commentEndExpression.matchedLength();
|
||||
}
|
||||
setFormat(startIndex, commentLength, multiLineCommentFormat);
|
||||
startIndex = commentStartExpression.indexIn(text, startIndex + commentLength);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
struct HighlightingRule
|
||||
{
|
||||
QRegExp pattern;
|
||||
QTextCharFormat format;
|
||||
};
|
||||
QVector<HighlightingRule> highlightingRules;
|
||||
private:
|
||||
struct HighlightingRule
|
||||
{
|
||||
QRegExp pattern;
|
||||
QTextCharFormat format;
|
||||
};
|
||||
QVector<HighlightingRule> highlightingRules;
|
||||
|
||||
QRegExp commentStartExpression;
|
||||
QRegExp commentEndExpression;
|
||||
QRegExp commentStartExpression;
|
||||
QRegExp commentEndExpression;
|
||||
|
||||
QTextCharFormat keywordFormat;
|
||||
QTextCharFormat classFormat;
|
||||
QTextCharFormat singleLineCommentFormat;
|
||||
QTextCharFormat multiLineCommentFormat;
|
||||
QTextCharFormat quotationFormat;
|
||||
QTextCharFormat functionFormat;
|
||||
QTextCharFormat translateStringFormat;
|
||||
QTextCharFormat keywordFormat;
|
||||
QTextCharFormat classFormat;
|
||||
QTextCharFormat singleLineCommentFormat;
|
||||
QTextCharFormat multiLineCommentFormat;
|
||||
QTextCharFormat quotationFormat;
|
||||
QTextCharFormat functionFormat;
|
||||
QTextCharFormat translateStringFormat;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -15,6 +15,11 @@
|
|||
// 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/>.
|
||||
|
||||
// Project includes
|
||||
#include "editor_worksheet.h"
|
||||
#include "extract_bot_names.h"
|
||||
#include "translation_manager_constants.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtGui/QErrorMessage>
|
||||
#include <QtGui/QTableWidgetItem>
|
||||
|
@ -24,97 +29,103 @@
|
|||
#include <QtGui/QAction>
|
||||
#include <QtGui/QMenu>
|
||||
|
||||
// Project includes
|
||||
#include "editor_worksheet.h"
|
||||
#include "extract_bot_names.h"
|
||||
#include "translation_manager_constants.h"
|
||||
#include <set>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace TranslationManager {
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
void CEditorWorksheet::open(QString filename)
|
||||
{
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
bool hasHashValue = false;
|
||||
table_editor = new QTableWidget();
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
table_editor->setColumnCount(wk_file.ColCount - 1);
|
||||
hasHashValue = true;
|
||||
} else {
|
||||
table_editor->setColumnCount(wk_file.ColCount);
|
||||
}
|
||||
table_editor->setRowCount(wk_file.size() - 1);
|
||||
|
||||
// read columns name
|
||||
for(unsigned int i = 0; i < wk_file.ColCount; i++)
|
||||
{
|
||||
if(hasHashValue && i == 0)
|
||||
{
|
||||
// we don't show the column with hash value
|
||||
} else {
|
||||
QTableWidgetItem *col = new QTableWidgetItem();
|
||||
ucstring col_name = wk_file.getData(0, i);
|
||||
col->setText(QString(col_name.toString().c_str()));
|
||||
if(hasHashValue)
|
||||
{
|
||||
table_editor->setHorizontalHeaderItem(i - 1, col);
|
||||
} else {
|
||||
table_editor->setHorizontalHeaderItem(i, col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// read rows
|
||||
for(unsigned int i = 1; i < wk_file.size(); i++)
|
||||
{
|
||||
for(unsigned int j = 0; j < wk_file.ColCount; j++)
|
||||
{
|
||||
if(hasHashValue && j == 0)
|
||||
{
|
||||
// we don't show the column with hash value
|
||||
} else {
|
||||
QTableWidgetItem *row = new QTableWidgetItem();
|
||||
ucstring row_value = wk_file.getData(i, j);
|
||||
row->setText(QString::fromUtf8(row_value.toUtf8().c_str()));
|
||||
if(hasHashValue)
|
||||
{
|
||||
table_editor->setItem(i - 1, j - 1, row);
|
||||
} else {
|
||||
table_editor->setItem(i - 1, j, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
setCurrentFile(filename);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
setWidget(table_editor);
|
||||
editor_type = Constants::ED_SHEET;
|
||||
table_editor->resizeColumnsToContents();
|
||||
table_editor->resizeRowsToContents();
|
||||
// set editor signals
|
||||
connect(table_editor, SIGNAL(itemChanged(QTableWidgetItem*) ), this, SLOT(worksheetEditorChanged(QTableWidgetItem*)));
|
||||
connect(table_editor, SIGNAL(itemDoubleClicked(QTableWidgetItem*) ), this, SLOT(worksheetEditorCellEntered(QTableWidgetItem*)));
|
||||
connect (table_editor,SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(contextMenuEvent(QContextMenuEvent*)));
|
||||
} else {
|
||||
QErrorMessage error;
|
||||
error.showMessage("This file is not a worksheet file.");
|
||||
error.exec();
|
||||
}
|
||||
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
bool hasHashValue = false;
|
||||
table_editor = new QTableWidget();
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
table_editor->setColumnCount(wk_file.ColCount - 1);
|
||||
hasHashValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
table_editor->setColumnCount(wk_file.ColCount);
|
||||
}
|
||||
table_editor->setRowCount(wk_file.size() - 1);
|
||||
|
||||
// read columns name
|
||||
for(uint i = 0; i < wk_file.ColCount; i++)
|
||||
{
|
||||
if(hasHashValue && i == 0)
|
||||
{
|
||||
// we don't show the column with hash value
|
||||
}
|
||||
else
|
||||
{
|
||||
QTableWidgetItem *col = new QTableWidgetItem();
|
||||
ucstring col_name = wk_file.getData(0, i);
|
||||
col->setText(QString(col_name.toString().c_str()));
|
||||
if(hasHashValue)
|
||||
{
|
||||
table_editor->setHorizontalHeaderItem(i - 1, col);
|
||||
}
|
||||
else
|
||||
{
|
||||
table_editor->setHorizontalHeaderItem(i, col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// read rows
|
||||
for(unsigned int i = 1; i < wk_file.size(); i++)
|
||||
{
|
||||
for(unsigned int j = 0; j < wk_file.ColCount; j++)
|
||||
{
|
||||
if(hasHashValue && j == 0)
|
||||
{
|
||||
// we don't show the column with hash value
|
||||
}
|
||||
else
|
||||
{
|
||||
QTableWidgetItem *row = new QTableWidgetItem();
|
||||
ucstring row_value = wk_file.getData(i, j);
|
||||
row->setText(QString::fromUtf8(row_value.toUtf8().c_str()));
|
||||
if(hasHashValue)
|
||||
{
|
||||
table_editor->setItem(i - 1, j - 1, row);
|
||||
}
|
||||
else
|
||||
{
|
||||
table_editor->setItem(i - 1, j, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
setCurrentFile(filename);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
setWidget(table_editor);
|
||||
editor_type = Constants::ED_SHEET;
|
||||
table_editor->resizeColumnsToContents();
|
||||
table_editor->resizeRowsToContents();
|
||||
// set editor signals
|
||||
connect(table_editor, SIGNAL(itemChanged(QTableWidgetItem *) ), this, SLOT(worksheetEditorChanged(QTableWidgetItem *)));
|
||||
connect(table_editor, SIGNAL(itemDoubleClicked(QTableWidgetItem *) ), this, SLOT(worksheetEditorCellEntered(QTableWidgetItem *)));
|
||||
connect(table_editor,SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(contextMenuEvent(QContextMenuEvent *)));
|
||||
}
|
||||
else
|
||||
{
|
||||
QErrorMessage error;
|
||||
error.showMessage(tr("This file is not a worksheet file."));
|
||||
error.exec();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CEditorWorksheet::contextMenuEvent(QContextMenuEvent *e)
|
||||
{
|
||||
QAction *insertRowAct = new QAction("Insert new row", this);
|
||||
connect(insertRowAct, SIGNAL(triggered()), this, SLOT(insertRow()));
|
||||
QAction *deleteRowAct = new QAction("Delete row", this);
|
||||
connect(deleteRowAct, SIGNAL(triggered()), this, SLOT(deleteRow()));
|
||||
QAction *insertRowAct = new QAction(tr("Insert new row"), this);
|
||||
connect(insertRowAct, SIGNAL(triggered()), this, SLOT(insertRow()));
|
||||
QAction *deleteRowAct = new QAction(tr("Delete row"), this);
|
||||
connect(deleteRowAct, SIGNAL(triggered()), this, SLOT(deleteRow()));
|
||||
|
||||
QMenu *contextMenu = new QMenu(this);
|
||||
contextMenu->addAction(insertRowAct);
|
||||
|
@ -127,7 +138,7 @@ void CEditorWorksheet::contextMenuEvent(QContextMenuEvent *e)
|
|||
|
||||
void CEditorWorksheet::activateWindow()
|
||||
{
|
||||
showMaximized();
|
||||
showMaximized();
|
||||
}
|
||||
|
||||
void CEditorWorksheet::save()
|
||||
|
@ -137,372 +148,377 @@ void CEditorWorksheet::save()
|
|||
|
||||
void CEditorWorksheet::saveAs(QString filename)
|
||||
{
|
||||
STRING_MANAGER::TWorksheet new_file, wk_file;
|
||||
loadExcelSheet(current_file.toStdString(), wk_file, true);
|
||||
// set columns
|
||||
new_file.resize(new_file.size() + 1);
|
||||
for(unsigned int i = 0; i < wk_file.ColCount; i++)
|
||||
{
|
||||
ucstring col_name = wk_file.getData(0, i);
|
||||
new_file.insertColumn(new_file.ColCount);
|
||||
new_file.setData(0, new_file.ColCount - 1, col_name);
|
||||
}
|
||||
// read all the rows from table
|
||||
uint rowIdx;
|
||||
uint colIdx = 0;
|
||||
bool hasHashValue = false;
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
hasHashValue = true;
|
||||
colIdx = 1;
|
||||
}
|
||||
for(int i = 0; i < table_editor->rowCount(); i++)
|
||||
{
|
||||
rowIdx = new_file.size();
|
||||
new_file.resize(new_file.size() + 1);
|
||||
ucstring tvalue;
|
||||
for(int j = 0; j < table_editor->columnCount(); j++)
|
||||
{
|
||||
QTableWidgetItem* item = table_editor->item(i, j);
|
||||
tvalue.fromUtf8(std::string(item->text().toUtf8()));
|
||||
new_file.setData(rowIdx, j + colIdx, tvalue);
|
||||
}
|
||||
}
|
||||
if(hasHashValue)
|
||||
{
|
||||
// rewrite the hash codes
|
||||
makeHashCode(wk_file, true);
|
||||
}
|
||||
ucstring s = prepareExcelSheet(new_file);
|
||||
NLMISC::CI18N::writeTextFile(filename.toStdString(), s, false);
|
||||
current_file = filename;
|
||||
setCurrentFile(filename);
|
||||
STRING_MANAGER::TWorksheet new_file, wk_file;
|
||||
loadExcelSheet(current_file.toStdString(), wk_file, true);
|
||||
// set columns
|
||||
new_file.resize(new_file.size() + 1);
|
||||
for(unsigned int i = 0; i < wk_file.ColCount; i++)
|
||||
{
|
||||
ucstring col_name = wk_file.getData(0, i);
|
||||
new_file.insertColumn(new_file.ColCount);
|
||||
new_file.setData(0, new_file.ColCount - 1, col_name);
|
||||
}
|
||||
// read all the rows from table
|
||||
uint rowIdx;
|
||||
uint colIdx = 0;
|
||||
bool hasHashValue = false;
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
hasHashValue = true;
|
||||
colIdx = 1;
|
||||
}
|
||||
for(int i = 0; i < table_editor->rowCount(); i++)
|
||||
{
|
||||
rowIdx = new_file.size();
|
||||
new_file.resize(new_file.size() + 1);
|
||||
ucstring tvalue;
|
||||
for(int j = 0; j < table_editor->columnCount(); j++)
|
||||
{
|
||||
QTableWidgetItem *item = table_editor->item(i, j);
|
||||
tvalue.fromUtf8(std::string(item->text().toUtf8()));
|
||||
new_file.setData(rowIdx, j + colIdx, tvalue);
|
||||
}
|
||||
}
|
||||
if(hasHashValue)
|
||||
{
|
||||
// rewrite the hash codes
|
||||
makeHashCode(wk_file, true);
|
||||
}
|
||||
ucstring s = prepareExcelSheet(new_file);
|
||||
NLMISC::CI18N::writeTextFile(filename.toStdString(), s, false);
|
||||
current_file = filename;
|
||||
setCurrentFile(filename);
|
||||
}
|
||||
|
||||
void CEditorWorksheet::insertRow()
|
||||
{
|
||||
int last_row = table_editor->rowCount();
|
||||
int last_row = table_editor->rowCount();
|
||||
current_stack->push(new CUndoWorksheetNewCommand(table_editor, last_row));
|
||||
}
|
||||
|
||||
void CEditorWorksheet::deleteRow()
|
||||
{
|
||||
int selected_row = table_editor->currentRow();
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("The row will be deleted."));
|
||||
msgBox.setInformativeText(tr("Do you want to delete the selected row ?"));
|
||||
msgBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
|
||||
msgBox.setDefaultButton(QMessageBox::No);
|
||||
int ret = msgBox.exec();
|
||||
if(ret == QMessageBox::Yes)
|
||||
{
|
||||
current_stack->push(new CUndoWorksheetDeleteCommand(table_editor, selected_row));
|
||||
}
|
||||
int selected_row = table_editor->currentRow();
|
||||
QMessageBox msgBox;
|
||||
msgBox.setIcon(QMessageBox::Question);
|
||||
msgBox.setText(tr("The row will be deleted."));
|
||||
msgBox.setInformativeText(tr("Do you want to delete the selected row ?"));
|
||||
msgBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
|
||||
msgBox.setDefaultButton(QMessageBox::No);
|
||||
|
||||
table_editor->clearFocus();
|
||||
table_editor->clearSelection();
|
||||
return;
|
||||
int ret = msgBox.exec();
|
||||
if(ret == QMessageBox::Yes)
|
||||
{
|
||||
current_stack->push(new CUndoWorksheetDeleteCommand(table_editor, selected_row));
|
||||
}
|
||||
table_editor->clearFocus();
|
||||
table_editor->clearSelection();
|
||||
return;
|
||||
}
|
||||
|
||||
void CEditorWorksheet::worksheetEditorCellEntered(QTableWidgetItem * item)
|
||||
void CEditorWorksheet::worksheetEditorCellEntered(QTableWidgetItem *item)
|
||||
{
|
||||
temp_content = item->text();
|
||||
current_stack->push(new CUndoWorksheetCommand(table_editor, item, temp_content));
|
||||
}
|
||||
|
||||
void CEditorWorksheet::worksheetEditorChanged(QTableWidgetItem * item)
|
||||
void CEditorWorksheet::worksheetEditorChanged(QTableWidgetItem *item)
|
||||
{
|
||||
if(temp_content != item->text())
|
||||
{
|
||||
//current_stack->push(new CUndoWorksheetCommand(table_editor, item, temp_content));
|
||||
}
|
||||
|
||||
if(!isWindowModified())
|
||||
setWindowModified(true);
|
||||
if(!isWindowModified())
|
||||
setWindowModified(true);
|
||||
}
|
||||
|
||||
|
||||
void CEditorWorksheet::extractBotNames(list<string> filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig)
|
||||
{
|
||||
bool modified = false;
|
||||
bool modified = false;
|
||||
QList<CTableWidgetItemStore> new_items;
|
||||
|
||||
ExtractBotNames ebn;
|
||||
ebn.setRequiredSettings(filters, level_design_path);
|
||||
ebn.extractBotNamesFromPrimitives(ligoConfig);
|
||||
// get SimpleNames
|
||||
{
|
||||
map<string, TEntryInfo> SimpleNames = ebn.getSimpleNames();
|
||||
map<string, TEntryInfo>::iterator it(SimpleNames.begin()), last(SimpleNames.end());
|
||||
ExtractBotNames ebn;
|
||||
ebn.setRequiredSettings(filters, level_design_path);
|
||||
ebn.extractBotNamesFromPrimitives(ligoConfig);
|
||||
// get SimpleNames
|
||||
{
|
||||
map<string, TEntryInfo> SimpleNames = ebn.getSimpleNames();
|
||||
map<string, TEntryInfo>::iterator it(SimpleNames.begin()), last(SimpleNames.end());
|
||||
|
||||
for (; it != last; ++it)
|
||||
{
|
||||
QList<QTableWidgetItem *> search_results = table_editor->findItems(QString(it->first.c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
QList<QString> records;
|
||||
records.push_back(QString(it->first.c_str()));
|
||||
records.push_back(QString(it->first.c_str()));
|
||||
records.push_back(QString(it->second.SheetName.c_str()));
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
ebn.cleanSimpleNames();
|
||||
}
|
||||
// get GenericNames
|
||||
{
|
||||
set<string> GenericNames = ebn.getGenericNames();
|
||||
set<string>::iterator it(GenericNames.begin()), last(GenericNames.end());
|
||||
for (; it != last; ++it)
|
||||
{
|
||||
string gnName = "gn_" + ebn.cleanupName(*it);
|
||||
QList<QTableWidgetItem *> search_results = table_editor->findItems(QString((*it).c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
QList<QString> records;
|
||||
records.push_back(QString((*it).c_str()));
|
||||
records.push_back(QString(gnName.c_str()));
|
||||
records.push_back(" ");
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
ebn.cleanGenericNames();
|
||||
}
|
||||
|
||||
current_stack->push(new CUndoWorksheetExtraction(new_items, table_editor));
|
||||
if(modified)
|
||||
{
|
||||
setWindowModified(true);
|
||||
table_editor->scrollToBottom();
|
||||
}
|
||||
|
||||
for (; it != last; ++it)
|
||||
{
|
||||
QList<QTableWidgetItem*> search_results = table_editor->findItems(QString(it->first.c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
QList<QString> records;
|
||||
records.push_back(QString(it->first.c_str()));
|
||||
records.push_back(QString(it->first.c_str()));
|
||||
records.push_back(QString(it->second.SheetName.c_str()));
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
ebn.cleanSimpleNames();
|
||||
}
|
||||
// get GenericNames
|
||||
{
|
||||
set<string> GenericNames = ebn.getGenericNames();
|
||||
set<string>::iterator it(GenericNames.begin()), last(GenericNames.end());
|
||||
for (; it != last; ++it)
|
||||
{
|
||||
string gnName = "gn_" + ebn.cleanupName(*it);
|
||||
QList<QTableWidgetItem*> search_results = table_editor->findItems(QString((*it).c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
QList<QString> records;
|
||||
records.push_back(QString((*it).c_str()));
|
||||
records.push_back(QString(gnName.c_str()));
|
||||
records.push_back(" ");
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
ebn.cleanGenericNames();
|
||||
}
|
||||
|
||||
current_stack->push(new CUndoWorksheetExtraction(new_items, table_editor));
|
||||
if(modified)
|
||||
{
|
||||
setWindowModified(true);
|
||||
table_editor->scrollToBottom();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CEditorWorksheet::extractWords(QString filename, QString columnId, IWordListBuilder& wordListBuilder)
|
||||
void CEditorWorksheet::extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder)
|
||||
{
|
||||
uint i;
|
||||
uint i;
|
||||
|
||||
// **** Load the excel sheet
|
||||
// load
|
||||
TWorksheet workSheet;
|
||||
STRING_MANAGER::TWorksheet workSheet;
|
||||
if(!loadExcelSheet(filename.toStdString(), workSheet, true))
|
||||
{
|
||||
nlwarning("Error reading '%s'. Aborted", filename.toStdString().c_str());
|
||||
return;
|
||||
}
|
||||
// get the key column index
|
||||
uint keyColIndex = 0;
|
||||
uint keyColIndex = 0;
|
||||
if(!workSheet.findCol(columnId.toStdString(), keyColIndex))
|
||||
{
|
||||
nlwarning("Error: Don't find the column '%s'. '%s' Aborted", columnId.toStdString().c_str(), filename.toStdString().c_str());
|
||||
return;
|
||||
}
|
||||
// get the name column index
|
||||
uint nameColIndex;
|
||||
uint nameColIndex;
|
||||
if(!workSheet.findCol(ucstring("name"), nameColIndex))
|
||||
{
|
||||
nlwarning("Error: Don't find the column 'name'. '%s' Aborted", filename.toStdString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
// **** List all words with the builder given
|
||||
std::vector<string> allWords;
|
||||
if(!wordListBuilder.buildWordList(allWords, filename.toStdString()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
bool modified = false;
|
||||
QList<CTableWidgetItemStore> new_items;
|
||||
for(i = 0; i < allWords.size(); i++)
|
||||
{
|
||||
string keyName = allWords[i];
|
||||
QList<QTableWidgetItem*> search_results = table_editor->findItems(QString(keyName.c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
int knPos = 0, nPos = 0;
|
||||
if(workSheet.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
knPos = keyColIndex - 1;
|
||||
nPos = nameColIndex - 1;
|
||||
} else {
|
||||
knPos = keyColIndex;
|
||||
nPos = nameColIndex;
|
||||
}
|
||||
}
|
||||
|
||||
QList<QString> records;
|
||||
records.push_back(QString(keyName.c_str()));
|
||||
records.push_back(QString("<GEN>") + QString(keyName.c_str()));
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
current_stack->push(new CUndoWorksheetExtraction(new_items, table_editor));
|
||||
if(modified)
|
||||
{
|
||||
setWindowModified(true);
|
||||
table_editor->scrollToBottom();
|
||||
}
|
||||
// **** List all words with the builder given
|
||||
std::vector<std::string> allWords;
|
||||
if(!wordListBuilder.buildWordList(allWords, filename.toStdString()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
bool modified = false;
|
||||
QList<CTableWidgetItemStore> new_items;
|
||||
for(i = 0; i < allWords.size(); i++)
|
||||
{
|
||||
string keyName = allWords[i];
|
||||
QList<QTableWidgetItem *> search_results = table_editor->findItems(QString(keyName.c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
int knPos = 0, nPos = 0;
|
||||
if(workSheet.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
knPos = keyColIndex - 1;
|
||||
nPos = nameColIndex - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
knPos = keyColIndex;
|
||||
nPos = nameColIndex;
|
||||
}
|
||||
|
||||
QList<QString> records;
|
||||
records.push_back(QString(keyName.c_str()));
|
||||
records.push_back(QString("<GEN>") + QString(keyName.c_str()));
|
||||
insertTableRecords(records, new_items);
|
||||
if(!modified) modified = true;
|
||||
}
|
||||
}
|
||||
current_stack->push(new CUndoWorksheetExtraction(new_items, table_editor));
|
||||
if(modified)
|
||||
{
|
||||
setWindowModified(true);
|
||||
table_editor->scrollToBottom();
|
||||
}
|
||||
}
|
||||
|
||||
void CEditorWorksheet::insertTableRecords(QList<QString> records, QList<CTableWidgetItemStore> new_items)
|
||||
{
|
||||
const int currentRow = table_editor->rowCount();
|
||||
const int currentRow = table_editor->rowCount();
|
||||
table_editor->setRowCount(currentRow + 1);
|
||||
int n = 0;
|
||||
Q_FOREACH(QString record, records)
|
||||
{
|
||||
QTableWidgetItem *rec = new QTableWidgetItem();
|
||||
rec->setBackgroundColor(QColor("#F75D59"));
|
||||
table_editor ->setItem(currentRow, n, rec);
|
||||
table_editor ->setItem(currentRow, n, rec);
|
||||
CTableWidgetItemStore rec_s(rec, currentRow, n);
|
||||
new_items.push_back(rec_s);
|
||||
n++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool CEditorWorksheet::compareWorksheetFile(QString filename)
|
||||
{
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
int colIndex = 0;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
colIndex = 1;
|
||||
}
|
||||
if(wk_file.ColCount - colIndex != table_editor->columnCount())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for(int i = 0; i < table_editor->columnCount(); i++)
|
||||
{
|
||||
QString item = table_editor->horizontalHeaderItem(i)->text();
|
||||
ucstring itemC = wk_file.getData(0, i+ colIndex);
|
||||
if(item.toStdString() != itemC.toString())
|
||||
{
|
||||
nlwarning(item.toStdString().c_str());
|
||||
nlwarning(itemC.toString().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
int colIndex = 0;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
colIndex = 1;
|
||||
}
|
||||
if(wk_file.ColCount - colIndex != table_editor->columnCount())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for(int i = 0; i < table_editor->columnCount(); i++)
|
||||
{
|
||||
QString item = table_editor->horizontalHeaderItem(i)->text();
|
||||
ucstring itemC = wk_file.getData(0, i+ colIndex);
|
||||
if(item.toStdString() != itemC.toString())
|
||||
{
|
||||
nlwarning(item.toStdString().c_str());
|
||||
nlwarning(itemC.toString().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CEditorWorksheet::mergeWorksheetFile(QString filename)
|
||||
{
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
bool hasHashValue = false;
|
||||
int colIndex = 0;
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
hasHashValue = true;
|
||||
colIndex = 1;
|
||||
}
|
||||
// read rows
|
||||
for(unsigned int i = 1; i < wk_file.size(); i++)
|
||||
{
|
||||
// search with the first column
|
||||
ucstring rowId = wk_file.getData(i,colIndex);
|
||||
QList<QTableWidgetItem*> search_results = table_editor->findItems(QString(rowId.toString().c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
const int lastRow = table_editor->rowCount();
|
||||
table_editor->setRowCount(lastRow + 1);
|
||||
for(unsigned int j = 0; j < table_editor->columnCount(); j++)
|
||||
{
|
||||
ucstring rowValue = wk_file.getData(i, j + colIndex); // get the value
|
||||
QTableWidgetItem *row = new QTableWidgetItem();
|
||||
row->setText(QString(rowValue.toString().c_str())); // set the value in table item
|
||||
table_editor->setItem(lastRow, j, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
QErrorMessage error;
|
||||
error.showMessage(tr("This file is not a worksheet file."));
|
||||
error.exec();
|
||||
}
|
||||
STRING_MANAGER::TWorksheet wk_file;
|
||||
if(loadExcelSheet(filename.toStdString(), wk_file, true) == true)
|
||||
{
|
||||
bool hasHashValue = false;
|
||||
int colIndex = 0;
|
||||
if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE"))
|
||||
{
|
||||
hasHashValue = true;
|
||||
colIndex = 1;
|
||||
}
|
||||
// read rows
|
||||
for(unsigned int i = 1; i < wk_file.size(); i++)
|
||||
{
|
||||
// search with the first column
|
||||
ucstring rowId = wk_file.getData(i,colIndex);
|
||||
QList<QTableWidgetItem *> search_results = table_editor->findItems(QString(rowId.toString().c_str()), Qt::MatchExactly);
|
||||
if(search_results.size() == 0)
|
||||
{
|
||||
const int lastRow = table_editor->rowCount();
|
||||
table_editor->setRowCount(lastRow + 1);
|
||||
for(int j = 0; j < table_editor->columnCount(); j++)
|
||||
{
|
||||
ucstring rowValue = wk_file.getData(i, j + colIndex); // get the value
|
||||
QTableWidgetItem *row = new QTableWidgetItem();
|
||||
row->setText(QString(rowValue.toString().c_str())); // set the value in table item
|
||||
table_editor->setItem(lastRow, j, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QErrorMessage error;
|
||||
error.showMessage(tr("This file is not a worksheet file."));
|
||||
error.exec();
|
||||
}
|
||||
}
|
||||
|
||||
void CEditorWorksheet::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
if(isWindowModified())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("The document has been modified."));
|
||||
msgBox.setInformativeText(tr("Do you want to save your changes?"));
|
||||
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Save);
|
||||
int ret = msgBox.exec();
|
||||
switch (ret)
|
||||
{
|
||||
case QMessageBox::Save:
|
||||
save();
|
||||
event->accept();
|
||||
close();
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
event->accept();
|
||||
close();
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
event->ignore();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
event->accept();
|
||||
close();
|
||||
}
|
||||
if(isWindowModified())
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setIcon(QMessageBox::Question);
|
||||
msgBox.setText(tr("The document has been modified."));
|
||||
msgBox.setInformativeText(tr("Do you want to save your changes?"));
|
||||
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Save);
|
||||
int ret = msgBox.exec();
|
||||
switch (ret)
|
||||
{
|
||||
case QMessageBox::Save:
|
||||
save();
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
}
|
||||
event->accept();
|
||||
close();
|
||||
}
|
||||
|
||||
|
||||
bool CEditorWorksheet::isBotNamesTable()
|
||||
{
|
||||
bool status = true;
|
||||
if(table_editor->horizontalHeaderItem(0)->text() != "bot name"
|
||||
|| table_editor->horizontalHeaderItem(1)->text() != "translated name"
|
||||
|| table_editor->horizontalHeaderItem(2)->text() != "sheet_name")
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
|
||||
return status;
|
||||
bool status = true;
|
||||
if(table_editor->horizontalHeaderItem(0)->text() != "bot name"
|
||||
|| table_editor->horizontalHeaderItem(1)->text() != "translated name"
|
||||
|| table_editor->horizontalHeaderItem(2)->text() != "sheet_name")
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
bool CEditorWorksheet::isSheetTable(QString type)
|
||||
{
|
||||
QString column_name;
|
||||
if(type.toAscii() == Constants::WK_ITEM)
|
||||
{
|
||||
column_name = "item ID";
|
||||
} else if(type.toAscii() == Constants::WK_CREATURE) {
|
||||
column_name = "creature ID";
|
||||
} else if(type.toAscii() == Constants::WK_SBRICK) {
|
||||
column_name = "sbrick ID";
|
||||
} else if(type.toAscii() == Constants::WK_SPHRASE) {
|
||||
column_name = "sphrase ID";
|
||||
} else if(type.toAscii() == Constants::WK_PLACE) {
|
||||
column_name = "placeId";
|
||||
}
|
||||
bool status = true;
|
||||
if(table_editor->horizontalHeaderItem(0)->text() != column_name
|
||||
|| table_editor->horizontalHeaderItem(1)->text() != "name")
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
|
||||
return status;
|
||||
QString column_name;
|
||||
if(type.toAscii() == Constants::WK_ITEM)
|
||||
{
|
||||
column_name = "item ID";
|
||||
}
|
||||
else if(type.toAscii() == Constants::WK_CREATURE)
|
||||
{
|
||||
column_name = "creature ID";
|
||||
}
|
||||
else if(type.toAscii() == Constants::WK_SBRICK)
|
||||
{
|
||||
column_name = "sbrick ID";
|
||||
}
|
||||
else if(type.toAscii() == Constants::WK_SPHRASE)
|
||||
{
|
||||
column_name = "sphrase ID";
|
||||
}
|
||||
else if(type.toAscii() == Constants::WK_PLACE)
|
||||
{
|
||||
column_name = "placeId";
|
||||
}
|
||||
bool status = true;
|
||||
if(table_editor->horizontalHeaderItem(0)->text() != column_name
|
||||
|| table_editor->horizontalHeaderItem(1)->text() != "name")
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,10 @@
|
|||
#ifndef EDITOR_WORKSHEET_H
|
||||
#define EDITOR_WORKSHEET_H
|
||||
|
||||
// Project includes
|
||||
#include "translation_manager_editor.h"
|
||||
#include "extract_new_sheet_names.h"
|
||||
|
||||
// Nel includes
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
@ -34,11 +38,9 @@
|
|||
#include <QtGui/QUndoCommand>
|
||||
#include <QtGui/QUndoStack>
|
||||
|
||||
// Project includes
|
||||
#include "translation_manager_editor.h"
|
||||
#include "extract_new_sheet_names.h"
|
||||
|
||||
namespace TranslationManager {
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
struct CTableWidgetItemStore
|
||||
{
|
||||
|
@ -47,6 +49,7 @@ public:
|
|||
m_item(item),
|
||||
m_row(row),
|
||||
m_column(column) { }
|
||||
|
||||
QTableWidgetItem *m_item;
|
||||
int m_row;
|
||||
int m_column;
|
||||
|
@ -54,39 +57,41 @@ public:
|
|||
|
||||
class CEditorWorksheet : public CEditor
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
QString temp_content;
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CEditorWorksheet(QMdiArea* parent) : CEditor(parent) {}
|
||||
CEditorWorksheet() : CEditor() {}
|
||||
QTableWidget* table_editor;
|
||||
void open(QString filename);
|
||||
void save();
|
||||
void saveAs(QString filename);
|
||||
void activateWindow();
|
||||
void mergeWorksheetFile(QString filename);
|
||||
bool compareWorksheetFile(QString filename);
|
||||
void extractBotNames(list<string> filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig);
|
||||
void extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder);
|
||||
CEditorWorksheet(QMdiArea *parent) : CEditor(parent) {}
|
||||
CEditorWorksheet() : CEditor() {}
|
||||
QTableWidget *table_editor;
|
||||
void open(QString filename);
|
||||
void save();
|
||||
void saveAs(QString filename);
|
||||
void activateWindow();
|
||||
void mergeWorksheetFile(QString filename);
|
||||
bool compareWorksheetFile(QString filename);
|
||||
void extractBotNames(std::list<std::string> filters, std::string level_design_path, NLLIGO::CLigoConfig ligoConfig);
|
||||
void extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder);
|
||||
void insertTableRecords(QList<QString> records, QList<CTableWidgetItemStore> new_items);
|
||||
bool isBotNamesTable();
|
||||
bool isSheetTable(QString type);
|
||||
void closeEvent(QCloseEvent *event);
|
||||
bool isBotNamesTable();
|
||||
bool isSheetTable(QString type);
|
||||
void closeEvent(QCloseEvent *event);
|
||||
|
||||
private Q_SLOTS:
|
||||
void worksheetEditorCellEntered(QTableWidgetItem * item);
|
||||
void worksheetEditorChanged(QTableWidgetItem * item);
|
||||
void insertRow();
|
||||
void deleteRow();
|
||||
void worksheetEditorCellEntered(QTableWidgetItem *item);
|
||||
void worksheetEditorChanged(QTableWidgetItem *item);
|
||||
void insertRow();
|
||||
void deleteRow();
|
||||
void contextMenuEvent(QContextMenuEvent *e);
|
||||
|
||||
|
||||
private:
|
||||
QString temp_content;
|
||||
};
|
||||
|
||||
class CUndoWorksheetCommand : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
CUndoWorksheetCommand(QTableWidget *table, QTableWidgetItem* item, const QString &ocontent, QUndoCommand *parent = 0) : QUndoCommand("Insert characters in cells", parent), m_table(table), m_item(item), m_ocontent(ocontent)
|
||||
{
|
||||
CUndoWorksheetCommand(QTableWidget *table, QTableWidgetItem *item, const QString &ocontent, QUndoCommand *parent = 0) : QUndoCommand("Insert characters in cells", parent), m_table(table), m_item(item), m_ocontent(ocontent)
|
||||
{
|
||||
m_ccontent = m_ocontent;
|
||||
}
|
||||
|
||||
|
@ -98,16 +103,16 @@ public:
|
|||
}
|
||||
}
|
||||
void undo()
|
||||
{
|
||||
{
|
||||
if(m_item->text() != m_ocontent)
|
||||
{
|
||||
m_ccontent = m_item->text();
|
||||
}
|
||||
m_item->setText(m_ocontent);
|
||||
}
|
||||
}
|
||||
private:
|
||||
QTableWidget* m_table;
|
||||
QTableWidgetItem* m_item;
|
||||
QTableWidget *m_table;
|
||||
QTableWidgetItem *m_item;
|
||||
QString m_ocontent;
|
||||
QString m_ccontent;
|
||||
};
|
||||
|
@ -123,7 +128,7 @@ public:
|
|||
m_table->setRowCount(m_rowID + 1);
|
||||
for(int j = 0; j < m_table->columnCount(); j++)
|
||||
{
|
||||
QTableWidgetItem* item = new QTableWidgetItem();
|
||||
QTableWidgetItem *item = new QTableWidgetItem();
|
||||
m_table->setItem(m_rowID, j, item);
|
||||
m_table->scrollToBottom();
|
||||
}
|
||||
|
@ -133,16 +138,16 @@ public:
|
|||
{
|
||||
m_table->removeRow(m_rowID);
|
||||
}
|
||||
private:
|
||||
QTableWidget* m_table;
|
||||
int m_rowID;
|
||||
|
||||
private:
|
||||
QTableWidget *m_table;
|
||||
int m_rowID;
|
||||
};
|
||||
|
||||
class CUndoWorksheetExtraction : public QUndoCommand
|
||||
{
|
||||
public:
|
||||
CUndoWorksheetExtraction(QList<CTableWidgetItemStore> items, QTableWidget *table, QUndoCommand *parent = 0) : QUndoCommand("Word extraction", parent),
|
||||
CUndoWorksheetExtraction(QList<CTableWidgetItemStore> items, QTableWidget *table, QUndoCommand *parent = 0) : QUndoCommand("Word extraction", parent),
|
||||
m_items(items),
|
||||
m_table(table)
|
||||
{ }
|
||||
|
@ -153,7 +158,6 @@ public:
|
|||
{
|
||||
m_table->setItem(is.m_row, is.m_column, is.m_item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void undo()
|
||||
|
@ -161,14 +165,13 @@ public:
|
|||
Q_FOREACH(CTableWidgetItemStore is, m_items)
|
||||
{
|
||||
m_table->setItem(is.m_row, is.m_column, is.m_item);
|
||||
m_table->takeItem(is.m_row, is.m_column);
|
||||
m_table->takeItem(is.m_row, is.m_column);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
QList<CTableWidgetItemStore> m_items;
|
||||
QTableWidget* m_table;
|
||||
QTableWidget *m_table;
|
||||
};
|
||||
|
||||
class CUndoWorksheetDeleteCommand : public QUndoCommand
|
||||
|
@ -181,8 +184,8 @@ public:
|
|||
{
|
||||
for(int i = 0; i < m_table->columnCount(); i++)
|
||||
{
|
||||
QTableWidgetItem* item = new QTableWidgetItem();
|
||||
QTableWidgetItem* table_item = m_table->item(m_rowID, i);
|
||||
QTableWidgetItem *item = new QTableWidgetItem();
|
||||
QTableWidgetItem *table_item = m_table->item(m_rowID, i);
|
||||
item->setText(table_item->text());
|
||||
m_deletedItems.push_back(item);
|
||||
}
|
||||
|
@ -203,8 +206,8 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
QList<QTableWidgetItem*> m_deletedItems;
|
||||
QTableWidget* m_table;
|
||||
QList<QTableWidgetItem *> m_deletedItems;
|
||||
QTableWidget *m_table;
|
||||
int m_rowID;
|
||||
};
|
||||
|
||||
|
|
|
@ -17,18 +17,14 @@
|
|||
|
||||
#include "extract_bot_names.h"
|
||||
|
||||
|
||||
static bool RemoveOlds = false;
|
||||
|
||||
|
||||
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
TCreatureInfo *ExtractBotNames::getCreature(const std::string &sheetName)
|
||||
{
|
||||
CSheetId id(sheetName+".creature");
|
||||
NLMISC::CSheetId id(sheetName+".creature");
|
||||
|
||||
if (Creatures.find(id) != Creatures.end())
|
||||
return &(Creatures.find(id)->second);
|
||||
|
@ -36,18 +32,17 @@ TCreatureInfo *ExtractBotNames::getCreature(const std::string &sheetName)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
string ExtractBotNames::cleanupName(const std::string &name)
|
||||
std::string ExtractBotNames::cleanupName(const std::string &name)
|
||||
{
|
||||
string ret;
|
||||
std::string ret;
|
||||
|
||||
for (uint i=0; i<name.size(); ++i)
|
||||
for (size_t i = 0; i < name.size(); ++i)
|
||||
{
|
||||
if (name[i] != ' ')
|
||||
ret += name[i];
|
||||
else
|
||||
ret += '_';
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -55,14 +50,13 @@ ucstring ExtractBotNames::cleanupUcName(const ucstring &name)
|
|||
{
|
||||
ucstring ret;
|
||||
|
||||
for (uint i=0; i<name.size(); ++i)
|
||||
for (size_t i = 0; i < name.size(); ++i)
|
||||
{
|
||||
if (name[i] != ' ')
|
||||
ret += name[i];
|
||||
else
|
||||
ret += '_';
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -70,82 +64,78 @@ ucstring ExtractBotNames::cleanupUcName(const ucstring &name)
|
|||
/*
|
||||
Removes first and last '$'
|
||||
*/
|
||||
ucstring ExtractBotNames::makeGroupName(const ucstring & translationName)
|
||||
ucstring ExtractBotNames::makeGroupName(const ucstring &translationName)
|
||||
{
|
||||
ucstring ret = translationName;
|
||||
if (ret.size() >= 2)
|
||||
{
|
||||
if ( *ret.begin() == ucchar('$'))
|
||||
if (*ret.begin() == ucchar('$'))
|
||||
{
|
||||
ret=ret.substr(1);
|
||||
}
|
||||
if ( *ret.rbegin() == ucchar('$'))
|
||||
if (*ret.rbegin() == ucchar('$'))
|
||||
{
|
||||
ret = ret.substr(0, ret.size()-1);
|
||||
ret = ret.substr(0, ret.size() - 1);
|
||||
}
|
||||
}
|
||||
ret = cleanupUcName(ret);
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
set<string> ExtractBotNames::getGenericNames()
|
||||
std::set<std::string> ExtractBotNames::getGenericNames()
|
||||
{
|
||||
return GenericNames;
|
||||
return GenericNames;
|
||||
}
|
||||
|
||||
map<string, TEntryInfo> ExtractBotNames::getSimpleNames()
|
||||
std::map<std::string, TEntryInfo> ExtractBotNames::getSimpleNames()
|
||||
{
|
||||
return SimpleNames;
|
||||
return SimpleNames;
|
||||
}
|
||||
|
||||
void ExtractBotNames::cleanSimpleNames()
|
||||
{
|
||||
SimpleNames.clear();
|
||||
{
|
||||
SimpleNames.clear();
|
||||
}
|
||||
|
||||
void ExtractBotNames::cleanGenericNames()
|
||||
{
|
||||
GenericNames.clear();
|
||||
GenericNames.clear();
|
||||
}
|
||||
|
||||
string ExtractBotNames::removeAndStoreFunction(const std::string &fullName)
|
||||
std::string ExtractBotNames::removeAndStoreFunction(const std::string &fullName)
|
||||
{
|
||||
string::size_type pos = fullName.find("$");
|
||||
if (pos == string::npos)
|
||||
std::string::size_type pos = fullName.find("$");
|
||||
if (pos == std::string::npos)
|
||||
{
|
||||
return fullName;
|
||||
}
|
||||
else
|
||||
{
|
||||
// extract and store the function name
|
||||
string ret;
|
||||
std::string ret;
|
||||
|
||||
ret = fullName.substr(0, pos);
|
||||
string::size_type pos2 = fullName.find("$", pos+1);
|
||||
std::string::size_type pos2 = fullName.find("$", pos+1);
|
||||
|
||||
string fct = fullName.substr(pos+1, pos2-(pos+1));
|
||||
std::string fct = fullName.substr(pos + 1, pos2 - (pos + 1));
|
||||
|
||||
ret += fullName.substr(pos2+1);
|
||||
ret += fullName.substr(pos2 + 1);
|
||||
|
||||
if (Functions.find(fct) == Functions.end())
|
||||
{
|
||||
nldebug("Adding function '%s'", fct.c_str());
|
||||
Functions.insert(fct);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ExtractBotNames::addGenericName(const std::string &name, const std::string &sheetName)
|
||||
{
|
||||
TCreatureInfo *c = getCreature(sheetName);
|
||||
if (!c || c->ForceSheetName || !c->DisplayName)
|
||||
return;
|
||||
|
||||
|
||||
if (SimpleNames.find(name) != SimpleNames.end())
|
||||
{
|
||||
nldebug("Name '%s' is now a generic name", name.c_str());
|
||||
|
@ -177,7 +167,7 @@ void ExtractBotNames::addSimpleName(const std::string &name, const std::string &
|
|||
else
|
||||
{
|
||||
nldebug("Adding simple name '%s'", name.c_str());
|
||||
|
||||
|
||||
TEntryInfo ei;
|
||||
ei.SheetName = sheetName;
|
||||
|
||||
|
@ -185,75 +175,72 @@ void ExtractBotNames::addSimpleName(const std::string &name, const std::string &
|
|||
}
|
||||
}
|
||||
|
||||
void ExtractBotNames::setRequiredSettings(list<string> filters, string level_design_path)
|
||||
void ExtractBotNames::setRequiredSettings(std::list<std::string> filters, std::string level_design_path)
|
||||
{
|
||||
for (std::list<string>::iterator it = filters.begin(); it != filters.end(); ++it)
|
||||
for (std::list<std::string>::iterator it = filters.begin(); it != filters.end(); ++it)
|
||||
{
|
||||
Filters.push_back(*it);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// init the sheets
|
||||
CSheetId::init(false);
|
||||
const string PACKED_SHEETS_NAME = "bin/translation_tools_creature.packed_sheets";
|
||||
NLMISC::CSheetId::init(false);
|
||||
const std::string PACKED_SHEETS_NAME = "bin/translation_tools_creature.packed_sheets";
|
||||
loadForm("creature", PACKED_SHEETS_NAME, Creatures, false, false);
|
||||
|
||||
if (Creatures.empty())
|
||||
{
|
||||
loadForm("creature", PACKED_SHEETS_NAME, Creatures, true);
|
||||
loadForm("creature", PACKED_SHEETS_NAME, Creatures, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig)
|
||||
void ExtractBotNames::extractBotNamesFromPrimitives(NLLIGO::CLigoConfig ligoConfig)
|
||||
{
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// ok, ready for the real work,
|
||||
// first, read the primitives files and parse the primitives
|
||||
vector<string> files;
|
||||
CPath::getFileList("primitive", files);
|
||||
|
||||
std::vector<std::string> files;
|
||||
NLMISC::CPath::getFileList("primitive", files);
|
||||
|
||||
for (uint i=0; i<files.size(); ++i)
|
||||
{
|
||||
string pathName = files[i];
|
||||
pathName = CPath::lookup(pathName);
|
||||
std::string pathName = files[i];
|
||||
pathName = NLMISC::CPath::lookup(pathName);
|
||||
|
||||
|
||||
|
||||
// check filters
|
||||
uint j=0;
|
||||
for (j=0; j<Filters.size(); ++j)
|
||||
{
|
||||
if (pathName.find(Filters[j]) != string::npos)
|
||||
break;
|
||||
}
|
||||
if (j != Filters.size())
|
||||
// skip this file
|
||||
continue;
|
||||
/*
|
||||
// dnk-88: what is it?
|
||||
// check filters
|
||||
uint j = 0;
|
||||
for (size_t j = 0; j < Filters.size(); ++j)
|
||||
{
|
||||
if (pathName.find(Filters[j]) != std::string::npos)
|
||||
break;
|
||||
}
|
||||
if (j != Filters.size())
|
||||
// skip this file
|
||||
continue;
|
||||
*/
|
||||
nlinfo("Loading file '%s'...", NLMISC::CFile::getFilename(pathName).c_str());
|
||||
|
||||
nlinfo("Loading file '%s'...", CFile::getFilename(pathName).c_str());
|
||||
|
||||
CPrimitives primDoc;
|
||||
CPrimitiveContext::instance().CurrentPrimitive = &primDoc;
|
||||
NLLIGO::CPrimitives primDoc;
|
||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = &primDoc;
|
||||
loadXmlPrimitiveFile(primDoc, pathName, ligoConfig);
|
||||
|
||||
// now parse the file
|
||||
|
||||
// look for group template
|
||||
{
|
||||
TPrimitiveClassPredicate pred("group_template_npc");
|
||||
TPrimitiveSet result;
|
||||
NLLIGO::TPrimitiveClassPredicate pred("group_template_npc");
|
||||
NLLIGO::TPrimitiveSet result;
|
||||
|
||||
CPrimitiveSet<TPrimitiveClassPredicate> ps;
|
||||
NLLIGO::CPrimitiveSet<NLLIGO::TPrimitiveClassPredicate> ps;
|
||||
ps.buildSet(primDoc.RootNode, pred, result);
|
||||
|
||||
for (uint i=0; i<result.size(); ++i)
|
||||
for (uint i = 0; i < result.size(); ++i)
|
||||
{
|
||||
string name;
|
||||
string countStr;
|
||||
string sheetStr;
|
||||
std::string name;
|
||||
std::string countStr;
|
||||
std::string sheetStr;
|
||||
result[i]->getPropertyByName("name", name);
|
||||
result[i]->getPropertyByName("count", countStr);
|
||||
result[i]->getPropertyByName("bot_sheet_look", sheetStr);
|
||||
|
@ -276,16 +263,16 @@ void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig)
|
|||
}
|
||||
// look for bot template
|
||||
{
|
||||
TPrimitiveClassPredicate pred("bot_template_npc");
|
||||
TPrimitiveSet result;
|
||||
NLLIGO::TPrimitiveClassPredicate pred("bot_template_npc");
|
||||
NLLIGO::TPrimitiveSet result;
|
||||
|
||||
CPrimitiveSet<TPrimitiveClassPredicate> ps;
|
||||
NLLIGO::CPrimitiveSet<NLLIGO::TPrimitiveClassPredicate> ps;
|
||||
ps.buildSet(primDoc.RootNode, pred, result);
|
||||
|
||||
for (uint i=0; i<result.size(); ++i)
|
||||
for (size_t i = 0; i < result.size(); ++i)
|
||||
{
|
||||
string name;
|
||||
string sheetStr;
|
||||
std::string name;
|
||||
std::string sheetStr;
|
||||
result[i]->getPropertyByName("name", name);
|
||||
result[i]->getPropertyByName("sheet_look", sheetStr);
|
||||
|
||||
|
@ -305,19 +292,19 @@ void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig)
|
|||
}
|
||||
}
|
||||
}
|
||||
// look for npc_group
|
||||
// look for npc_group
|
||||
{
|
||||
TPrimitiveClassPredicate pred("npc_group");
|
||||
TPrimitiveSet result;
|
||||
NLLIGO::TPrimitiveClassPredicate pred("npc_group");
|
||||
NLLIGO::TPrimitiveSet result;
|
||||
|
||||
CPrimitiveSet<TPrimitiveClassPredicate> ps;
|
||||
NLLIGO::CPrimitiveSet<NLLIGO::TPrimitiveClassPredicate> ps;
|
||||
ps.buildSet(primDoc.RootNode, pred, result);
|
||||
|
||||
for (uint i=0; i<result.size(); ++i)
|
||||
for (size_t i = 0; i < result.size(); ++i)
|
||||
{
|
||||
string name;
|
||||
string countStr;
|
||||
string sheetStr;
|
||||
std::string name;
|
||||
std::string countStr;
|
||||
std::string sheetStr;
|
||||
result[i]->getPropertyByName("name", name);
|
||||
result[i]->getPropertyByName("count", countStr);
|
||||
result[i]->getPropertyByName("bot_sheet_client", sheetStr);
|
||||
|
@ -342,18 +329,18 @@ void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig)
|
|||
}
|
||||
}
|
||||
}
|
||||
// look for bot
|
||||
// look for bot
|
||||
{
|
||||
TPrimitiveClassPredicate pred("npc_bot");
|
||||
TPrimitiveSet result;
|
||||
NLLIGO::TPrimitiveClassPredicate pred("npc_bot");
|
||||
NLLIGO::TPrimitiveSet result;
|
||||
|
||||
CPrimitiveSet<TPrimitiveClassPredicate> ps;
|
||||
NLLIGO::CPrimitiveSet<NLLIGO::TPrimitiveClassPredicate> ps;
|
||||
ps.buildSet(primDoc.RootNode, pred, result);
|
||||
|
||||
for (uint i=0; i<result.size(); ++i)
|
||||
for (size_t i = 0; i < result.size(); ++i)
|
||||
{
|
||||
string name;
|
||||
string sheetStr;
|
||||
std::string name;
|
||||
std::string sheetStr;
|
||||
result[i]->getPropertyByName("name", name);
|
||||
result[i]->getPropertyByName("sheet_client", sheetStr);
|
||||
|
||||
|
@ -373,7 +360,7 @@ void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -30,22 +30,16 @@
|
|||
#include "nel/ligo/primitive.h"
|
||||
#include "nel/ligo/primitive_utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
using namespace NLLIGO;
|
||||
using namespace STRING_MANAGER;
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
struct TCreatureInfo
|
||||
{
|
||||
CSheetId SheetId;
|
||||
bool ForceSheetName;
|
||||
bool DisplayName;
|
||||
NLMISC::CSheetId SheetId;
|
||||
bool ForceSheetName;
|
||||
bool DisplayName;
|
||||
|
||||
|
||||
void readGeorges (const NLMISC::CSmartPtr<NLGEORGES::UForm> &form, const NLMISC::CSheetId &sheetId)
|
||||
void readGeorges(const NLMISC::CSmartPtr<NLGEORGES::UForm> &form, const NLMISC::CSheetId &sheetId)
|
||||
{
|
||||
const NLGEORGES::UFormElm &item=form->getRootNode();
|
||||
|
||||
|
@ -61,51 +55,45 @@ struct TCreatureInfo
|
|||
f.serial(DisplayName);
|
||||
}
|
||||
|
||||
|
||||
static uint getVersion ()
|
||||
{
|
||||
static uint getVersion ()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
void removed()
|
||||
{
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct TEntryInfo
|
||||
{
|
||||
string SheetName;
|
||||
std::string SheetName;
|
||||
};
|
||||
|
||||
struct ExtractBotNames
|
||||
{
|
||||
private:
|
||||
vector<string> Filters;
|
||||
std::map<CSheetId, TCreatureInfo> Creatures;
|
||||
set<string> GenericNames;
|
||||
map<string, TEntryInfo> SimpleNames;
|
||||
set<string> Functions;
|
||||
std::vector<std::string> Filters;
|
||||
std::map<NLMISC::CSheetId, TCreatureInfo> Creatures;
|
||||
std::set<std::string> GenericNames;
|
||||
std::map<std::string, TEntryInfo> SimpleNames;
|
||||
std::set<std::string> Functions;
|
||||
private:
|
||||
TCreatureInfo *getCreature(const std::string &sheetName);
|
||||
ucstring makeGroupName(const ucstring & translationName);
|
||||
string removeAndStoreFunction(const std::string &fullName);
|
||||
void addGenericName(const std::string &name, const std::string &sheetName);
|
||||
void addSimpleName(const std::string &name, const std::string &sheetName);
|
||||
TCreatureInfo *getCreature(const std::string &sheetName);
|
||||
ucstring makeGroupName(const ucstring &translationName);
|
||||
std::string removeAndStoreFunction(const std::string &fullName);
|
||||
void addGenericName(const std::string &name, const std::string &sheetName);
|
||||
void addSimpleName(const std::string &name, const std::string &sheetName);
|
||||
public:
|
||||
void extractBotNamesFromPrimitives(CLigoConfig ligoConfig);
|
||||
void setRequiredSettings(list<string> filters, string level_design_path);
|
||||
set<string> getGenericNames();
|
||||
map<string, TEntryInfo> getSimpleNames();
|
||||
string cleanupName(const std::string &name);
|
||||
ucstring cleanupUcName(const ucstring &name);
|
||||
void cleanSimpleNames();
|
||||
void cleanGenericNames();
|
||||
|
||||
void extractBotNamesFromPrimitives(NLLIGO::CLigoConfig ligoConfig);
|
||||
void setRequiredSettings(std::list<std::string> filters, std::string level_design_path);
|
||||
std::set<std::string> getGenericNames();
|
||||
std::map<std::string, TEntryInfo> getSimpleNames();
|
||||
std::string cleanupName(const std::string &name);
|
||||
ucstring cleanupUcName(const ucstring &name);
|
||||
void cleanSimpleNames();
|
||||
void cleanGenericNames();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* EXTRACT_BOT_NAMES_H */
|
||||
|
||||
#endif /* EXTRACT_BOT_NAMES_H */
|
|
@ -16,139 +16,135 @@
|
|||
|
||||
#include "extract_new_sheet_names.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
using namespace NLLIGO;
|
||||
using namespace STRING_MANAGER;
|
||||
|
||||
namespace TranslationManager
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
|
||||
|
||||
// ***************************************************************************
|
||||
/*
|
||||
* Specialisation of IWordListBuilder to list sheets in a directory
|
||||
*/
|
||||
|
||||
|
||||
bool CSheetWordListBuilder::buildWordList(std::vector<string> &allWords, string workSheetFileName)
|
||||
bool CSheetWordListBuilder::buildWordList(std::vector<std::string> &allWords, std::string workSheetFileName)
|
||||
{
|
||||
SheetExt = NLMISC::toLower(SheetExt);
|
||||
// verify the directory is correct
|
||||
if(!NLMISC::CFile::isDirectory(SheetPath))
|
||||
{
|
||||
SheetExt= toLower(SheetExt);
|
||||
// verify the directory is correct
|
||||
if(!CFile::isDirectory(SheetPath))
|
||||
{
|
||||
nlwarning("Error: Directory '%s' not found. '%s' Aborted", SheetPath.c_str(), workSheetFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
// list all files.
|
||||
std::vector<string> allFiles;
|
||||
allFiles.reserve(100000);
|
||||
CPath::getPathContent(SheetPath, true, false, true, allFiles, NULL);
|
||||
|
||||
// Keep only the extension we want, and remove "_" (parent)
|
||||
allWords.clear();
|
||||
allWords.reserve(allFiles.size());
|
||||
for(uint i=0;i<allFiles.size();i++)
|
||||
{
|
||||
string fileNameWithoutExt= CFile::getFilenameWithoutExtension(allFiles[i]);
|
||||
string extension= toLower(CFile::getExtension(allFiles[i]));
|
||||
// bad extension?
|
||||
if(extension!=SheetExt)
|
||||
continue;
|
||||
// parent?
|
||||
if(fileNameWithoutExt.empty()||fileNameWithoutExt[0]=='_')
|
||||
continue;
|
||||
// ok, add
|
||||
allWords.push_back(toLower(fileNameWithoutExt));
|
||||
}
|
||||
|
||||
return true;
|
||||
nlwarning("Error: Directory '%s' not found. '%s' Aborted", SheetPath.c_str(), workSheetFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
// list all files.
|
||||
std::vector<std::string> allFiles;
|
||||
allFiles.reserve(100000);
|
||||
NLMISC::CPath::getPathContent(SheetPath, true, false, true, allFiles, NULL);
|
||||
|
||||
// Keep only the extension we want, and remove "_" (parent)
|
||||
allWords.clear();
|
||||
allWords.reserve(allFiles.size());
|
||||
for(size_t i = 0; i < allFiles.size(); i++)
|
||||
{
|
||||
std::string fileNameWithoutExt = NLMISC::CFile::getFilenameWithoutExtension(allFiles[i]);
|
||||
std::string extension = NLMISC::toLower(NLMISC::CFile::getExtension(allFiles[i]));
|
||||
|
||||
// bad extension?
|
||||
if(extension!=SheetExt)
|
||||
continue;
|
||||
|
||||
// parent?
|
||||
if(fileNameWithoutExt.empty() || fileNameWithoutExt[0] == '_')
|
||||
continue;
|
||||
|
||||
// ok, add
|
||||
allWords.push_back(NLMISC::toLower(fileNameWithoutExt));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// ***************************************************************************
|
||||
/*
|
||||
* Specialisation of IWordListBuilder to list new region/place name from .primitive
|
||||
*/
|
||||
bool CRegionPrimWordListBuilder::buildWordList(std::vector<string> &allWords, string workSheetFileName)
|
||||
bool CRegionPrimWordListBuilder::buildWordList(std::vector<std::string> &allWords, std::string workSheetFileName)
|
||||
{
|
||||
// verify the directory is correct
|
||||
if(!NLMISC::CFile::isDirectory(PrimPath))
|
||||
{
|
||||
// verify the directory is correct
|
||||
if(!CFile::isDirectory(PrimPath))
|
||||
nlwarning("Error: Directory '%s' not found. '%s' Aborted", PrimPath.c_str(), workSheetFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
// list all files.
|
||||
std::vector<std::string> allFiles;
|
||||
allFiles.reserve(100000);
|
||||
NLMISC::CPath::getPathContent(PrimPath, true, false, true, allFiles, NULL);
|
||||
|
||||
// parse all primitive that match the filter
|
||||
allWords.clear();
|
||||
allWords.reserve(100000);
|
||||
// to avoid duplicate
|
||||
std::set<std::string> allWordSet;
|
||||
for(size_t i = 0; i < allFiles.size(); i++)
|
||||
{
|
||||
std::string fileName = NLMISC::CFile::getFilename(allFiles[i]);
|
||||
// filter don't match?
|
||||
bool oneMatch= false;
|
||||
for(size_t filter = 0; filter < PrimFilter.size(); filter++)
|
||||
{
|
||||
nlwarning("Error: Directory '%s' not found. '%s' Aborted", PrimPath.c_str(), workSheetFileName.c_str());
|
||||
if(NLMISC::testWildCard(fileName, PrimFilter[filter]))
|
||||
oneMatch= true;
|
||||
}
|
||||
if(!oneMatch)
|
||||
continue;
|
||||
|
||||
// ok, read the file
|
||||
NLLIGO::CPrimitives PrimDoc;
|
||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = &PrimDoc;
|
||||
if (!NLLIGO::loadXmlPrimitiveFile(PrimDoc, allFiles[i], LigoConfig))
|
||||
{
|
||||
nlwarning("Error: cannot open file '%s'. '%s' Aborted", allFiles[i].c_str(), workSheetFileName.c_str());
|
||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
// list all files.
|
||||
std::vector<string> allFiles;
|
||||
allFiles.reserve(100000);
|
||||
CPath::getPathContent(PrimPath, true, false, true, allFiles, NULL);
|
||||
|
||||
// parse all primitive that match the filter
|
||||
allWords.clear();
|
||||
allWords.reserve(100000);
|
||||
// to avoid duplicate
|
||||
set<string> allWordSet;
|
||||
for(uint i=0;i<allFiles.size();i++)
|
||||
{
|
||||
string fileName= CFile::getFilename(allFiles[i]);
|
||||
// filter don't match?
|
||||
bool oneMatch= false;
|
||||
for(uint filter=0;filter<PrimFilter.size();filter++)
|
||||
{
|
||||
if(testWildCard(fileName, PrimFilter[filter]))
|
||||
oneMatch= true;
|
||||
}
|
||||
if(!oneMatch)
|
||||
continue;
|
||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
||||
|
||||
// ok, read the file
|
||||
CPrimitives PrimDoc;
|
||||
CPrimitiveContext::instance().CurrentPrimitive = &PrimDoc;
|
||||
if (!loadXmlPrimitiveFile(PrimDoc, allFiles[i], LigoConfig))
|
||||
// For all primitives of interest
|
||||
const char *listClass[] = {"continent", "region", "place", "stable",
|
||||
"teleport_destination", "room_template"
|
||||
};
|
||||
|
||||
const char *listProp[] = {"name", "name", "name", "name",
|
||||
"place_name", "place_name"
|
||||
};
|
||||
|
||||
const uint numListClass= sizeof(listClass)/sizeof(listClass[0]);
|
||||
const uint numListProp= sizeof(listProp)/sizeof(listProp[0]);
|
||||
nlctassert(numListProp == numListClass);
|
||||
for(uint cid = 0; cid < numListClass; cid++)
|
||||
{
|
||||
// parse the whole hierarchy
|
||||
NLLIGO::TPrimitiveClassPredicate predCont(listClass[cid]);
|
||||
NLLIGO::CPrimitiveSet<NLLIGO::TPrimitiveClassPredicate> setPlace;
|
||||
NLLIGO::TPrimitiveSet placeRes;
|
||||
setPlace.buildSet(PrimDoc.RootNode, predCont, placeRes);
|
||||
|
||||
// for all found
|
||||
for (size_t placeId = 0; placeId < placeRes.size(); ++placeId)
|
||||
{
|
||||
nlwarning("Error: cannot open file '%s'. '%s' Aborted", allFiles[i].c_str(), workSheetFileName.c_str());
|
||||
CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
||||
return false;
|
||||
}
|
||||
CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
||||
|
||||
// For all primitives of interest
|
||||
const char *listClass[]= {"continent", "region", "place", "stable",
|
||||
"teleport_destination", "room_template"};
|
||||
const char *listProp[]= {"name", "name", "name", "name",
|
||||
"place_name", "place_name"};
|
||||
const uint numListClass= sizeof(listClass)/sizeof(listClass[0]);
|
||||
const uint numListProp= sizeof(listProp)/sizeof(listProp[0]);
|
||||
nlctassert(numListProp==numListClass);
|
||||
for(uint cid=0;cid<numListClass;cid++)
|
||||
{
|
||||
// parse the whole hierarchy
|
||||
TPrimitiveClassPredicate predCont(listClass[cid]);
|
||||
CPrimitiveSet<TPrimitiveClassPredicate> setPlace;
|
||||
TPrimitiveSet placeRes;
|
||||
setPlace.buildSet(PrimDoc.RootNode, predCont, placeRes);
|
||||
// for all found
|
||||
for (uint placeId= 0; placeId < placeRes.size(); ++placeId)
|
||||
std::string primName;
|
||||
if(placeRes[placeId]->getPropertyByName(listProp[cid], primName) && !primName.empty())
|
||||
{
|
||||
string primName;
|
||||
if(placeRes[placeId]->getPropertyByName(listProp[cid], primName) && !primName.empty())
|
||||
primName = NLMISC::toLower(primName);
|
||||
// avoid duplicate
|
||||
if(allWordSet.insert(primName).second)
|
||||
{
|
||||
primName= toLower(primName);
|
||||
// avoid duplicate
|
||||
if(allWordSet.insert(primName).second)
|
||||
{
|
||||
allWords.push_back(primName);
|
||||
}
|
||||
allWords.push_back(primName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -30,43 +30,34 @@
|
|||
#include "nel/ligo/primitive.h"
|
||||
#include "nel/ligo/primitive_utils.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
using namespace NLLIGO;
|
||||
using namespace STRING_MANAGER;
|
||||
|
||||
namespace TranslationManager
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
|
||||
// ***************************************************************************
|
||||
/*
|
||||
* Interface to build the whole list of words (key id) for a specific worksheet
|
||||
*/
|
||||
struct IWordListBuilder
|
||||
{
|
||||
virtual bool buildWordList(std::vector<string> &allWords, string workSheetFileName) =0;
|
||||
|
||||
virtual bool buildWordList(std::vector<std::string> &allWords, std::string workSheetFileName) =0;
|
||||
};
|
||||
|
||||
struct CSheetWordListBuilder : public IWordListBuilder
|
||||
{
|
||||
string SheetExt;
|
||||
string SheetPath;
|
||||
std::string SheetExt;
|
||||
std::string SheetPath;
|
||||
|
||||
virtual bool buildWordList(std::vector<string> &allWords, string workSheetFileName);
|
||||
virtual bool buildWordList(std::vector<std::string> &allWords, std::string workSheetFileName);
|
||||
};
|
||||
|
||||
struct CRegionPrimWordListBuilder : public IWordListBuilder
|
||||
{
|
||||
string PrimPath;
|
||||
vector<string> PrimFilter;
|
||||
NLLIGO::CLigoConfig LigoConfig;
|
||||
virtual bool buildWordList(std::vector<string> &allWords, string workSheetFileName);
|
||||
std::string PrimPath;
|
||||
std::vector<std::string> PrimFilter;
|
||||
NLLIGO::CLigoConfig LigoConfig;
|
||||
virtual bool buildWordList(std::vector<std::string> &allWords, std::string workSheetFileName);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* EXTRACT_NEW_SHEET_NAMES_H */
|
||||
|
||||
#endif /* EXTRACT_NEW_SHEET_NAMES_H */
|
|
@ -1,191 +1,216 @@
|
|||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.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 "ftp_selection.h"
|
||||
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtNetwork/QFtp>
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
CFtpSelection::CFtpSelection(QWidget *parent): QDialog(parent)
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
connect(_ui.connectButton, SIGNAL(clicked()), this, SLOT(ConnectButtonClicked()));
|
||||
connect(_ui.doneButton, SIGNAL(clicked()), this, SLOT(DoneButtonClicked()));
|
||||
connect(_ui.cdToParrent, SIGNAL(clicked()), this, SLOT(cdToParent()));
|
||||
connect(_ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
|
||||
// file list
|
||||
connect(_ui.fileList, SIGNAL(itemActivated(QTreeWidgetItem*,int)),this, SLOT(processItem(QTreeWidgetItem*,int)));
|
||||
_ui.fileList->setEnabled(false);
|
||||
_ui.fileList->setRootIsDecorated(false);
|
||||
_ui.fileList->setHeaderLabels(QStringList() << tr("Name") << tr("Size") << tr("Owner") << tr("Group") << tr("Time"));
|
||||
_ui.fileList->header()->setStretchLastSection(false);
|
||||
CFtpSelection::CFtpSelection(QWidget *parent): QDialog(parent)
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
connect(_ui.connectButton, SIGNAL(clicked()), this, SLOT(ConnectButtonClicked()));
|
||||
connect(_ui.doneButton, SIGNAL(clicked()), this, SLOT(DoneButtonClicked()));
|
||||
connect(_ui.cdToParrent, SIGNAL(clicked()), this, SLOT(cdToParent()));
|
||||
connect(_ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
|
||||
// buttons
|
||||
_ui.cdToParrent->setEnabled(false);
|
||||
_ui.doneButton->setEnabled(false);
|
||||
// file list
|
||||
connect(_ui.fileList, SIGNAL(itemActivated(QTreeWidgetItem *,int)),this, SLOT(processItem(QTreeWidgetItem *,int)));
|
||||
_ui.fileList->setEnabled(false);
|
||||
_ui.fileList->setRootIsDecorated(false);
|
||||
_ui.fileList->setHeaderLabels(QStringList() << tr("Name") << tr("Size") << tr("Owner") << tr("Group") << tr("Time"));
|
||||
_ui.fileList->header()->setStretchLastSection(false);
|
||||
|
||||
status = false;
|
||||
}
|
||||
|
||||
// Connection with the FTP Server. We retrieve the file list.
|
||||
void CFtpSelection::ConnectButtonClicked()
|
||||
{
|
||||
conn = new QFtp(this);
|
||||
connect(conn, SIGNAL(commandFinished(int,bool)), this, SLOT(FtpCommandFinished(int,bool)));
|
||||
connect(conn, SIGNAL(listInfo(QUrlInfo)), this, SLOT(AddToList(QUrlInfo)));
|
||||
#ifndef QT_NO_CURSOR
|
||||
setCursor(Qt::WaitCursor);
|
||||
#endif
|
||||
QUrl url(_ui.url->text());
|
||||
if (!url.isValid() || url.scheme().toLower() != QLatin1String("ftp")) {
|
||||
conn->connectToHost(_ui.url->text(), 21);
|
||||
conn->login();
|
||||
} else {
|
||||
conn->connectToHost(url.host(), url.port(21));
|
||||
// buttons
|
||||
_ui.cdToParrent->setEnabled(false);
|
||||
_ui.doneButton->setEnabled(false);
|
||||
|
||||
if (!url.userName().isEmpty())
|
||||
conn->login(QUrl::fromPercentEncoding(url.userName().toLatin1()), url.password());
|
||||
else
|
||||
conn->login();
|
||||
if (!url.path().isEmpty())
|
||||
conn->cd(url.path());
|
||||
}
|
||||
}
|
||||
|
||||
// Get the user action.
|
||||
void CFtpSelection::FtpCommandFinished(int, bool error)
|
||||
{
|
||||
#ifndef QT_NO_CURSOR
|
||||
setCursor(Qt::ArrowCursor);
|
||||
#endif
|
||||
if (conn->currentCommand() == QFtp::ConnectToHost)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("Unable to connect to the FTP server "
|
||||
"at %1. Please check that the host "
|
||||
"name is correct.")
|
||||
.arg(_ui.url->text()));
|
||||
return;
|
||||
}
|
||||
status = false;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (conn->currentCommand() == QFtp::Login)
|
||||
{
|
||||
conn->list();
|
||||
}
|
||||
|
||||
if (conn->currentCommand() == QFtp::Get)
|
||||
{
|
||||
if(error)
|
||||
{
|
||||
status = false;
|
||||
file->close();
|
||||
file->remove();
|
||||
} else {
|
||||
file->close();
|
||||
status = true;
|
||||
}
|
||||
_ui.cancelButton->setEnabled(true);
|
||||
}
|
||||
// Connection with the FTP Server. We retrieve the file list.
|
||||
void CFtpSelection::ConnectButtonClicked()
|
||||
{
|
||||
conn = new QFtp(this);
|
||||
connect(conn, SIGNAL(commandFinished(int,bool)), this, SLOT(FtpCommandFinished(int,bool)));
|
||||
connect(conn, SIGNAL(listInfo(QUrlInfo)), this, SLOT(AddToList(QUrlInfo)));
|
||||
|
||||
if (conn->currentCommand() == QFtp::List)
|
||||
{
|
||||
if (isDirectory.isEmpty()) {
|
||||
_ui.fileList->addTopLevelItem(new QTreeWidgetItem(QStringList() << tr("<empty>")));
|
||||
_ui.fileList->setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Make the file list with directories and files
|
||||
void CFtpSelection::AddToList(const QUrlInfo &urlInfo)
|
||||
{
|
||||
QTreeWidgetItem *item = new QTreeWidgetItem;
|
||||
item->setText(0, urlInfo.name());
|
||||
item->setText(1, QString::number(urlInfo.size()));
|
||||
item->setText(2, urlInfo.owner());
|
||||
item->setText(3, urlInfo.group());
|
||||
item->setText(4, urlInfo.lastModified().toString("MMM dd yyyy"));
|
||||
setCursor(Qt::WaitCursor);
|
||||
|
||||
QPixmap pixmap(urlInfo.isDir() ? ":/translationManager/images/dir.png" : ":/translationManager/images/file.png");
|
||||
item->setIcon(0, pixmap);
|
||||
|
||||
isDirectory[urlInfo.name()] = urlInfo.isDir();
|
||||
_ui.fileList->addTopLevelItem(item);
|
||||
if (!_ui.fileList->currentItem()) {
|
||||
_ui.fileList->setCurrentItem(_ui.fileList->topLevelItem(0));
|
||||
_ui.fileList->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CFtpSelection::processItem(QTreeWidgetItem* item, int)
|
||||
{
|
||||
QString name = item->text(0);
|
||||
if (isDirectory.value(name))
|
||||
{
|
||||
_ui.fileList->clear();
|
||||
isDirectory.clear();
|
||||
currentPath += '/';
|
||||
currentPath += name;
|
||||
conn->cd(name);
|
||||
conn->list();
|
||||
#ifndef QT_NO_CURSOR
|
||||
setCursor(Qt::WaitCursor);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
_ui.doneButton->setEnabled(true);
|
||||
}
|
||||
|
||||
// Exit from a directory
|
||||
void CFtpSelection::cdToParent()
|
||||
QUrl url(_ui.url->text());
|
||||
if (!url.isValid() || url.scheme().toLower() != QLatin1String("ftp"))
|
||||
{
|
||||
#ifndef QT_NO_CURSOR
|
||||
setCursor(Qt::WaitCursor);
|
||||
#endif
|
||||
_ui.fileList->clear();
|
||||
isDirectory.clear();
|
||||
currentPath = currentPath.left(currentPath.lastIndexOf('/'));
|
||||
if (currentPath.isEmpty()) {
|
||||
_ui.cdToParrent->setEnabled(false);
|
||||
conn->cd("/");
|
||||
} else {
|
||||
conn->cd(currentPath);
|
||||
}
|
||||
conn->list();
|
||||
conn->connectToHost(_ui.url->text(), 21);
|
||||
conn->login();
|
||||
}
|
||||
else
|
||||
{
|
||||
conn->connectToHost(url.host(), url.port(21));
|
||||
|
||||
if (!url.userName().isEmpty())
|
||||
conn->login(QUrl::fromPercentEncoding(url.userName().toLatin1()), url.password());
|
||||
else
|
||||
conn->login();
|
||||
if (!url.path().isEmpty())
|
||||
conn->cd(url.path());
|
||||
}
|
||||
}
|
||||
|
||||
// Get the user action.
|
||||
void CFtpSelection::FtpCommandFinished(int, bool error)
|
||||
{
|
||||
setCursor(Qt::ArrowCursor);
|
||||
|
||||
if (conn->currentCommand() == QFtp::ConnectToHost)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("Unable to connect to the FTP server "
|
||||
"at %1. Please check that the host "
|
||||
"name is correct.")
|
||||
.arg(_ui.url->text()));
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Done action
|
||||
void CFtpSelection::DoneButtonClicked()
|
||||
{
|
||||
QString fileName = _ui.fileList->currentItem()->text(0);
|
||||
|
||||
if (QFile::exists(fileName)) {
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("There already exists a file called %1 in "
|
||||
"the current directory.")
|
||||
.arg(fileName));
|
||||
return;
|
||||
}
|
||||
|
||||
file = new QFile(fileName);
|
||||
#ifndef QT_NO_CURSOR
|
||||
setCursor(Qt::WaitCursor);
|
||||
#endif
|
||||
if (!file->open(QIODevice::WriteOnly)) {
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("Unable to save the file %1: %2.")
|
||||
.arg(fileName).arg(file->errorString()));
|
||||
delete file;
|
||||
return;
|
||||
}
|
||||
_ui.cancelButton->setEnabled(false);
|
||||
conn->get(_ui.fileList->currentItem()->text(0), file);
|
||||
|
||||
reject();
|
||||
}
|
||||
|
||||
if (conn->currentCommand() == QFtp::Login)
|
||||
{
|
||||
conn->list();
|
||||
}
|
||||
|
||||
if (conn->currentCommand() == QFtp::Get)
|
||||
{
|
||||
if(error)
|
||||
{
|
||||
status = false;
|
||||
file->close();
|
||||
file->remove();
|
||||
}
|
||||
else
|
||||
{
|
||||
file->close();
|
||||
status = true;
|
||||
}
|
||||
_ui.cancelButton->setEnabled(true);
|
||||
}
|
||||
|
||||
if (conn->currentCommand() == QFtp::List)
|
||||
{
|
||||
if (isDirectory.isEmpty())
|
||||
{
|
||||
_ui.fileList->addTopLevelItem(new QTreeWidgetItem(QStringList() << tr("<empty>")));
|
||||
_ui.fileList->setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Make the file list with directories and files
|
||||
void CFtpSelection::AddToList(const QUrlInfo &urlInfo)
|
||||
{
|
||||
QTreeWidgetItem *item = new QTreeWidgetItem;
|
||||
item->setText(0, urlInfo.name());
|
||||
item->setText(1, QString::number(urlInfo.size()));
|
||||
item->setText(2, urlInfo.owner());
|
||||
item->setText(3, urlInfo.group());
|
||||
item->setText(4, urlInfo.lastModified().toString("MMM dd yyyy"));
|
||||
|
||||
QPixmap pixmap(urlInfo.isDir() ? ":/translationManager/images/dir.png" : ":/translationManager/images/file.png");
|
||||
item->setIcon(0, pixmap);
|
||||
|
||||
isDirectory[urlInfo.name()] = urlInfo.isDir();
|
||||
_ui.fileList->addTopLevelItem(item);
|
||||
if (!_ui.fileList->currentItem())
|
||||
{
|
||||
_ui.fileList->setCurrentItem(_ui.fileList->topLevelItem(0));
|
||||
_ui.fileList->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CFtpSelection::processItem(QTreeWidgetItem *item, int)
|
||||
{
|
||||
QString name = item->text(0);
|
||||
if (isDirectory.value(name))
|
||||
{
|
||||
_ui.fileList->clear();
|
||||
isDirectory.clear();
|
||||
currentPath += '/';
|
||||
currentPath += name;
|
||||
conn->cd(name);
|
||||
conn->list();
|
||||
|
||||
setCursor(Qt::WaitCursor);
|
||||
return;
|
||||
}
|
||||
_ui.doneButton->setEnabled(true);
|
||||
}
|
||||
|
||||
// Exit from a directory
|
||||
void CFtpSelection::cdToParent()
|
||||
{
|
||||
setCursor(Qt::WaitCursor);
|
||||
|
||||
_ui.fileList->clear();
|
||||
isDirectory.clear();
|
||||
currentPath = currentPath.left(currentPath.lastIndexOf('/'));
|
||||
if (currentPath.isEmpty())
|
||||
{
|
||||
_ui.cdToParrent->setEnabled(false);
|
||||
conn->cd("/");
|
||||
}
|
||||
else
|
||||
{
|
||||
conn->cd(currentPath);
|
||||
}
|
||||
conn->list();
|
||||
}
|
||||
|
||||
// Done action
|
||||
void CFtpSelection::DoneButtonClicked()
|
||||
{
|
||||
QString fileName = _ui.fileList->currentItem()->text(0);
|
||||
|
||||
if (QFile::exists(fileName))
|
||||
{
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("There already exists a file called %1 in "
|
||||
"the current directory.")
|
||||
.arg(fileName));
|
||||
return;
|
||||
}
|
||||
|
||||
file = new QFile(fileName);
|
||||
|
||||
setCursor(Qt::WaitCursor);
|
||||
|
||||
if (!file->open(QIODevice::WriteOnly))
|
||||
{
|
||||
QMessageBox::information(this, tr("FTP"),
|
||||
tr("Unable to save the file %1: %2.")
|
||||
.arg(fileName).arg(file->errorString()));
|
||||
delete file;
|
||||
return;
|
||||
}
|
||||
_ui.cancelButton->setEnabled(false);
|
||||
conn->get(_ui.fileList->currentItem()->text(0), file);
|
||||
|
||||
reject();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* File: ftp_selection.h
|
||||
* Author: cemycc
|
||||
*
|
||||
|
@ -8,6 +8,8 @@
|
|||
#ifndef FTP_SELECTION_H
|
||||
#define FTP_SELECTION_H
|
||||
|
||||
#include "ui_ftp_selection.h"
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtGui/QDialog>
|
||||
|
@ -16,34 +18,33 @@
|
|||
#include <QtCore/QFile>
|
||||
#include <QtNetwork>
|
||||
|
||||
#include "ui_ftp_selection.h"
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
using namespace std;
|
||||
class CFtpSelection : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
namespace TranslationManager {
|
||||
|
||||
class CFtpSelection : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
Ui::FtpSelectionDialog _ui;
|
||||
QFtp *conn;
|
||||
QHash<QString, bool> isDirectory;
|
||||
QString currentPath;
|
||||
private Q_SLOTS:
|
||||
void cdToParent();
|
||||
void processItem(QTreeWidgetItem*,int);
|
||||
void ConnectButtonClicked();
|
||||
void DoneButtonClicked();
|
||||
void FtpCommandFinished(int, bool error);
|
||||
void AddToList(const QUrlInfo &urlInfo);
|
||||
public:
|
||||
bool status;
|
||||
QFile *file;
|
||||
CFtpSelection(QWidget* parent = 0);
|
||||
~CFtpSelection() {}
|
||||
};
|
||||
public:
|
||||
CFtpSelection(QWidget *parent = 0);
|
||||
~CFtpSelection() {}
|
||||
bool status;
|
||||
QFile *file;
|
||||
|
||||
private Q_SLOTS:
|
||||
void cdToParent();
|
||||
void processItem(QTreeWidgetItem *,int);
|
||||
void ConnectButtonClicked();
|
||||
void DoneButtonClicked();
|
||||
void FtpCommandFinished(int, bool error);
|
||||
void AddToList(const QUrlInfo &urlInfo);
|
||||
|
||||
private:
|
||||
Ui::FtpSelectionDialog _ui;
|
||||
QFtp *conn;
|
||||
QHash<QString, bool> isDirectory;
|
||||
QString currentPath;
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* FTP_SELECTION_H */
|
||||
|
||||
#endif /* FTP_SELECTION_H */
|
|
@ -1,39 +1,54 @@
|
|||
|
||||
#include <QtGui/qlistwidget.h>
|
||||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.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 "source_selection.h"
|
||||
|
||||
#include <QtGui/QListWidget>
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
|
||||
CSourceDialog::CSourceDialog(QWidget *parent): QDialog(parent)
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
// Set signal and slot for "OK Button"
|
||||
|
||||
connect(_ui.ok_button, SIGNAL(clicked()), this, SLOT(OkButtonClicked()));
|
||||
// Set signal and slot for "Cancel Button"
|
||||
connect(_ui.cancel_button, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
_ui.sourceSelectionListWidget->setSortingEnabled(false);
|
||||
connect(_ui.cancel_button, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
|
||||
_ui.sourceSelectionListWidget->setSortingEnabled(false);
|
||||
connect(_ui.sourceSelectionListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
|
||||
this, SLOT(itemDoubleClicked(QListWidgetItem *)));
|
||||
this, SLOT(itemDoubleClicked(QListWidgetItem *)));
|
||||
}
|
||||
|
||||
// Insert options in the source dialog. Options like: from FTP Server, from Local directory etc.
|
||||
void CSourceDialog::setSourceOptions(map<QListWidgetItem*,int> options)
|
||||
void CSourceDialog::setSourceOptions(std::map<QListWidgetItem *, int> &options)
|
||||
{
|
||||
map<QListWidgetItem*,int>::iterator it;
|
||||
|
||||
for(it = options.begin(); it != options.end(); ++it)
|
||||
{
|
||||
_ui.sourceSelectionListWidget->addItem((*it).first);
|
||||
}
|
||||
std::map<QListWidgetItem *,int>::iterator it;
|
||||
|
||||
for(it = options.begin(); it != options.end(); ++it)
|
||||
{
|
||||
_ui.sourceSelectionListWidget->addItem((*it).first);
|
||||
}
|
||||
}
|
||||
|
||||
void CSourceDialog::OkButtonClicked()
|
||||
{
|
||||
selected_item = _ui.sourceSelectionListWidget->currentItem();
|
||||
accept();
|
||||
selected_item = _ui.sourceSelectionListWidget->currentItem();
|
||||
accept();
|
||||
}
|
||||
|
||||
void CSourceDialog::itemDoubleClicked(QListWidgetItem *item)
|
||||
|
@ -42,4 +57,4 @@ void CSourceDialog::itemDoubleClicked(QListWidgetItem *item)
|
|||
accept();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,16 +1,30 @@
|
|||
|
||||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.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/>.
|
||||
|
||||
#ifndef SOURCE_SELECTION_H
|
||||
#define SOURCE_SELECTION_H
|
||||
|
||||
#include "ui_source_selection.h"
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QDialog>
|
||||
#include <QtCore/QString>
|
||||
#include <QtGui/QListWidgetItem>
|
||||
#include "ui_source_selection.h"
|
||||
#include <map>
|
||||
|
||||
using namespace std;
|
||||
#include <map>
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
@ -18,16 +32,19 @@ namespace TranslationManager
|
|||
class CSourceDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
Ui::SourceSelectionDialog _ui;
|
||||
|
||||
public:
|
||||
CSourceDialog(QWidget *parent = 0);
|
||||
~CSourceDialog() {}
|
||||
void setSourceOptions(std::map<QListWidgetItem *, int> &options);
|
||||
QListWidgetItem *selected_item;
|
||||
|
||||
private Q_SLOTS:
|
||||
void OkButtonClicked();
|
||||
void itemDoubleClicked(QListWidgetItem *item);
|
||||
public:
|
||||
CSourceDialog(QWidget *parent = 0);
|
||||
~CSourceDialog(){}
|
||||
void setSourceOptions(map<QListWidgetItem*, int> options);
|
||||
QListWidgetItem *selected_item;
|
||||
|
||||
private:
|
||||
Ui::SourceSelectionDialog _ui;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -1,29 +1,38 @@
|
|||
/*
|
||||
* File: translation_manager_constants.h
|
||||
* Author: cemycc
|
||||
*
|
||||
* Created on July 5, 2011, 9:15 PM
|
||||
*/
|
||||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.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/>.
|
||||
|
||||
#ifndef TRANSLATION_MANAGER_CONSTANTS_H
|
||||
#define TRANSLATION_MANAGER_CONSTANTS_H
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
namespace Constants
|
||||
{
|
||||
const int ED_SHEET = 1;
|
||||
const int ED_PHRASE = 2;
|
||||
namespace Constants
|
||||
{
|
||||
const int ED_SHEET = 1;
|
||||
const int ED_PHRASE = 2;
|
||||
|
||||
const char * const WK_BOTNAMES = "bot_names_wk.txt";
|
||||
const char * const WK_ITEM = "item_words_wk.txt";
|
||||
const char * const WK_CREATURE = "creature_words_wk.txt";
|
||||
const char * const WK_SBRICK = "sbrick_words_wk.txt";
|
||||
const char * const WK_SPHRASE = "sphrase_words_wk.txt";
|
||||
const char * const WK_PLACE = "place_words_wk.txt";
|
||||
const char * const WK_CONTINENT = "place_words_wk.txt";
|
||||
const char * const WK_STABLE = "place_words_wk.txt";
|
||||
}
|
||||
const char *const WK_BOTNAMES = "bot_names_wk.txt";
|
||||
const char *const WK_ITEM = "item_words_wk.txt";
|
||||
const char *const WK_CREATURE = "creature_words_wk.txt";
|
||||
const char *const WK_SBRICK = "sbrick_words_wk.txt";
|
||||
const char *const WK_SPHRASE = "sphrase_words_wk.txt";
|
||||
const char *const WK_PLACE = "place_words_wk.txt";
|
||||
const char *const WK_CONTINENT = "place_words_wk.txt";
|
||||
const char *const WK_STABLE = "place_words_wk.txt";
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* TRANSLATION_MANAGER_CONSTANTS_H */
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
|
@ -25,31 +24,30 @@
|
|||
#include <QtGui/QUndoStack>
|
||||
#include <QtCore/QFileInfo>
|
||||
|
||||
namespace TranslationManager {
|
||||
|
||||
class CEditor : public QMdiSubWindow {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
QUndoStack* current_stack;
|
||||
QString current_file;
|
||||
int editor_type;
|
||||
public:
|
||||
CEditor(QMdiArea* parent) : QMdiSubWindow(parent) {}
|
||||
CEditor() : QMdiSubWindow() {}
|
||||
virtual void open(QString filename) =0;
|
||||
virtual void save() =0;
|
||||
virtual void saveAs(QString filename) =0;
|
||||
virtual void activateWindow() =0;
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
class CEditor : public QMdiSubWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CEditor(QMdiArea *parent) : QMdiSubWindow(parent) {}
|
||||
CEditor() : QMdiSubWindow() {}
|
||||
virtual void open(QString filename) =0;
|
||||
virtual void save() =0;
|
||||
virtual void saveAs(QString filename) =0;
|
||||
virtual void activateWindow() =0;
|
||||
|
||||
int eType()
|
||||
{
|
||||
return editor_type;
|
||||
}
|
||||
QString subWindowFilePath()
|
||||
{
|
||||
return current_file;
|
||||
}
|
||||
void setUndoStack(QUndoStack* stack)
|
||||
QString subWindowFilePath()
|
||||
{
|
||||
return current_file;
|
||||
}
|
||||
void setUndoStack(QUndoStack *stack)
|
||||
{
|
||||
current_stack = stack;
|
||||
}
|
||||
|
@ -58,14 +56,16 @@ public:
|
|||
QFileInfo *file = new QFileInfo(filename);
|
||||
current_file = file->canonicalFilePath();
|
||||
setWindowModified(false);
|
||||
setWindowTitle(file->fileName() + "[*]");
|
||||
setWindowTitle(file->fileName() + "[*]");
|
||||
setWindowFilePath(current_file);
|
||||
}
|
||||
|
||||
protected:
|
||||
QUndoStack *current_stack;
|
||||
QString current_file;
|
||||
int editor_type;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* TRANSLATION_MANAGER_EDITOR_H */
|
||||
|
||||
#endif /* TRANSLATION_MANAGER_EDITOR_H */
|
|
@ -1,5 +1,4 @@
|
|||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
|
@ -15,20 +14,19 @@
|
|||
// 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 MAIN_WINDOW_H
|
||||
#define MAIN_WINDOW_H
|
||||
|
||||
// Project includes
|
||||
#include "ui_translation_manager_main_window.h"
|
||||
#include "translation_manager_editor.h"
|
||||
#include "source_selection.h"
|
||||
#include "editor_worksheet.h"
|
||||
#include "editor_phrase.h"
|
||||
|
||||
// Project system includes
|
||||
#include "../core/icore_listener.h"
|
||||
|
||||
// Nel includes
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/diff_tool.h"
|
||||
#include "nel/ligo/ligo_config.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QUndoStack>
|
||||
|
@ -39,80 +37,82 @@
|
|||
#include <QtCore/QSignalMapper>
|
||||
#include <QtGui/QDialog>
|
||||
|
||||
// Plugin includes
|
||||
#include "translation_manager_editor.h"
|
||||
#include "source_selection.h"
|
||||
#include "ui_translation_manager_main_window.h"
|
||||
// STL includes
|
||||
#include <set>
|
||||
#include "editor_worksheet.h"
|
||||
#include "editor_phrase.h"
|
||||
|
||||
class QWidget;
|
||||
|
||||
// Nel includes
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/diff_tool.h"
|
||||
#include "nel/ligo/ligo_config.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
|
||||
class CMainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CMainWindow(QWidget *parent = 0);
|
||||
virtual ~CMainWindow() {}
|
||||
QUndoStack *m_undoStack;
|
||||
CMainWindow(QWidget *parent = 0);
|
||||
virtual ~CMainWindow() {}
|
||||
QUndoStack *m_undoStack;
|
||||
|
||||
public:
|
||||
Ui::CMainWindow _ui;
|
||||
private:
|
||||
// actions
|
||||
QAction *openAct;
|
||||
QAction *saveAct;
|
||||
QAction *saveAsAct;
|
||||
QMenu *windowMenu;
|
||||
QSignalMapper *windowMapper;
|
||||
// config
|
||||
QMap<string,bool> initialize_settings;
|
||||
QList<QString> filters;
|
||||
QList<QString> languages;
|
||||
QString level_design_path;
|
||||
QString primitives_path;
|
||||
QString translation_path;
|
||||
QString work_path;
|
||||
NLLIGO::CLigoConfig ligoConfig;
|
||||
private Q_SLOTS:
|
||||
void extractBotNames();
|
||||
void extractWords(QString typeq);
|
||||
void open();
|
||||
void save();
|
||||
void saveAs();
|
||||
void setActiveSubWindow(QWidget *window);
|
||||
void updateWindowsList();
|
||||
void mergeSingleFile();
|
||||
Ui::CMainWindow _ui;
|
||||
|
||||
private:
|
||||
void openWorkFile(QString file);
|
||||
void updateToolbar(QMdiSubWindow *window);
|
||||
bool verifySettings();
|
||||
void readSettings();
|
||||
void createMenus();
|
||||
void createToolbar();
|
||||
void initializeSettings(bool georges);
|
||||
list<string> convertQStringList(QStringList listq);
|
||||
CEditor* getEditorByWindowFilePath(const QString &fileName);
|
||||
// actions
|
||||
QAction *openAct;
|
||||
QAction *saveAct;
|
||||
QAction *saveAsAct;
|
||||
QMenu *windowMenu;
|
||||
QSignalMapper *windowMapper;
|
||||
// config
|
||||
QMap<string,bool> initialize_settings;
|
||||
QList<QString> filters;
|
||||
QList<QString> languages;
|
||||
QString level_design_path;
|
||||
QString primitives_path;
|
||||
QString translation_path;
|
||||
QString work_path;
|
||||
NLLIGO::CLigoConfig ligoConfig;
|
||||
|
||||
private Q_SLOTS:
|
||||
void extractBotNames();
|
||||
void extractWords(QString typeq);
|
||||
void open();
|
||||
void save();
|
||||
void saveAs();
|
||||
void setActiveSubWindow(QWidget *window);
|
||||
void updateWindowsList();
|
||||
void mergeSingleFile();
|
||||
|
||||
private:
|
||||
void openWorkFile(QString file);
|
||||
void updateToolbar(QMdiSubWindow *window);
|
||||
bool verifySettings();
|
||||
void readSettings();
|
||||
void createMenus();
|
||||
void createToolbar();
|
||||
void initializeSettings(bool georges);
|
||||
std::list<std::string> convertQStringList(QStringList listq);
|
||||
CEditor *getEditorByWindowFilePath(const QString &fileName);
|
||||
// Worksheet specific functions
|
||||
CEditorWorksheet* getEditorByWorksheetType(const QString &type);
|
||||
bool isWorksheetEditor(QString filename);
|
||||
CEditorWorksheet *getEditorByWorksheetType(const QString &type);
|
||||
bool isWorksheetEditor(QString filename);
|
||||
bool isPhraseEditor(QString filename);
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
class CCoreListener : public Core::ICoreListener
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CCoreListener(CMainWindow* mainWindow, QObject *parent = 0): ICoreListener(parent)
|
||||
CCoreListener(CMainWindow *mainWindow, QObject *parent = 0): ICoreListener(parent)
|
||||
{
|
||||
m_MainWindow = mainWindow;
|
||||
}
|
||||
|
@ -124,10 +124,6 @@ public:
|
|||
CMainWindow *m_MainWindow;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace TranslationManager
|
||||
|
||||
|
||||
|
||||
#endif // SIMPLE_VIEWER_H
|
||||
#endif
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
#include "translation_manager_plugin.h"
|
||||
#include "translation_manager_settings_page.h"
|
||||
#include "translation_manager_main_window.h"
|
||||
// Project system includes
|
||||
|
||||
// Core includes
|
||||
#include "../core/icore.h"
|
||||
#include "../core/core_constants.h"
|
||||
#include "../core/menu_manager.h"
|
||||
|
@ -59,17 +60,14 @@ bool TranslationManagerPlugin::initialize(ExtensionSystem::IPluginManager *plugi
|
|||
addAutoReleasedObject(new CTranslationManagerSettingsPage(this));
|
||||
addAutoReleasedObject(new CTranslationManagerContext(mainWindow, this));
|
||||
addAutoReleasedObject(new CCoreListener(mainWindow, this));
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void TranslationManagerPlugin::extensionsInitialized()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TranslationManagerPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
|
@ -86,23 +84,6 @@ void TranslationManagerPlugin::addAutoReleasedObject(QObject *obj)
|
|||
_autoReleaseObjects.prepend(obj);
|
||||
}
|
||||
|
||||
QObject* TranslationManagerPlugin::objectByName(const QString &name) const
|
||||
{
|
||||
Q_FOREACH (QObject *qobj, _plugMan->allObjects())
|
||||
if (qobj->objectName() == name)
|
||||
return qobj;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ExtensionSystem::IPluginSpec *TranslationManagerPlugin::pluginByName(const QString &name) const
|
||||
{
|
||||
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins())
|
||||
if (spec->name() == name)
|
||||
return spec;
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Q_EXPORT_PLUGIN(TranslationManager::TranslationManagerPlugin)
|
||||
Q_EXPORT_PLUGIN(TranslationManager::TranslationManagerPlugin)
|
|
@ -45,8 +45,8 @@ class IPluginSpec;
|
|||
namespace TranslationManager
|
||||
{
|
||||
|
||||
class CTranslationManagerContext;
|
||||
|
||||
class CTranslationManagerContext;
|
||||
|
||||
class TranslationManagerPlugin : public QObject, public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -58,12 +58,8 @@ public:
|
|||
void extensionsInitialized();
|
||||
|
||||
void setNelContext(NLMISC::INelContext *nelContext);
|
||||
|
||||
void addAutoReleasedObject(QObject *obj);
|
||||
|
||||
QObject *objectByName(const QString &name) const;
|
||||
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
|
||||
|
||||
protected:
|
||||
NLMISC::CLibraryContext *_LibContext;
|
||||
|
||||
|
@ -75,8 +71,9 @@ private:
|
|||
class CTranslationManagerContext: public Core::IContext
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CTranslationManagerContext(CMainWindow* mainWindow, QObject *parent = 0): IContext(parent)
|
||||
CTranslationManagerContext(CMainWindow *mainWindow, QObject *parent = 0): IContext(parent)
|
||||
{
|
||||
m_MainWindow = mainWindow;
|
||||
}
|
||||
|
@ -109,9 +106,8 @@ public:
|
|||
}
|
||||
|
||||
CMainWindow *m_MainWindow;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Plugin
|
||||
}
|
||||
|
||||
#endif // TRANSLATION_MANAGER_PLUGIN_H
|
||||
#endif // TRANSLATION_MANAGER_PLUGIN_H
|
|
@ -1,5 +1,4 @@
|
|||
// Translation Manager Plugin - OVQT Plugin <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 Emanuel Costea <cemycc@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
|
@ -17,17 +16,15 @@
|
|||
|
||||
#include "translation_manager_settings_page.h"
|
||||
|
||||
// Core includes
|
||||
#include "../core/icore.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QSettings>
|
||||
#include <QtGui/QWidget>
|
||||
#include <QtGui/QFileDialog>
|
||||
#include <QtGui/QListWidgetItem>
|
||||
|
||||
// NeL includes
|
||||
|
||||
// Project includes
|
||||
#include "../core/icore.h"
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
|
||||
|
@ -68,20 +65,20 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent)
|
|||
{
|
||||
_currentPage = new QWidget(parent);
|
||||
_ui.setupUi(_currentPage);
|
||||
readSettings();
|
||||
readSettings();
|
||||
connect(_ui.filter_add, SIGNAL(clicked()), this, SLOT(filterAdd()));
|
||||
connect(_ui.filter_del, SIGNAL(clicked()), this, SLOT(filterDel()));
|
||||
connect(_ui.lang_add, SIGNAL(clicked()), this, SLOT(languageAdd()));
|
||||
connect(_ui.lang_del, SIGNAL(clicked()), this, SLOT(languageDel()));
|
||||
connect(_ui.translation_add, SIGNAL(clicked()), this, SLOT(translationAdd()));
|
||||
connect(_ui.work_add, SIGNAL(clicked()), this, SLOT(workAdd()));
|
||||
|
||||
connect(_ui.translation_add, SIGNAL(clicked()), this, SLOT(translationAdd()));
|
||||
connect(_ui.work_add, SIGNAL(clicked()), this, SLOT(workAdd()));
|
||||
|
||||
return _currentPage;
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::filterAdd()
|
||||
{
|
||||
QString newValue = _ui.filter_edit->text();
|
||||
{
|
||||
QString newValue = _ui.filter_edit->text();
|
||||
if (!newValue.isEmpty())
|
||||
{
|
||||
QListWidgetItem *newItem = new QListWidgetItem;
|
||||
|
@ -95,113 +92,112 @@ void CTranslationManagerSettingsPage::filterDel()
|
|||
{
|
||||
QListWidgetItem *removeItem = _ui.filter_list->takeItem(_ui.filter_list->currentRow());
|
||||
if (!removeItem)
|
||||
delete removeItem;
|
||||
delete removeItem;
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::languageAdd()
|
||||
{
|
||||
QString newValue = _ui.lang_edit->text();
|
||||
QString newValue = _ui.lang_edit->text();
|
||||
if (!newValue.isEmpty())
|
||||
{
|
||||
QListWidgetItem *newItem = new QListWidgetItem;
|
||||
newItem->setText(newValue);
|
||||
newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
_ui.lang_list->addItem(newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::languageDel()
|
||||
{
|
||||
QListWidgetItem *removeItem = _ui.lang_list->takeItem(_ui.lang_list->currentRow());
|
||||
if (!removeItem)
|
||||
delete removeItem;
|
||||
delete removeItem;
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::translationAdd()
|
||||
{
|
||||
QString newPath = QFileDialog::getExistingDirectory(_currentPage, "");
|
||||
if (!newPath.isEmpty())
|
||||
QString newPath = QFileDialog::getExistingDirectory(_currentPage, "");
|
||||
if (!newPath.isEmpty())
|
||||
{
|
||||
_ui.translation_edit->setText(newPath);
|
||||
}
|
||||
_ui.translation_edit->setText(newPath);
|
||||
}
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::workAdd()
|
||||
{
|
||||
QString newPath = QFileDialog::getExistingDirectory(_currentPage, "");
|
||||
if (!newPath.isEmpty())
|
||||
QString newPath = QFileDialog::getExistingDirectory(_currentPage, "");
|
||||
if (!newPath.isEmpty())
|
||||
{
|
||||
_ui.work_edit->setText(newPath);
|
||||
}
|
||||
_ui.work_edit->setText(newPath);
|
||||
}
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::apply()
|
||||
{
|
||||
writeSettings();
|
||||
writeSettings();
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::readSettings()
|
||||
{
|
||||
QStringList filters, languages;
|
||||
QString ligo, translation, work;
|
||||
|
||||
QString ligo, translation, work;
|
||||
|
||||
QSettings *settings = Core::ICore::instance()->settings();
|
||||
settings->beginGroup("translationmanager");
|
||||
|
||||
filters = settings->value("filters").toStringList(); /* filters */
|
||||
languages = settings->value("trlanguages").toStringList(); /* languages */
|
||||
ligo = settings->value("ligo").toString();
|
||||
translation = settings->value("translation").toString();
|
||||
work = settings->value("work").toString();
|
||||
|
||||
|
||||
filters = settings->value("filters").toStringList(); /* filters */
|
||||
languages = settings->value("trlanguages").toStringList(); /* languages */
|
||||
ligo = settings->value("ligo").toString();
|
||||
translation = settings->value("translation").toString();
|
||||
work = settings->value("work").toString();
|
||||
|
||||
settings->endGroup();
|
||||
// filter
|
||||
// filter
|
||||
Q_FOREACH(QString filter, filters)
|
||||
{
|
||||
QListWidgetItem *newItem = new QListWidgetItem;
|
||||
newItem->setText(filter);
|
||||
newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
_ui.filter_list->addItem(newItem);
|
||||
}
|
||||
// languages
|
||||
}
|
||||
// languages
|
||||
Q_FOREACH(QString lang, languages)
|
||||
{
|
||||
QListWidgetItem *newItem = new QListWidgetItem;
|
||||
newItem->setText(lang);
|
||||
newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
_ui.lang_list->addItem(newItem);
|
||||
}
|
||||
// translation
|
||||
_ui.translation_edit->setText(translation);
|
||||
// work
|
||||
_ui.work_edit->setText(work);
|
||||
|
||||
}
|
||||
// translation
|
||||
_ui.translation_edit->setText(translation);
|
||||
// work
|
||||
_ui.work_edit->setText(work);
|
||||
|
||||
}
|
||||
|
||||
void CTranslationManagerSettingsPage::writeSettings()
|
||||
{
|
||||
QStringList filters, languages;
|
||||
QString ligo, translation, work;
|
||||
// filters
|
||||
QString ligo, translation, work;
|
||||
// filters
|
||||
for (int i = 0; i < _ui.filter_list->count(); ++i)
|
||||
filters << _ui.filter_list->item(i)->text();
|
||||
// languages
|
||||
// languages
|
||||
for (int i = 0; i < _ui.lang_list->count(); ++i)
|
||||
languages << _ui.lang_list->item(i)->text();
|
||||
// translations path
|
||||
translation = _ui.translation_edit->text();
|
||||
// work path
|
||||
work = _ui.work_edit->text();
|
||||
|
||||
languages << _ui.lang_list->item(i)->text();
|
||||
// translations path
|
||||
translation = _ui.translation_edit->text();
|
||||
// work path
|
||||
work = _ui.work_edit->text();
|
||||
|
||||
QSettings *settings = Core::ICore::instance()->settings();
|
||||
settings->beginGroup("translationmanager");
|
||||
settings->setValue("filters", filters);
|
||||
settings->setValue("trlanguages", languages);
|
||||
settings->setValue("translation", translation);
|
||||
settings->setValue("work", work);
|
||||
settings->setValue("filters", filters);
|
||||
settings->setValue("trlanguages", languages);
|
||||
settings->setValue("translation", translation);
|
||||
settings->setValue("work", work);
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
settings->sync();
|
||||
}
|
||||
|
||||
|
||||
} /* namespace Plugin */
|
||||
}
|
|
@ -24,13 +24,9 @@
|
|||
|
||||
#include "ui_translation_manager_settings_page.h"
|
||||
|
||||
class QWidget;
|
||||
|
||||
namespace TranslationManager
|
||||
{
|
||||
/**
|
||||
@class CTranslationManagerSettingsPage
|
||||
*/
|
||||
|
||||
class CTranslationManagerSettingsPage : public Core::IOptionsPage
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -44,23 +40,23 @@ public:
|
|||
virtual QString trCategory() const;
|
||||
virtual QIcon categoryIcon() const;
|
||||
virtual QWidget *createPage(QWidget *parent);
|
||||
|
||||
|
||||
virtual void apply();
|
||||
virtual void finish() {}
|
||||
private Q_SLOTS:
|
||||
void filterAdd();
|
||||
void filterDel();
|
||||
void languageAdd();
|
||||
void languageDel();
|
||||
void translationAdd();
|
||||
void workAdd();
|
||||
void filterAdd();
|
||||
void filterDel();
|
||||
void languageAdd();
|
||||
void languageDel();
|
||||
void translationAdd();
|
||||
void workAdd();
|
||||
private:
|
||||
QWidget *_currentPage;
|
||||
Ui::CTranslationManagerSettingsPage _ui;
|
||||
void writeSettings();
|
||||
void readSettings();
|
||||
void writeSettings();
|
||||
void readSettings();
|
||||
};
|
||||
|
||||
} // namespace Plugin
|
||||
}
|
||||
|
||||
#endif // TRANSLATION_MANAGER_SETTINGS_H
|
||||
#endif // TRANSLATION_MANAGER_SETTINGS_H
|
|
@ -6,178 +6,152 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>533</width>
|
||||
<height>478</height>
|
||||
<width>589</width>
|
||||
<height>490</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>10</y>
|
||||
<width>531</width>
|
||||
<height>421</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Translation Manager Plugin</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>30</y>
|
||||
<width>521</width>
|
||||
<height>232</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Filters</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="filter_edit"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="filter_add">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_add_item.png</normaloff>:/core/icons/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QToolButton" name="filter_del">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_delete_item.png</normaloff>:/core/icons/ic_nel_delete_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Languages</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLineEdit" name="lang_edit"/>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="QToolButton" name="lang_add">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_add_item.png</normaloff>:/core/icons/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<widget class="QToolButton" name="lang_del">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_delete_item.png</normaloff>:/core/icons/ic_nel_delete_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="QListWidget" name="filter_list"/>
|
||||
</item>
|
||||
<item row="1" column="4" colspan="4">
|
||||
<widget class="QListWidget" name="lang_list"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>340</y>
|
||||
<width>521</width>
|
||||
<height>60</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Translation directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLineEdit" name="translation_edit"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QToolButton" name="translation_add">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>270</y>
|
||||
<width>521</width>
|
||||
<height>60</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Work directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLineEdit" name="work_edit"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QToolButton" name="work_add">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Translation Manager Plugin</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Filters</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="filter_edit"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="filter_add">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_add_item.png</normaloff>:/core/icons/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QToolButton" name="filter_del">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_delete_item.png</normaloff>:/core/icons/ic_nel_delete_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Languages</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLineEdit" name="lang_edit"/>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="QToolButton" name="lang_add">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_add_item.png</normaloff>:/core/icons/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<widget class="QToolButton" name="lang_del">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core/core.qrc">
|
||||
<normaloff>:/core/icons/ic_nel_delete_item.png</normaloff>:/core/icons/ic_nel_delete_item.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="QListWidget" name="filter_list"/>
|
||||
</item>
|
||||
<item row="1" column="4" colspan="4">
|
||||
<widget class="QListWidget" name="lang_list"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Work directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLineEdit" name="work_edit"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QToolButton" name="work_add">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Translation directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLineEdit" name="translation_edit"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QToolButton" name="translation_add">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../core/core.qrc"/>
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 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 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 "zone_painter_model.h"
|
||||
|
||||
// STL includes
|
||||
|
||||
// Qt includes
|
||||
|
||||
// NeL includes
|
||||
|
||||
namespace Plugin
|
||||
{
|
||||
|
||||
CZonePainterModel::CZonePainterModel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CZonePainterModel::~CZonePainterModel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
} /* namespace Plugin */
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
// Copyright (C) 2011 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 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 ZONE_PAINTER_MODEL_H
|
||||
#define ZONE_PAINTER_MODEL_H
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include <nel/misc/rgba.h>
|
||||
#include <nel/misc/event_emitter.h>
|
||||
|
||||
// Qt includes
|
||||
|
||||
namespace Plugin
|
||||
{
|
||||
|
||||
class CZonePainterModel
|
||||
{
|
||||
public:
|
||||
CZonePainterModel();
|
||||
virtual ~CZonePainterModel();
|
||||
|
||||
}; /* class CZonePainterModel */
|
||||
|
||||
} /* namespace Plugin */
|
||||
|
||||
|
||||
#endif // ZONE_PAINTER_MODEL_H
|
|
@ -16,6 +16,7 @@
|
|||
#include <QtGui/QMenu>
|
||||
#include <QtGui/QAction>
|
||||
#include <QtGui/QMenuBar>
|
||||
#include <QtGui/QFileDialog>
|
||||
|
||||
namespace Plugin
|
||||
{
|
||||
|
@ -39,6 +40,7 @@ bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManage
|
|||
addAutoReleasedObject(new CZonePainterSettingsPage(this));
|
||||
addAutoReleasedObject(new CZonePainterContext(this));
|
||||
//addAutoReleasedObject(new CCoreListener(this));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -46,8 +48,26 @@ void ZonePainterPlugin::extensionsInitialized()
|
|||
{
|
||||
Core::ICore *core = Core::ICore::instance();
|
||||
Core::MenuManager *menuManager = core->menuManager();
|
||||
QAction *loadZoneAction = new QAction("Load Zone", this);
|
||||
QAction *saveZoneAction = new QAction("Save Zone", this);
|
||||
|
||||
QMenu *toolsMenu = menuManager->menu(Core::Constants::M_TOOLS);
|
||||
QMenu *zoneMenu = toolsMenu->addMenu("Zone Painter");
|
||||
zoneMenu->addAction(loadZoneAction);
|
||||
connect(loadZoneAction, SIGNAL(triggered()), this, SLOT(clickLoadZoneAction()));
|
||||
zoneMenu->addAction(saveZoneAction);
|
||||
}
|
||||
|
||||
/****** SLOTS ******/
|
||||
void ZonePainterPlugin::clickLoadZoneAction() {
|
||||
QString zoneFile = QFileDialog::getOpenFileName(NULL, tr("Open Zone File"), ".", tr("Zone Files (*.zone);;"));
|
||||
}
|
||||
|
||||
void ZonePainterPlugin::clickSaveZoneAction() {
|
||||
|
||||
}
|
||||
/****** END SLOTS ******/
|
||||
|
||||
void ZonePainterPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
|
|
|
@ -56,12 +56,17 @@ public:
|
|||
|
||||
void addAutoReleasedObject(QObject *obj);
|
||||
|
||||
public Q_SLOTS:
|
||||
void clickLoadZoneAction();
|
||||
void clickSaveZoneAction();
|
||||
protected:
|
||||
NLMISC::CLibraryContext *m_LibContext;
|
||||
|
||||
private:
|
||||
ExtensionSystem::IPluginManager *m_plugMan;
|
||||
QList<QObject *> m_autoReleaseObjects;
|
||||
|
||||
NL3D::CLandscapeModel *m_Landscape;
|
||||
};
|
||||
|
||||
class CZonePainterContext: public Core::IContext
|
||||
|
|
|
@ -57,7 +57,7 @@ printLog(log, "")
|
|||
Psftp = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, UploadPsftpTool)
|
||||
printLog(log, "PSFTP " + Psftp)
|
||||
|
||||
def downloadVersionTag(server, user, dir):
|
||||
def downloadVersionTag(server, user, sshkey, dir):
|
||||
if os.path.isfile("upload.tag"):
|
||||
os.remove("upload.tag")
|
||||
if os.path.isfile("upload.batch"):
|
||||
|
@ -67,7 +67,7 @@ def downloadVersionTag(server, user, dir):
|
|||
ub.write("get upload.tag upload.tag\n")
|
||||
ub.write("quit\n")
|
||||
ub.close()
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload.batch")
|
||||
if os.path.isfile("upload.tag"):
|
||||
ft = open("upload.tag")
|
||||
|
@ -122,8 +122,8 @@ def listDirectoryUpload(ft, ub, udb, dir):
|
|||
printLog(log, "listDirectoryUpload: file not dir or file?!" + fileFull)
|
||||
return nft
|
||||
|
||||
def uploadSftp(server, user, dir_to, dir_from, addcmd):
|
||||
ft = downloadVersionTag(server, user, dir_to)
|
||||
def uploadSftp(server, user, sshkey, dir_to, dir_from, addcmd):
|
||||
ft = downloadVersionTag(server, user, sshkey, dir_to)
|
||||
if isDirectoryNeeded(ft, dir_from):
|
||||
if os.path.isfile("upload_dir.batch"):
|
||||
os.remove("upload_dir.batch")
|
||||
|
@ -146,8 +146,8 @@ def uploadSftp(server, user, dir_to, dir_from, addcmd):
|
|||
ub.close()
|
||||
udb.write("quit\n")
|
||||
udb.close()
|
||||
subprocess.call([ Psftp, "-be", "-b", "upload_dir.batch", user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-be", "-b", "upload_dir.batch", "-i", sshkey, user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload_dir.batch")
|
||||
os.remove("upload.batch")
|
||||
os.remove("upload.tag")
|
||||
|
@ -156,19 +156,23 @@ def uploadSftp(server, user, dir_to, dir_from, addcmd):
|
|||
|
||||
printLog(log, ">>> Upload patch <<<")
|
||||
for target in UploadPatch:
|
||||
uploadSftp(target[0], target[1], target[3], ClientPatchDirectory + "/patch", [ ])
|
||||
uploadSftp(target[0], target[1], target[2], target[3], ClientPatchDirectory + "/patch", [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_shard <<<")
|
||||
for target in UploadShard:
|
||||
uploadSftp(target[0], target[1], target[3], DataShardDirectory, [ "rm *.packed_sheets", "rm primitive_cache/*.binprim" ])
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataShardDirectory, [ "rm *.packed_sheets", "rm primitive_cache/*.binprim" ])
|
||||
|
||||
printLog(log, ">>> Upload data_common <<<")
|
||||
for target in UploadCommon:
|
||||
uploadSftp(target[0], target[1], target[3], DataCommonDirectory, [ ])
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataCommonDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign <<<")
|
||||
printLog(log, ">>> Upload data_leveldesign/leveldesign <<<")
|
||||
for target in UploadLeveldesign:
|
||||
uploadSftp(target[0], target[1], target[3], LeveldesignDirectory, [ ])
|
||||
uploadSftp(target[0], target[1], target[2], target[3], LeveldesignDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign/primitives <<<")
|
||||
for target in UploadPrimitives:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], PrimitivesDirectory, [ ])
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("8_upload.log"):
|
||||
|
|
|
@ -1 +1,6 @@
|
|||
ADD_SUBDIRECTORY(build_samplebank)
|
||||
ADD_SUBDIRECTORY(build_sound)
|
||||
ADD_SUBDIRECTORY(build_soundbank)
|
||||
|
||||
# Deprecated tool - no longer useful, valid or buildable.
|
||||
#ADD_SUBDIRECTORY(source_sounds_builder)
|
||||
|
|
13
code/nel/tools/sound/build_samplebank/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_EXECUTABLE(build_samplebank ${SRC})
|
||||
|
||||
ADD_DEFINITIONS( ${LIBXML2_DEFINITIONS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(build_samplebank nelmisc nelsound)
|
||||
NL_DEFAULT_PROPS(build_samplebank "NeL, Tools, Sound: build_samplebank")
|
||||
NL_ADD_RUNTIME_FLAGS(build_samplebank)
|
||||
|
||||
INSTALL(TARGETS build_samplebank RUNTIME DESTINATION bin COMPONENT toolssound)
|
13
code/nel/tools/sound/build_sound/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_EXECUTABLE(build_sound ${SRC})
|
||||
|
||||
ADD_DEFINITIONS( ${LIBXML2_DEFINITIONS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(build_sound nelmisc nelsound)
|
||||
NL_DEFAULT_PROPS(build_sound "NeL, Tools, Sound: build_sound")
|
||||
NL_ADD_RUNTIME_FLAGS(build_sound)
|
||||
|
||||
INSTALL(TARGETS build_sound RUNTIME DESTINATION bin COMPONENT toolssound)
|
13
code/nel/tools/sound/build_soundbank/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_EXECUTABLE(build_soundbank ${SRC})
|
||||
|
||||
ADD_DEFINITIONS( ${LIBXML2_DEFINITIONS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(build_soundbank nelmisc nelsound)
|
||||
NL_DEFAULT_PROPS(build_soundbank "NeL, Tools, Sound: build_soundbank")
|
||||
NL_ADD_RUNTIME_FLAGS(build_soundbank)
|
||||
|
||||
INSTALL(TARGETS build_soundbank RUNTIME DESTINATION bin COMPONENT toolssound)
|
|
@ -80,6 +80,9 @@ XMLOutGameInterfaceFiles = {
|
|||
"out_v2_keys.xml",
|
||||
};
|
||||
|
||||
TexturesInterface = "texture_interfaces_v3";
|
||||
TexturesInterfaceDXTC = "texture_interfaces_dxtc";
|
||||
|
||||
|
||||
// The ligo primitive class file
|
||||
LigoPrimitiveClass = "world_editor_classes.xml";
|
||||
|
@ -351,8 +354,8 @@ SystemInfoColors =
|
|||
|
||||
// NEW System Info Categories
|
||||
"SYS", "255 255 255 255 normal", // Default system messages
|
||||
"BC", "255 255 255 255 center", // Broadcast messages
|
||||
"TAGBC", "255 255 255 255 center", // Taged broadcast messages : color should remain white as some word are tagged
|
||||
"BC", "255 255 255 255 centeraround", // Broadcast messages
|
||||
"TAGBC", "255 255 255 255 centeraround", // Taged broadcast messages : color should remain white as some word are tagged
|
||||
"XP", "255 255 64 255 over", // XP Gain
|
||||
"SP", "255 255 64 255 over", // SP Gain
|
||||
"TTL", "255 255 64 255 over", // Title
|
||||
|
@ -440,23 +443,24 @@ R2EDReloadFiles = {
|
|||
XMLInterfaceFiles = {
|
||||
"config.xml",
|
||||
"widgets.xml",
|
||||
"webig_widgets.xml",
|
||||
"player.xml",
|
||||
"inventory.xml",
|
||||
"interaction.xml",
|
||||
"phrase.xml",
|
||||
"phrase.xml",
|
||||
"harvest.xml",
|
||||
"macros.xml",
|
||||
"info_player.xml",
|
||||
"outpost.xml",
|
||||
"guild.xml",
|
||||
"taskbar.xml",
|
||||
"game_config.xml",
|
||||
"game_config.xml",
|
||||
"game_context_menu.xml",
|
||||
"player_trade.xml",
|
||||
"bot_chat_v4.xml",
|
||||
"compass.xml",
|
||||
"map.xml",
|
||||
"hierarchy.xml",
|
||||
"hierarchy.xml",
|
||||
"reset.xml",
|
||||
"actions.xml",
|
||||
"help.xml",
|
||||
|
@ -556,6 +560,15 @@ HelpPages =
|
|||
"de=http://forums.ryzom.com/forum/showthread.php?t=29131"
|
||||
};
|
||||
|
||||
WebIgMainDomain = "atys.ryzom.com";
|
||||
|
||||
WebIgTrustedDomains =
|
||||
{
|
||||
"atys.ryzom.com"
|
||||
};
|
||||
|
||||
PatchletUrl = "http://atys.ryzom.com/start/app_patchlet.php?patch=preload";
|
||||
|
||||
SelectedSlot = 0;
|
||||
|
||||
BuildName = "RELEASE_HEAD";
|
||||
|
|
|
@ -80,6 +80,9 @@ XMLOutGameInterfaceFiles = {
|
|||
"out_v2_keys.xml",
|
||||
};
|
||||
|
||||
TexturesInterface = "texture_interfaces_v3";
|
||||
TexturesInterfaceDXTC = "texture_interfaces_dxtc";
|
||||
|
||||
|
||||
// The ligo primitive class file
|
||||
LigoPrimitiveClass = "world_editor_classes.xml";
|
||||
|
@ -352,8 +355,8 @@ SystemInfoColors =
|
|||
|
||||
// NEW System Info Categories
|
||||
"SYS", "255 255 255 255 normal", // Default system messages
|
||||
"BC", "255 255 255 255 center", // Broadcast messages
|
||||
"TAGBC", "255 255 255 255 center", // Taged broadcast messages : color should remain white as some word are tagged
|
||||
"BC", "255 255 255 255 centeraround", // Broadcast messages
|
||||
"TAGBC", "255 255 255 255 centeraround", // Taged broadcast messages : color should remain white as some word are tagged
|
||||
"XP", "255 255 64 255 over", // XP Gain
|
||||
"SP", "255 255 64 255 over", // SP Gain
|
||||
"TTL", "255 255 64 255 over", // Title
|
||||
|
@ -441,23 +444,24 @@ R2EDReloadFiles = {
|
|||
XMLInterfaceFiles = {
|
||||
"config.xml",
|
||||
"widgets.xml",
|
||||
"webig_widgets.xml",
|
||||
"player.xml",
|
||||
"inventory.xml",
|
||||
"interaction.xml",
|
||||
"phrase.xml",
|
||||
"phrase.xml",
|
||||
"harvest.xml",
|
||||
"macros.xml",
|
||||
"info_player.xml",
|
||||
"outpost.xml",
|
||||
"guild.xml",
|
||||
"taskbar.xml",
|
||||
"game_config.xml",
|
||||
"game_config.xml",
|
||||
"game_context_menu.xml",
|
||||
"player_trade.xml",
|
||||
"bot_chat_v4.xml",
|
||||
"compass.xml",
|
||||
"map.xml",
|
||||
"hierarchy.xml",
|
||||
"hierarchy.xml",
|
||||
"reset.xml",
|
||||
"actions.xml",
|
||||
"help.xml",
|
||||
|
@ -557,6 +561,15 @@ HelpPages =
|
|||
"de=http://forums.ryzom.com/forum/showthread.php?t=29131"
|
||||
};
|
||||
|
||||
WebIgMainDomain = "atys.ryzom.com";
|
||||
|
||||
WebIgTrustedDomains =
|
||||
{
|
||||
"atys.ryzom.com"
|
||||
};
|
||||
|
||||
PatchletUrl = "http://atys.ryzom.com/start/app_patchlet.php?patch=preload";
|
||||
|
||||
SelectedSlot = 0;
|
||||
|
||||
BuildName = "RELEASE_HEAD";
|
||||
|
|
Before Width: | Height: | Size: 4 MiB After Width: | Height: | Size: 4 MiB |
|
@ -78,9 +78,18 @@
|
|||
<command name="guildinvite" action="command" params="a guildInvite $" />
|
||||
<command name="invite" action="command" params="a teamInvite $" />
|
||||
|
||||
<command name="channel" action="command" params="a connectUserChannel +" />
|
||||
<command name="channel" action="command" params='a connectUserChannel "$"' />
|
||||
<command name="channel" action="command" params='a connectUserChannel "$" +' />
|
||||
|
||||
<command name="leaguekick" action="command" params="a leagueKick $" />
|
||||
<command name="leaguequit" action="command" params="a setLeague" />
|
||||
<command name="leagueinvite" action="command" params="a leagueInvite $" />
|
||||
<command name="league" action="command" params='a setLeague "$"' />
|
||||
|
||||
<command name="resetname" action="command" params="a resetName"/>
|
||||
|
||||
<!-- WebIG -->
|
||||
<command name="go" action="browse" params="name=ui:interface:webig:content:html|url=home"/>
|
||||
<command name="webdev" action="browse" params="name=ui:interface:webig:content:html|url=http://localhost/index.html"/>
|
||||
|
||||
</interface_config>
|
||||
|
|
|
@ -258,6 +258,9 @@
|
|||
<variable entry="UI:SAVE:INSCENE:USER:TITLE"
|
||||
type="bool"
|
||||
value="false" />
|
||||
<variable entry="UI:SAVE:INSCENE:USER:RPTAGS"
|
||||
type="bool"
|
||||
value="false" />
|
||||
<variable entry="UI:SAVE:INSCENE:USER:GUILD_NAME"
|
||||
type="bool"
|
||||
value="false" />
|
||||
|
@ -291,6 +294,9 @@
|
|||
<variable entry="UI:SAVE:INSCENE:FRIEND:TITLE"
|
||||
type="bool"
|
||||
value="true" />
|
||||
<variable entry="UI:SAVE:INSCENE:FRIEND:RPTAGS"
|
||||
type="bool"
|
||||
value="true" />
|
||||
<variable entry="UI:SAVE:INSCENE:FRIEND:GUILD_NAME"
|
||||
type="bool"
|
||||
value="true" />
|
||||
|
@ -327,6 +333,9 @@
|
|||
<variable entry="UI:SAVE:INSCENE:ENEMY:TITLE"
|
||||
type="bool"
|
||||
value="true" />
|
||||
<variable entry="UI:SAVE:INSCENE:ENEMY:RPTAGS"
|
||||
type="bool"
|
||||
value="true" />
|
||||
<variable entry="UI:SAVE:INSCENE:ENEMY:GUILD_NAME"
|
||||
type="bool"
|
||||
value="true" />
|
||||
|
@ -2797,6 +2806,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:GUILD_LIST:SORT_ORDER"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
<variable entry="UI:SAVE:CHATLOG_STATE"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
<!-- Auto Convert ACT_TSTART end TEND from server to smoothServerTick -->
|
||||
<link expr="@SERVER:USER:ACT_TSTART"
|
||||
action="set"
|
||||
|
@ -2963,7 +2975,28 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:CHAT:COLORS:TELL"
|
||||
type="rgba"
|
||||
value="170 170 170 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN"
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:0"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:1"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:2"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:3"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:4"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:5"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:6"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:COLORS:DYN:7"
|
||||
type="rgba"
|
||||
value="162 255 173 255" />
|
||||
<variable entry="UI:SAVE:CHAT:ENTER_DONT_QUIT_CB"
|
||||
|
@ -2975,6 +3008,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:CHAT:SHOW_DYN_CHANNEL_NAME_IN_CHAT_CB"
|
||||
type="bool"
|
||||
value="false" />
|
||||
<variable entry="UI:SAVE:CHAT:SHOW_ONLINE_OFFLINE_NOTIFICATIONS_CB"
|
||||
type="bool"
|
||||
value="true" />
|
||||
<!-- ***************************** -->
|
||||
<!-- * SYSTEM INFO COLORS * -->
|
||||
<!-- ***************************** -->
|
||||
|
@ -3045,6 +3081,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_BAG:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_BAG:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA0:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
|
@ -3066,6 +3105,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_PA0:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA0:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA1:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
|
@ -3087,6 +3129,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_PA1:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA1:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA2:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
|
@ -3108,6 +3153,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_PA2:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA2:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA3:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="0" />
|
||||
|
@ -3129,6 +3177,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_PA3:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_PA3:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_GUILD:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
|
@ -3151,6 +3202,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_GUILD:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_GUILD:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_ROOM:SORT_TYPE"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
|
@ -3173,6 +3227,9 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:SAVE:INV_ROOM:FILTER_MISSMP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<variable entry="UI:SAVE:INV_ROOM:FILTER_TP"
|
||||
type="sint32"
|
||||
value="1" />
|
||||
<!-- List Menu 1 -->
|
||||
<variable entry="UI:VARIABLES:ISACTIVE:SETS"
|
||||
type="sint32"
|
||||
|
@ -3809,4 +3866,10 @@ This MUST follow the Enum MISSION_DESC::TIconId
|
|||
<variable entry="UI:TEMP:R2_DRAW_ARRAY"
|
||||
type="bool"
|
||||
value="0" />
|
||||
<variable entry="UI:TEMP:DEFAULT_WEB_RETRY_TIMEOUT"
|
||||
type="sint32"
|
||||
value="2" />
|
||||
<variable entry="UI:SAVE:WEBIG_RETRY_DELAY"
|
||||
type="sint32"
|
||||
value="2" />
|
||||
</interface_config>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<variable entry="UI:VARIABLES:ENCY:REWARDBRICK:SHEET" type="sint32" value="0" />
|
||||
<variable entry="UI:VARIABLES:ENCY:ALBUMBRICK:SHEET" type="sint32" value="0" />
|
||||
|
||||
<style style="ency_title" type="text" color="255 255 255 255" fontsize="14" shadow="true" case_mode="%case_first_string_letter_up"/>
|
||||
<style style="ency_title" type="text" color="255 255 255 255" fontsize="14" shadow="true" case_mode="%case_normal"/>
|
||||
<style style="ency_title2" type="text" color="255 255 255 192" fontsize="12" shadow="true" />
|
||||
|
||||
|
||||
|
|
|
@ -1615,19 +1615,82 @@
|
|||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn"
|
||||
text="uiDynColor"
|
||||
title="uiCCDDyn"
|
||||
tooltip="uittChooseDynColor"
|
||||
id="cc_dyn0"
|
||||
text="uiDynColor0"
|
||||
title="uiCCDDyn0"
|
||||
tooltip="uittChooseDynColor0"
|
||||
posref="BL TL"
|
||||
posparent="cc_shout"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn1"
|
||||
text="uiDynColor1"
|
||||
title="uiCCDDyn1"
|
||||
tooltip="uittChooseDynColor1"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn0"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn2"
|
||||
text="uiDynColor2"
|
||||
title="uiCCDDyn2"
|
||||
tooltip="uittChooseDynColor2"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn1"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn3"
|
||||
text="uiDynColor3"
|
||||
title="uiCCDDyn3"
|
||||
tooltip="uittChooseDynColor3"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn2"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn4"
|
||||
text="uiDynColor4"
|
||||
title="uiCCDDyn4"
|
||||
tooltip="uittChooseDynColor4"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn3"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn5"
|
||||
text="uiDynColor5"
|
||||
title="uiCCDDyn5"
|
||||
tooltip="uittChooseDynColor5"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn4"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn6"
|
||||
text="uiDynColor6"
|
||||
title="uiCCDDyn6"
|
||||
tooltip="uittChooseDynColor6"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn5"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_color"
|
||||
id="cc_dyn7"
|
||||
text="uiDynColor7"
|
||||
title="uiCCDDyn7"
|
||||
tooltip="uittChooseDynColor7"
|
||||
posref="BL TL"
|
||||
posparent="cc_dyn6"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="enter_dontquit_cb"
|
||||
text="uiEnterDontQuitCB"
|
||||
tooltip="uittChatEnter"
|
||||
posparent="cc_dyn"
|
||||
posparent="cc_dyn7"
|
||||
posref="BL TL"
|
||||
x="0"
|
||||
y="-8" />
|
||||
|
@ -1647,11 +1710,19 @@
|
|||
posref="BL TL"
|
||||
x="0"
|
||||
y="-8" />
|
||||
<instance template="tgcw_scrollbarint"
|
||||
<instance template="tgcw_checkbox"
|
||||
id="show_online_offline_notifications_cb"
|
||||
text="uiShowOnlineOfflineNotifications"
|
||||
tooltip="uittShowOnlineOfflineNotifications"
|
||||
posparent="show_dyn_channel_name_in_chat_cb"
|
||||
posref="BL TL"
|
||||
x="0"
|
||||
y="-8" />
|
||||
<instance template="tgcw_scrollbarint"
|
||||
id="font_size"
|
||||
text="uiFontSize"
|
||||
posref="BL TL"
|
||||
posparent="show_dyn_channel_name_in_chat_cb"
|
||||
posparent="show_online_offline_notifications_cb"
|
||||
x="0"
|
||||
y="-8" />
|
||||
<link expr="@UI:SAVE:CHAT:ENTER_DONT_QUIT_CB"
|
||||
|
@ -1660,7 +1731,9 @@
|
|||
target="show_times_in_chat_cb:c:pushed" />
|
||||
<link expr="@UI:SAVE:CHAT:SHOW_DYN_CHANNEL_NAME_IN_CHAT_CB"
|
||||
target="show_dyn_channel_name_in_chat_cb:c:pushed" />
|
||||
</group>
|
||||
<link expr="@UI:SAVE:CHAT:SHOW_ONLINE_OFFLINE_NOTIFICATIONS_CB"
|
||||
target="show_online_offline_notifications_cb:c:pushed" />
|
||||
</group>
|
||||
<ctrl style="skin_scroll"
|
||||
id="sb_chat_colors"
|
||||
align="T"
|
||||
|
@ -1886,12 +1959,20 @@
|
|||
posparent="is_user_name"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_user_rptags"
|
||||
text="uiRpTags"
|
||||
tooltip="uittRpTags"
|
||||
posref="BL TL"
|
||||
posparent="is_user_title"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_user_guild_name"
|
||||
text="uigcGuildName"
|
||||
tooltip="uittGuildName"
|
||||
posref="BL TL"
|
||||
posparent="is_user_title"
|
||||
posparent="is_user_rptags"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
|
@ -1995,12 +2076,20 @@
|
|||
posparent="is_friend_name"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_friend_rptags"
|
||||
text="uiRpTags"
|
||||
tooltip="uittRpTags"
|
||||
posref="BL TL"
|
||||
posparent="is_friend_title"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_friend_guild_name"
|
||||
text="uigcGuildName"
|
||||
tooltip="uittGuildName"
|
||||
posref="BL TL"
|
||||
posparent="is_friend_title"
|
||||
posparent="is_friend_rptags"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
|
@ -2112,12 +2201,20 @@
|
|||
posparent="is_enemy_name"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_enemy_rptags"
|
||||
text="uiRpTags"
|
||||
tooltip="uittRpTags"
|
||||
posref="BL TL"
|
||||
posparent="is_enemy_title"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
id="is_enemy_guild_name"
|
||||
text="uigcGuildName"
|
||||
tooltip="uittGuildName"
|
||||
posref="BL TL"
|
||||
posparent="is_enemy_title"
|
||||
posparent="is_enemy_rptags"
|
||||
x="0"
|
||||
y="-4" />
|
||||
<instance template="tgcw_checkbox"
|
||||
|
@ -3095,10 +3192,45 @@
|
|||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:SHOUT"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn:c"
|
||||
<param ui="chat_colors:cc_dyn0:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:0"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn1:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:1"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn2:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:2"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn3:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:3"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn4:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:4"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn5:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:5"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn6:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:6"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:cc_dyn7:c"
|
||||
type="db"
|
||||
widget="colbut"
|
||||
link="UI:SAVE:CHAT:COLORS:DYN:7"
|
||||
realtime="true" />
|
||||
<!--
|
||||
<param ui="chat_colors:cc_shout:c" type="db" widget="colbut" link="UI:SAVE:CHAT:COLORS:SHOUT" realtime="true" />
|
||||
|
@ -3120,6 +3252,11 @@
|
|||
widget="boolbut"
|
||||
link="UI:SAVE:CHAT:SHOW_DYN_CHANNEL_NAME_IN_CHAT_CB"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:show_online_offline_notifications_cb:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
link="UI:SAVE:CHAT:SHOW_ONLINE_OFFLINE_NOTIFICATIONS_CB"
|
||||
realtime="true" />
|
||||
<param ui="chat_colors:font_size:c"
|
||||
type="db"
|
||||
widget="sbint"
|
||||
|
@ -3222,6 +3359,11 @@
|
|||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:USER:TITLE"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_user:is_user_rptags:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:USER:RPTAGS"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_user:is_user_guild_name:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
|
@ -3272,6 +3414,11 @@
|
|||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:FRIEND:TITLE"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_friend:is_friend_rptags:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:FRIEND:RPTAGS"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_friend:is_friend_guild_name:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
|
@ -3327,6 +3474,11 @@
|
|||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:ENEMY:TITLE"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_enemy:is_enemy_rptags:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
link="UI:SAVE:INSCENE:ENEMY:RPTAGS"
|
||||
realtime="true" />
|
||||
<param ui="in_scene_enemy:is_enemy_guild_name:c"
|
||||
type="db"
|
||||
widget="boolbut"
|
||||
|
|
|
@ -463,27 +463,7 @@
|
|||
<!-- ***************** -->
|
||||
<!-- * GUILD FORUM * -->
|
||||
<!-- ***************** -->
|
||||
<proc id="guild_forum_proc_active">
|
||||
<action handler="set"
|
||||
params="dblink=UI:VARIABLES:ISACTIVE:GUILD_FORUM|value=1" />
|
||||
<action handler="set"
|
||||
cond="not(%is_guild_present)"
|
||||
params="target='ui:interface:guild_forum:active'|value=0" />
|
||||
<action handler="browse"
|
||||
params="name=ui:interface:guild_forum:content:html|url=home|show=0" />
|
||||
</proc>
|
||||
<proc id="guild_forum_proc_deactive">
|
||||
<action handler="set"
|
||||
params="dblink=UI:VARIABLES:ISACTIVE:GUILD_FORUM|value=0" />
|
||||
</proc>
|
||||
<group type="menu"
|
||||
id="guild_forum_menu"
|
||||
extends="base_menu_with_color">
|
||||
<action id="home"
|
||||
name="uiHOME"
|
||||
handler="browse"
|
||||
params="name=ui:interface:guild_forum:content:html|url=home" />
|
||||
</group>
|
||||
|
||||
<group type="container"
|
||||
id="guild_forum"
|
||||
w="480"
|
||||
|
@ -531,7 +511,7 @@
|
|||
w="0"
|
||||
h="0"
|
||||
posref="TL TL">
|
||||
<group type="forum_html"
|
||||
<group type="html"
|
||||
id="html"
|
||||
posref="TL TL"
|
||||
url="home"
|
||||
|
@ -828,24 +808,7 @@
|
|||
<!-- ************** -->
|
||||
<!-- * MAIL BOX * -->
|
||||
<!-- ************** -->
|
||||
<proc id="mailbox_proc_active">
|
||||
<action handler="set"
|
||||
params="dblink=UI:VARIABLES:ISACTIVE:MAILBOX|value=1" />
|
||||
<action handler="browse"
|
||||
params="name=ui:interface:mailbox:content:html|url=home|show=0" />
|
||||
</proc>
|
||||
<proc id="mailbox_proc_deactive">
|
||||
<action handler="set"
|
||||
params="dblink=UI:VARIABLES:ISACTIVE:MAILBOX|value=0" />
|
||||
</proc>
|
||||
<group type="menu"
|
||||
id="mailbox_menu"
|
||||
extends="base_menu_with_color">
|
||||
<action id="home"
|
||||
name="uiHOME"
|
||||
handler="browse"
|
||||
params="name=ui:interface:mailbox:content:html|url=home" />
|
||||
</group>
|
||||
|
||||
<group type="container"
|
||||
id="mailbox"
|
||||
w="480"
|
||||
|
@ -892,7 +855,7 @@
|
|||
w="0"
|
||||
h="0"
|
||||
posref="TL TL">
|
||||
<group type="mail_html"
|
||||
<group type="html"
|
||||
id="html"
|
||||
posref="TL TL"
|
||||
url="home"
|
||||
|
@ -976,8 +939,6 @@
|
|||
<proc id="webig_proc_active">
|
||||
<action handler="set"
|
||||
params="dblink=UI:VARIABLES:ISACTIVE:WEBIG|value=1" />
|
||||
<action handler="browse"
|
||||
params="name=ui:interface:webig:content:html|url=home" />
|
||||
</proc>
|
||||
<proc id="webig_proc_deactive">
|
||||
<action handler="set"
|
||||
|
@ -1088,7 +1049,7 @@
|
|||
<group type="webig_html"
|
||||
id="html"
|
||||
posref="TL TL"
|
||||
url="http://atys.ryzom.com/start/index.php"
|
||||
url=""
|
||||
home="http://atys.ryzom.com/start/index.php"
|
||||
sizeref="wh"
|
||||
x="0"
|
||||
|
@ -1254,8 +1215,8 @@
|
|||
<group type="webig_html"
|
||||
id="html"
|
||||
posref="TL TL"
|
||||
url="http://atys.ryzom.com/start/app_ig_start.php"
|
||||
home="http://atys.ryzom.com/start/app_ig_start.php"
|
||||
url=""
|
||||
home="http://atys.ryzom.com/start/init_ig.php"
|
||||
sizeref="wh"
|
||||
x="0"
|
||||
y="0"
|
||||
|
|
|
@ -283,17 +283,14 @@ function game:onDrawNpcWebPage()
|
|||
local utf8Url = ucUrl:toUtf8()
|
||||
local isRing = string.find(utf8Url, "ring_access_point=1") ~= nil
|
||||
if isRing then
|
||||
-- when in ring mode, add the parameters ourselves. 60 sec timeout because of zope...
|
||||
-- browseNpcWebPage(uiStr, utf8Url .. game.RingAccessPointFilter:getURLParameters(), false, 60)
|
||||
-- Use new window after revamp
|
||||
--RingAccessPoint:getWindow().active = 1
|
||||
--RingAccessPoint:getWindow():center()
|
||||
--RingAccessPoint:getWindow():blink(1)
|
||||
--RingAccessPoint:show()
|
||||
getUI("ui:interface:npc_web_browser").active = false
|
||||
runAH(nil, "context_ring_sessions", "")
|
||||
return
|
||||
else
|
||||
local hideWindow = string.find(utf8Url, "_hideWindow=1") ~= nil
|
||||
if hideWindow then
|
||||
getUI("ui:interface:npc_web_browser").active = false
|
||||
end
|
||||
self.NpcWebPage.BrowseDone= true;
|
||||
browseNpcWebPage(uiStr, utf8Url, true, 10); -- 'true' is for 'add parameters' here. 10 is standard timeout
|
||||
end
|
||||
|
@ -302,9 +299,9 @@ function game:onDrawNpcWebPage()
|
|||
-- if this is a ring window, then only the refresh button to access to filter will be available
|
||||
local isRing = string.find(utf8Url, "ring_access_point=1") ~= nil
|
||||
local browser = getUI("ui:interface:npc_web_browser")
|
||||
browser:find("browse_redo").active = not isRing
|
||||
browser:find("browse_undo").active = not isRing
|
||||
browser:find("browse_refresh").active = isRing
|
||||
browser:find("browse_redo").active = true
|
||||
browser:find("browse_undo").active = true
|
||||
browser:find("browse_refresh").active = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -978,6 +975,7 @@ function RingPlayerInfo:tooltipRRPs(dbBase, ttFormat)
|
|||
setContextHelpText(fmt);
|
||||
end
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
function RingPlayerInfo:tooltipRingRating(level, progress, ttFormat)
|
||||
|
@ -1012,6 +1010,27 @@ function RingPlayerInfo:getLevelRatingAndImprovementRate(val)
|
|||
return level, progress
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
--
|
||||
function game:updateOrganization(path, uiOrgText, uiStatusText, uiPointsText)
|
||||
|
||||
local org = getDbProp(path.."1:VALUE")
|
||||
getUICaller()[uiOrgText].uc_hardtext = i18n.get('uiOrganization_' .. org)
|
||||
|
||||
local status = getDbProp(path.."2:VALUE")
|
||||
getUICaller()[uiStatusText].uc_hardtext= status
|
||||
|
||||
local points = getDbProp(path.."3:VALUE")
|
||||
getUICaller()[uiPointsText].uc_hardtext= points
|
||||
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------
|
||||
function game:organizationTooltip()
|
||||
-- set the tooltip in InterfaceManager
|
||||
setContextHelpText( i18n.get('uittOrganization') );
|
||||
end
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
function game:popMissionList()
|
||||
|
@ -1392,7 +1411,9 @@ end
|
|||
-- handler called by C++ to tell that the main loop is about to begin
|
||||
function game:onMainLoopBegin()
|
||||
game.InGameDbInitialized = false
|
||||
game.PrevSessionMission = getDbProp("UI:VARIABLES:MISSION_SELECTED_PREV_SESSION")
|
||||
game.PrevSessionMission = getDbProp("UI:VARIABLES:MISSION_SELECTED_PREV_SESSION")
|
||||
|
||||
debugInfo("onMainLoopBegin()")
|
||||
end
|
||||
|
||||
|
||||
|
@ -1408,6 +1429,29 @@ function game:onInGameDbInitialized()
|
|||
if game.PrevSessionMission ~= -1 then
|
||||
self:setCurrentMission(game.PrevSessionMission)
|
||||
end
|
||||
|
||||
game:setInfoPlayerCharacterRace()
|
||||
end
|
||||
|
||||
function game:onWebIgReady()
|
||||
-- Call init webig
|
||||
getUI("ui:interface:web_transactions:content:html"):browse("home")
|
||||
getUI("ui:interface:webig:content:html"):browse("home")
|
||||
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
-- handler called by C++ at the start of a far TP (log to char selection or far tp)
|
||||
function game:onFarTpStart()
|
||||
debugInfo("game:onFarTpStart()")
|
||||
--game:deinitWebIgApps()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
-- handler called by C++ after characer reselection or the end of a far TP
|
||||
function game:onFarTpEnd()
|
||||
debugInfo("game:onFarTpEnd()")
|
||||
--game:preInitWebIgApps()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
|
@ -1415,8 +1459,8 @@ end
|
|||
function game:onMainLoopEnd()
|
||||
game.InGameDbInitialized = false
|
||||
game:updateMissionJournalFixedEntry()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
-- ring journal on / off
|
||||
|
@ -1471,6 +1515,11 @@ function game:onNewMissionStepAdded(stepIndex)
|
|||
local missionWnd = getMissionWindow()
|
||||
local missionIndex = getDbProp("UI:SAVE:MISSION_SELECTED")
|
||||
local dbPath
|
||||
|
||||
if missionIndex < 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- debugInfo("New Step")
|
||||
if missionIndex < 15 then
|
||||
dbPath = "SERVER:MISSIONS:" .. tostring(missionIndex) .. ":GOALS:" .. tostring(stepIndex) .. ":TEXT"
|
||||
|
@ -1651,3 +1700,64 @@ function game:getRPJobs()
|
|||
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
function game:setInfoPlayerCharacterRace()
|
||||
getUI("ui:interface:info_player_skills:content:basics_skills:character_race_name").uc_hardtext = i18n.get("io"..getUserRace())
|
||||
end
|
||||
|
||||
|
||||
-- --------------------------------------------------------------------------------------------------------------
|
||||
-- game.preInitTimer = 0
|
||||
-- function game:preInitWebIgAppsLoop()
|
||||
-- if game.preInitTimer == nil then game.preInitTimer = 0 end
|
||||
|
||||
-- game.preInitTimer = game.preInitTimer - 1
|
||||
-- if (not game.preWebIgAppsInitialized) and game.preInitTimer < 0 then
|
||||
-- debugInfo("initWebIgAppsLoop(): calling app_ig_preinit.php")
|
||||
-- getUI("ui:interface:web_transactions:content:html"):browse("http://atys.ryzom.com/start/app_ig_preinit.php")
|
||||
-- game.preInitTimer = getDbProp("UI:SAVE:WEBIG_RETRY_DELAY")
|
||||
-- end
|
||||
|
||||
-- if game.preWebIgAppsInitialized then
|
||||
-- debugInfo("preInitWebIgAppsLoop(): Calling removeOnDbChange()")
|
||||
-- removeOnDbChange(getUI("ui:interface"), "@UI:VARIABLES:CURRENT_SERVER_TICK")
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- --------------------------------------------------------------------------------------------------------------
|
||||
-- function game:preInitWebIgApps()
|
||||
-- debugInfo("game:preInitWebIgApps()")
|
||||
-- addOnDbChange(getUI("ui:interface"), "@UI:VARIABLES:CURRENT_SERVER_TICK", "game:preInitWebIgAppsLoop()")
|
||||
-- end
|
||||
|
||||
-- --------------------------------------------------------------------------------------------------------------
|
||||
-- game.postInitTimer = 0
|
||||
-- function game:postInitWebIgAppsLoop()
|
||||
-- if game.postInitTimer == nil then game.postInitTimer = 0 end
|
||||
|
||||
-- game.postInitTimer = game.postInitTimer - 1
|
||||
-- if game.postInitTimer < 0 then
|
||||
-- debugInfo("initWebIgAppsLoop(): calling app_ig_postinit.php")
|
||||
-- getUI("ui:interface:web_transactions:content:html"):browse("http://atys.ryzom.com/start/app_ig_postinit.php")
|
||||
-- game.postInitTimer = getDbProp("UI:SAVE:WEBIG_RETRY_DELAY")
|
||||
-- end
|
||||
|
||||
-- if game.postWebIgAppsInitialized then
|
||||
-- debugInfo("postInitWebIgAppsLoop(): Calling removeOnDbChange()")
|
||||
-- removeOnDbChange(getUI("ui:interface:milko_pad"), "@UI:VARIABLES:CURRENT_SERVER_TICK")
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- --------------------------------------------------------------------------------------------------------------
|
||||
-- function game:postInitWebIgApps()
|
||||
-- debugInfo("game:postInitWebIgApps()")
|
||||
-- addOnDbChange(getUI("ui:interface:milko_pad"), "@UI:VARIABLES:CURRENT_SERVER_TICK", "game:postInitWebIgAppsLoop()")
|
||||
-- end
|
||||
|
||||
-- --------------------------------------------------------------------------------------------------------------
|
||||
-- function game:deinitWebIgApps()
|
||||
-- debugInfo("game:deinitWebIgApps()")
|
||||
-- game.preWebIgAppsInitialized = nil
|
||||
-- game.postWebIgAppsInitialized = nil
|
||||
-- titleSetted = nil
|
||||
-- end
|
||||
|
|