mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-19 07:28:43 +00:00
Merge with develop
This commit is contained in:
parent
17d2b19525
commit
7a1a082135
41 changed files with 382 additions and 375 deletions
|
@ -21,7 +21,7 @@
|
|||
|
||||
namespace STRING_MANAGER
|
||||
{
|
||||
const ucstring nl("\r\n");
|
||||
const ucstring nl("\n");
|
||||
|
||||
|
||||
struct TStringInfo
|
||||
|
|
|
@ -162,11 +162,8 @@ public:
|
|||
* EF,BB, BF.
|
||||
* 16 bits encoding can be recognized by the official header :
|
||||
* FF, FE, witch can be reversed if the data are MSB first.
|
||||
*
|
||||
* Optionally, you can force the reader to consider the file as
|
||||
* UTF-8 encoded.
|
||||
*/
|
||||
static void readTextBuffer(uint8 *buffer, uint size, ucstring &result, bool forceUtf8 = false);
|
||||
static void readTextBuffer(uint8 *buffer, uint size, ucstring &result);
|
||||
|
||||
/** Remove any C style comment from the passed string.
|
||||
*/
|
||||
|
|
|
@ -153,9 +153,9 @@ bool CCocoaEventEmitter::pasteTextFromClipboard(ucstring &text)
|
|||
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
|
||||
NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
|
||||
NSDictionary *options = [NSDictionary dictionary];
|
||||
|
||||
|
||||
BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
|
||||
if (ok)
|
||||
if (ok)
|
||||
{
|
||||
NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options];
|
||||
NSString *nstext = [objectsToPaste objectAtIndex:0];
|
||||
|
@ -264,8 +264,8 @@ bool CCocoaEventEmitter::processMessage(NSEvent* event, CEventServer* server)
|
|||
mousePos.y /= (float)viewRect.size.height;
|
||||
|
||||
// if the mouse event was placed outside the view, don't tell NeL :)
|
||||
if((mousePos.x < 0.0 || mousePos.x > 1.0 ||
|
||||
mousePos.y < 0.0 || mousePos.y > 1.0) &&
|
||||
if((mousePos.x < 0.0 || mousePos.x > 1.0 ||
|
||||
mousePos.y < 0.0 || mousePos.y > 1.0) &&
|
||||
event.type != NSKeyDown && event.type != NSKeyUp)
|
||||
{
|
||||
return false;
|
||||
|
@ -415,7 +415,7 @@ typedef bool (*cocoaProc)(NL3D::IDriver*, const void* e);
|
|||
|
||||
void CCocoaEventEmitter::submitEvents(CEventServer& server, bool /* allWins */)
|
||||
{
|
||||
// break if there was no event to handle
|
||||
// break if there was no event to handle
|
||||
// if running embedded in e.g. qt, _eventLoop will be false
|
||||
while(_eventLoop)
|
||||
{
|
||||
|
@ -442,8 +442,15 @@ void CCocoaEventEmitter::submitEvents(CEventServer& server, bool /* allWins */)
|
|||
processMessage(event, &server);
|
||||
}
|
||||
|
||||
// forward the event to the cocoa application
|
||||
[NSApp sendEvent:event];
|
||||
@try
|
||||
{
|
||||
// forward the event to the cocoa application
|
||||
[NSApp sendEvent:event];
|
||||
}
|
||||
@catch(NSException *e)
|
||||
{
|
||||
nlwarning("Exception when sending event: %s", [[e reason] UTF8String]);
|
||||
}
|
||||
}
|
||||
|
||||
_server = &server;
|
||||
|
|
|
@ -457,7 +457,7 @@ CFontGenerator::CFontGenerator (const std::string &fontFileName, const std::stri
|
|||
nlerror ("FT_New_Face() failed with file '%s': %s", fontFileName.c_str(), getFT2Error(error));
|
||||
}
|
||||
|
||||
if (fontExFileName != "")
|
||||
if (!fontExFileName.empty())
|
||||
{
|
||||
error = FT_Attach_File (_Face, fontExFileName.c_str ());
|
||||
if (error)
|
||||
|
|
|
@ -213,9 +213,9 @@ void CLandscapeUser::refreshAllZonesAround(const CVector &pos, float radius, std
|
|||
refreshZonesAround (pos, radius, za, zr);
|
||||
|
||||
// some zone added or removed??
|
||||
if(za != "")
|
||||
if(!za.empty())
|
||||
zonesAdded.push_back(za);
|
||||
if(zr != "")
|
||||
if(!zr.empty())
|
||||
zonesRemoved.push_back(zr);
|
||||
|
||||
_ZoneManager.checkZonesAround ((uint)pos.x, (uint)(-pos.y), (uint)radius);
|
||||
|
|
|
@ -1121,7 +1121,7 @@ void CInstanceGroup::setClusterSystemForInstances(CInstanceGroup *pIG)
|
|||
void CInstanceGroup::getDynamicPortals (std::vector<std::string> &names)
|
||||
{
|
||||
for (uint32 i = 0; i < _Portals.size(); ++i)
|
||||
if (_Portals[i].getName() != "")
|
||||
if (!_Portals[i].getName().empty())
|
||||
names.push_back (_Portals[i].getName());
|
||||
}
|
||||
|
||||
|
|
|
@ -572,7 +572,7 @@ namespace NLGUI
|
|||
curl_easy_cleanup(it->curl);
|
||||
|
||||
string tmpfile = it->dest + ".tmp";
|
||||
if(res != CURLE_OK || r < 200 || r >= 300 || ((it->md5sum != "") && (it->md5sum != getMD5(tmpfile).toString())))
|
||||
if(res != CURLE_OK || r < 200 || r >= 300 || (!it->md5sum.empty() && (it->md5sum != getMD5(tmpfile).toString())))
|
||||
{
|
||||
NLMISC::CFile::deleteFile(tmpfile.c_str());
|
||||
}
|
||||
|
|
|
@ -1430,7 +1430,7 @@ namespace NLGUI
|
|||
// Append to the last line
|
||||
_Lines.back()->addWord(ucCurrentWord, 0, wordFormat, _FontWidth, *TextContext);
|
||||
// reset the word
|
||||
ucCurrentWord = ucstring("");
|
||||
ucCurrentWord.clear();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -442,7 +442,7 @@ namespace NLGUI
|
|||
if (sZeStart[sZeStart.size()-1] == ':')
|
||||
sZeStart = sZeStart.substr(0, sZeStart.size()-1);
|
||||
|
||||
while (sZeStart != "")
|
||||
while (!sZeStart.empty())
|
||||
{
|
||||
if (sEltId[0] == ':')
|
||||
sTmp = sZeStart + sEltId;
|
||||
|
|
|
@ -117,7 +117,7 @@ bool loadStringFile(const std::string filename, vector<TStringInfo> &stringInfos
|
|||
*/
|
||||
ucstring text;
|
||||
|
||||
CI18N::readTextFile(filename, text, false, false, true, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, text, false, false, true, CI18N::LINE_FMT_LF);
|
||||
// CI18N::readTextBuffer(buffer, size, text);
|
||||
// delete [] buffer;
|
||||
|
||||
|
@ -154,7 +154,7 @@ bool loadStringFile(const std::string filename, vector<TStringInfo> &stringInfos
|
|||
if (!CI18N::parseLabel(first, last, si.Identifier))
|
||||
{
|
||||
uint32 line = countLine(text, first);
|
||||
nlwarning("DT: Fatal : In '%s', line %u: Invalid label after '%s'\n",
|
||||
nlwarning("DT: Fatal : In '%s', line %u: Invalid label after '%s'",
|
||||
filename.c_str(),
|
||||
line,
|
||||
lastLabel.c_str());
|
||||
|
@ -167,7 +167,7 @@ bool loadStringFile(const std::string filename, vector<TStringInfo> &stringInfos
|
|||
if (!CI18N::parseMarkedString(openMark, closeMark, first, last, si.Text))
|
||||
{
|
||||
uint32 line = countLine(text, first);
|
||||
nlwarning("DT: Fatal : In '%s', line %u: Invalid text value for label %s\n",
|
||||
nlwarning("DT: Fatal : In '%s', line %u: Invalid text value for label %s",
|
||||
filename.c_str(),
|
||||
line,
|
||||
lastLabel.c_str());
|
||||
|
@ -181,7 +181,7 @@ bool loadStringFile(const std::string filename, vector<TStringInfo> &stringInfos
|
|||
if (!CI18N::parseMarkedString(openMark, closeMark, first, last, si.Text2))
|
||||
{
|
||||
uint32 line = countLine(text, first);
|
||||
nlwarning("DT: Fatal: In '%s' line %u: Invalid text2 value label %s\n",
|
||||
nlwarning("DT: Fatal: In '%s' line %u: Invalid text2 value label %s",
|
||||
filename.c_str(),
|
||||
line,
|
||||
lastLabel.c_str());
|
||||
|
@ -313,7 +313,7 @@ bool readPhraseFile(const std::string &filename, vector<TPhrase> &phrases, bool
|
|||
{
|
||||
ucstring doc;
|
||||
|
||||
CI18N::readTextFile(filename, doc, false, false, true, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, doc, false, false, true, CI18N::LINE_FMT_LF);
|
||||
|
||||
return readPhraseFileFromString(doc, filename, phrases, forceRehash);
|
||||
}
|
||||
|
@ -577,7 +577,7 @@ ucstring preparePhraseFile(const vector<TPhrase> &phrases, bool removeDiffCommen
|
|||
if (!c.Comments.empty())
|
||||
{
|
||||
ucstring comment = tabLines(1, c.Comments);
|
||||
ret += comment; // + '\r'+'\n';
|
||||
ret += comment; // + '\n';
|
||||
}
|
||||
if (!c.Conditions.empty())
|
||||
{
|
||||
|
@ -626,7 +626,7 @@ bool loadExcelSheet(const string filename, TWorksheet &worksheet, bool checkUniq
|
|||
fp.close();
|
||||
|
||||
ucstring str;
|
||||
CI18N::readTextFile(filename, str, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, str, false, false, false, CI18N::LINE_FMT_LF);
|
||||
|
||||
if (!readExcelSheet(str, worksheet, checkUnique))
|
||||
return false;
|
||||
|
@ -646,6 +646,8 @@ bool readExcelSheet(const ucstring &str, TWorksheet &worksheet, bool checkUnique
|
|||
strArray[strArray.size()-1]= 0;
|
||||
memcpy(&strArray[0], &str[0], str.size()*sizeof(ucchar));
|
||||
|
||||
// size of new line characters
|
||||
size_t sizeOfNl = nl.length();
|
||||
|
||||
// **** Build array of lines. just point to strArray, and fill 0 where appropriated
|
||||
vector<ucchar*> lines;
|
||||
|
@ -660,10 +662,10 @@ bool readExcelSheet(const ucstring &str, TWorksheet &worksheet, bool checkUnique
|
|||
// nldebug("Found line : [%s]", ucstring(&strArray[lastPos]).toString().c_str());
|
||||
lines.push_back(&strArray[lastPos]);
|
||||
}
|
||||
lastPos = pos + 2;
|
||||
lastPos = pos + sizeOfNl;
|
||||
}
|
||||
|
||||
// Must add last line if no \r\n ending
|
||||
// Must add last line if no \n ending
|
||||
if (lastPos < str.size())
|
||||
{
|
||||
pos= str.size();
|
||||
|
|
|
@ -743,7 +743,7 @@ void CI18N::_readTextFile(const string &filename,
|
|||
|
||||
// Transform the string in ucstring according to format header
|
||||
if (!text.empty())
|
||||
readTextBuffer((uint8*)&text[0], (uint)text.size(), result, forceUtf8);
|
||||
readTextBuffer((uint8*)&text[0], (uint)text.size(), result);
|
||||
|
||||
if (preprocess)
|
||||
{
|
||||
|
@ -1109,7 +1109,7 @@ void CI18N::_readTextFile(const string &filename,
|
|||
temp.append(result.begin()+lastPos, result.end());
|
||||
result.swap(temp);
|
||||
|
||||
temp = "";
|
||||
temp.clear();
|
||||
|
||||
// second loop with the '\n'
|
||||
pos = 0;
|
||||
|
@ -1137,28 +1137,13 @@ void CI18N::_readTextFile(const string &filename,
|
|||
}
|
||||
}
|
||||
|
||||
void CI18N::readTextBuffer(uint8 *buffer, uint size, ucstring &result, bool forceUtf8)
|
||||
void CI18N::readTextBuffer(uint8 *buffer, uint size, ucstring &result)
|
||||
{
|
||||
static uint8 utf16Header[] = { 0xffu, 0xfeu };
|
||||
static uint8 utf16RevHeader[] = { 0xfeu, 0xffu };
|
||||
static uint8 utf8Header[] = { 0xefu, 0xbbu, 0xbfu };
|
||||
|
||||
if (forceUtf8)
|
||||
{
|
||||
if (size>=3 &&
|
||||
buffer[0]==utf8Header[0] &&
|
||||
buffer[1]==utf8Header[1] &&
|
||||
buffer[2]==utf8Header[2]
|
||||
)
|
||||
{
|
||||
// remove utf8 header
|
||||
buffer+= 3;
|
||||
size-=3;
|
||||
}
|
||||
string text((char*)buffer, size);
|
||||
result.fromUtf8(text);
|
||||
}
|
||||
else if (size>=3 &&
|
||||
if (size>=3 &&
|
||||
buffer[0]==utf8Header[0] &&
|
||||
buffer[1]==utf8Header[1] &&
|
||||
buffer[2]==utf8Header[2]
|
||||
|
@ -1211,10 +1196,9 @@ void CI18N::readTextBuffer(uint8 *buffer, uint size, ucstring &result, bool forc
|
|||
}
|
||||
else
|
||||
{
|
||||
// hum.. ascii read ?
|
||||
// so, just do a direct conversion
|
||||
// all text files without BOM are now parsed as UTF-8 by default
|
||||
string text((char*)buffer, size);
|
||||
result = text;
|
||||
result.fromUtf8(text);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2504,13 +2504,13 @@ class CHandlerInvCanDropTo : public IActionHandler
|
|||
if (pCSDst != NULL)
|
||||
{
|
||||
// If we want to drop something on a reference slot (hand or equip)
|
||||
if (pInv->getDBIndexPath(pCSDst) != "")
|
||||
if (!pInv->getDBIndexPath(pCSDst).empty())
|
||||
{
|
||||
// We must drag'n'drop an item
|
||||
if (pCSSrc && pCSSrc->getType() == CCtrlSheetInfo::SheetType_Item)
|
||||
if (pCSDst && pCSDst->getType() == CCtrlSheetInfo::SheetType_Item)
|
||||
{
|
||||
if (pInv->getDBIndexPath(pCSSrc) != "")
|
||||
if (!pInv->getDBIndexPath(pCSSrc).empty())
|
||||
{
|
||||
// The item dragged comes from a slot check if this is the good type
|
||||
if (pCSDst->canDropItem(pCSSrc))
|
||||
|
|
|
@ -52,7 +52,7 @@ void CItemConsumableEffectHelper::getItemConsumableEffectText(const CItemSheet *
|
|||
// Extract parameters from sheet
|
||||
vector<CSString> params;
|
||||
CSString param = eff.splitTo(':', true);
|
||||
while (param != "")
|
||||
while (!param.empty())
|
||||
{
|
||||
params.push_back(param);
|
||||
param = eff.splitTo(':', true);
|
||||
|
|
|
@ -346,13 +346,13 @@ static CLuaString lstr_isNil("isNil");
|
|||
void CLuaIHMRyzom::createLuaEnumTable(CLuaState &ls, const std::string &str)
|
||||
{
|
||||
//H_AUTO(Lua_CLuaIHM_createLuaEnumTable)
|
||||
std::string path = "", script, p;
|
||||
std::string path, script, p;
|
||||
CSString s = str;
|
||||
// Create table recursively (ex: 'game.TPVPClan' will check/create the table 'game' and 'game.TPVPClan')
|
||||
p = s.splitTo('.', true);
|
||||
while (p.size() > 0)
|
||||
{
|
||||
if (path == "")
|
||||
if (path.empty())
|
||||
path = p;
|
||||
else
|
||||
path += "." + p;
|
||||
|
|
|
@ -128,7 +128,7 @@ void CViewBitmapFaberMp::draw ()
|
|||
{
|
||||
CItemSheet *pIS = (CItemSheet*)pES;
|
||||
|
||||
if (pIS->getIconBack() != "")
|
||||
if (!pIS->getIconBack().empty())
|
||||
{
|
||||
if (_AccIconBackString != pIS->getIconBack())
|
||||
{
|
||||
|
@ -140,7 +140,7 @@ void CViewBitmapFaberMp::draw ()
|
|||
_AccIconBackId);
|
||||
}
|
||||
|
||||
if (pIS->getIconMain() != "")
|
||||
if (!pIS->getIconMain().empty())
|
||||
{
|
||||
if (_AccIconMainString != pIS->getIconMain())
|
||||
{
|
||||
|
@ -152,7 +152,7 @@ void CViewBitmapFaberMp::draw ()
|
|||
_AccIconMainId);
|
||||
}
|
||||
|
||||
if (pIS->getIconOver() != "")
|
||||
if (!pIS->getIconOver().empty())
|
||||
{
|
||||
if (_AccIconOverString != pIS->getIconOver())
|
||||
{
|
||||
|
|
|
@ -507,7 +507,7 @@ void impulseShardId(NLMISC::CBitMemStream &impulse)
|
|||
|
||||
string webHost;
|
||||
impulse.serial(webHost);
|
||||
if (webHost != "")
|
||||
if (!webHost.empty())
|
||||
{
|
||||
WebServer = webHost;
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ const CObject *CPropertyAccessor::getPropertyValue(const CObject* componentParam
|
|||
std::string str = propClass->toString();
|
||||
|
||||
|
||||
while (!toRet && str != "")
|
||||
while (!toRet && !str.empty())
|
||||
{
|
||||
CObjectGenerator* generator = _Factory->getGenerator(str);
|
||||
|
||||
|
|
|
@ -503,7 +503,7 @@ void CRosace::init()
|
|||
void CRosace::add(const string &name, const CRosaceContext &context)
|
||||
{
|
||||
// If the name is not empty.
|
||||
if(name != "")
|
||||
if(!name.empty())
|
||||
_Contexts.insert(TContexts::value_type (name, context));
|
||||
}// add //
|
||||
|
||||
|
|
|
@ -647,7 +647,7 @@ bool CObjectString::set(const std::string& key, const std::string & value)
|
|||
{
|
||||
//H_AUTO(R2_CObjectString_set)
|
||||
|
||||
BOMB_IF( key != "", "Try to set the a sub value of an object that does not allowed it", return false);
|
||||
BOMB_IF(!key.empty(), "Try to set the a sub value of an object that does not allowed it", return false);
|
||||
_Value = value;
|
||||
return true;
|
||||
}
|
||||
|
@ -808,7 +808,7 @@ bool CObjectNumber::set(const std::string& key, double value)
|
|||
{
|
||||
//H_AUTO(R2_CObjectNumber_set)
|
||||
|
||||
BOMB_IF(key != "", "Try to set an element of a table on an object that is not a table", return false);
|
||||
BOMB_IF(!key.empty(), "Try to set an element of a table on an object that is not a table", return false);
|
||||
|
||||
_Value = value;
|
||||
return true;
|
||||
|
@ -819,7 +819,7 @@ bool CObjectNumber::set(const std::string& key, const std::string & value)
|
|||
{
|
||||
//H_AUTO(R2_CObjectNumber_set)
|
||||
//XXX
|
||||
BOMB_IF(key != "", "Try to set an element of a table on an object that is not a table", return false);
|
||||
BOMB_IF(!key.empty(), "Try to set an element of a table on an object that is not a table", return false);
|
||||
NLMISC::fromString(value, _Value);
|
||||
return true;
|
||||
}
|
||||
|
@ -907,7 +907,7 @@ bool CObjectInteger::set(const std::string& key, sint64 value)
|
|||
{
|
||||
//H_AUTO(R2_CObjectInteger_set)
|
||||
|
||||
BOMB_IF(key != "", "Try to set an element of a table on an object that is not a table", return false);
|
||||
BOMB_IF(!key.empty(), "Try to set an element of a table on an object that is not a table", return false);
|
||||
|
||||
_Value = value;
|
||||
return true;
|
||||
|
@ -918,7 +918,7 @@ bool CObjectInteger::set(const std::string& key, const std::string & value)
|
|||
{
|
||||
//H_AUTO(R2_CObjectInteger_set)
|
||||
//XXX
|
||||
BOMB_IF(key != "", "Try to set an element of a table on an object that is not a table", return false);
|
||||
BOMB_IF(!key.empty(), "Try to set an element of a table on an object that is not a table", return false);
|
||||
NLMISC::fromString(value, _Value);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2813,7 +2813,7 @@ void CServerEditionModule::createSession(NLNET::IModuleProxy *sender, TCharId ow
|
|||
else if (first->first == "Rules" ) { info.setDMLess( first->second != "Mastered"); }
|
||||
else if (first->first == "NevraxScenario" && first->second == "1") { nevraxScenario = true; }
|
||||
else if (first->first == "TrialAllowed" && first->second == "1") { trialAllowed = true; }
|
||||
else if (first->first == "MissionTag" && first->second != "") { missionTag = first->second; }
|
||||
else if (first->first == "MissionTag" && !first->second.empty()) { missionTag = first->second; }
|
||||
}
|
||||
// info.setMissionTag(missionTag);
|
||||
info.setSessionAnimatorCharId( ownerCharId);
|
||||
|
@ -3863,7 +3863,7 @@ void CServerEditionModule::startScenario(NLNET::IModuleProxy *senderModuleProxy,
|
|||
else if (first->first == "Rules" ) { info.setDMLess( first->second != "Mastered"); }
|
||||
else if (first->first == "NevraxScenario" && first->second == "1") { nevraxScenario = true; }
|
||||
else if (first->first == "TrialAllowed" && first->second == "1") { trialAllowed = true; }
|
||||
else if (first->first == "MissionTag" && first->second != "") { missionTag = first->second; }
|
||||
else if (first->first == "MissionTag" && !first->second.empty()) { missionTag = first->second; }
|
||||
}
|
||||
|
||||
info.setSessionAnimatorCharId( charId);
|
||||
|
|
|
@ -479,14 +479,14 @@ void CStringManagerModule::translateAndForwardWithArg(TDataSetRow senderId,CChat
|
|||
void CStringManagerModule::translateAndForward(TDataSetRow senderId,CChatGroup::TGroupType groupType,std::string id,TSessionId sessionId)
|
||||
{
|
||||
std::string toSend = getValue(sessionId.asInt(), id);
|
||||
if(toSend != "")
|
||||
if(!toSend.empty())
|
||||
send(senderId,groupType,toSend);
|
||||
}
|
||||
|
||||
|
||||
void CStringManagerModule::send(TDataSetRow& senderId,CChatGroup::TGroupType groupType,const std::string& toSend)
|
||||
{
|
||||
if(toSend != "")
|
||||
if(!toSend.empty())
|
||||
{
|
||||
ucstring uStr;
|
||||
uStr.fromUtf8(toSend);
|
||||
|
|
|
@ -2071,7 +2071,7 @@ public:
|
|||
|
||||
_WorldMap.clear();
|
||||
string ext = CFile::getExtension(name);
|
||||
if (ext == "")
|
||||
if (ext.empty())
|
||||
ext = "cwmap2";
|
||||
CIFile f(OutputPath+CFile::getFilenameWithoutExtension(name)+"."+ext);
|
||||
f.serial(_WorldMap);
|
||||
|
@ -2213,7 +2213,7 @@ public:
|
|||
|
||||
_WorldMap.clear();
|
||||
string ext = CFile::getExtension(name);
|
||||
if (ext == "")
|
||||
if (ext.empty())
|
||||
ext = "cw_map2";
|
||||
|
||||
CIFile f(CFile::getPath(name) + CFile::getFilenameWithoutExtension(name)+"."+ext);
|
||||
|
|
|
@ -288,6 +288,8 @@ void CConfig::setString( const char *key, const std::string &value )
|
|||
}
|
||||
else
|
||||
{
|
||||
nlwarning( "Couldn't find key %s in %s.", key, cf.getFilename().c_str() );
|
||||
NLMISC::CConfigFile::CVar var;
|
||||
var.forceAsString(value);
|
||||
cf.insertVar(key, var);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,11 +25,16 @@ CSoundSettingsWidget::CSoundSettingsWidget( QWidget *parent ) :
|
|||
setupUi( this );
|
||||
load();
|
||||
|
||||
connect(autoRadioButton, SIGNAL(clicked(bool)), this, SLOT(onSomethingChanged()));
|
||||
connect(openalRadioButton, SIGNAL(clicked(bool)), this, SLOT(onSomethingChanged()));
|
||||
connect(fmodRadioButton, SIGNAL(clicked(bool)), this, SLOT(onSomethingChanged()));
|
||||
connect(xaudio2RadioButton, SIGNAL(clicked(bool)), this, SLOT(onSomethingChanged()));
|
||||
connect(directsoundRadioButton, SIGNAL(clicked(bool)), this, SLOT(onSomethingChanged()));
|
||||
|
||||
connect( tracksSlider, SIGNAL( valueChanged( int ) ), this, SLOT( onTracksSliderChange() ) );
|
||||
connect( soundCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
|
||||
connect( eaxCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
|
||||
connect( softwareCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
|
||||
connect( fmodCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( onSomethingChanged() ) );
|
||||
}
|
||||
|
||||
CSoundSettingsWidget::~CSoundSettingsWidget()
|
||||
|
@ -64,8 +69,38 @@ void CSoundSettingsWidget::load()
|
|||
|
||||
updateTracksLabel();
|
||||
|
||||
if( s.config.getString( "DriverSound" ).compare( "FMod" ) == 0 )
|
||||
fmodCheckBox->setChecked( true );
|
||||
std::string soundDriver = NLMISC::toLower(s.config.getString("DriverSound"));
|
||||
|
||||
#ifdef Q_OS_WIN32
|
||||
fmodRadioButton->setEnabled(true);
|
||||
xaudio2RadioButton->setEnabled(true);
|
||||
directsoundRadioButton->setEnabled(true);
|
||||
#else
|
||||
fmodRadioButton->setEnabled(false);
|
||||
xaudio2RadioButton->setEnabled(false);
|
||||
directsoundRadioButton->setEnabled(false);
|
||||
#endif
|
||||
|
||||
if (soundDriver.compare("openal") == 0)
|
||||
{
|
||||
openalRadioButton->setChecked(true);
|
||||
}
|
||||
else if (soundDriver.compare("fmod") == 0)
|
||||
{
|
||||
fmodRadioButton->setChecked(true);
|
||||
}
|
||||
else if (soundDriver.compare("xaudio2") == 0)
|
||||
{
|
||||
xaudio2RadioButton->setChecked(true);
|
||||
}
|
||||
else if (soundDriver.compare("directsound") == 0)
|
||||
{
|
||||
directsoundRadioButton->setChecked(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
autoRadioButton->setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CSoundSettingsWidget::save()
|
||||
|
@ -83,8 +118,18 @@ void CSoundSettingsWidget::save()
|
|||
|
||||
s.config.setInt( "MaxTrack", tracksSlider->value() * 4 );
|
||||
|
||||
if( fmodCheckBox->isChecked() )
|
||||
s.config.setString( "DriverSound", std::string( "FMod" ) );
|
||||
if (openalRadioButton->isChecked())
|
||||
s.config.setString("DriverSound", std::string("OpenAL"));
|
||||
#ifdef Q_OS_WIN32
|
||||
else if (fmodRadioButton->isChecked())
|
||||
s.config.setString("DriverSound", std::string("FMod"));
|
||||
else if (xaudio2RadioButton->isChecked())
|
||||
s.config.setString("DriverSound", std::string("XAudio2"));
|
||||
else if (directsoundRadioButton->isChecked())
|
||||
s.config.setString("DriverSound", std::string("DirectSound"));
|
||||
#endif
|
||||
else
|
||||
s.config.setString("DriverSound", std::string("Auto"));
|
||||
}
|
||||
|
||||
void CSoundSettingsWidget::updateTracksLabel()
|
||||
|
|
|
@ -7,62 +7,58 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>391</width>
|
||||
<height>429</height>
|
||||
<height>388</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Display</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="driverGroupBox">
|
||||
<property name="title">
|
||||
<string>Driver</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Specify if Ryzom is to be run in OpenGL or Direct3D:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="autoRadioButton">
|
||||
<property name="text">
|
||||
<string>Auto</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="openglRadioButton">
|
||||
<property name="text">
|
||||
<string>OpenGL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="direct3dRadioButton">
|
||||
<property name="text">
|
||||
<string>Direct3D</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="videoDriverLabel">
|
||||
<property name="text">
|
||||
<string>Specify if Ryzom is to be run in OpenGL or Direct3D:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="autoRadioButton">
|
||||
<property name="text">
|
||||
<string>Auto</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="openglRadioButton">
|
||||
<property name="text">
|
||||
<string>OpenGL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="direct3dRadioButton">
|
||||
<property name="text">
|
||||
<string>Direct3D</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="parametersGroupBox">
|
||||
<property name="title">
|
||||
<string>Parameters</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="windowedLabel">
|
||||
<property name="text">
|
||||
<string>Specify if Ryzom is to be run in full screen or window mode:</string>
|
||||
</property>
|
||||
|
@ -76,7 +72,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="videoModeLabel">
|
||||
<property name="text">
|
||||
<string>Specify a video mode:</string>
|
||||
</property>
|
||||
|
@ -85,19 +81,6 @@
|
|||
<item>
|
||||
<widget class="QComboBox" name="videomodeComboBox"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>34</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="windowedRadioButton">
|
||||
<property name="text">
|
||||
|
@ -106,54 +89,46 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Width</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Height</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>X position</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Y position</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<layout class="QFormLayout" name="windowFormLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="widthLabel">
|
||||
<property name="text">
|
||||
<string>Width</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="widthLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="heightLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="xpositionLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="ypositionLineEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="widthLineEdit"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="heightLabel">
|
||||
<property name="text">
|
||||
<string>Height</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="heightLineEdit"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="xLabel">
|
||||
<property name="text">
|
||||
<string>X position</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="xpositionLineEdit"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="yLabel">
|
||||
<property name="text">
|
||||
<string>Y position</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="ypositionLineEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
|
|
@ -6,147 +6,140 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>391</width>
|
||||
<height>429</height>
|
||||
<width>294</width>
|
||||
<height>317</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Sound</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="soundCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable sound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="eaxCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable EAX</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="fmodCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable FMod</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="softwareCheckBox">
|
||||
<property name="text">
|
||||
<string>Software sound buffer (may increase FPS)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Sound tracks</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>18</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QSlider" name="tracksSlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tracksLabel">
|
||||
<property name="text">
|
||||
<string>8 tracks</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="driverGroupBox">
|
||||
<property name="title">
|
||||
<string>Driver</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="autoRadioButton">
|
||||
<property name="text">
|
||||
<string>Auto</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="openalRadioButton">
|
||||
<property name="text">
|
||||
<string>OpenAL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="fmodRadioButton">
|
||||
<property name="text">
|
||||
<string>FMod</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="xaudio2RadioButton">
|
||||
<property name="text">
|
||||
<string>XAudio2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="directsoundRadioButton">
|
||||
<property name="text">
|
||||
<string>DirectSound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="parametersGroupBox">
|
||||
<property name="title">
|
||||
<string>Parameters</string>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>180</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>223</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="soundCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable sound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="eaxCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable EAX</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="softwareCheckBox">
|
||||
<property name="text">
|
||||
<string>Software sound buffer (may increase FPS)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="soundTracksLabel">
|
||||
<property name="text">
|
||||
<string>Sound tracks</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="soundTracksHorizontalLayout">
|
||||
<item>
|
||||
<widget class="QSlider" name="tracksSlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="tracksLabel">
|
||||
<property name="text">
|
||||
<string>8 tracks</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
|
|
@ -1158,7 +1158,7 @@ void CScreenshotIslands::loadIslands()
|
|||
TBuffer cleanBuffer;
|
||||
processProximityBuffer(zoneBuffer, zones[i].getZoneWidth(), cleanBuffer);
|
||||
|
||||
string fileName = string("");
|
||||
string fileName;
|
||||
list< string >::const_iterator itIsland(continent.Islands.begin()), lastIsland(continent.Islands.end());
|
||||
for( ; itIsland != lastIsland ; ++itIsland)
|
||||
{
|
||||
|
@ -1178,7 +1178,7 @@ void CScreenshotIslands::loadIslands()
|
|||
}
|
||||
|
||||
// write the processed proximity map to an output file
|
||||
if(fileName != "")
|
||||
if(!fileName.empty())
|
||||
{
|
||||
writeProximityBufferToTgaFile(fileName, cleanBuffer, zones[i].getZoneWidth(), zones[i].getZoneHeight());
|
||||
_TempFileNames.push_back(fileName);
|
||||
|
|
|
@ -167,7 +167,7 @@ public:
|
|||
//---------------------------------------------------------------------------------------------
|
||||
// housekeeping
|
||||
|
||||
if (outputName!="")
|
||||
if (!outputName.empty())
|
||||
flush(outputName);
|
||||
}
|
||||
|
||||
|
@ -258,7 +258,7 @@ private:
|
|||
if (i>=cols.size()
|
||||
|| i>=lastTblCols.size()
|
||||
|| cols[i]!=lastTblCols[i]
|
||||
|| (cols[i]!="" && !headerIsOpen[tblColumnNames[i]]))
|
||||
|| (!cols[i].empty() && !headerIsOpen[tblColumnNames[i]]))
|
||||
{
|
||||
CSString s=headers[tblColumnNames[i]];
|
||||
for (uint32 j=1;j<cols.size()&&j<tblColumnNames.size();++j)
|
||||
|
@ -302,7 +302,7 @@ private:
|
|||
}
|
||||
else if (keyword=="output")
|
||||
{
|
||||
if (outputName!="")
|
||||
if (!outputName.empty())
|
||||
{
|
||||
flush(outputName);
|
||||
}
|
||||
|
@ -399,7 +399,7 @@ private:
|
|||
{
|
||||
// do nothing
|
||||
}
|
||||
else if (keyword=="")
|
||||
else if (keyword.empty())
|
||||
{
|
||||
mode=DEFAULT;
|
||||
closeFooters();
|
||||
|
|
|
@ -642,42 +642,42 @@ bool CExport::newExport (SExportOptions &opt, IExportCB *expCB)
|
|||
|
||||
// Ok set parameters from options first and with CFG if no options set
|
||||
|
||||
if (_Options->OutIGDir == "")
|
||||
if (_Options->OutIGDir.empty())
|
||||
_OutIGDir = CTools::normalizePath (ContinentCFG.OutIGDir);
|
||||
else
|
||||
_OutIGDir = CTools::normalizePath (_Options->OutIGDir);
|
||||
|
||||
if (_Options->LandFile == "")
|
||||
if (_Options->LandFile.empty())
|
||||
_LandFile = ContinentCFG.LandFile;
|
||||
else
|
||||
_LandFile = _Options->LandFile;
|
||||
|
||||
if (_Options->DfnDir == "")
|
||||
if (_Options->DfnDir.empty())
|
||||
_DfnDir = ContinentCFG.DfnDir;
|
||||
else
|
||||
_DfnDir = _Options->DfnDir;
|
||||
|
||||
if (_Options->GameElemDir == "")
|
||||
if (_Options->GameElemDir.empty())
|
||||
_GameElemDir = ContinentCFG.GameElemDir;
|
||||
else
|
||||
_GameElemDir = _Options->GameElemDir;
|
||||
|
||||
if (_Options->InLandscapeDir == "")
|
||||
if (_Options->InLandscapeDir.empty())
|
||||
_InLandscapeDir = ContinentCFG.LandZoneWDir; // Directory where to get .zonew files
|
||||
else
|
||||
_InLandscapeDir = _Options->InLandscapeDir;
|
||||
|
||||
if (_Options->LandFarBankFile == "")
|
||||
if (_Options->LandFarBankFile.empty())
|
||||
_LandBankFile = ContinentCFG.LandBankFile; // The .smallbank file associated with the landscape
|
||||
else
|
||||
_LandBankFile = _Options->LandBankFile;
|
||||
|
||||
if (_Options->LandFarBankFile == "")
|
||||
if (_Options->LandFarBankFile.empty())
|
||||
_LandFarBankFile = ContinentCFG.LandFarBankFile; // The .farbank file
|
||||
else
|
||||
_LandFarBankFile = _Options->LandFarBankFile;
|
||||
|
||||
if (_Options->LandTileNoiseDir == "")
|
||||
if (_Options->LandTileNoiseDir.empty())
|
||||
_LandTileNoiseDir = ContinentCFG.LandTileNoiseDir; // Directory where to get displacement map
|
||||
else
|
||||
_LandTileNoiseDir = _Options->LandTileNoiseDir;
|
||||
|
|
|
@ -27,7 +27,7 @@ using namespace NLMISC;
|
|||
// ---------------------------------------------------------------------------
|
||||
void CTools::mkdir (const string &dirName)
|
||||
{
|
||||
if (dirName == "")
|
||||
if (dirName.empty())
|
||||
return;
|
||||
// Does the directory exist ?
|
||||
string newDir = pwd();
|
||||
|
@ -38,7 +38,7 @@ void CTools::mkdir (const string &dirName)
|
|||
}
|
||||
SetCurrentDirectory (newDir.c_str());
|
||||
// Create upper levels
|
||||
newDir = "";
|
||||
newDir.clear();
|
||||
string::size_type pos = dirName.rfind('\\');
|
||||
if (pos != string::npos)
|
||||
{
|
||||
|
|
|
@ -80,7 +80,7 @@ public:
|
|||
return getNpcFullName();
|
||||
else if (subPart == "function")
|
||||
return _NpcFunction;
|
||||
else if (subPart == "")
|
||||
else if (subPart.empty())
|
||||
return _NpcLabel;
|
||||
|
||||
throw EParseException(NULL, toString("var_npc don't have a subpart '%s'", subPart.c_str()).c_str());
|
||||
|
@ -137,7 +137,7 @@ public:
|
|||
|
||||
string evalVar(const string &subPart)
|
||||
{
|
||||
if (subPart == "")
|
||||
if (subPart.empty())
|
||||
return string("\"")+_NpcLabel+"\"";
|
||||
|
||||
throw EParseException(NULL, toString("var_npc_name don't have a subpart '%s'", subPart.c_str()).c_str());
|
||||
|
|
|
@ -1069,7 +1069,7 @@ void GenerateSpecialItem( int numMP, const CSString& nomMP, const MPCraftStats&
|
|||
void parseSpecialAttributes(const CSString &specialAttributes, MPCraftStats &craftStats, CExtraInfo &extraInfo)
|
||||
{
|
||||
// evaluate DropOrSell according to CraftStats: can DropOrSell if it is a MP Craft
|
||||
extraInfo.DropOrSell= craftStats.Craft != "";
|
||||
extraInfo.DropOrSell= !craftStats.Craft.empty();
|
||||
|
||||
// parse attributes
|
||||
vector<string> strArray;
|
||||
|
|
|
@ -254,7 +254,8 @@ int importCsv(const char *filename)
|
|||
do
|
||||
{
|
||||
fields.push_back(s.splitTo(';', true));
|
||||
} while (s != "");
|
||||
}
|
||||
while (!s.empty());
|
||||
}
|
||||
|
||||
// read values for each item
|
||||
|
@ -278,7 +279,8 @@ int importCsv(const char *filename)
|
|||
{
|
||||
val = s.splitTo(';', true);
|
||||
items[n].push_back(val);
|
||||
} while (s != "");
|
||||
}
|
||||
while (!s.empty());
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
@ -376,7 +378,7 @@ void updateItemField(CVectorSString &lines, uint itemIndex, uint fieldIndex, uin
|
|||
if (pos == string::npos)
|
||||
continue;
|
||||
|
||||
if (val != "")
|
||||
if (!val.empty())
|
||||
{
|
||||
// check if the attribute is the right one and not included in another one
|
||||
// for example: Protection is in ProtectionFactor
|
||||
|
@ -507,7 +509,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
// create a .csv file
|
||||
if (scriptFile != "")
|
||||
if (!scriptFile.empty())
|
||||
{
|
||||
if (CFile::getFilename(scriptFile) == scriptFile)
|
||||
scriptFile = curDir + scriptFile;
|
||||
|
@ -545,7 +547,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
// create a .txt file
|
||||
if (csvFile != "")
|
||||
if (!csvFile.empty())
|
||||
{
|
||||
if (CFile::getFilename(csvFile) == csvFile)
|
||||
csvFile = curDir + csvFile;
|
||||
|
|
|
@ -205,7 +205,7 @@ bool CExport::export_ (SExportOptions &options, IExportCB *expCB)
|
|||
if (_ExportCB != NULL)
|
||||
_ExportCB->dispPass ("Loading height map");
|
||||
_HeightMap = NULL;
|
||||
if (_Options->HeightMapFile != "")
|
||||
if (!_Options->HeightMapFile.empty())
|
||||
{
|
||||
_HeightMap = new CBitmap;
|
||||
try
|
||||
|
@ -236,7 +236,7 @@ bool CExport::export_ (SExportOptions &options, IExportCB *expCB)
|
|||
if (_ExportCB != NULL)
|
||||
_ExportCB->dispPass ("Loading height map");
|
||||
_HeightMap2 = NULL;
|
||||
if (_Options->HeightMapFile2 != "")
|
||||
if (!_Options->HeightMapFile2.empty())
|
||||
{
|
||||
_HeightMap2 = new CBitmap;
|
||||
try
|
||||
|
@ -267,7 +267,7 @@ bool CExport::export_ (SExportOptions &options, IExportCB *expCB)
|
|||
if (_ExportCB != NULL)
|
||||
_ExportCB->dispPass ("Loading color map");
|
||||
_ColorMap = NULL;
|
||||
if (_Options->ColorMapFile != "")
|
||||
if (!_Options->ColorMapFile.empty())
|
||||
{
|
||||
_ColorMap = new CBitmap;
|
||||
try
|
||||
|
@ -314,12 +314,12 @@ bool CExport::export_ (SExportOptions &options, IExportCB *expCB)
|
|||
try
|
||||
{
|
||||
// Add zone files
|
||||
if (_Options->OutZoneDir != "")
|
||||
if (!_Options->OutZoneDir.empty())
|
||||
NLMISC::CPath::getPathContent(_Options->OutZoneDir, true, false, true, allFiles);
|
||||
|
||||
// Add ig files
|
||||
vector<string> allOtherFiles;
|
||||
if (_Options->OutIGDir != "")
|
||||
if (!_Options->OutIGDir.empty())
|
||||
NLMISC::CPath::getPathContent(_Options->OutIGDir, true, false, true, allOtherFiles);
|
||||
allFiles.insert(allFiles.end(), allOtherFiles.begin(), allOtherFiles.end());
|
||||
}
|
||||
|
@ -386,7 +386,7 @@ bool CExport::export_ (SExportOptions &options, IExportCB *expCB)
|
|||
_ZoneMaxX = nMaxX;
|
||||
_ZoneMaxY = nMaxY;
|
||||
|
||||
if ((_Options->ZoneMin != "") && (_Options->ZoneMax != ""))
|
||||
if (!_Options->ZoneMin.empty() && !_Options->ZoneMax.empty())
|
||||
{
|
||||
_Options->ZoneMin = strupr (_Options->ZoneMin);
|
||||
_Options->ZoneMax = strupr (_Options->ZoneMax);
|
||||
|
|
|
@ -51,7 +51,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
}
|
||||
|
||||
if (inputfile == "")
|
||||
if (inputfile.empty())
|
||||
{
|
||||
nlwarning("Error: missing input file(s)");
|
||||
exit(EXIT_FAILURE);
|
||||
|
|
|
@ -735,7 +735,7 @@ public:
|
|||
return UserCodes[i].UserCode;
|
||||
// then look for a default code
|
||||
for (i=0; i<UserCodes.size(); ++i)
|
||||
if (UserCodes[i].Event == name && UserCodes[i].CodeSpecializer == "")
|
||||
if (UserCodes[i].Event == name && UserCodes[i].CodeSpecializer.empty())
|
||||
return UserCodes[i].UserCode;
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -669,7 +669,7 @@ NLMISC_COMMAND(pacsBuildProximityMap,"build a set of proximity maps from a cwmap
|
|||
// load the collision map file and generate our buffer from it
|
||||
CProximityMapBuffer buffer;
|
||||
string ext = CFile::getExtension(name);
|
||||
if (ext == "")
|
||||
if (ext.empty())
|
||||
ext = "cwmap2";
|
||||
string fileName= OutputPath+CFile::getFilenameWithoutExtension(name)+"."+ext;
|
||||
nlinfo("Building proximity map: Loading cwmap2 file: %s",fileName.c_str());
|
||||
|
|
|
@ -83,21 +83,21 @@ sint main(sint argc, char **argv)
|
|||
{
|
||||
if (string(argv[i]) == string("-"))
|
||||
{
|
||||
if (cmd != "")
|
||||
if (!cmd.empty())
|
||||
{
|
||||
commands.push_back(cmd);
|
||||
cmd = "";
|
||||
cmd.clear();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cmd != "")
|
||||
if (!cmd.empty())
|
||||
cmd += ' ';
|
||||
cmd += argv[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (cmd != "")
|
||||
if (!cmd.empty())
|
||||
commands.push_back(cmd);
|
||||
|
||||
NLMISC::createDebug ();
|
||||
|
|
|
@ -745,11 +745,11 @@ int extractBotNames(int argc, char *argv[])
|
|||
// saving the modified files
|
||||
|
||||
ucstring s = prepareExcelSheet(botNames);
|
||||
CI18N::writeTextFile(workBotNamesFile.asString(), s, false);
|
||||
CI18N::writeTextFile(workBotNamesFile.asString(), s);
|
||||
s = prepareExcelSheet(transBotNames);
|
||||
CI18N::writeTextFile(transBotNamesFile.asString(), s, false);
|
||||
CI18N::writeTextFile(transBotNamesFile.asString(), s);
|
||||
s = prepareExcelSheet(fcts);
|
||||
CI18N::writeTextFile(workTitleFile.asString(), s, false);
|
||||
CI18N::writeTextFile(workTitleFile.asString(), s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -315,7 +315,7 @@ void extractNewWords(string workSheetFileName, string columnId, IWordListBuilder
|
|||
ucstring s = prepareExcelSheet(workSheet);
|
||||
try
|
||||
{
|
||||
CI18N::writeTextFile(workSheetFileName.c_str(), s, false);
|
||||
CI18N::writeTextFile(workSheetFileName.c_str(), s);
|
||||
}
|
||||
catch (const Exception &e)
|
||||
{
|
||||
|
|
|
@ -190,7 +190,7 @@ bool readPhraseFile1(const std::string &filename, vector<TPhrase> &phrases, bool
|
|||
{
|
||||
ucstring doc;
|
||||
|
||||
CI18N::readTextFile(filename, doc, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, doc, false, false, false, CI18N::LINE_FMT_LF);
|
||||
verifyVersion(doc, 1);
|
||||
return readPhraseFileFromString(doc, filename, phrases, forceRehash);
|
||||
}
|
||||
|
@ -199,7 +199,7 @@ bool readPhraseFile2(const std::string &filename, vector<TPhrase> &phrases, bool
|
|||
{
|
||||
ucstring doc;
|
||||
|
||||
CI18N::readTextFile(filename, doc, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, doc, false, false, false, CI18N::LINE_FMT_LF);
|
||||
verifyVersion(doc, 2);
|
||||
return readPhraseFileFromString(doc, filename, phrases, forceRehash);
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ bool mergeStringDiff(vector<TStringInfo> &strings, const string &language, const
|
|||
{
|
||||
// Check if the diff is translated
|
||||
ucstring text;
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
if (text.find(ucstring("DIFF NOT TRANSLATED")) != ucstring::npos)
|
||||
{
|
||||
LOG("Diff file [%s] is not translated, merging it later.\n", CFile::getFilename(diffs[i]).c_str());
|
||||
|
@ -679,7 +679,7 @@ void cleanComment(const std::string & filename)
|
|||
ucstring text;
|
||||
uint nbOldValue=0;
|
||||
|
||||
CI18N::readTextFile(filename, text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
|
||||
ucstring newText;
|
||||
ucstring::size_type last = 0;
|
||||
|
@ -703,7 +703,7 @@ void cleanComment(const std::string & filename)
|
|||
}
|
||||
}
|
||||
text = newText;
|
||||
newText = ucstring("");
|
||||
newText.clear();
|
||||
last = 0;
|
||||
while ( last != ucstring::npos)
|
||||
{
|
||||
|
@ -800,7 +800,7 @@ int mergeStringDiff(int argc, char *argv[])
|
|||
{
|
||||
// backup the original file
|
||||
ucstring old;
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_LF);
|
||||
if (old != str)
|
||||
CFile::moveFile(historyDir+CFile::getFilenameWithoutExtension(filename)+"_"+diffVersion+"."+CFile::getExtension(filename), filename);
|
||||
}
|
||||
|
@ -840,7 +840,7 @@ bool mergePhraseDiff(vector<TPhrase> &phrases, const string &language, bool only
|
|||
{
|
||||
// Check if the diff is translated
|
||||
ucstring text;
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
verifyVersion(text, 1);
|
||||
if (text.find(ucstring("DIFF NOT TRANSLATED")) != ucstring::npos)
|
||||
{
|
||||
|
@ -1164,7 +1164,7 @@ int mergePhraseDiff(int argc, char *argv[], int version)
|
|||
{
|
||||
// backup the original file
|
||||
ucstring old;
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_LF);
|
||||
if (old != str)
|
||||
CFile::moveFile(historyDir+CFile::getFilenameWithoutExtension(filename)+"_"+diffVersion+"."+CFile::getExtension(filename), filename);
|
||||
}
|
||||
|
@ -1333,7 +1333,7 @@ int mergeClauseDiff(int argc, char *argv[])
|
|||
{
|
||||
// backup the original file
|
||||
ucstring old;
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_LF);
|
||||
if (old != str)
|
||||
CFile::moveFile(historyDir+CFile::getFilenameWithoutExtension(filename)+"_"+diffVersion+"."+CFile::getExtension(filename), filename);
|
||||
}
|
||||
|
@ -1358,7 +1358,7 @@ bool mergeWorksheetDiff(const std::string filename, TWorksheet &sheet, bool only
|
|||
if (onlyTranslated)
|
||||
{
|
||||
ucstring text;
|
||||
CI18N::readTextFile(fileList[i], text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(fileList[i], text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
if (text.find(ucstring("DIFF NOT TRANSLATED")) != ucstring::npos)
|
||||
{
|
||||
LOG("Diff file [%s] is not translated, merging it later.\n", CFile::getFilename(fileList[i]).c_str());
|
||||
|
@ -1666,7 +1666,7 @@ int makeWorksheetDiff(int argc, char *argv[], const std::string &additionFilenam
|
|||
|
||||
string fn(CFile::getFilenameWithoutExtension(referenceFilename)), ext(CFile::getExtension(referenceFilename));
|
||||
std::string diffName(diffDir+fn+"_diff_"+diffVersion+"."+ext);
|
||||
CI18N::writeTextFile(diffName, str, false);
|
||||
CI18N::writeTextFile(diffName, str);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1691,9 +1691,9 @@ int mergeWorksheetDiff(int argc, char *argv[], const std::string &filename, cons
|
|||
// there is no translated file yet, build one from the working file.
|
||||
ucstring str;
|
||||
string addfn = addDir+additionFile;
|
||||
CI18N::readTextFile(addfn, str, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(addfn, str, false, false, false, CI18N::LINE_FMT_LF);
|
||||
str = str.substr(0, str.find(nl)+2);
|
||||
CI18N::writeTextFile(transDir+filename, str, false);
|
||||
CI18N::writeTextFile(transDir+filename, str);
|
||||
// reread the file.
|
||||
bool res = loadExcelSheet(transDir+filename, translated);
|
||||
nlassert(res);
|
||||
|
@ -1711,7 +1711,7 @@ int mergeWorksheetDiff(int argc, char *argv[], const std::string &filename, cons
|
|||
{
|
||||
// backup the original file
|
||||
ucstring old;
|
||||
CI18N::readTextFile(transDir+filename, old, false, true, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(transDir+filename, old, false, true, false, CI18N::LINE_FMT_LF);
|
||||
if (old != str)
|
||||
{
|
||||
string fn(CFile::getFilenameWithoutExtension(filename)), ext(CFile::getExtension(filename));
|
||||
|
@ -1720,7 +1720,7 @@ int mergeWorksheetDiff(int argc, char *argv[], const std::string &filename, cons
|
|||
}
|
||||
|
||||
if (translated.size() > 0)
|
||||
CI18N::writeTextFile(transDir+filename, str, false);
|
||||
CI18N::writeTextFile(transDir+filename, str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1865,7 +1865,7 @@ void cropLines(const std::string &filename, uint32 nbLines)
|
|||
|
||||
LOG("Cropping %u lines from file '%s'\n", nbLines, filename.c_str());
|
||||
|
||||
CI18N::readTextFile(filename, utext, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, utext, false, false, false, CI18N::LINE_FMT_LF);
|
||||
|
||||
string text = utext.toUtf8();
|
||||
|
||||
|
@ -1881,7 +1881,7 @@ void cropLines(const std::string &filename, uint32 nbLines)
|
|||
|
||||
utext.fromUtf8(text);
|
||||
|
||||
CI18N::writeTextFile(filename, utext, true);
|
||||
CI18N::writeTextFile(filename, utext);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1910,7 +1910,7 @@ int makeWork()
|
|||
// change #include "*_en.txt" into #include "*_wk.txt"
|
||||
ucstring utext;
|
||||
|
||||
CI18N::readTextFile(filename, utext, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, utext, false, false, false, CI18N::LINE_FMT_LF);
|
||||
string text = utext.toUtf8();
|
||||
|
||||
bool changedFile = false;
|
||||
|
@ -1943,7 +1943,7 @@ int makeWork()
|
|||
if (changedFile)
|
||||
{
|
||||
utext.fromUtf8(text);
|
||||
CI18N::writeTextFile(filename, utext, true);
|
||||
CI18N::writeTextFile(filename, utext);
|
||||
}
|
||||
|
||||
// change filename
|
||||
|
@ -2348,7 +2348,7 @@ void patchWorkFile(vector<TPhrase> &updatedPhrase, const std::string & filename)
|
|||
{
|
||||
ucstring text;
|
||||
if ( updatedPhrase.empty() ) { return; }
|
||||
CI18N::readTextFile(filename, text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
vector<TPhrase>::const_iterator first(updatedPhrase.begin());
|
||||
vector<TPhrase>::const_iterator last(updatedPhrase.end());
|
||||
for (; first != last; ++first)
|
||||
|
@ -2489,7 +2489,7 @@ bool mergePhraseDiff2(vector<TPhrase> &phrases, const string &language, bool onl
|
|||
{
|
||||
// Check if the diff is translated
|
||||
ucstring text;
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(diffs[i], text, false, false, false, CI18N::LINE_FMT_LF);
|
||||
verifyVersion(text, 2);
|
||||
if (text.find(ucstring("DIFF NOT TRANSLATED")) != ucstring::npos)
|
||||
{
|
||||
|
@ -2947,7 +2947,7 @@ void preprocessTextFile(const std::string &filename,
|
|||
|
||||
// Transform the string in ucstring according to format header
|
||||
if (!text.empty())
|
||||
CI18N::readTextBuffer((uint8*)&text[0], (uint)text.size(), result, false);
|
||||
CI18N::readTextBuffer((uint8*)&text[0], (uint)text.size(), result);
|
||||
|
||||
|
||||
|
||||
|
@ -3029,7 +3029,7 @@ int mergePhraseDiff(int argc, char *argv[])
|
|||
{
|
||||
// backup the original file
|
||||
ucstring old;
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_CRLF);
|
||||
CI18N::readTextFile(filename, old, false, true, false, CI18N::LINE_FMT_LF);
|
||||
if (old != str)
|
||||
CFile::moveFile((historyDir+CFile::getFilenameWithoutExtension(filename)+"_"+diffVersion+"."+CFile::getExtension(filename)).c_str(), filename.c_str());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue