From bab4b3af21e747babc42cd86a8d8b8600d84424d Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 31 May 2011 16:22:57 +0200 Subject: [PATCH 01/60] Changed: #1304: mission_compiler objectives: check and script generation mission compiler now checks if we are not asking several guild members to complete an objective whereas the mission is not a guild mission. It also generates the 'nb_guild_members_needed' parameter for objectives in the script. --HG-- branch : gsoc2011-guildmissions --- .../world_editor_classes.xml | 4 +- .../mission_compiler_lib/mission_compiler.h | 5 ++ .../leveldesign/mission_compiler_lib/step.h | 5 ++ .../mission_compiler_lib/step_content.cpp | 76 ++++++++++++++++--- 4 files changed, 79 insertions(+), 11 deletions(-) diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml index 1e4f9d723..238158bbf 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml @@ -1304,9 +1304,9 @@ - + diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/mission_compiler.h b/code/ryzom/tools/leveldesign/mission_compiler_lib/mission_compiler.h index 756b3859d..6f993679b 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/mission_compiler.h +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/mission_compiler.h @@ -318,6 +318,11 @@ public: bool isThereAJumpTo(const std::string &stepName); + bool isGuildMission() const + { + return _Guild; + } + private: std::string genPreRequisites(); diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h b/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h index e93db4524..9d2a053df 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h @@ -192,6 +192,11 @@ protected: std::vector _RoleplayObj; CPhrase _RoleplayPhrase; bool _HideObj; + + // Option nb_guild_members_needed, available for each objective + int _NbGuildMembersNeeded; + + std::string genNbGuildMembersNeededOption(CMissionData &md); public: void init(CMissionData &md, NLLIGO::IPrimitive *prim); diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index 19d210f0f..c18709b1d 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -1630,6 +1630,20 @@ void CContentObjective::init(CMissionData &md, IPrimitive *prim) _OverloadPhrase.initPhrase(md, prim, _OverloadObj, numEntry, params); // init the roleplay phrase _RoleplayPhrase.initPhrase(md, prim, _RoleplayObj, numEntry, params); + + // check for the 'nb_guild_members_needed' option and see if it's correct for this mission + string nbGuildMembersNeeded = md.getProperty(prim, "nb_guild_members_needed", false, true); + if (nbGuildMembersNeeded.empty()) + nbGuildMembersNeeded = "1"; + if (!fromString(nbGuildMembersNeeded.c_str(), _NbGuildMembersNeeded)) + _NbGuildMembersNeeded = 1; + + // Check: + if (!md.isGuildMission() && _NbGuildMembersNeeded != 1) + { + string err = toString("primitive(%s): nb_guild_members_needed != 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } } // --------------------------------------------------------------------------- @@ -1649,6 +1663,20 @@ string CContentObjective::genCode(CMissionData &md) return ret; } +// --------------------------------------------------------------------------- +std::string CContentObjective::genNbGuildMembersNeededOption(CMissionData &md) +{ + string ret = ""; + // If we are in a guild mission we add the 'nb_guild_members_needed' option to the script + if (md.isGuildMission()) + { + ret = "; nb_guild_members_needed: "; + ret += toString(_NbGuildMembersNeeded); + } + + return ret; +} + // --------------------------------------------------------------------------- string CContentObjective::genPhrase() { @@ -1949,6 +1977,9 @@ public: if (!_Place.empty()) ret += " : "+_Place; + + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2004,6 +2035,8 @@ public: if (!_Phrase.isEmpty()) ret += " : "+_Phrase.genScript(md); + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2078,6 +2111,8 @@ public: { ret += ": "+_Place; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2151,6 +2186,8 @@ public: if (i < _Mps.size()-1) ret += "; "; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2276,6 +2313,8 @@ public: if (i < _Items.size()-1) ret += "; "; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2349,6 +2388,8 @@ public: if (i < _Items.size()-1) ret += "; "; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2479,7 +2520,8 @@ public: if (!_Place.empty()) ret += " : " + _Place; - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2564,6 +2606,8 @@ public: { ret += " : "+_Npc; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2645,6 +2689,8 @@ public: { ret += " : "+_Npc; } + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2755,7 +2801,10 @@ public: if (i < _Items.size()-1) ret += "; "; }; - ret += " : "+_Npc +NL; + ret += " : "+_Npc; + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); + ret += NL; return ret; } @@ -2790,7 +2839,10 @@ public: string ret; ret = CContentObjective::genCode(md); - ret += "give_money : "+_Amount+" : "+_Npc+NL; + ret += "give_money : "+_Amount+" : "+_Npc; + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); + ret += NL; return ret; } @@ -2841,7 +2893,8 @@ public: ret += "; "; } } - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2877,7 +2930,8 @@ public: if (_SaveAll) ret += " : save_all"; - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2950,7 +3004,8 @@ public: if (i < _Skills.size()-1) ret += "; "; } - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2988,7 +3043,8 @@ public: if (i < _Missions.size()-1) ret += "; "; } - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3026,7 +3082,8 @@ public: if (i < _MsgContent.size()-1) ret += " "; } - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3242,7 +3299,8 @@ public: ret += "ring_scenario : "; ret += _ScenarioTag; - + // Add the 'nb_guild_members_needed' parameter if needed + ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; From 91fef65450c56f8607a8c5bfc11986c04de58367 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 31 May 2011 22:00:27 +0200 Subject: [PATCH 02/60] Changed: #1304: mission_compiler actions: add new ones, check and script generation Add 2 new actions for the mission compiler: recv_charge_point and give_control. Add the 'guild' option for some actions: check if the mission is valid, and change the script generation to add this option. --HG-- branch : gsoc2011-guildmissions --- .../mission_compiler_lib/step_content.cpp | 134 +++++++++++++++++- 1 file changed, 132 insertions(+), 2 deletions(-) diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index c18709b1d..456f7e286 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -142,6 +142,7 @@ REGISTER_STEP_CONTENT(CActionJumpTo, "jump_to"); class CActionRecvMoney : public IStepContent { string _Amount; + bool _Guild; void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -152,12 +153,27 @@ public: { IStepContent::init(md, prim); _Amount = md.getProperty(prim, "amount", true, false); + + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } } string genCode(CMissionData &md) { if (!_Amount.empty()) - return "recv_money : "+_Amount+NL; + { + string ret; + ret = "recv_money : "+_Amount; + if (_Guild) + ret += "; guild"; + ret += NL; + return ret; + } else return string(); } @@ -166,6 +182,72 @@ public: REGISTER_STEP_CONTENT(CActionRecvMoney, "recv_money"); +// --------------------------------------------------------------------------- +class CActionRecvChargePoint : public IStepContent +{ + string _Amount; + + void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) + { + numEntry = 0; + } +public: + void init(CMissionData &md, IPrimitive *prim) + { + IStepContent::init(md, prim); + _Amount = md.getProperty(prim, "charge_points", true, false); + } + + string genCode(CMissionData &md) + { + if (!_Amount.empty()) + { + string ret; + ret = "recv_charge_point : "+_Amount; + ret += NL; + return ret; + } + else + return string(); + } + +}; +REGISTER_STEP_CONTENT(CActionRecvChargePoint, "recv_charge_point"); + + +// --------------------------------------------------------------------------- +class CActionGiveOutpostControl : public IStepContent +{ + string _OutpostName; + + void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) + { + numEntry = 0; + } +public: + void init(CMissionData &md, IPrimitive *prim) + { + IStepContent::init(md, prim); + _OutpostName = md.getProperty(prim, "outpost_name", true, false); + } + + string genCode(CMissionData &md) + { + if (!_OutpostName.empty()) + { + string ret; + ret = "give_control : "+_OutpostName; + ret += NL; + return ret; + } + else + return string(); + } + +}; +REGISTER_STEP_CONTENT(CActionGiveOutpostControl, "give_control"); + + // --------------------------------------------------------------------------- class CActionSpawnMission : public IStepContent { @@ -590,6 +672,7 @@ class CActionRecvFame : public IStepContent { string _Faction; string _Fame; + bool _Guild; void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -602,12 +685,27 @@ public: _Faction = md.getProperty(prim, "faction", true, false); _Fame = md.getProperty(prim, "value", true, false); + + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } } string genCode(CMissionData &md) { if (!_Faction.empty() && !_Fame.empty()) - return string("recv_fame : ")+_Faction+" "+_Fame+NL; + { + string ret; + ret = "recv_fame : "+_Faction+" "+_Fame; + if (_Guild) + ret += "; guild"; + ret += NL; + return ret; + } else return string(); } @@ -628,6 +726,7 @@ class CActionRecvItem : public IStepContent vector _Items; bool _QualSpec; bool _Group; + bool _Guild; void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -675,6 +774,13 @@ public: s = md.getProperty(prim, "group", true, false); _Group = (strlwr(s) == "true"); + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } IStepContent::init(md, prim); } @@ -693,6 +799,8 @@ public: ret += " : "+_BotGiver; if (_Group) ret += " : group"; + if (_Guild) + ret += "; guild"; ret += NL; } @@ -707,6 +815,7 @@ class CActionRecvNamedItem : public IStepContent { vector _Items; bool _Group; + bool _Guild; void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -743,6 +852,14 @@ public: s = md.getProperty(prim, "group", true, false); _Group = (strlwr(s) == "true"); + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } + IStepContent::init(md, prim); } @@ -756,6 +873,8 @@ public: ret += "recv_named_item : "+item.ItemName+" "+item.ItemQuant; if (_Group) ret += " : group"; + if (_Guild) + ret += "; guild"; ret += NL; } @@ -777,6 +896,7 @@ class CActionDestroyItem : public IStepContent string _BotDestroyer; vector _Items; + bool _Guild; void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -821,6 +941,14 @@ public: _Items.push_back(item); } } + + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } IStepContent::init(md, prim); } @@ -839,6 +967,8 @@ public: ret +=" "+item.Desc.ItemQual; if (!_BotDestroyer.empty()) ret += " : "+_BotDestroyer; + if (_Guild) + ret += "; guild"; ret += NL; } From c4d39b2f98c13c6890e6265e9bdba1cb7a67da8b Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 7 Jun 2011 14:42:00 +0200 Subject: [PATCH 03/60] Changed: #1304: Updating CMissionGuild for guild missions. Implementation of the functions: - updateUsersJournalEntry - clearUsersJournalEntry --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.h | 5 ++ .../mission_manager/mission_guild.cpp | 69 ++++++++++++++++++- .../mission_manager/mission_manager.cpp | 4 ++ .../mission_manager/missions_commands.cpp | 14 +++- 4 files changed, 88 insertions(+), 4 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index e740540ca..3f3b04eb6 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -179,6 +179,11 @@ public: void removeMission(CMissionGuild * mission, TMissionResult result); void addSuccessfulMission(CMissionTemplate * templ); bool processMissionEvent( CMissionEvent & event, TAIAlias alias = CAIAliasTranslator::Invalid); + ///\return the mission + inline std::vector & getMissions() + { + // To Do + } //@} /// inventory management diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.cpp index d3bb2c106..63b74e997 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.cpp @@ -25,18 +25,83 @@ #include "player_manager/player.h" #include "player_manager/character.h" +using namespace std; +using namespace NLMISC; + NL_INSTANCE_COUNTER_IMPL(CMissionGuild); //---------------------------------------------------------------------------- void CMissionGuild::updateUsersJournalEntry() { - /// todo guild mission + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( _GuildId ); + if (!guild) + { + nlwarning( "cant find guild ID : %d", _GuildId ); + return; + } + + for ( std::map::iterator it = guild->getMembersBegin(); + it != guild->getMembersEnd();++it ) + { + CCharacter * user = PlayerManager.getChar( it->first ); + if ( !user ) + { + nlwarning( "cant find user %s", it->first.toString().c_str() ); + continue; + } + updateUserJournalEntry(*user,"GROUP:"); + } } //---------------------------------------------------------------------------- void CMissionGuild::clearUsersJournalEntry() { - /// todo guild mission + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( _GuildId ); + if (!guild) + { + nlwarning( "cant find guild ID : %d", _GuildId ); + return; + } + + for ( std::map::iterator it = guild->getMembersBegin(); + it != guild->getMembersEnd();++it ) + { + CCharacter * user = PlayerManager.getChar( it->first ); + if ( !user ) + { + nlwarning( "cant find user %s", it->first.toString().c_str() ); + continue; + } + + CBankAccessor_PLR::TGROUP::TMISSIONS::TArray &missionItem = CBankAccessor_PLR::getGROUP().getMISSIONS().getArray(_ClientIndex); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:TYPE",_ClientIndex), 0); + missionItem.setTYPE(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:ICON",_ClientIndex), 0); + missionItem.setICON(user->_PropertyDatabase, CSheetId::Unknown); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:TITLE",_ClientIndex), 0); + missionItem.setTITLE(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:DETAIL_TEXT",_ClientIndex), 0); + missionItem.setDETAIL_TEXT(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:END_DATE",_ClientIndex), 0 ); + missionItem.setEND_DATE(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:BEGIN_DATE",_ClientIndex), 0 ); + missionItem.setBEGIN_DATE(user->_PropertyDatabase, 0); + for (uint i = 0; i < NB_JOURNAL_COORDS; i++) + { + CBankAccessor_PLR::TGROUP::TMISSIONS::TArray::TTARGET &targetItem = missionItem.getTARGET(i); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:TARGET%u:TITLE",_ClientIndex,i), 0); + targetItem.setTITLE(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:TARGET%u:X",_ClientIndex,i), 0); + targetItem.setX(user->_PropertyDatabase, 0); + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:TARGET%u:Y",_ClientIndex,i), 0); + targetItem.setY(user->_PropertyDatabase, 0); + } + for (uint i = 0; i < NB_STEP_PER_MISSION; i++) + { + // user->_PropertyDatabase.setProp( NLMISC::toString( "GROUP:MISSIONS:%u:GOALS:%u:TEXT",_ClientIndex,i), 0); + missionItem.getGOALS().getArray(i).setTEXT(user->_PropertyDatabase, 0); + } + } } diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp index b0bd41ffb..55a08ef4f 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp @@ -846,6 +846,10 @@ void CMissionManager::instanciateMission(CCharacter* user,TAIAlias alias, TAIAl inst = module->pickMission( templ->Alias ); if (!inst) return; + + /// /!\ Do the same thing that the team missions but with the loop: for ( uint i = MaxGroupMissionCount; i < MaxGroupMissionCount + MaxGuildMissionCount; i++ ) + /// Instead of for ( uint i = 0; i < MaxGroupMissionCount; i++ ), so that we use available space for guild missions + /// todo guild mission : see solo /* todo guild mission : implement that in module diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp index 78229d3a8..a5f0f863f 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp @@ -30,7 +30,9 @@ #include "team_manager/team_manager.h" #include "mission_manager/mission_team.h" #include "mission_manager/mission_step_ai.h" +#include "mission_manager/mission_guild.h" #include "guild_manager/guild_manager.h" +#include "guild_manager/guild.h" #include "admin.h" #include "creature_manager/creature_manager.h" @@ -81,10 +83,18 @@ NLMISC_COMMAND(forceJournalUpdate,"force mission journal update","getMissions()[i]->updateUsersJournalEntry(); } } - for (uint i = 0; i < MaxGuildMissionCount; i++) + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); + if (guild) { - /// todo guild mission + for ( uint i = 0; i < guild->getMissions().size(); i++ ) + { + guild->getMissions()[i]->updateUsersJournalEntry(); + } } + /*for (uint i = 0; i < MaxGuildMissionCount; i++) + { + /// todo guild mission + }*/ return true; } // missionProgress // From ef009ebc90911b5bb65e35ea23e7497fede2f31d Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 20 Jun 2011 15:15:07 +0200 Subject: [PATCH 04/60] Changed: #1304: Instanciation of guild missions. --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.h | 1 + .../guild_manager/guild_member_module.h | 6 ++ .../guild_manager/guild_officer_module.h | 8 +++ .../mission_manager/mission_guild.h | 5 ++ .../mission_manager/mission_manager.cpp | 60 +++++++++++++++---- 5 files changed, 69 insertions(+), 11 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 3f3b04eb6..49b02e93c 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -184,6 +184,7 @@ public: { // To Do } + void addMission(CMissionGuild* guildMission) {} //@} /// inventory management diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild_member_module.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild_member_module.h index 4447e356f..46dee0f96 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild_member_module.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild_member_module.h @@ -99,6 +99,12 @@ public: /// user wanna pick a mission CMissionGuild * pickMission( TAIAlias alias ); + // Function to check if the member can pick a mission. By default only Officer and above can pick a guild mission + virtual bool canPickMission(TAIAlias alias) + { + return false; + } + /// set the version of last sent info of items in guild inventory void setLastSentInfoVersion(uint32 slot, uint8 infoVersion) { diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild_officer_module.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild_officer_module.h index 7d6f49096..e31885300 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild_officer_module.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild_officer_module.h @@ -34,6 +34,14 @@ public: :CGuildMemberModule(proxy,guildMember){} virtual bool canAffectGrade(EGSPD::CGuildGrade::TGuildGrade grade)const; virtual bool canInvite()const; + + // Function to check if the member can pick a mission. + // By default only Officers and above can pick a guild mission. + // So we don't need to implement this function for the other grades + virtual bool canPickMission(TAIAlias alias) + { + return true; + } }; ; diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h index e0c65f2c2..76cd0cb6a 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h @@ -32,6 +32,7 @@ public: CMissionGuild() : _Chained(false) { } + inline void setGuild( uint16 guildId ); /// override void updateUsersJournalEntry(); /// override @@ -58,6 +59,10 @@ private: bool _Chained; }; +void CMissionGuild::setGuild( uint16 guildId ) +{ + _GuildId = guildId; +} #endif // RY_MISSION_GUILD_H diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp index 55a08ef4f..057412068 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp @@ -836,29 +836,68 @@ void CMissionManager::instanciateMission(CCharacter* user,TAIAlias alias, TAIAl } else if ( templ->Type == MISSION_DESC::Guild ) { - /// todo guild mission + /// Check to see if we can pick the mission CGuildMemberModule * module; if ( !user->getModuleParent().getModule( module ) ) { MISDBG("%s user not in a guild", sDebugPrefix.c_str()); return; } - inst = module->pickMission( templ->Alias ); - if (!inst) + /* /// This is already checked in the prerequisites + if (!module->pickMission( templ->Alias )) + { + /// Todo : error message for the member return; + }*/ + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); + if (!guild) + { + nlwarning( "cant find guild ID : %d", _GuildId ); + return; + } + if ( !templ->Tags.NoList && guild->getMissions().size() >= MaxGuildMissionCount) + { + CCharacter::sendDynamicSystemMessage(user->getId(), "MISSION_MAX_GUILD_REACHED" ); + return; + } + + CMissionGuild * guildMission = EGS_PD_CAST( EGSPD::CMissionGuildPD::create( templ->Alias ) ); + if ( !guildMission ) + { + MISDBG("%s could not create guild mission", sDebugPrefix.c_str()); + return; + } + guildMission->onCreation( giver ); + guildMission->setGuild(user->getGuildId()); + + // Find a suitable client index (for non-invisible missions) + if ( templ->Tags.NoList == false ) + { + uint8 idx = 0; + for ( uint i = MaxGroupMissionCount; i < MaxGroupMissionCount + MaxGuildMissionCount; i++ ) + { + if ( ! CBankAccessor_PLR::getGROUP().getMISSIONS().getArray(i).getTITLE(user->_PropertyDatabase)) + { + idx = i; + break; + } + } + guildMission->setClientIndex( idx ); + } + + // Add mission + guild->addMission( guildMission ); + inst = guildMission; /// /!\ Do the same thing that the team missions but with the loop: for ( uint i = MaxGroupMissionCount; i < MaxGroupMissionCount + MaxGuildMissionCount; i++ ) /// Instead of for ( uint i = 0; i < MaxGroupMissionCount; i++ ), so that we use available space for guild missions - /// todo guild mission : see solo - /* - todo guild mission : implement that in module - teamMission->initBasics( giver ); - soloMission->setTeam( user->getTeamId() ); + /*//teamMission->initBasics( giver ); + //soloMission->setTeam( user->getTeamId() ); CGuild * guild = user->getGuild(); if ( guild ) { - mission->getguild if ( guild->getMissions().size() >= MaxGuildMissionCount) { CCharacter::sendDynamicSystemMessage(user->getId(), "MISSION_MAX_GUILD_REACHED" ); @@ -884,8 +923,7 @@ void CMissionManager::instanciateMission(CCharacter* user,TAIAlias alias, TAIAl else { - } - */ + }*/ } else { From a7f4bfa718411811d3c861908e3f12831fde5d74 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 20 Jun 2011 16:08:12 +0200 Subject: [PATCH 05/60] Changed: #1304: Add guild missions prerequisites. --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.h | 2 + .../mission_manager/mission_manager.cpp | 3 +- .../mission_manager/mission_template.cpp | 102 ++++++++++++++---- 3 files changed, 86 insertions(+), 21 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 49b02e93c..ecedbf9ee 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -182,9 +182,11 @@ public: ///\return the mission inline std::vector & getMissions() { + return std::vector(); // To Do } void addMission(CMissionGuild* guildMission) {} + bool isMissionSuccessfull(TAIAlias alias) { return false; } //@} /// inventory management diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp index 057412068..ca5d4bba0 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_manager.cpp @@ -44,6 +44,7 @@ #include "egs_utils.h" #include "egs_pd.h" #include "guild_manager/guild_member_module.h" +#include "guild_manager/guild_manager.h" #include "building_manager/building_manager.h" #include "building_manager/room_instance.h" #include "zone_manager.h" @@ -853,7 +854,7 @@ void CMissionManager::instanciateMission(CCharacter* user,TAIAlias alias, TAIAl CGuild * guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if (!guild) { - nlwarning( "cant find guild ID : %d", _GuildId ); + nlwarning( "cant find guild ID : %d", user->getGuildId() ); return; } if ( !templ->Tags.NoList && guild->getMissions().size() >= MaxGuildMissionCount) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_template.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_template.cpp index dfd516b45..af0686f1e 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_template.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_template.cpp @@ -1307,21 +1307,57 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos else if ( Type == MISSION_DESC::Guild ) { /// todo guild mission - /* - CGuild * guild = user->getGuild(); + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if ( guild == NULL ) { MISDBG("No guild"); return MISSION_DESC::PreReqFail; + + /*if (logOnFail) + MISDBG("%s No guild", sDebugPrefix.c_str()); + + if (!fillPrereqInfos) + return MISSION_DESC::PreReqFail; + + prereqDesc.Description = STRING_MANAGER::sendStringToClient(user->getEntityRowId(), "MISSION_PREREQ_TEAM", TVectorParamCheck()); + prereqDesc.IsMandatory = true; + prereqDesc.Validated = false; + prereqInfos.Prerequisits.push_back(prereqDesc); + + addedPrereqTexts.insert("MISSION_PREREQ_TEAM"); + + returnValue = MISSION_DESC::PreReqFail; + logOnFail = false;*/ } // check if the mission is already picked for ( uint j = 0 ; j < guild->getMissions().size(); j++ ) { - if ( guild->getMissions()[j]->getTemplate()->Alias == alias ) + if ( guild->getMissions()[j]->getTemplateId() == alias || + guild->getMissions()[j]->getMainMissionTemplateId() == alias) { MISDBG("The guild already own this mission"); return MISSION_DESC::PreReqFail; + + /*if (logOnFail) + MISDBG("%s The guild already own this mission", sDebugPrefix.c_str()); + + if (!fillPrereqInfos) + return MISSION_DESC::PreReqFail; + + if (addedPrereqTexts.find("MISSION_PREREQ_ALREADY_DONE") == addedPrereqTexts.end()) + { + prereqDesc.Description = STRING_MANAGER::sendStringToClient(user->getEntityRowId(), "MISSION_PREREQ_ALREADY_DONE", TVectorParamCheck()); + prereqDesc.IsMandatory = true; + prereqDesc.Validated = false; + prereqInfos.Prerequisits.push_back(prereqDesc); + addedPrereqTexts.insert("MISSION_PREREQ_ALREADY_DONE"); + } + + returnValue = MISSION_DESC::PreReqFail; + logOnFail = false;*/ } + } // check non replayable missions if( !Tags.Replayable ) @@ -1329,11 +1365,29 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos if (guild->isMissionSuccessfull(alias)) // if ( std::find(guild->getSuccessfulMissions().begin(),guild->getSuccessfulMissions().end(), alias) != guild->getSuccessfulMissions().end() ) { - MISDBG("solo non replayable"); + MISDBG("mission non replayable"); return MISSION_DESC::PreReqFail; + + /*if (logOnFail) + MISDBG("%s Guild mission already done and not replayable", sDebugPrefix.c_str()); + + if (!fillPrereqInfos) + return MISSION_DESC::PreReqFailAlreadyDone; + + if (addedPrereqTexts.find("MISSION_PREREQ_ALREADY_DONE") == addedPrereqTexts.end()) + { + prereqDesc.Description = STRING_MANAGER::sendStringToClient(user->getEntityRowId(), "MISSION_PREREQ_ALREADY_DONE", TVectorParamCheck()); + prereqDesc.IsMandatory = true; + prereqDesc.Validated = false; + prereqInfos.Prerequisits.push_back(prereqDesc); + addedPrereqTexts.insert("MISSION_PREREQ_ALREADY_DONE"); + } + + returnValue = MISSION_DESC::PreReqFailAlreadyDone; + logOnFail = false;*/ } } - */ + } else { @@ -1412,7 +1466,7 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos if ( templ->Type == MISSION_DESC::Guild ) { /// todo guild mission - /* + CGuild* guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if ( ! guild ) { MISDBG("Require needed mission at line %u (guild mission but player has no guild)", Prerequisits.NeededMissions[i].Line); @@ -1420,7 +1474,7 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos } if (guild->isMissionSuccessfull(templ->Alias)) break; - */ + } else if ( templ->Type == MISSION_DESC::Solo ) { @@ -1473,15 +1527,14 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos else if ( templ->Type == MISSION_DESC::Guild ) { /// todo guild mission - /* + CGuild* guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if ( !guild ) break; if (!guild->isMissionSuccessfull(templ->Alias)) - - if (!guild || !guild->isMissionSuccessfull(templ->Alias)) - break; - */ + /*if (!guild || !guild->isMissionSuccessfull(templ->Alias)) + break;*/ + } else if ( templ->Type == MISSION_DESC::Solo ) { @@ -1537,8 +1590,8 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos { /// todo guild mission - /* - + + CGuild* guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if ( !guild ) { MISDBG("Require running mission at line %u (guild mission but player has no guild)", Prerequisits.RunningMissions[i].Line ); @@ -1548,12 +1601,12 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos for ( ; k < guild->getMissions().size(); k++ ) { - if ( guild->getMissions()[k]->getTemplate()->Alias == templ->Alias ) + if ( guild->getMissions()[k]->getTemplateId() == templ->Alias ) break; } if (k != guild->getMissions().size()) break; - */ + } else if ( templ->Type == MISSION_DESC::Solo ) { @@ -1651,20 +1704,20 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos { /// todo guild mission - /* - + + CGuild* guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); if(!guild) break; uint k=0; for ( ; k < guild->getMissions().size(); k++ ) { - if ( guild->getMissions()[k]->getTemplate()->Alias == templ->Alias ) + if ( guild->getMissions()[k]->getTemplateId() == templ->Alias ) break; } if (k == guild->getMissions().size()) break; - */ + } else if ( templ->Type == MISSION_DESC::Solo ) { @@ -2041,6 +2094,15 @@ uint32 CMissionTemplate::testPrerequisits( CCharacter * user, CPrerequisitInfos if (!fillPrereqInfos) return MISSION_DESC::PreReqFail; + /*if (addedPrereqTexts.find("GUILD_BUILDING_BAD_GRADE") == addedPrereqTexts.end()) + { + prereqDesc.Description = STRING_MANAGER::sendStringToClient(user->getEntityRowId(), "GUILD_BUILDING_BAD_GRADE", TVectorParamCheck()); + prereqDesc.IsMandatory = true; + prereqDesc.Validated = false; + prereqInfos.Prerequisits.push_back(prereqDesc); + addedPrereqTexts.insert("GUILD_BUILDING_BAD_GRADE"); + }*/ + returnValue = MISSION_DESC::PreReqFail; logOnFail = false; } From 19cfe260328633662835109e60ddffec06282254 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Wed, 29 Jun 2011 14:44:30 +0200 Subject: [PATCH 06/60] Changed: #1304: Implementation of basic CGuild functions for guild missions --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 44 ++++++++++++++++--- .../guild_manager/guild.h | 27 +++++++++--- 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 56a2606dd..ccf55d54b 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -34,6 +34,7 @@ #include "outpost_manager/outpost_manager.h" #include "primitives_parser.h" #include "modules/shard_unifier_client.h" +#include "mission_manager/mission_manager.h" /// todo guild remove entity id translator #include "nel/misc/eid_translator.h" @@ -686,23 +687,54 @@ void CGuild::unregisterGuild() // //} - //---------------------------------------------------------------------------- -void CGuild::removeMission(CMissionGuild * mission, TMissionResult result) +void CGuild::removeMission( uint idx, TMissionResult result) { - /// todo guild mission + if ( idx >= _Missions.size() ) + return; + + /// if the mission was finished, the result is success + if ( _Missions[idx]->getFinished() ) + { + if ( _Missions[idx]->getMissionSuccess() ) + result = mr_success; + else + result = mr_fail; + } + + CMissionTemplate *tpl = CMissionManager::getInstance()->getTemplate(_Missions[idx]->getTemplateId()); + + if ( tpl && !tpl->Tags.NoList ) + { + _Missions[idx]->clearUsersJournalEntry(); + } + + CMissionManager::getInstance()->deInstanciateMission(_Missions[idx]); + delete _Missions[idx]; + _Missions.erase(_Missions.begin() + idx) ; } //---------------------------------------------------------------------------- void CGuild::addSuccessfulMission(CMissionTemplate * templ) { - /// todo guild mission + /*TMissionHistory &mh = _MissionHistories[templ.Alias]; + mh.Successfull = true;*/ + /// TODO: Add the mission histories +} + +//---------------------------------------------------------------------------- +bool CGuild::processMissionEvent( CMissionEvent & event, TAIAlias alias) +{ + return true; } //---------------------------------------------------------------------------- -bool CGuild::processMissionEvent( CMissionEvent & event, TAIAlias alias ) +bool CGuild::isMissionSuccessfull(TAIAlias alias) { - /// todo guild mission + /*std::map::iterator it(_MissionHistories.find(alias)); + if (it != _MissionHistories.end()) + return it->second.Successfull;*/ + /// TODO: Add the mission histories return false; } diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index ecedbf9ee..342174ebb 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -27,6 +27,7 @@ #include "outpost_manager/outpost_guild_db_updater.h" #include "guild_interface.h" #include "database_guild.h" +#include "mission_manager/mission_guild.h" class CMissionGuild; class CGuildMember; @@ -176,17 +177,30 @@ public: ///\name Mission management //@{ - void removeMission(CMissionGuild * mission, TMissionResult result); + void removeMission(CMissionGuild * mission, TMissionResult result) + { + for (uint i = 0; i < _Missions.size(); i++) + { + if ( _Missions[i] == mission ) + { + removeMission(i, result); + } + } + } + void removeMission( uint idx, TMissionResult result); void addSuccessfulMission(CMissionTemplate * templ); bool processMissionEvent( CMissionEvent & event, TAIAlias alias = CAIAliasTranslator::Invalid); + bool isMissionSuccessfull(TAIAlias alias); ///\return the mission inline std::vector & getMissions() { - return std::vector(); - // To Do + return _Missions; + } + void addMission(CMissionGuild* guildMission) + { + _Missions.push_back(guildMission); + guildMission->updateUsersJournalEntry(); } - void addMission(CMissionGuild* guildMission) {} - bool isMissionSuccessfull(TAIAlias alias) { return false; } //@} /// inventory management @@ -359,6 +373,9 @@ private: /// list of outposts challenged by guild std::vector _ChallengedOutposts; + ///the missions took by the guild + std::vector _Missions; + NLMISC_COMMAND_FRIEND( guildDB ); }; #endif // RY_GUILD_H From c175338c7f32afb82727c6e94d9890e88bc5b26c Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 4 Jul 2011 12:38:42 +0200 Subject: [PATCH 07/60] Changed: #1304: Adding Guild mission support in function tickUpdate of CCharacter --HG-- branch : gsoc2011-guildmissions --- .../player_manager/character.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp index 510ae28da..a70762816 100644 --- a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp +++ b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp @@ -1341,6 +1341,22 @@ uint32 CCharacter::tickUpdate() } } + // Adding UpdateCompass for guild missions + { + H_AUTO(CharacterUpdateGuildCompass); + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( _GuildId ); + if ( guild ) + { + const uint size = (uint)guild->getMissions().size(); + for ( uint i = 0; i < size; i++ ) + { + nlassert(guild->getMissions()[i]); + guild->getMissions()[i]->updateCompass(*this, string("")); + guild->getMissions()[i]->updateCompass(*this, string("GROUP:")); + } + } + } + { H_AUTO(CharacterUpdateTargetCoordinatesCompass); // update compass coordinates information From 74a6cc26e6b690574787caf576c3a06a71541315 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 4 Jul 2011 13:57:11 +0200 Subject: [PATCH 08/60] Changed: #1304: Adding guild mission support in functions acceptExchange and processMissionEventList of the CCharacter class --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 24 +++++++++++++++++++ .../guild_manager/guild.h | 3 +++ .../player_manager/character.cpp | 23 +++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index ccf55d54b..1a5c9fff3 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -728,6 +728,30 @@ bool CGuild::processMissionEvent( CMissionEvent & event, TAIAlias alias) return true; } +//---------------------------------------------------------------------------- +bool CGuild::processGuildMissionEvent(std::list< CMissionEvent *> & eventList, TAIAlias missionAlias) +{ + return true; +} + +//---------------------------------------------------------------------------- +bool CGuild::processGuildMissionStepEvent(std::list< CMissionEvent*> & eventList, TAIAlias missionAlias, uint32 stepIndex) +{ + return true; +} + +//---------------------------------------------------------------------------- +CMissionGuild* CGuild::getMissionByAlias( TAIAlias missionAlias ) +{ + const uint size = (uint)_Missions.size(); + for ( uint i = 0; i < size; i++ ) + { + if ( _Missions[i] && _Missions[i]->getTemplateId() == missionAlias ) + return _Missions[i]; + } + return NULL; +} + //---------------------------------------------------------------------------- bool CGuild::isMissionSuccessfull(TAIAlias alias) { diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 342174ebb..b3b8e4e01 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -190,6 +190,9 @@ public: void removeMission( uint idx, TMissionResult result); void addSuccessfulMission(CMissionTemplate * templ); bool processMissionEvent( CMissionEvent & event, TAIAlias alias = CAIAliasTranslator::Invalid); + bool processGuildMissionEvent(std::list< CMissionEvent * > & eventList, TAIAlias missionAlias ); + bool processGuildMissionStepEvent(std::list< CMissionEvent* > & eventList, TAIAlias missionAlias, uint32 stepIndex); + CMissionGuild* getMissionByAlias( TAIAlias missionAlias ); bool isMissionSuccessfull(TAIAlias alias); ///\return the mission inline std::vector & getMissions() diff --git a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp index a70762816..b70eb3b88 100644 --- a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp +++ b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp @@ -10708,6 +10708,7 @@ void CCharacter::acceptExchange(uint8 exchangeId) } CTeam * team = TeamManager.getRealTeam( _TeamId ); + CGuild* guild = CGuildManager::getInstance()->getGuildFromId( _GuildId ); if (_BotGift == NULL) { nlwarning("Player %s has no bot gift", _Id.toString().c_str()); @@ -10731,6 +10732,15 @@ void CCharacter::acceptExchange(uint8 exchangeId) } mission = team->getMissionByAlias( missionAlias ); } + else if (type == MISSION_DESC::Guild) + { + if (guild == NULL) + { + nlwarning("CCharacter::acceptExchange : character %s -> no guild",_Id.toString().c_str() ); + return; + } + mission = guild->getMissionByAlias( missionAlias ); + } vector vect; vector exchangePlayerPets; @@ -10764,6 +10774,8 @@ void CCharacter::acceptExchange(uint8 exchangeId) processMissionStepUserEvent( eventList,missionAlias,stepIndex ); else if ( type == MISSION_DESC::Group ) team->processTeamMissionStepEvent( eventList,missionAlias,stepIndex ); + else if ( type == MISSION_DESC::Guild ) + guild->processGuildMissionStepEvent( eventList,missionAlias,stepIndex ); eventList.pop_front(); for ( std::list< CMissionEvent* >::iterator it = eventList.begin(); it != eventList.end(); ++it ) processMissionEvent(*(*it)); @@ -10783,6 +10795,8 @@ void CCharacter::acceptExchange(uint8 exchangeId) processMissionStepUserEvent( eventList,missionAlias,stepIndex ); else if ( type == MISSION_DESC::Group ) team->processTeamMissionStepEvent( eventList,missionAlias,stepIndex ); + else if ( type == MISSION_DESC::Guild ) + guild->processGuildMissionStepEvent( eventList,missionAlias,stepIndex ); eventList.pop_front(); for ( std::list< CMissionEvent* >::iterator it = eventList.begin(); it != eventList.end(); ++it ) processMissionEvent(*(*it)); @@ -11615,7 +11629,7 @@ bool CCharacter::processMissionEventList( std::list< CMissionEvent* > & eventLis bool processed = false; bool firstEvent = true; - CGuild * guild = NULL; + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( _GuildId ); while ( !eventList.empty() ) { bool eventProcessed = false; @@ -11652,6 +11666,13 @@ bool CCharacter::processMissionEventList( std::list< CMissionEvent* > & eventLis eventProcessed = team->processTeamMissionEvent(eventList, alias); } + // THIRD - Check with guild missions (if event not already processed and char belongs to a guild) + if (!eventProcessed && (event.Restriction != CMissionEvent::NoGroup)) + { + if (guild != NULL) + eventProcessed = guild->processGuildMissionEvent(eventList, alias); + } + processed |= eventProcessed; // the first event of the list was processed, so we remove it. From e92762ad8bb1a2b67899eab687125f0d33aad295 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 4 Jul 2011 15:06:11 +0200 Subject: [PATCH 09/60] Changed: #1304: Adding mission histories for CGuild --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 49 ++++++++++++++++--- .../guild_manager/guild.h | 8 +++ 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 1a5c9fff3..121aed2f9 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -704,6 +704,8 @@ void CGuild::removeMission( uint idx, TMissionResult result) CMissionTemplate *tpl = CMissionManager::getInstance()->getTemplate(_Missions[idx]->getTemplateId()); + updateMissionHistories( _Missions[idx]->getTemplateId(), result); + if ( tpl && !tpl->Tags.NoList ) { _Missions[idx]->clearUsersJournalEntry(); @@ -717,21 +719,53 @@ void CGuild::removeMission( uint idx, TMissionResult result) //---------------------------------------------------------------------------- void CGuild::addSuccessfulMission(CMissionTemplate * templ) { - /*TMissionHistory &mh = _MissionHistories[templ.Alias]; - mh.Successfull = true;*/ - /// TODO: Add the mission histories + TMissionHistory &mh = _MissionHistories[templ->Alias]; + mh.Successfull = true; +} + +//---------------------------------------------------------------------------- +void CGuild::clearSuccessfulMissions() +{ + _MissionHistories.clear(); +} + +//---------------------------------------------------------------------------- +void CGuild::updateMissionHistories(TAIAlias missionAlias, uint32 result) +{ + TMissionHistory &mh = _MissionHistories[missionAlias]; + + switch(result) + { + case mr_success: + case mr_forced: + mh.Successfull = true; + // validate last try date + _MissionHistories[missionAlias].LastSuccessDate = CTickEventHandler::getGameCycle(); + break; + } } //---------------------------------------------------------------------------- bool CGuild::processMissionEvent( CMissionEvent & event, TAIAlias alias) { - return true; + std::list listEvents; + listEvents.push_back(&event); + return processGuildMissionEvent(listEvents, alias); } //---------------------------------------------------------------------------- bool CGuild::processGuildMissionEvent(std::list< CMissionEvent *> & eventList, TAIAlias missionAlias) { - return true; + for (uint i = 0; i < _Missions.size(); i++ ) + { + nlassert( _Missions[i] ); + if ( missionAlias == CAIAliasTranslator::Invalid || _Missions[i]->getTemplateId() == missionAlias ) + { + if ( processGuildMissionStepEvent( eventList, _Missions[i]->getTemplateId() ,0xFFFFFFFF) ) + return true; + } + } + return false; } //---------------------------------------------------------------------------- @@ -755,10 +789,9 @@ CMissionGuild* CGuild::getMissionByAlias( TAIAlias missionAlias ) //---------------------------------------------------------------------------- bool CGuild::isMissionSuccessfull(TAIAlias alias) { - /*std::map::iterator it(_MissionHistories.find(alias)); + std::map::iterator it(_MissionHistories.find(alias)); if (it != _MissionHistories.end()) - return it->second.Successfull;*/ - /// TODO: Add the mission histories + return it->second.Successfull; return false; } diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index b3b8e4e01..61dc97dd2 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -32,6 +32,10 @@ class CMissionGuild; class CGuildMember; +/* Storage class for mission history data. +*/ +struct TMissionHistory; + /** * A guild in ryzom @@ -189,6 +193,8 @@ public: } void removeMission( uint idx, TMissionResult result); void addSuccessfulMission(CMissionTemplate * templ); + void clearSuccessfulMissions(); + void updateMissionHistories(TAIAlias missionAlias, uint32 result); bool processMissionEvent( CMissionEvent & event, TAIAlias alias = CAIAliasTranslator::Invalid); bool processGuildMissionEvent(std::list< CMissionEvent * > & eventList, TAIAlias missionAlias ); bool processGuildMissionStepEvent(std::list< CMissionEvent* > & eventList, TAIAlias missionAlias, uint32 stepIndex); @@ -378,6 +384,8 @@ private: ///the missions took by the guild std::vector _Missions; + /// Successful missions + std::map _MissionHistories; NLMISC_COMMAND_FRIEND( guildDB ); }; From e46422c04126d4d5d9a0cdf948ca54cdf955c47b Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 4 Jul 2011 15:57:02 +0200 Subject: [PATCH 10/60] Changed: #1304: Add implementation of functions to process mission events for guild missions --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 121aed2f9..158508202 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -771,6 +771,72 @@ bool CGuild::processGuildMissionEvent(std::list< CMissionEvent *> & eventList, T //---------------------------------------------------------------------------- bool CGuild::processGuildMissionStepEvent(std::list< CMissionEvent*> & eventList, TAIAlias missionAlias, uint32 stepIndex) { + CMissionGuild * mission = getMissionByAlias( missionAlias ); + if (!mission ) + { + nlwarning("invalid missionAlias"); + return false; + } + // I don't know if i should pass _EId to this function + CMissionEvent::TResult result = mission->processEvent( TheDataset.getDataSetRow( _EId) ,eventList,stepIndex ); + if ( result == CMissionEvent::Nothing ) + return false; + else if ( result == CMissionEvent::MissionFailed ) + return true; + + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); + nlassert( templ ); + if ( result == CMissionEvent::MissionEnds ) + { + CMissionEventMissionDone * event = new CMissionEventMissionDone(templ->Alias); + eventList.push_back(event); + + addSuccessfulMission(templ); + + for ( std::map::iterator it = getMembersBegin(); + it != getMembersEnd();++it ) + { + CCharacter * user = PlayerManager.getChar( it->first ); + if ( user ) + { + if ( templ->Tags.NoList == false ) + CCharacter::sendDynamicSystemMessage( user->getEntityRowId(),"EGS_MISSION_SUCCESS"); + } + } + + CMissionManager::getInstance()->missionDoneOnce(templ); + mission->stopChildren(); + + // only remove no list missions, other must be manually removed by user + if ( templ->Tags.NoList || mission->isChained() || templ->Tags.AutoRemove ) + { + mission->updateEncyclopedia(); + removeMission(mission, mr_success); + } + else + { + mission->setSuccessFlag(); + mission->updateUsersJournalEntry(); + } + return true; + } + else if ( result == CMissionEvent::StepEnds ) + { + if ( templ->Tags.NoList == false ) + { + for ( std::map::iterator it = getMembersBegin(); + it != getMembersEnd();++it ) + { + CCharacter * user = PlayerManager.getChar( it->first ); + if ( user ) + { + if ( templ->Tags.NoList == false ) + CCharacter::sendDynamicSystemMessage( user->getEntityRowId(),"EGS_MISSION_STEP_SUCCESS"); + } + } + } + } + mission->updateUsersJournalEntry(); return true; } From 875d46f9b5d0bf435bc560152c1d561c3d689c25 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 18 Jul 2011 19:37:59 +0200 Subject: [PATCH 11/60] Changed: #1304: Implementation of the cbClientGroupAbandonMission for the guilds --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 17 +++ .../guild_manager/guild.h | 1 + .../mission_client_callbacks.cpp | 127 +++++++++++++----- 3 files changed, 112 insertions(+), 33 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 158508202..3a05ef309 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -35,6 +35,7 @@ #include "primitives_parser.h" #include "modules/shard_unifier_client.h" #include "mission_manager/mission_manager.h" +#include "phrase_manager/phrase_utilities_functions.h" /// todo guild remove entity id translator #include "nel/misc/eid_translator.h" @@ -745,6 +746,22 @@ void CGuild::updateMissionHistories(TAIAlias missionAlias, uint32 result) } } +//---------------------------------------------------------------------------- +void CGuild::sendDynamicMessageToMembers(const string &msgName, const TVectorParamCheck ¶ms, const set &excluded) const +{ + for ( std::map::const_iterator it = getMembersBegin(); + it != getMembersEnd();++it ) + { + CCharacter * user = PlayerManager.getChar( it->first ); + + if ( excluded.find(it->first) == excluded.end()) + { + const uint32 stringId = STRING_MANAGER::sendStringToClient(TheDataset.getDataSetRow(it->first), msgName, params ); + PHRASE_UTILITIES::sendDynamicSystemMessage(TheDataset.getDataSetRow(it->first), stringId); + } + } +} + //---------------------------------------------------------------------------- bool CGuild::processMissionEvent( CMissionEvent & event, TAIAlias alias) { diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 61dc97dd2..64378b717 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -200,6 +200,7 @@ public: bool processGuildMissionStepEvent(std::list< CMissionEvent* > & eventList, TAIAlias missionAlias, uint32 stepIndex); CMissionGuild* getMissionByAlias( TAIAlias missionAlias ); bool isMissionSuccessfull(TAIAlias alias); + void sendDynamicMessageToMembers(const std::string &msgName, const TVectorParamCheck ¶ms, const std::set &excluded) const; ///\return the mission inline std::vector & getMissions() { diff --git a/code/ryzom/server/src/entities_game_service/mission_client_callbacks.cpp b/code/ryzom/server/src/entities_game_service/mission_client_callbacks.cpp index f0205ed95..52fd214f9 100644 --- a/code/ryzom/server/src/entities_game_service/mission_client_callbacks.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_client_callbacks.cpp @@ -26,6 +26,9 @@ #include "team_manager/team_manager.h" #include "mission_manager/mission_team.h" #include "mission_manager/mission_log.h" +#include "guild_manager/guild_manager.h" +#include "guild_manager/guild.h" +#include "guild_manager/guild_member.h" using namespace std; @@ -222,50 +225,108 @@ void cbClientGroupAbandonMission( NLNET::CMessage& msgin, const std::string &ser CCharacter * user = PlayerManager.getChar( userId ); user->setAfkState(false); - CTeam * team = TeamManager.getRealTeam( user->getTeamId() ); - if ( !team ) - { - MISLOG("user:%s cbClientGroupAbandonMission : Invalid team", userId.toString().c_str()); - return; - } - if ( team->getLeader() != userId ) - { - CCharacter::sendDynamicSystemMessage( user->getEntityRowId(), "REQ_LEADER_TO_ABANDON_MISSION" ); - return; - } - if ( index >= team->getMissions().size() ) + // We check if it's a guild or team mission + if (index < MaxGroupMissionCount) { - MISLOG("user:%s cbClientGroupAbandonMission : Invalid group mission %u ( count %u )", - userId.toString().c_str(), index, team->getMissions().size()); - return; - } - + // Team - CMissionTeam* mission = team->getMissions()[index]; - nlassert(mission); - - if ( mission->getFinished() == false ) - { - CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); - if ( !templ ) + CTeam * team = TeamManager.getRealTeam( user->getTeamId() ); + if ( !team ) { - MISLOG("user:%s cbClientGroupAbandonMission : invalid group mission alias %u", - userId.toString().c_str(), mission->getTemplateId()); + MISLOG("user:%s cbClientGroupAbandonMission : Invalid team", userId.toString().c_str()); return; } - if ( templ->Tags.NonAbandonnable ) + if ( team->getLeader() != userId ) { - MISLOG("user:%s cbClientGroupAbandonMission : group mission alias %u is not abandonnable but user tries to abandon it", - userId.toString().c_str(), mission->getTemplateId()); + CCharacter::sendDynamicSystemMessage( user->getEntityRowId(), "REQ_LEADER_TO_ABANDON_MISSION" ); return; } - set excluded; - excluded.insert( userId ); + + if ( index >= team->getMissions().size() ) + { + MISLOG("user:%s cbClientGroupAbandonMission : Invalid group mission %u ( count %u )", + userId.toString().c_str(), index, team->getMissions().size()); + return; + } + + + CMissionTeam* mission = team->getMissions()[index]; + nlassert(mission); - team->sendDynamicMessageToMembers( "ABANDON_GROUP_MISSION",TVectorParamCheck(), excluded ); + if ( mission->getFinished() == false ) + { + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); + if ( !templ ) + { + MISLOG("user:%s cbClientGroupAbandonMission : invalid group mission alias %u", + userId.toString().c_str(), mission->getTemplateId()); + return; + } + if ( templ->Tags.NonAbandonnable ) + { + MISLOG("user:%s cbClientGroupAbandonMission : group mission alias %u is not abandonnable but user tries to abandon it", + userId.toString().c_str(), mission->getTemplateId()); + return; + } + set excluded; + excluded.insert( userId ); + + team->sendDynamicMessageToMembers( "ABANDON_GROUP_MISSION",TVectorParamCheck(), excluded ); + } + team->removeMission( index, mr_abandon ); + } + else + { + // Guild + // We set the correct index + index = MaxGroupMissionCount - index; + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId( user->getGuildId() ); + if ( !guild ) + { + MISLOG("user:%s cbClientGroupAbandonMission : Invalid team", userId.toString().c_str()); + return; + } + if ( guild->getLeader()->getIngameEId() != userId ) + { + CCharacter::sendDynamicSystemMessage( user->getEntityRowId(), "REQ_LEADER_TO_ABANDON_MISSION" ); + return; + } + + if ( index >= guild->getMissions().size() ) + { + MISLOG("user:%s cbClientGroupAbandonMission : Invalid group mission %u ( count %u )", + userId.toString().c_str(), index, guild->getMissions().size()); + return; + } + + + CMissionGuild* mission = guild->getMissions()[index]; + nlassert(mission); + + if ( mission->getFinished() == false ) + { + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() ); + if ( !templ ) + { + MISLOG("user:%s cbClientGroupAbandonMission : invalid group mission alias %u", + userId.toString().c_str(), mission->getTemplateId()); + return; + } + if ( templ->Tags.NonAbandonnable ) + { + MISLOG("user:%s cbClientGroupAbandonMission : group mission alias %u is not abandonnable but user tries to abandon it", + userId.toString().c_str(), mission->getTemplateId()); + return; + } + set excluded; + excluded.insert( userId ); + + guild->sendDynamicMessageToMembers( "ABANDON_GROUP_MISSION",TVectorParamCheck(), excluded ); + } + guild->removeMission( index, mr_abandon ); } - team->removeMission( index, mr_abandon ); } //---------------------------------------------------------------------------- From 185603b5e659e0e8101d3d692598e0bc92d576cc Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 19 Jul 2011 18:10:28 +0200 Subject: [PATCH 12/60] Changed: #1304: Debug of the options added in the script (';' replaced by ':' for parameters separation) --HG-- branch : gsoc2011-guildmissions --- .../mission_compiler_lib/step_content.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index 456f7e286..442ca6fbd 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -170,7 +170,7 @@ public: string ret; ret = "recv_money : "+_Amount; if (_Guild) - ret += "; guild"; + ret += ": guild"; ret += NL; return ret; } @@ -702,7 +702,7 @@ public: string ret; ret = "recv_fame : "+_Faction+" "+_Fame; if (_Guild) - ret += "; guild"; + ret += ": guild"; ret += NL; return ret; } @@ -800,7 +800,7 @@ public: if (_Group) ret += " : group"; if (_Guild) - ret += "; guild"; + ret += ": guild"; ret += NL; } @@ -874,7 +874,7 @@ public: if (_Group) ret += " : group"; if (_Guild) - ret += "; guild"; + ret += ": guild"; ret += NL; } @@ -968,7 +968,7 @@ public: if (!_BotDestroyer.empty()) ret += " : "+_BotDestroyer; if (_Guild) - ret += "; guild"; + ret += ": guild"; ret += NL; } @@ -1800,7 +1800,7 @@ std::string CContentObjective::genNbGuildMembersNeededOption(CMissionData &md) // If we are in a guild mission we add the 'nb_guild_members_needed' option to the script if (md.isGuildMission()) { - ret = "; nb_guild_members_needed: "; + ret = ": nb_guild_members_needed "; ret += toString(_NbGuildMembersNeeded); } From 2d1ce64c38961bd013d97c57ea52db59e20f9084 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 19 Jul 2011 18:39:29 +0200 Subject: [PATCH 13/60] Changed: #1304: Parsing the "guild" parameter for the actions that need it. --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_action.cpp | 82 ++++++++++++++++--- 1 file changed, 72 insertions(+), 10 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index eb627551d..f8a762f95 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -511,9 +511,9 @@ class CMissionActionRecvItem : public IMissionAction { _SourceLine = line; bool ret = true; - if ( script.size() != 2 && script.size() != 3 ) + if ( script.size() != 2 && script.size() != 3 && script.size() != 4) { - MISLOGSYNTAXERROR(" [] [][:npc_name][:group]"); + MISLOGSYNTAXERROR(" [] [][:npc_name][:group][:guild]"); return false; } vector args; @@ -569,6 +569,17 @@ class CMissionActionRecvItem : public IMissionAction _Group = true; } + // We check for the guild option + _Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + _Guild = true; + break; + } + } + if ( _Quantity == 0 ) { @@ -760,6 +771,7 @@ class CMissionActionRecvItem : public IMissionAction uint16 _Quantity; CSheetId _SheetId; bool _Group; + bool _Guild; MISSION_ACTION_GETNEWPTR(CMissionActionRecvItem) }; @@ -772,9 +784,9 @@ class CMissionActionRecvNamedItem : public IMissionAction bool buildAction ( uint32 line, const std::vector< std::string > & script, CMissionGlobalParsingData & globalData, CMissionSpecificParsingData & missionData) { _SourceLine = line; - if ( script.size() != 2 && script.size() != 3 ) + if ( script.size() != 2 && script.size() != 3 && script.size() != 4) { - MISLOGSYNTAXERROR(" [] [:group]"); + MISLOGSYNTAXERROR(" [] [:group] [:guild]"); return false; } vector args; @@ -813,6 +825,17 @@ class CMissionActionRecvNamedItem : public IMissionAction _Group = true; } + // We check for the guild option + _Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + _Guild = true; + break; + } + } + if ( _Quantity == 0 ) { MISLOGERROR("quantity = 0"); @@ -945,6 +968,7 @@ class CMissionActionRecvNamedItem : public IMissionAction std::string _NamedItem; uint16 _Quantity; bool _Group; + bool _Guild; MISSION_ACTION_GETNEWPTR(CMissionActionRecvNamedItem) }; @@ -1043,9 +1067,9 @@ class CMissionActionDestroyItem : { // Parse the line _SourceLine = line; - if ( script.size() != 2 && script.size() != 3) + if ( script.size() != 2 && script.size() != 3 && script.size() != 4) { - MISLOGSYNTAXERROR(" [] []:[npc_name]"); + MISLOGSYNTAXERROR(" [] []:[npc_name] [:guild]"); return false; } @@ -1060,6 +1084,17 @@ class CMissionActionDestroyItem : ret= false; } + // We check for the guild option + _Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + _Guild = true; + break; + } + } + return ret; } @@ -1104,6 +1139,7 @@ class CMissionActionDestroyItem : } }; TAIAlias _Npc; + bool _Guild; MISSION_ACTION_GETNEWPTR(CMissionActionDestroyItem) }; @@ -1607,9 +1643,9 @@ class CMissionActionRecvMoney : public IMissionAction { bool ret = true; _SourceLine = line; - if ( script.size() != 2 ) + if ( script.size() != 2 && script.size() != 3) { - MISLOGSYNTAXERROR(" OR *[;]"); + MISLOGSYNTAXERROR(" [: guild] OR *[;]"); return false; } @@ -1637,6 +1673,18 @@ class CMissionActionRecvMoney : public IMissionAction ret = false; } } + + // We check for the guild option + _Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + _Guild = true; + break; + } + } + return ret; } @@ -1663,6 +1711,7 @@ class CMissionActionRecvMoney : public IMissionAction } }; uint _Amount; + bool _Guild; MISSION_ACTION_GETNEWPTR(CMissionActionRecvMoney) }; @@ -1675,9 +1724,9 @@ class CMissionActionRecvFame : public IMissionAction bool buildAction ( uint32 line, const std::vector< std::string > & script, CMissionGlobalParsingData & globalData, CMissionSpecificParsingData & missionData) { _SourceLine = line; - if ( script.size() != 2 ) + if ( script.size() != 2 && script.size() != 3) { - MISLOGSYNTAXERROR(" "); + MISLOGSYNTAXERROR(" [:guild]"); return false; } vector args; @@ -1700,6 +1749,18 @@ class CMissionActionRecvFame : public IMissionAction MISLOGERROR("fame = 0"); return false; } + + // We check for the guild option + _Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + _Guild = true; + break; + } + } + return true; } @@ -1722,6 +1783,7 @@ class CMissionActionRecvFame : public IMissionAction }; uint32 _Faction; sint32 _Value; + bool _Guild; MISSION_ACTION_GETNEWPTR(CMissionActionRecvFame) }; From af4d2d62362b9b30ba4f4a3000f5c5a95e9090b0 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Tue, 19 Jul 2011 19:10:12 +0200 Subject: [PATCH 14/60] Changed: #1304: Implementation of the "guild" parameter for the "recv_money" action --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_action.cpp | 64 ++++++++++++++++--- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index f8a762f95..c039b6b5f 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -1695,19 +1695,63 @@ class CMissionActionRecvMoney : public IMissionAction std::vector entities; instance->getEntities(entities); - uint amount = _Amount / (uint)entities.size(); - if ( amount == 0 || _Amount % entities.size() ) - amount++; - for ( uint i = 0; i < entities.size(); i++ ) + + // If the guild parameter is not set we just divide the money and give it to each entity + if (!_Guild) { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) + + uint amount = _Amount / (uint)entities.size(); + if ( amount == 0 || _Amount % entities.size() ) + amount++; + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + user->giveMoney( _Amount ); + SM_STATIC_PARAMS_1(params, STRING_MANAGER::integer); + params[0].Int = _Amount; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_MONEY",params); + } + } + + } + // Else we give the money to the guild + else + { + if (entities.size() == 0) + return; + + CCharacter * user = PlayerManager.getChar( entities[0] ); + if (!user) + { + LOGMISSIONACTION("recv_money : Invalid user"); + return; + } + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId(user->getGuildId()); + if (guild) { - user->giveMoney( _Amount ); - SM_STATIC_PARAMS_1(params, STRING_MANAGER::integer); - params[0].Int = _Amount; - PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_MONEY",params); + guild->addMoney(_Amount); } + else + { + LOGMISSIONACTION("recv_money : Invalid guild id '" + NLMISC::toString(user->getGuildId()) + "'"); + return; + } + + // tell everyone some money has been given to the guild + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + SM_STATIC_PARAMS_1(params, STRING_MANAGER::integer); + params[0].Int = _Amount; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_GUILD_RECV_MONEY",params); + } + } + } }; uint _Amount; From cb6b4ac91708487a5776e8b6e66e545db8ddd041 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Wed, 20 Jul 2011 18:41:30 +0200 Subject: [PATCH 15/60] Changed: #1304: Implementation of the "guild" parameter for the "recv_fame" action --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_action.cpp | 56 ++++++++++++++++--- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index c039b6b5f..a73e2d714 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -1813,15 +1813,57 @@ class CMissionActionRecvFame : public IMissionAction LOGMISSIONACTION("recv_fame"); std::vector entities; instance->getEntities(entities); - for ( uint i = 0; i < entities.size(); i++ ) + + // If there is no "guild" parameter we give the fame to every user + if (!_Guild) { - CEntityId eid = TheDataset.getEntityId(entities[i]); - CFameInterface::getInstance().addFameIndexed(eid, _Faction, _Value, true); - // Make the client refresh the icons on mission giver NPCs, at once - CCharacter *character = PlayerManager.getChar(entities[i]); - if (character) - character->sendEventForMissionAvailabilityCheck(); + for ( uint i = 0; i < entities.size(); i++ ) + { + CEntityId eid = TheDataset.getEntityId(entities[i]); + CFameInterface::getInstance().addFameIndexed(eid, _Faction, _Value, true); + + // Make the client refresh the icons on mission giver NPCs, at once + CCharacter *character = PlayerManager.getChar(entities[i]); + if (character) + character->sendEventForMissionAvailabilityCheck(); + } + + } + // Else we just give it to the guild + else + { + + if (entities.size() == 0) + return; + + CCharacter * user = PlayerManager.getChar( entities[0] ); + if (!user) + { + LOGMISSIONACTION("recv_fame : Invalid user"); + return; + } + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId(user->getGuildId()); + if (guild) + { + CFameInterface::getInstance().addFameIndexed(guild->getEId(), _Faction, _Value, true); + } + else + { + LOGMISSIONACTION("recv_fame : Invalid guild id '" + NLMISC::toString(user->getGuildId()) + "'"); + return; + } + + // tell everyone some money has been given to the guild + for ( uint i = 0; i < entities.size(); i++ ) + { + // Make the client refresh the icons on mission giver NPCs, at once + CCharacter *character = PlayerManager.getChar(entities[i]); + if (character) + character->sendEventForMissionAvailabilityCheck(); + } + } }; From 5ac224b5af63e47312affc7f94a39901a1fce836 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Wed, 20 Jul 2011 20:33:52 +0200 Subject: [PATCH 16/60] Changed: #1304: Implementation of the "guild" parameter for the "recv_item" action --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 6 +- .../guild_manager/guild.h | 2 +- .../mission_manager/mission_action.cpp | 304 ++++++++++++------ 3 files changed, 209 insertions(+), 103 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 3a05ef309..df9082c6b 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -904,10 +904,12 @@ bool CGuild::canAccessToGuildInventory( CCharacter * user ) } //---------------------------------------------------------------------------- -void CGuild::putItem( CGameItemPtr item ) +bool CGuild::putItem( CGameItemPtr item ) { - if (_Inventory->insertItem(item, INVENTORIES::INSERT_IN_FIRST_FREE_SLOT, true) != CInventoryBase::ior_ok) + CInventoryBase::TInventoryOpResult res = _Inventory->insertItem(item, INVENTORIES::INSERT_IN_FIRST_FREE_SLOT, true); + if (res != CInventoryBase::ior_ok) item.deleteItem(); + return res == CInventoryBase::ior_ok; } //---------------------------------------------------------------------------- diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 64378b717..449debe53 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -235,7 +235,7 @@ public: return _Inventory->getItem(slot); } /// add an item in the guild inventory (item can be deleted if not inserted : do not use it anymore in any case!) - void putItem( CGameItemPtr item ); + bool putItem( CGameItemPtr item ); /// return the inventory (const) const NLMISC::CSmartPtr& getInventory() const { return _Inventory; } diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index a73e2d714..61646a74b 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -617,7 +617,7 @@ class CMissionActionRecvItem : public IMissionAction } } } - else if ( !_Group ) + else if ( !_Group && !_Guild) { CCharacter * user = PlayerManager.getChar( entities[0] ); CTeam * team = TeamManager.getRealTeam(user->getTeamId()); @@ -628,141 +628,245 @@ class CMissionActionRecvItem : public IMissionAction } } - - // check free room space in inventory - // NB : in case of group, fail happens only if none in the group have enough free space - sint16 neededSlotCount = 0; - uint32 neededBulk = 0; - CSheetId sheet = ( _SheetId != CSheetId::Unknown )?_SheetId:_Item.getSheetId(); - CGameItemPtr itemTmp = GameItemManager.createItem(sheet, _Quality, true, true); - if (itemTmp != NULL) - { - neededSlotCount = (sint16) ceil( (float)_Quantity / itemTmp->getMaxStackSize() ); - neededBulk = _Quantity * itemTmp->getStackBulk(); - itemTmp.deleteItem(); - } - else + // If the case we want to give the item to the guild + if (_Guild) { - LOGMISSIONACTION("can't get static item from sheet " + sheet.toString()); - return; - } - - - bool fail = true; - for ( uint i = 0; i < entities.size(); i++ ) - { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) + if (entities.size() == 0) + return; + + CCharacter * user = PlayerManager.getChar( entities[0] ); + if (!user) { - CInventoryPtr invBag = user->getInventory( INVENTORIES::bag ); - sint16 freeSlotcount = invBag->getFreeSlotCount(); - uint32 maxBulk = invBag->getMaxBulk(); + LOGMISSIONACTION("recv_fame : Invalid user"); + return; + } - CInventoryPtr invTemp = user->getInventory( INVENTORIES::temporary ); - if( invTemp ) + CGuild * guild = CGuildManager::getInstance()->getGuildFromId(user->getGuildId()); + if (!guild) + { + LOGMISSIONACTION("recv_fame : Invalid guild id '" + NLMISC::toString(user->getGuildId()) + "'"); + return; + } + + SM_STATIC_PARAMS_3(params, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); + if ( _SheetId != CSheetId::Unknown ) + { + const CStaticItem * form = CSheets::getForm( _SheetId ); + if ( !form ) { - freeSlotcount -= invTemp->getUsedSlotCount(); - maxBulk -= invTemp->getInventoryBulk(); + LOGMISSIONACTION("sheetId '" + _SheetId.toString() + "' is unknown"); + return; } - - if( (neededSlotCount <= freeSlotcount) && ( neededBulk + invBag->getInventoryBulk() <= maxBulk) ) + if (form->Family != ITEMFAMILY::MISSION_ITEM) + return; + + uint quantity = _Quantity; + while (quantity > 0) { - fail = false; - break; + CGameItemPtr item = user->createItem(_Quality, quantity, _SheetId); + if (item == NULL) + break; + const uint32 stackSize = item->getStackSize(); + + if (!guild->putItem(item)) + { + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); + if ( templ ) + { + if ( templ->Tags.FailIfInventoryIsFull ) + { + instance->setProcessingState(CMission::ActionFailed); + return; + } + } + } + // from here item maybe NULL (because of autostack) + + quantity -= stackSize; } + params[2].Int = _Quality; } - } - if( fail ) - { - CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); - if ( templ ) + else { - if ( templ->Tags.FailIfInventoryIsFull ) + const CStaticItem * form = CSheets::getForm( _Item.getSheetId() ); + if ( !form ) { - instance->setProcessingState(CMission::ActionFailed); + LOGMISSIONACTION("sheetId '" + _Item.getSheetId().toString() + "' is unknown"); return; } + uint quantity = _Quantity; + while (quantity > 0) + { + CGameItemPtr item = _Item.createItem(quantity); + if (item == NULL) + break; + + const uint32 stackSize = item->getStackSize(); + if (!guild->putItem(item)) + { + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); + if ( templ ) + { + if ( templ->Tags.FailIfInventoryIsFull ) + { + instance->setProcessingState(CMission::ActionFailed); + return; + } + } + } + // from here item maybe NULL (because of autostack) + + quantity -= stackSize; + } + params[2].Int = _Item.getQuality(); } - } - for ( uint i = 0; i < entities.size(); i++ ) + params[0].SheetId = _SheetId; + params[1].Int = _Quantity; + + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_GUILD_RECV_ITEM", params); + } + } + else { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) + // check free room space in inventory + // NB : in case of group, fail happens only if none in the group have enough free space + sint16 neededSlotCount = 0; + uint32 neededBulk = 0; + CSheetId sheet = ( _SheetId != CSheetId::Unknown )?_SheetId:_Item.getSheetId(); + CGameItemPtr itemTmp = GameItemManager.createItem(sheet, _Quality, true, true); + if (itemTmp != NULL) { - SM_STATIC_PARAMS_3(params, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); - if ( _SheetId != CSheetId::Unknown ) + neededSlotCount = (sint16) ceil( (float)_Quantity / itemTmp->getMaxStackSize() ); + neededBulk = _Quantity * itemTmp->getStackBulk(); + itemTmp.deleteItem(); + } + else + { + LOGMISSIONACTION("can't get static item from sheet " + sheet.toString()); + return; + } + + bool fail = true; + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) { - const CStaticItem * form = CSheets::getForm( _SheetId ); - if ( !form ) + CInventoryPtr invBag = user->getInventory( INVENTORIES::bag ); + sint16 freeSlotcount = invBag->getFreeSlotCount(); + uint32 maxBulk = invBag->getMaxBulk(); + + CInventoryPtr invTemp = user->getInventory( INVENTORIES::temporary ); + if( invTemp ) { - LOGMISSIONACTION("sheetId '" + _SheetId.toString() + "' is unknown"); + freeSlotcount -= invTemp->getUsedSlotCount(); + maxBulk -= invTemp->getInventoryBulk(); + } + + if( (neededSlotCount <= freeSlotcount) && ( neededBulk + invBag->getInventoryBulk() <= maxBulk) ) + { + fail = false; + break; + } + } + } + if( fail ) + { + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); + if ( templ ) + { + if ( templ->Tags.FailIfInventoryIsFull ) + { + instance->setProcessingState(CMission::ActionFailed); return; } - if (form->Family != ITEMFAMILY::MISSION_ITEM && !user->enterTempInventoryMode(TEMP_INV_MODE::MissionReward)) - continue; + } + } - uint quantity = _Quantity; - while (quantity > 0) + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + SM_STATIC_PARAMS_3(params, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); + if ( _SheetId != CSheetId::Unknown ) { - CGameItemPtr item = user->createItem(_Quality, quantity, _SheetId); - if (item == NULL) - break; - const uint32 stackSize = item->getStackSize(); + const CStaticItem * form = CSheets::getForm( _SheetId ); + if ( !form ) + { + LOGMISSIONACTION("sheetId '" + _SheetId.toString() + "' is unknown"); + return; + } + if (form->Family != ITEMFAMILY::MISSION_ITEM && !user->enterTempInventoryMode(TEMP_INV_MODE::MissionReward)) + continue; - if( form->Family != ITEMFAMILY::MISSION_ITEM ) + uint quantity = _Quantity; + while (quantity > 0) { - if (!user->addItemToInventory(INVENTORIES::temporary, item)) - { - item.deleteItem(); + CGameItemPtr item = user->createItem(_Quality, quantity, _SheetId); + if (item == NULL) break; + const uint32 stackSize = item->getStackSize(); + + if( form->Family != ITEMFAMILY::MISSION_ITEM ) + { + if (!user->addItemToInventory(INVENTORIES::temporary, item)) + { + item.deleteItem(); + break; + } } - } - else - { - if (!user->addItemToInventory(INVENTORIES::bag, item)) + else { - item.deleteItem(); - break; + if (!user->addItemToInventory(INVENTORIES::bag, item)) + { + item.deleteItem(); + break; + } } - } - // from here item maybe NULL (because of autostack) + // from here item maybe NULL (because of autostack) - quantity -= stackSize; - } - params[2].Int = _Quality; - } - else - { - const CStaticItem * form = CSheets::getForm( _Item.getSheetId() ); - if ( !form ) - { - LOGMISSIONACTION("sheetId '" + _Item.getSheetId().toString() + "' is unknown"); - return; + quantity -= stackSize; + } + params[2].Int = _Quality; } - uint quantity = _Quantity; - while (quantity > 0) + else { - CGameItemPtr item = _Item.createItem(quantity); - if (item == NULL) - break; - - const uint32 stackSize = item->getStackSize(); - if (!user->addItemToInventory(INVENTORIES::temporary, item)) + const CStaticItem * form = CSheets::getForm( _Item.getSheetId() ); + if ( !form ) { - item.deleteItem(); - break; + LOGMISSIONACTION("sheetId '" + _Item.getSheetId().toString() + "' is unknown"); + return; } - // from here item maybe NULL (because of autostack) + uint quantity = _Quantity; + while (quantity > 0) + { + CGameItemPtr item = _Item.createItem(quantity); + if (item == NULL) + break; + + const uint32 stackSize = item->getStackSize(); + if (!user->addItemToInventory(INVENTORIES::temporary, item)) + { + item.deleteItem(); + break; + } + // from here item maybe NULL (because of autostack) - quantity -= stackSize; + quantity -= stackSize; + } + params[2].Int = _Item.getQuality(); } - params[2].Int = _Item.getQuality(); + + params[0].SheetId = _SheetId; + params[1].Int = _Quantity; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_ITEM", params); } - - params[0].SheetId = _SheetId; - params[1].Int = _Quantity; - PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_ITEM", params); } } }; From 757f393db1c38474b8e6fb2e8e0d2a318faaf7e1 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Wed, 20 Jul 2011 21:08:53 +0200 Subject: [PATCH 17/60] Changed: #1304: Implementation of the "guild" parameter for the "recv_named_item" action --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_action.cpp | 169 ++++++++++++------ 1 file changed, 113 insertions(+), 56 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index 61646a74b..5630913d0 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -975,7 +975,7 @@ class CMissionActionRecvNamedItem : public IMissionAction } } } - else if ( !_Group ) + else if ( !_Group && !_Guild) { CCharacter * user = PlayerManager.getChar( entities[0] ); CTeam * team = TeamManager.getRealTeam(user->getTeamId()); @@ -986,41 +986,34 @@ class CMissionActionRecvNamedItem : public IMissionAction } } - // check free room space in inventory - // NB : in case of group, fail happens only if noone in the group have enough free space - CGameItemPtr itemTmp = CNamedItems::getInstance().createNamedItem(_NamedItem, _Quantity); - if( itemTmp != NULL ) + // If the case we want to give the item to the guild + if (_Guild) { - sint16 neededSlotCount = (sint16) ceil( (float)_Quantity / itemTmp->getMaxStackSize() ); - uint32 neededBulk = _Quantity * itemTmp->getStackBulk(); - itemTmp.deleteItem(); - - bool fail = true; - for ( uint i = 0; i < entities.size(); i++ ) + if (entities.size() == 0) + return; + + CCharacter * user = PlayerManager.getChar( entities[0] ); + if (!user) { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) - { - CInventoryPtr invBag = user->getInventory( INVENTORIES::bag ); - sint16 freeSlotcount = invBag->getFreeSlotCount(); - uint32 maxBulk = invBag->getMaxBulk(); + LOGMISSIONACTION("recv_fame : Invalid user"); + return; + } - CInventoryPtr invTemp = user->getInventory( INVENTORIES::temporary ); - if( invTemp ) - { - freeSlotcount -= invTemp->getUsedSlotCount(); - maxBulk -= invTemp->getInventoryBulk(); - } - - if( (neededSlotCount <= freeSlotcount) && ( neededBulk + invBag->getInventoryBulk() <= maxBulk) ) - { - fail = false; - break; - } - } - + CGuild * guild = CGuildManager::getInstance()->getGuildFromId(user->getGuildId()); + if (!guild) + { + LOGMISSIONACTION("recv_fame : Invalid guild id '" + NLMISC::toString(user->getGuildId()) + "'"); + return; } - if( fail ) + + // add the item to inventory + CGameItemPtr item = CNamedItems::getInstance().createNamedItem(_NamedItem, _Quantity); + if (item == NULL) + { + LOGMISSIONACTION("named item '" + _NamedItem + "' is unknown"); + return; + } + if (!guild->putItem(item)) { CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); if ( templ ) @@ -1032,39 +1025,103 @@ class CMissionActionRecvNamedItem : public IMissionAction } } } + else + { + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + SM_STATIC_PARAMS_2(params, STRING_MANAGER::dyn_string_id, STRING_MANAGER::integer); + params[0].StringId = item->sendNameId(user); + params[1].Int = _Quantity; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_GUILD_RECV_NAMED_ITEM", params); + } + } + } } else { - LOGMISSIONACTION("named item '" + _NamedItem + "' is unknown"); - return; - } - - // apply the action to all entities - for ( uint i = 0; i < entities.size(); i++ ) - { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) + // check free room space in inventory + // NB : in case of group, fail happens only if noone in the group have enough free space + CGameItemPtr itemTmp = CNamedItems::getInstance().createNamedItem(_NamedItem, _Quantity); + if( itemTmp != NULL ) { - if (!user->enterTempInventoryMode(TEMP_INV_MODE::MissionReward)) - continue; - - // add the item to inventory - CGameItemPtr item = CNamedItems::getInstance().createNamedItem(_NamedItem, _Quantity); - if (item == NULL) + sint16 neededSlotCount = (sint16) ceil( (float)_Quantity / itemTmp->getMaxStackSize() ); + uint32 neededBulk = _Quantity * itemTmp->getStackBulk(); + itemTmp.deleteItem(); + + bool fail = true; + for ( uint i = 0; i < entities.size(); i++ ) { - LOGMISSIONACTION("named item '" + _NamedItem + "' is unknown"); - return; + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + CInventoryPtr invBag = user->getInventory( INVENTORIES::bag ); + sint16 freeSlotcount = invBag->getFreeSlotCount(); + uint32 maxBulk = invBag->getMaxBulk(); + + CInventoryPtr invTemp = user->getInventory( INVENTORIES::temporary ); + if( invTemp ) + { + freeSlotcount -= invTemp->getUsedSlotCount(); + maxBulk -= invTemp->getInventoryBulk(); + } + + if( (neededSlotCount <= freeSlotcount) && ( neededBulk + invBag->getInventoryBulk() <= maxBulk) ) + { + fail = false; + break; + } + } + } - if(!user->addItemToInventory(INVENTORIES::temporary, item)) + if( fail ) { - item.deleteItem(); + CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( instance->getTemplateId() ); + if ( templ ) + { + if ( templ->Tags.FailIfInventoryIsFull ) + { + instance->setProcessingState(CMission::ActionFailed); + return; + } + } } - else + } + else + { + LOGMISSIONACTION("named item '" + _NamedItem + "' is unknown"); + return; + } + + // apply the action to all entities + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) { - SM_STATIC_PARAMS_2(params, STRING_MANAGER::dyn_string_id, STRING_MANAGER::integer); - params[0].StringId = item->sendNameId(user); - params[1].Int = _Quantity; - PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_NAMED_ITEM", params); + if (!user->enterTempInventoryMode(TEMP_INV_MODE::MissionReward)) + continue; + + // add the item to inventory + CGameItemPtr item = CNamedItems::getInstance().createNamedItem(_NamedItem, _Quantity); + if (item == NULL) + { + LOGMISSIONACTION("named item '" + _NamedItem + "' is unknown"); + return; + } + if(!user->addItemToInventory(INVENTORIES::temporary, item)) + { + item.deleteItem(); + } + else + { + SM_STATIC_PARAMS_2(params, STRING_MANAGER::dyn_string_id, STRING_MANAGER::integer); + params[0].StringId = item->sendNameId(user); + params[1].Int = _Quantity; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_RECV_NAMED_ITEM", params); + } } } } From 5762e00236bb5e5c01d3545f7d69c4799c22759b Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Wed, 20 Jul 2011 22:09:01 +0200 Subject: [PATCH 18/60] Changed: #1304: Implementation of the "guild" parameter for the "destroy_item" action --HG-- branch : gsoc2011-guildmissions --- .../guild_manager/guild.cpp | 82 ++++++++++++++++ .../guild_manager/guild.h | 16 +++ .../mission_manager/mission_action.cpp | 97 ++++++++++++++----- 3 files changed, 171 insertions(+), 24 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index df9082c6b..2460eb530 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -1030,6 +1030,88 @@ void CGuild::takeItem( CCharacter * user, uint32 slot, uint32 quantity, uint16 s } } +//---------------------------------------------------------------------------- +uint CGuild::selectItems(NLMISC::CSheetId itemSheetId, uint32 quality, std::vector *itemList) +{ + // For all items + uint quantitySelected= 0; + for (uint32 i = 0; i < _Inventory->getSlotCount(); i++) + { + CGameItemPtr item = _Inventory->getItem(i); + if (item == NULL) + continue; + + // if match, append to the list + if (item->getSheetId()==itemSheetId && item->quality()>=quality) + { + quantitySelected+= item->getStackSize(); + if(itemList) + { + CItemSlotId entry; + entry.Slot= i; + entry.Quality= item->quality(); + itemList->push_back(entry); + } + } + } + + return quantitySelected; +} + +//---------------------------------------------------------------------------- +uint CGuild::destroyItems(const std::vector &itemSlotIns, uint32 maxQuantity) +{ + // none to destroy actually? + if(maxQuantity==0 || itemSlotIns.empty()) + return 0; + + // If has to destroy only some of them, must sort to take first the ones of lowest quality + const std::vector *itemSlots= NULL; + std::vector itemSlotSorted; + if(maxQuantity!=uint32(-1)) + { + itemSlotSorted= itemSlotIns; + std::sort(itemSlotSorted.begin(), itemSlotSorted.end()); + itemSlots= &itemSlotSorted; + } + else + { + // just point to the original one + itemSlots= &itemSlotIns; + } + + // destroy items up to the maxquantity wanted + uint index= 0; + uint totalDestroyed= 0; + while(maxQuantity>0 && indexgetStackSize()); + + CGameItemPtr item = _Inventory->removeItem(itemSlot.Slot, quantityToDestroy); + item.deleteItem(); + + // decrease if not infinity + if(maxQuantity!=-1) + maxQuantity-= quantityToDestroy; + + // increase count + totalDestroyed+= quantityToDestroy; + } + + // next slot to destroy + index++; + } + + return totalDestroyed; +} + //---------------------------------------------------------------------------- void CGuild::takeMoney( CCharacter * user, uint64 money, uint16 session ) { diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h index 449debe53..671f7c17b 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.h +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.h @@ -237,6 +237,22 @@ public: /// add an item in the guild inventory (item can be deleted if not inserted : do not use it anymore in any case!) bool putItem( CGameItemPtr item ); + class CItemSlotId + { + public: + uint32 Slot; + uint32 Quality; + bool operator<(const CItemSlotId &o) const + { + return Quality *itemList= NULL); + /// destroy a list of items (up to maxQuantity to destroy) + uint destroyItems(const std::vector &itemSlots, uint32 maxQuantity=-1); + /// return the inventory (const) const NLMISC::CSmartPtr& getInventory() const { return _Inventory; } /// store for a character and return the current info version for an item of the guild inventory diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index 5630913d0..bfb7c8d5a 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -1270,32 +1270,81 @@ class CMissionActionDestroyItem : instance->getEntities(entities); if ( entities.empty() ) return; - for ( uint i = 0; i < entities.size(); i++ ) + + // If the "guild" parameter is not set, we destroy the items for the users + if (!_Guild) { - CCharacter * user = PlayerManager.getChar( entities[i] ); - if ( user ) + + for ( uint i = 0; i < entities.size(); i++ ) { - // Select the items in Bag AND mektoub that match the request - vector itemList; - user->selectItems(INVENTORIES::bag, _SheetId, _Quality, &itemList); - for(uint pa=0;paselectItems(INVENTORIES::TInventory(INVENTORIES::pet_animal + pa), _SheetId, _Quality, &itemList); - - // Destroy them, up to quantity wanted - // NB: don't care if destroying an item owned by a mektoub is strange because mektoub not near! - uint quantityReallyDestroyed; - quantityReallyDestroyed= user->destroyItems(itemList, _Quantity); - - // Send message - SM_STATIC_PARAMS_4(params, STRING_MANAGER::bot, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); - TAIAlias botAlias= _Npc; - if(botAlias==CAIAliasTranslator::Invalid) - botAlias= instance->getGiver(); - params[0].setEIdAIAlias(CAIAliasTranslator::getInstance()->getEntityId( botAlias ), botAlias); - params[1].SheetId = _SheetId; - params[2].Int = quantityReallyDestroyed; - params[3].Int = _Quality; - PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_DESTROY_ITEM", params); + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + // Select the items in Bag AND mektoub that match the request + vector itemList; + user->selectItems(INVENTORIES::bag, _SheetId, _Quality, &itemList); + for(uint pa=0;paselectItems(INVENTORIES::TInventory(INVENTORIES::pet_animal + pa), _SheetId, _Quality, &itemList); + + // Destroy them, up to quantity wanted + // NB: don't care if destroying an item owned by a mektoub is strange because mektoub not near! + uint quantityReallyDestroyed; + quantityReallyDestroyed= user->destroyItems(itemList, _Quantity); + + // Send message + SM_STATIC_PARAMS_4(params, STRING_MANAGER::bot, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); + TAIAlias botAlias= _Npc; + if(botAlias==CAIAliasTranslator::Invalid) + botAlias= instance->getGiver(); + params[0].setEIdAIAlias(CAIAliasTranslator::getInstance()->getEntityId( botAlias ), botAlias); + params[1].SheetId = _SheetId; + params[2].Int = quantityReallyDestroyed; + params[3].Int = _Quality; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_DESTROY_ITEM", params); + } + } + + } + // We destroy the item in the guild + else + { + CCharacter * user = PlayerManager.getChar( entities[0] ); + if (!user) + { + LOGMISSIONACTION("recv_fame : Invalid user"); + return; + } + + CGuild * guild = CGuildManager::getInstance()->getGuildFromId(user->getGuildId()); + if (!guild) + { + LOGMISSIONACTION("recv_fame : Invalid guild id '" + NLMISC::toString(user->getGuildId()) + "'"); + return; + } + + vector itemList; + guild->selectItems(_SheetId, _Quality, &itemList); + + // Destroy them, up to quantity wanted + uint quantityReallyDestroyed; + quantityReallyDestroyed = guild->destroyItems(itemList, _Quantity); + + // Send message + for ( uint i = 0; i < entities.size(); i++ ) + { + CCharacter * user = PlayerManager.getChar( entities[i] ); + if ( user ) + { + SM_STATIC_PARAMS_4(params, STRING_MANAGER::bot, STRING_MANAGER::item, STRING_MANAGER::integer, STRING_MANAGER::integer); + TAIAlias botAlias= _Npc; + if(botAlias==CAIAliasTranslator::Invalid) + botAlias= instance->getGiver(); + params[0].setEIdAIAlias(CAIAliasTranslator::getInstance()->getEntityId( botAlias ), botAlias); + params[1].SheetId = _SheetId; + params[2].Int = quantityReallyDestroyed; + params[3].Int = _Quality; + PHRASE_UTILITIES::sendDynamicSystemMessage(user->getEntityRowId(),"MIS_DESTROY_ITEM", params); + } } } }; From 12fe8693d5e7628bd7d4099fe31a8f3bb9433b68 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Sat, 23 Jul 2011 15:51:46 +0200 Subject: [PATCH 19/60] Changed: #1304: Revert modifications for the objectives in the world_editor_classes.xml (i changed the way i will do it) --HG-- branch : gsoc2011-guildmissions --- .../world_editor_classes.xml | 71 +------------------ 1 file changed, 1 insertion(+), 70 deletions(-) diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml index 238158bbf..7faaf1fcf 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml @@ -688,8 +688,6 @@ - - @@ -838,14 +836,6 @@ - - - - - - - - @@ -1108,8 +1098,6 @@ - - @@ -1122,10 +1110,6 @@ - - - - @@ -1135,45 +1119,28 @@ - - - - - - - - - + - - - - - - - - - @@ -1182,27 +1149,18 @@ - - - - - - - - - @@ -1212,9 +1170,6 @@ - - - @@ -1223,9 +1178,6 @@ - - - @@ -1233,9 +1185,6 @@ - - - @@ -1243,35 +1192,23 @@ - - - - - - - - - - - - @@ -1304,18 +1241,12 @@ - - - - From 9f05d66a81435ff102002333f92e196498b710e4 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Sat, 23 Jul 2011 15:56:32 +0200 Subject: [PATCH 20/60] Changed: #1304: Revert modifications for the objectives in the mission compiler (i changed the way i will do it) --HG-- branch : gsoc2011-guildmissions --- .../leveldesign/mission_compiler_lib/step.h | 4 +- .../mission_compiler_lib/step_content.cpp | 42 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h b/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h index 9d2a053df..fdb1db4be 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step.h @@ -194,9 +194,9 @@ protected: bool _HideObj; // Option nb_guild_members_needed, available for each objective - int _NbGuildMembersNeeded; + /*int _NbGuildMembersNeeded; - std::string genNbGuildMembersNeededOption(CMissionData &md); + std::string genNbGuildMembersNeededOption(CMissionData &md);*/ public: void init(CMissionData &md, NLLIGO::IPrimitive *prim); diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index 442ca6fbd..1ff9b3b18 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -1762,7 +1762,7 @@ void CContentObjective::init(CMissionData &md, IPrimitive *prim) _RoleplayPhrase.initPhrase(md, prim, _RoleplayObj, numEntry, params); // check for the 'nb_guild_members_needed' option and see if it's correct for this mission - string nbGuildMembersNeeded = md.getProperty(prim, "nb_guild_members_needed", false, true); + /*string nbGuildMembersNeeded = md.getProperty(prim, "nb_guild_members_needed", false, true); if (nbGuildMembersNeeded.empty()) nbGuildMembersNeeded = "1"; if (!fromString(nbGuildMembersNeeded.c_str(), _NbGuildMembersNeeded)) @@ -1773,7 +1773,7 @@ void CContentObjective::init(CMissionData &md, IPrimitive *prim) { string err = toString("primitive(%s): nb_guild_members_needed != 1 for non guild mission.", prim->getName().c_str()); throw EParseException(prim, err.c_str()); - } + }*/ } // --------------------------------------------------------------------------- @@ -1794,7 +1794,7 @@ string CContentObjective::genCode(CMissionData &md) } // --------------------------------------------------------------------------- -std::string CContentObjective::genNbGuildMembersNeededOption(CMissionData &md) +/*std::string CContentObjective::genNbGuildMembersNeededOption(CMissionData &md) { string ret = ""; // If we are in a guild mission we add the 'nb_guild_members_needed' option to the script @@ -1805,7 +1805,7 @@ std::string CContentObjective::genNbGuildMembersNeededOption(CMissionData &md) } return ret; -} +}*/ // --------------------------------------------------------------------------- string CContentObjective::genPhrase() @@ -2109,7 +2109,7 @@ public: ret += " : "+_Place; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2166,7 +2166,7 @@ public: if (!_Phrase.isEmpty()) ret += " : "+_Phrase.genScript(md); // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2242,7 +2242,7 @@ public: ret += ": "+_Place; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2317,7 +2317,7 @@ public: ret += "; "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2444,7 +2444,7 @@ public: ret += "; "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2519,7 +2519,7 @@ public: ret += "; "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2651,7 +2651,7 @@ public: if (!_Place.empty()) ret += " : " + _Place; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2737,7 +2737,7 @@ public: ret += " : "+_Npc; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2820,7 +2820,7 @@ public: ret += " : "+_Npc; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2933,7 +2933,7 @@ public: }; ret += " : "+_Npc; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -2971,7 +2971,7 @@ public: ret += "give_money : "+_Amount+" : "+_Npc; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3024,7 +3024,7 @@ public: } } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3061,7 +3061,7 @@ public: if (_SaveAll) ret += " : save_all"; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3135,7 +3135,7 @@ public: ret += "; "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3174,7 +3174,7 @@ public: ret += "; "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3213,7 +3213,7 @@ public: ret += " "; } // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; @@ -3430,7 +3430,7 @@ public: ret += "ring_scenario : "; ret += _ScenarioTag; // Add the 'nb_guild_members_needed' parameter if needed - ret += CContentObjective::genNbGuildMembersNeededOption(md); + //ret += CContentObjective::genNbGuildMembersNeededOption(md); ret += NL; return ret; From 78dbefb759dc0a78b6ce361a9423ec6fabfc97df Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Sat, 23 Jul 2011 18:14:31 +0200 Subject: [PATCH 21/60] Changed: #1304: Checks in the mission compiler if the do_mission objective is correct (for a guild mission) when we add a number (the number of members from the guild needed to complete the mission) after a mission name --HG-- branch : gsoc2011-guildmissions --- .../mission_compiler_lib/step_content.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index 1ff9b3b18..dcd8bb9b3 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -3153,9 +3153,12 @@ class CContentMission: public CContentObjective } public: + CContentMission(): _Prim(0) {} + void init(CMissionData &md, IPrimitive *prim) { _Missions = md.getPropertyArray(prim, "mission_names", true, false); + _Prim = prim; CContentObjective::init(md, prim); } @@ -3172,6 +3175,14 @@ public: ret += _Missions[i]; if (i < _Missions.size()-1) ret += "; "; + + // We check to see if we specified a number after the mission name. If so, we check if it's a guild mission + std::size_t pos = _Missions[i].find_first_of(" \t"); + if (pos != std::string::npos && !md.isGuildMission()) + { + string err = toString("primitive(%s): CContentMission: Number of members needed to complete the mission specified but the mission is not a guild mission.", _Prim->getName().c_str()); + throw EParseException(_Prim, err.c_str()); + } } // Add the 'nb_guild_members_needed' parameter if needed //ret += CContentObjective::genNbGuildMembersNeededOption(md); @@ -3179,6 +3190,8 @@ public: return ret; } + + IPrimitive *_Prim; }; REGISTER_STEP_CONTENT(CContentMission, "do_mission"); From 6462021f14f696ba11fda2609d9d19653ba7549b Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 25 Jul 2011 12:27:19 +0200 Subject: [PATCH 22/60] Changed: #1304: Update of CMissionStepDoMissions to support missions done several times (by different guild members) --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_step_misc.cpp | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp index ff8496eba..2078c6c6a 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp @@ -1141,7 +1141,13 @@ MISSION_REGISTER_STEP(CMissionStepCast,"cast") // ---------------------------------------------------------------------------- class CMissionStepDoMissions : public IMissionStepTemplate { - std::vector< std::string > _Missions; + struct MissionNb + { + std::string Mission; + uint32 NbNeedCompletion; + }; + + std::vector< MissionNb > _Missions; virtual bool buildStep( uint32 line, const std::vector< std::string > & script, CMissionGlobalParsingData & globalData, CMissionSpecificParsingData & missionData ) { @@ -1158,7 +1164,13 @@ class CMissionStepDoMissions : public IMissionStepTemplate _Missions.resize(subs.size()); for ( uint i = 0; i < subs.size(); i++ ) { - _Missions[i] = CMissionParser::getNoBlankString( subs[i] ); + std::vector< std::string > params; + NLMISC::splitString( subs[i]," \t", params ); + _Missions[i].Mission = CMissionParser::getNoBlankString( params[0] ); + if (params.size() > 1) + NLMISC::fromString(params[1], _Missions[i].NbNeedCompletion); + else + _Missions[i].NbNeedCompletion = 1; } return true; } @@ -1168,7 +1180,7 @@ class CMissionStepDoMissions : public IMissionStepTemplate if ( event.Type == CMissionEvent::MissionDone ) { CMissionEventMissionDone & eventSpe = (CMissionEventMissionDone&)event; - TAIAlias alias = CAIAliasTranslator::getInstance()->getMissionUniqueIdFromName( _Missions[subStepIndex] ); + TAIAlias alias = CAIAliasTranslator::getInstance()->getMissionUniqueIdFromName( _Missions[subStepIndex].Mission ); if ( eventSpe.Mission == alias ) { LOGMISSIONSTEPSUCCESS("mission"); @@ -1181,6 +1193,12 @@ class CMissionStepDoMissions : public IMissionStepTemplate void getInitState( std::vector& ret ) { ret.resize( _Missions.size(), 1 ); + uint32 i = 0; + for (std::vector::const_iterator it = _Missions.begin(); it != _Missions.end(); ++it) + { + ret[i] = it->NbNeedCompletion; + i++; + } } virtual void getTextParams( uint & nbSubSteps,const std::string* & textPtr,TVectorParamCheck& retParams, const std::vector& subStepStates) From 1f057afe9193afe1129f983df56ec4951e4adb5d Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Mon, 25 Jul 2011 14:09:13 +0200 Subject: [PATCH 23/60] Changed: #1304: Message concerning the number of times a mission needs to be completed --HG-- branch : gsoc2011-guildmissions --- .../mission_manager/mission_step_misc.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp index 2078c6c6a..dc0be33d5 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp @@ -1203,7 +1203,26 @@ class CMissionStepDoMissions : public IMissionStepTemplate virtual void getTextParams( uint & nbSubSteps,const std::string* & textPtr,TVectorParamCheck& retParams, const std::vector& subStepStates) { - static const std::string stepText = "ERROR_UNSPECIFIED_MISSION_TEXT"; + /*static const std::string stepText = "ERROR_UNSPECIFIED_MISSION_TEXT"; + textPtr = &stepText;*/ + + // Because we can specify the number of times we want a mission to be completed, we specify the parameters + static const std::string stepText = "MIS_DO_MISSION_"; + nlassert( _Missions.size() == subStepStates.size() ); + for ( uint i = 0; i < subStepStates.size(); i++ ) + { + if( subStepStates[i] != 0 ) + { + nbSubSteps++; + retParams.push_back(STRING_MANAGER::TParam()); + retParams.back().Type = STRING_MANAGER::integer; + retParams.back().Int = subStepStates[i]; + + retParams.push_back(STRING_MANAGER::TParam()); + retParams.back().Type = STRING_MANAGER::literal; + retParams.back().Literal = _Missions[i].Mission; + } + } textPtr = &stepText; } bool checkTextConsistency() From ff5da0aa2269b65abc24057b99cacb11a081be12 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Thu, 4 Aug 2011 17:04:49 +0200 Subject: [PATCH 24/60] Changed: #1304: Debug for the guild missions. Now it works ! --HG-- branch : gsoc2011-guildmissions --- .../world_editor_classes.xml | 1 + .../guild_manager/guild.cpp | 2 +- .../mission_manager/mission_action.cpp | 20 +++++++++++--- .../mission_manager/mission_event.h | 5 ++-- .../mission_manager/mission_guild.h | 4 +-- .../mission_manager/mission_step_misc.cpp | 12 ++++++++- .../player_manager/character.cpp | 26 +++++++++++++++++-- .../mission_compiler_lib/step_content.cpp | 23 ++++++++++++---- 8 files changed, 76 insertions(+), 17 deletions(-) diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml index 7faaf1fcf..5426361fa 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml @@ -707,6 +707,7 @@ + diff --git a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp index 2460eb530..a93bdaeb1 100644 --- a/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp +++ b/code/ryzom/server/src/entities_game_service/guild_manager/guild.cpp @@ -795,7 +795,7 @@ bool CGuild::processGuildMissionStepEvent(std::list< CMissionEvent*> & eventList return false; } // I don't know if i should pass _EId to this function - CMissionEvent::TResult result = mission->processEvent( TheDataset.getDataSetRow( _EId) ,eventList,stepIndex ); + CMissionEvent::TResult result = mission->processEvent(TheDataset.getDataSetRow(getHighestGradeOnlineUser()) /*TheDataset.getDataSetRow( _EId)*/ ,eventList,stepIndex ); if ( result == CMissionEvent::Nothing ) return false; else if ( result == CMissionEvent::MissionFailed ) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp index bfb7c8d5a..31cf1ff0f 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_action.cpp @@ -4053,15 +4053,16 @@ protected: TAIAlias Mission; TAIAlias NPCOwner; // NPC giver the mission have to be attached at spawn time + bool Guild; protected: bool buildAction ( uint32 line, const std::vector< std::string > & script, CMissionGlobalParsingData & globalData, CMissionSpecificParsingData & missionData) { _SourceLine = line; - if ( script.size() != 3 ) + if ( script.size() != 3 && script.size() != 4) { - MISLOGSYNTAXERROR(" : "); + MISLOGSYNTAXERROR(" : [: guild]"); return false; } string name = CMissionParser::getNoBlankString( script[1] ); @@ -4094,6 +4095,17 @@ protected: if (vRet.size() > 0) NPCOwner = vRet[0]; + // We check for the guild option + Guild = false; + for (std::vector< std::string >::const_iterator it = script.begin(); it != script.end(); ++it) + { + if (CMissionParser::getNoBlankString(*it) == "guild") + { + Guild = true; + break; + } + } + return true; } @@ -4104,13 +4116,13 @@ protected: { CAIAliasTranslator::getInstance()->getNPCNameFromAlias(instance->getGiver(), sDebugBotName); nlassert(instance); - CMissionEventAddMission * event = new CMissionEventAddMission( instance->getGiver(), Mission, mainMission ); + CMissionEventAddMission * event = new CMissionEventAddMission( instance->getGiver(), Mission, mainMission, Guild ); eventList.push_back( event ); } else { CAIAliasTranslator::getInstance()->getNPCNameFromAlias(NPCOwner, sDebugBotName); - CMissionEventAddMission * event = new CMissionEventAddMission( NPCOwner, Mission, mainMission ); + CMissionEventAddMission * event = new CMissionEventAddMission( NPCOwner, Mission, mainMission, Guild ); eventList.push_back( event ); } LOGMISSIONACTION("spawn_mission bot:" + sDebugBotName + " newmiss:" + CPrimitivesParser::aliasToString(Mission) diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_event.h b/code/ryzom/server/src/entities_game_service/mission_manager/mission_event.h index f4aa2ffea..b32599a8a 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_event.h +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_event.h @@ -416,11 +416,12 @@ protected: class CMissionEventAddMission: public CMissionEvent { public: - CMissionEventAddMission( TAIAlias giver, TAIAlias mission, TAIAlias mainMission ) - :CMissionEvent(AddMission, TDataSetRow()) ,Giver(giver),Mission(mission),MainMission(mainMission) {} + CMissionEventAddMission( TAIAlias giver, TAIAlias mission, TAIAlias mainMission, bool guild ) + :CMissionEvent(AddMission, TDataSetRow()) ,Giver(giver),Mission(mission),MainMission(mainMission), Guild(guild) {} TAIAlias Mission; TAIAlias Giver; TAIAlias MainMission; + bool Guild; protected: friend class CMissionEvent; bool buildFromScript( const std::vector< std::string > & script ,NLMISC::CLog& log){return false;} diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h index 76cd0cb6a..b8635d1d4 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_guild.h @@ -32,7 +32,7 @@ public: CMissionGuild() : _Chained(false) { } - inline void setGuild( uint16 guildId ); + inline void setGuild( uint32 guildId ); /// override void updateUsersJournalEntry(); /// override @@ -59,7 +59,7 @@ private: bool _Chained; }; -void CMissionGuild::setGuild( uint16 guildId ) +void CMissionGuild::setGuild( uint32 guildId ) { _GuildId = guildId; } diff --git a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp index dc0be33d5..03ad33b28 100644 --- a/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp +++ b/code/ryzom/server/src/entities_game_service/mission_manager/mission_step_misc.cpp @@ -1165,7 +1165,17 @@ class CMissionStepDoMissions : public IMissionStepTemplate for ( uint i = 0; i < subs.size(); i++ ) { std::vector< std::string > params; - NLMISC::splitString( subs[i]," \t", params ); + //NLMISC::splitString( subs[i]," \t", params ); + subs[i] = CMissionParser::getNoBlankString(subs[i]); + std::size_t pos = subs[i].find_first_of(" \t"); + std::string str = subs[i].substr(0, pos); + params.push_back(str); + if (pos != std::string::npos) + str = subs[i].substr(pos + 1); + else + str = ""; + params.push_back(str); + //std::size_t pos = _Missions[i].find_first_of(" \t"); _Missions[i].Mission = CMissionParser::getNoBlankString( params[0] ); if (params.size() > 1) NLMISC::fromString(params[1], _Missions[i].NbNeedCompletion); diff --git a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp index b70eb3b88..2c0e38f80 100644 --- a/code/ryzom/server/src/entities_game_service/player_manager/character.cpp +++ b/code/ryzom/server/src/entities_game_service/player_manager/character.cpp @@ -11641,11 +11641,33 @@ bool CCharacter::processMissionEventList( std::list< CMissionEvent* > & eventLis TAIAlias mission = eventSpe.Mission; TAIAlias giver = eventSpe.Giver; TAIAlias mainMission = eventSpe.MainMission; + bool missionForGuild = eventSpe.Guild; // add mission event are always allocated on heap delete ( CMissionEvent *) ( eventList.front() ); eventList.pop_front(); - CMissionManager::getInstance()->instanciateMission(this, mission, giver ,eventList, mainMission); + + // If the mission is not for guild members we just instanciate it + if (!missionForGuild) + CMissionManager::getInstance()->instanciateMission(this, mission, giver ,eventList, mainMission); + else + { + // We find the guild and each guild members and we instanciate the mission for them + if (guild) + { + for ( std::map::iterator it = guild->getMembersBegin(); + it != guild->getMembersEnd();++it ) + { + CCharacter * guildUser = PlayerManager.getChar( it->first ); + if ( !guildUser ) + { + nlwarning( "cant find user %s", it->first.toString().c_str() ); + continue; + } + CMissionManager::getInstance()->instanciateMission(guildUser, mission, giver ,eventList, mainMission); + } + } + } } // event may have been processed during instanciateMission if ( eventList.empty() ) @@ -11667,7 +11689,7 @@ bool CCharacter::processMissionEventList( std::list< CMissionEvent* > & eventLis } // THIRD - Check with guild missions (if event not already processed and char belongs to a guild) - if (!eventProcessed && (event.Restriction != CMissionEvent::NoGroup)) + if (!eventProcessed)// && (event.Restriction != CMissionEvent::NoGroup)) { if (guild != NULL) eventProcessed = guild->processGuildMissionEvent(eventList, alias); diff --git a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp index dcd8bb9b3..4b8bce784 100644 --- a/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp +++ b/code/ryzom/tools/leveldesign/mission_compiler_lib/step_content.cpp @@ -254,6 +254,7 @@ class CActionSpawnMission : public IStepContent protected: string _MissionName; string _GiverName; + bool _Guild; private: void getPredefParam(uint32 &numEntry, CPhrase::TPredefParams &predef) { @@ -268,17 +269,29 @@ public: if (_GiverName.empty()) { throw EParseException(prim, "giver_name is empty !"); - } + } + + _Guild = md.getProperty(prim, "guild", false, true) == "true"; + // Check: if _Guild is true then check if we are in a guild mission + if (_Guild && !md.isGuildMission()) + { + string err = toString("primitive(%s): 'guild' option true 1 for non guild mission.", prim->getName().c_str()); + throw EParseException(prim, err.c_str()); + } } string genCode(CMissionData &md) { + string ret = ""; if (!_MissionName.empty()) - return "spawn_mission : " + _MissionName + " : " + _GiverName + NL; - else - return string(); + { + ret = "spawn_mission : " + _MissionName + " : " + _GiverName; + if (_Guild) + ret += " : guild"; + ret += NL; + } + return ret; } - }; REGISTER_STEP_CONTENT(CActionSpawnMission, "spawn_mission"); From bbc33e2bf91daf21921b9cb927464be912ad3826 Mon Sep 17 00:00:00 2001 From: kervala Date: Thu, 11 Aug 2011 10:09:30 +0200 Subject: [PATCH 25/60] Changed: Remove libwww warnings under Windows --- code/CMakeModules/FindLibwww.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/CMakeModules/FindLibwww.cmake b/code/CMakeModules/FindLibwww.cmake index 8f1c1c02a..b594b3140 100644 --- a/code/CMakeModules/FindLibwww.cmake +++ b/code/CMakeModules/FindLibwww.cmake @@ -65,9 +65,9 @@ MACRO(FIND_WWW_LIBRARY MYLIBRARY OPTION) SET(LIBWWW_LIBRARIES ${LIBWWW_LIBRARIES} ${${MYLIBRARY}}) ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC) ELSE(${MYLIBRARY}) - IF(NOT LIBWWW_FIND_QUIETLY) + IF(NOT LIBWWW_FIND_QUIETLY AND NOT WIN32) MESSAGE(STATUS "Warning: Libwww: Library not found: ${MYLIBRARY}") - ENDIF(NOT LIBWWW_FIND_QUIETLY) + ENDIF(NOT LIBWWW_FIND_QUIETLY AND NOT WIN32) ENDIF(${MYLIBRARY}) MARK_AS_ADVANCED(${MYLIBRARY}) From 9ea534f4f26709448b294144729b07777fd693d6 Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 12 Aug 2011 16:41:58 +0200 Subject: [PATCH 26/60] Fixed: #1329 Program received signal SIGSEGV, Segmentation fault. --- code/CMakeModules/FindLibwww.cmake | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/code/CMakeModules/FindLibwww.cmake b/code/CMakeModules/FindLibwww.cmake index b594b3140..77140492e 100644 --- a/code/CMakeModules/FindLibwww.cmake +++ b/code/CMakeModules/FindLibwww.cmake @@ -6,6 +6,8 @@ # LIBWWW_LIBRARY, where to find the LibWWW library. # LIBWWW_FOUND, If false, do not try to use LibWWW. +OPTION(WITH_LIBWWW_STATIC "Use only static libraries for libwww" OFF) + SET(LIBWWW_FIND_QUIETLY ${Libwww_FIND_QUIETLY}) # also defined, but not for general use are @@ -46,6 +48,11 @@ ENDIF(LIBWWW_ADDITIONAL_INCLUDE_DIR) # helper to find all the libwww sub libraries MACRO(FIND_WWW_LIBRARY MYLIBRARY OPTION) + IF(WITH_LIBWWW_STATIC AND UNIX AND NOT APPLE AND NOT WITH_STATIC_EXTERNAL) + SET(CMAKE_FIND_LIBRARY_SUFFIXES_OLD ${CMAKE_FIND_LIBRARY_SUFFIXES}) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + ENDIF(WITH_LIBWWW_STATIC AND UNIX AND NOT APPLE AND NOT WITH_STATIC_EXTERNAL) + FIND_LIBRARY(${MYLIBRARY} NAMES ${ARGN} PATHS @@ -60,10 +67,14 @@ MACRO(FIND_WWW_LIBRARY MYLIBRARY OPTION) /usr/freeware/lib64 ) + IF(CMAKE_FIND_LIBRARY_SUFFIXES_OLD) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_OLD}) + ENDIF(CMAKE_FIND_LIBRARY_SUFFIXES_OLD) + IF(${MYLIBRARY}) - IF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC) + IF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC) SET(LIBWWW_LIBRARIES ${LIBWWW_LIBRARIES} ${${MYLIBRARY}}) - ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC) + ENDIF(${OPTION} STREQUAL REQUIRED OR WITH_STATIC OR WITH_LIBWWW_STATIC) ELSE(${MYLIBRARY}) IF(NOT LIBWWW_FIND_QUIETLY AND NOT WIN32) MESSAGE(STATUS "Warning: Libwww: Library not found: ${MYLIBRARY}") @@ -74,7 +85,9 @@ MACRO(FIND_WWW_LIBRARY MYLIBRARY OPTION) ENDMACRO(FIND_WWW_LIBRARY) MACRO(LINK_WWW_LIBRARY MYLIBRARY OTHERLIBRARY SYMBOL) - LINK_DEPENDS(LIBWWW_LIBRARIES ${MYLIBRARY} ${OTHERLIBRARY} ${SYMBOL}) + IF(NOT WITH_LIBWWW_STATIC AND NOT WITH_STATIC_EXTERNAL) + LINK_DEPENDS(LIBWWW_LIBRARIES ${MYLIBRARY} ${OTHERLIBRARY} ${SYMBOL}) + ENDIF(NOT WITH_LIBWWW_STATIC AND NOT WITH_STATIC_EXTERNAL) ENDMACRO(LINK_WWW_LIBRARY) # Find and link required libs for static or dynamic From 067c045855488455fd9f2aa72ec77769a7ffbd72 Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 12 Aug 2011 17:28:30 +0200 Subject: [PATCH 27/60] Fixed: Moc'ed files not being generated by CMake for qtpropertybrowser --- .../src/3rdparty/qtpropertybrowser/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt index 8fb0881af..38131aeb3 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt @@ -36,6 +36,15 @@ LIST(REMOVE_ITEM QT_PROPERTY_EDITOR_MOC_SRC ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbu ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cxx ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cxx) +# We need to add new depencencies on removed files because we need them to be still generated +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qtbuttonpropertybrowser.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qtbuttonpropertybrowser.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qteditorfactory.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qteditorfactory.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qtgroupboxpropertybrowser.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qtgroupboxpropertybrowser.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qtpropertybrowser.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qtpropertymanager.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertymanager.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qttreepropertybrowser.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qttreepropertybrowser.cxx) +SET_PROPERTY(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/qtvariantproperty.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/moc_qtvariantproperty.cxx) + #set( # qtpropertyeditor_HEADERS_ONLY_MOC # ${CMAKE_CURRENT_BINARY_DIR}/moc_qtpropertybrowser.cpp From 1ef3c1fada01b0bab6323cb0e7880a079c679332 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 13 Aug 2011 17:39:55 +0200 Subject: [PATCH 28/60] Removed: Backup files --- .../src/images/georges_logo.icns.orig | Bin 16519 -> 0 bytes .../src/images/georges_logo.png.orig | Bin 797513 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/images/georges_logo.icns.orig delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/images/georges_logo.png.orig diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/images/georges_logo.icns.orig b/code/ryzom/tools/leveldesign/georges_editor_qt/src/images/georges_logo.icns.orig deleted file mode 100644 index 1417688dbbf3552a74c4af2b99a07ef4fa0d91cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16519 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

Yz$Q6(eYd}YJw&I}_ySM?}<2&k=BN(R&7 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%0DNhgjR-bRp!H&_b9Dj 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

cj~jTcUmz)`v*;ao<@;UmVG?;Fm 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 z Date: Sat, 13 Aug 2011 17:40:43 +0200 Subject: [PATCH 29/60] Fixed: Dll symbols export under Windows for qtpropertybrowser --- .../src/3rdparty/qtpropertybrowser/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt index 38131aeb3..f4ed13e0a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/3rdparty/qtpropertybrowser/CMakeLists.txt @@ -88,7 +88,7 @@ TARGET_LINK_LIBRARIES(qt_property_browser ${QT_LIBRARIES}) ADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_DLL) -#ADD_DEFINITIONS(-DQT_QTPROPERTYBROWSER_EXPORT) +ADD_DEFINITIONS(-DQT_QTPROPERTYBROWSER_EXPORT) ADD_DEFINITIONS(-DQT_PLUGIN) #ADD_DEFINITIONS(-DQT_NO_DEBUG) ADD_DEFINITIONS(-DQT_SHARED) From 28c4623f27ded096b0b24a020b60cc661b7b3134 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sat, 13 Aug 2011 19:11:15 +0200 Subject: [PATCH 30/60] Changed: #1206 fixed bug when exception in sound system wouldnt close the settings group leading to inconsistent ini file --- .../src/plugins/object_viewer/sound_system.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.cpp index ba64d834e..07101aa85 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.cpp @@ -107,6 +107,9 @@ void CSoundSystem::init() std::string mess = std::string("Unable to init sound :") + e.what(); nlwarning ("Init sound: %s", mess.c_str()); _AudioMixer = NULL; + QSettings *settings = Core::ICore::instance()->settings(); + if (settings->group() == Constants::OBJECT_VIEWER_SECTION) + settings->endGroup(); return; } From d98511337d02ac8899d4e833043c04ca66551f17 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 13 Aug 2011 23:36:37 +0200 Subject: [PATCH 31/60] Fixed: #1333 Support 3ds Max 2012 SDK. --- code/CMakeModules/Find3dsMaxSDK.cmake | 11 +++-- code/CMakeModules/FindFreeType.cmake | 2 +- .../nel/tools/3d/ligo/plugin_max/DllEntry.cpp | 3 ++ .../tools/3d/ligo/plugin_max/max_to_ligo.cpp | 7 +++- code/nel/tools/3d/ligo/plugin_max/script.cpp | 31 ++++++++++---- .../3d/plugin_max/nel_export/DllEntry.cpp | 4 +- .../nel_export/nel_export_script.cpp | 7 +++- .../tools/3d/plugin_max/nel_export/std_afx.h | 31 ++++++++++---- .../tools/3d/plugin_max/nel_mesh_lib/StdAfx.h | 7 +++- .../plugin_max/nel_mesh_lib/export_misc.cpp | 4 ++ .../plugin_max/nel_mesh_lib/export_script.cpp | 10 ++++- .../nel_patch_converter/DllEntry.cpp | 3 ++ .../plugin_max/nel_patch_converter/script.cpp | 42 ++++++++++++------- .../3d/plugin_max/nel_patch_edit/np_mods.cpp | 4 ++ .../3d/plugin_max/nel_patch_lib/rpo2nel.cpp | 7 +++- .../plugin_max/nel_patch_paint/DllEntry.cpp | 3 ++ .../nel_patch_paint/nel_patch_paint.h | 7 +++- .../nel_vertex_tree_paint/dllmain.cpp | 4 +- .../3d/plugin_max/tile_utility/DllEntry.cpp | 3 ++ 19 files changed, 144 insertions(+), 46 deletions(-) diff --git a/code/CMakeModules/Find3dsMaxSDK.cmake b/code/CMakeModules/Find3dsMaxSDK.cmake index 52c4cc011..ddec22f90 100644 --- a/code/CMakeModules/Find3dsMaxSDK.cmake +++ b/code/CMakeModules/Find3dsMaxSDK.cmake @@ -12,32 +12,35 @@ endif(MAXSDK_INCLUDE_DIR) find_path(MAXSDK_INCLUDE_DIR max.h PATHS + "$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk/include" + "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/include" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk/include" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk/include" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk/include" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk/include" - "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/include" ) find_path(MAXSDK_CS_INCLUDE_DIR bipexp.h PATHS + "$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk/include/CS" + "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/include/CS" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk/include/CS" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk/include/CS" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk/include/CS" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk/include/CS" - "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/include/CS" ) MACRO(FIND_3DS_LIBRARY MYLIBRARY MYLIBRARYNAME) FIND_LIBRARY(${MYLIBRARY} NAMES ${MYLIBRARYNAME} PATHS + "$ENV{ADSK_3DSMAX_SDK_2012}/maxsdk/lib" + "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/lib" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2010 SDK/maxsdk/lib" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2009 SDK/maxsdk/lib" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 2008 SDK/maxsdk/lib" "$ENV{PROGRAMFILES}/Autodesk/3ds Max 9 SDK/maxsdk/lib" - "$ENV{3DSMAX_2011_SDK_PATH}/maxsdk/lib" - ) + ) ENDMACRO(FIND_3DS_LIBRARY MYLIBRARY MYLIBRARYNAME) FIND_3DS_LIBRARY(MAXSDK_CORE_LIBRARY core) diff --git a/code/CMakeModules/FindFreeType.cmake b/code/CMakeModules/FindFreeType.cmake index 0ba439fb9..b9d00d96a 100644 --- a/code/CMakeModules/FindFreeType.cmake +++ b/code/CMakeModules/FindFreeType.cmake @@ -41,7 +41,7 @@ IF(FREETYPE_ADDITIONAL_INCLUDE_DIR) ENDIF(FREETYPE_ADDITIONAL_INCLUDE_DIR) FIND_LIBRARY(FREETYPE_LIBRARY - NAMES freetype libfreetype freetype219 + NAMES freetype libfreetype freetype219 freetype246 PATHS $ENV{FREETYPE_DIR}/lib /usr/local/lib diff --git a/code/nel/tools/3d/ligo/plugin_max/DllEntry.cpp b/code/nel/tools/3d/ligo/plugin_max/DllEntry.cpp index 3cf88f4a7..ee9964566 100644 --- a/code/nel/tools/3d/ligo/plugin_max/DllEntry.cpp +++ b/code/nel/tools/3d/ligo/plugin_max/DllEntry.cpp @@ -18,6 +18,7 @@ #include "nel/misc/app_context.h" #include #include "../../plugin_max/nel_3dsmax_shared/nel_3dsmax_shared.h" +#include extern ClassDesc2* GetLigoscapeDesc(); @@ -44,7 +45,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) if (!controlsInit) { controlsInit = TRUE; +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); // Initialize MAX's custom controls +#endif InitCommonControls(); // Initialize Win95 controls } diff --git a/code/nel/tools/3d/ligo/plugin_max/max_to_ligo.cpp b/code/nel/tools/3d/ligo/plugin_max/max_to_ligo.cpp index 7500b027b..eb4951991 100644 --- a/code/nel/tools/3d/ligo/plugin_max/max_to_ligo.cpp +++ b/code/nel/tools/3d/ligo/plugin_max/max_to_ligo.cpp @@ -17,7 +17,12 @@ #include // From MAXSDK -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +#else +# include +#endif #include "max_to_ligo.h" diff --git a/code/nel/tools/3d/ligo/plugin_max/script.cpp b/code/nel/tools/3d/ligo/plugin_max/script.cpp index 5d6381303..90050304f 100644 --- a/code/nel/tools/3d/ligo/plugin_max/script.cpp +++ b/code/nel/tools/3d/ligo/plugin_max/script.cpp @@ -19,17 +19,30 @@ #include // Various MAX and MXS includes -#include -#include -#include -#include -#include -#include -#include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif #include #include -#include // Visual #include diff --git a/code/nel/tools/3d/plugin_max/nel_export/DllEntry.cpp b/code/nel/tools/3d/plugin_max/nel_export/DllEntry.cpp index 61337b328..7e6ded529 100644 --- a/code/nel/tools/3d/plugin_max/nel_export/DllEntry.cpp +++ b/code/nel/tools/3d/plugin_max/nel_export/DllEntry.cpp @@ -19,7 +19,7 @@ #include "nel/3d/register_3d.h" #include "nel/misc/app_context.h" #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" - +#include extern ClassDesc2* GetCNelExportDesc(); @@ -42,7 +42,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) if (!controlsInit) { controlsInit = TRUE; +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); // Initialize MAX's custom controls +#endif InitCommonControls(); // Initialize Win95 controls } diff --git a/code/nel/tools/3d/plugin_max/nel_export/nel_export_script.cpp b/code/nel/tools/3d/plugin_max/nel_export/nel_export_script.cpp index 9218e73ce..d26af56ca 100644 --- a/code/nel/tools/3d/plugin_max/nel_export/nel_export_script.cpp +++ b/code/nel/tools/3d/plugin_max/nel_export/nel_export_script.cpp @@ -16,7 +16,12 @@ #include "std_afx.h" #include "nel_export.h" -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +#else +# include +#endif #include "../nel_mesh_lib/export_nel.h" #include "../nel_mesh_lib/export_appdata.h" diff --git a/code/nel/tools/3d/plugin_max/nel_export/std_afx.h b/code/nel/tools/3d/plugin_max/nel_export/std_afx.h index 326c0b9c1..099f2f882 100644 --- a/code/nel/tools/3d/plugin_max/nel_export/std_afx.h +++ b/code/nel/tools/3d/plugin_max/nel_export/std_afx.h @@ -26,16 +26,29 @@ #include #include #undef STRICT -#include -#include -#include -#include -#include -#include -#include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +# include +# include +# include +# include +# include +# include +# include +# include +#endif #include -#include #include #ifdef min #undef min diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/StdAfx.h b/code/nel/tools/3d/plugin_max/nel_mesh_lib/StdAfx.h index 65b65651e..b3626b896 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/StdAfx.h +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/StdAfx.h @@ -32,7 +32,12 @@ #include #include #include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +#else +# include +#endif //#include // Character Studio SDK include diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_misc.cpp b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_misc.cpp index 0b2426758..a03beb000 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_misc.cpp +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_misc.cpp @@ -260,7 +260,11 @@ Control* CExportNel::getControlerByName (Animatable& node, const char* sName) if (strcmp (paramDef.int_name, sName)==0) { // ok, return this subanim +#if MAX_VERSION_MAJOR >= 14 + return param->GetControllerByID(id); +#else return param->GetController(id); +#endif } } } diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_script.cpp b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_script.cpp index 6f1713683..7fd0ad150 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_script.cpp +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_script.cpp @@ -15,8 +15,14 @@ // along with this program. If not, see . #include "stdafx.h" -#include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +# include +#else +# include +# include +#endif #include "export_nel.h" #include "export_appdata.h" diff --git a/code/nel/tools/3d/plugin_max/nel_patch_converter/DllEntry.cpp b/code/nel/tools/3d/plugin_max/nel_patch_converter/DllEntry.cpp index 22ae76790..50f249c31 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_converter/DllEntry.cpp +++ b/code/nel/tools/3d/plugin_max/nel_patch_converter/DllEntry.cpp @@ -20,6 +20,7 @@ #include "nel/misc/debug.h" #include "nel/misc/app_context.h" #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" +#include extern ClassDesc2* GetPO2RPODesc(); extern ClassDesc* GetRPODesc(); @@ -58,7 +59,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) { // This method has been deprecated. controlsInit = TRUE; +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); // Initialize MAX's custom controls +#endif InitCommonControls(); // Initialize Win95 controls } return (TRUE); diff --git a/code/nel/tools/3d/plugin_max/nel_patch_converter/script.cpp b/code/nel/tools/3d/plugin_max/nel_patch_converter/script.cpp index b324c2cc6..1dfdc97f4 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_converter/script.cpp +++ b/code/nel/tools/3d/plugin_max/nel_patch_converter/script.cpp @@ -22,24 +22,38 @@ #define _CRT_SECURE_NO_DEPRECATE #include -#include -#include - -// Various MAX and MXS includes -#include -#include -#include -#include -#include -#include + +#include +#if MAX_VERSION_MAJOR >= 14 +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +# include +// Various MAX and MXS includes +# include +# include +# include +# include +# include +# include +// define the new primitives using macros from SDK +# include +#endif + #include #include #include #include -// define the new primitives using macros from SDK -#include #undef _CRT_SECURE_NO_DEPRECATE @@ -109,9 +123,9 @@ def_visible_primitive( set_tile_bank, "NelSetTileBank"); def_visible_primitive( export_zone, "ExportRykolZone"); def_visible_primitive( import_zone, "NeLImportZone"); -/* permettre l'acces à auto/manual intrior edges +/* permettre l'acces Eauto/manual intrior edges faire une methode pour interfacer la fonction compute interior edge -donner un acces à tiledmode/patchmode (on/off) +donner un acces Etiledmode/patchmode (on/off) faire un getselectedvertex faire un getselectedpatch faire un getselectedtile */ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit/np_mods.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit/np_mods.cpp index c2696674a..8d7467a62 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit/np_mods.cpp +++ b/code/nel/tools/3d/plugin_max/nel_patch_edit/np_mods.cpp @@ -17,6 +17,8 @@ #include #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" +#include + HINSTANCE hInstance; int controlsInit = FALSE; @@ -42,7 +44,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) controlsInit = TRUE; // jaguar controls +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); +#endif #ifdef OLD3DCONTROLS // initialize 3D controls diff --git a/code/nel/tools/3d/plugin_max/nel_patch_lib/rpo2nel.cpp b/code/nel/tools/3d/plugin_max/nel_patch_lib/rpo2nel.cpp index edf2f77e6..d99dc0f98 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_lib/rpo2nel.cpp +++ b/code/nel/tools/3d/plugin_max/nel_patch_lib/rpo2nel.cpp @@ -18,7 +18,12 @@ // For MAX_RELEASE #include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +#else +# include +#endif #include "rpo.h" #include "nel/3d/zone.h" diff --git a/code/nel/tools/3d/plugin_max/nel_patch_paint/DllEntry.cpp b/code/nel/tools/3d/plugin_max/nel_patch_paint/DllEntry.cpp index a3578a0bc..b4b79da80 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_paint/DllEntry.cpp +++ b/code/nel/tools/3d/plugin_max/nel_patch_paint/DllEntry.cpp @@ -3,6 +3,7 @@ #include "nel/misc/debug.h" #include "nel/misc/app_context.h" #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" +#include HINSTANCE hInstance; int controlsInit = FALSE; @@ -26,7 +27,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) controlsInit = TRUE; // jaguar controls +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); +#endif #ifdef OLD3DCONTROLS // initialize 3D controls diff --git a/code/nel/tools/3d/plugin_max/nel_patch_paint/nel_patch_paint.h b/code/nel/tools/3d/plugin_max/nel_patch_paint/nel_patch_paint.h index 944807aca..3563b4712 100644 --- a/code/nel/tools/3d/plugin_max/nel_patch_paint/nel_patch_paint.h +++ b/code/nel/tools/3d/plugin_max/nel_patch_paint/nel_patch_paint.h @@ -3,7 +3,12 @@ #include "resource.h" #include -#include +#include +#if MAX_VERSION_MAJOR >= 14 +# include +#else +# include +#endif #include "namesel.h" #include "nsclip.h" #include "sbmtlapi.h" diff --git a/code/nel/tools/3d/plugin_max/nel_vertex_tree_paint/dllmain.cpp b/code/nel/tools/3d/plugin_max/nel_vertex_tree_paint/dllmain.cpp index 4dc068eea..1f04fe088 100644 --- a/code/nel/tools/3d/plugin_max/nel_vertex_tree_paint/dllmain.cpp +++ b/code/nel/tools/3d/plugin_max/nel_vertex_tree_paint/dllmain.cpp @@ -1,6 +1,6 @@ #include "vertex_tree_paint.h" #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" - +#include HINSTANCE hInstance; @@ -18,7 +18,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) switch (fdwReason) { case DLL_PROCESS_ATTACH: +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); // Initialize MAX's custom controls +#endif InitCommonControls(); // Initialize Win95 controls break; } diff --git a/code/nel/tools/3d/plugin_max/tile_utility/DllEntry.cpp b/code/nel/tools/3d/plugin_max/tile_utility/DllEntry.cpp index d1c6c7d6b..26e2d14f8 100644 --- a/code/nel/tools/3d/plugin_max/tile_utility/DllEntry.cpp +++ b/code/nel/tools/3d/plugin_max/tile_utility/DllEntry.cpp @@ -20,6 +20,7 @@ #include "nel/misc/app_context.h" #include "../nel_3dsmax_shared/nel_3dsmax_shared.h" #include +#include extern ClassDesc2* GetTile_utilityDesc(); extern ClassDesc* GetRGBAddDesc(); @@ -46,7 +47,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) if (!controlsInit) { controlsInit = TRUE; +#if MAX_VERSION_MAJOR < 14 InitCustomControls(hInstance); // Initialize MAX's custom controls +#endif InitCommonControls(); // Initialize Win95 controls } From 80983a5ab67d642ff30b53c4a2921d2a447d89de Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 14 Aug 2011 11:47:34 +0200 Subject: [PATCH 32/60] Added: Hicolor and XPM icons for GNU/Linux --- code/ryzom/client/unix/CMakeLists.txt | 9 +- code/ryzom/client/unix/ryzom.xpm | 621 +++++++++++++++++++++++ code/ryzom/client/unix/ryzom_128x128.png | Bin 0 -> 37774 bytes code/ryzom/client/unix/ryzom_16x16.png | Bin 0 -> 1018 bytes code/ryzom/client/unix/ryzom_22x22.png | Bin 0 -> 1684 bytes code/ryzom/client/unix/ryzom_24x24.png | Bin 0 -> 1988 bytes code/ryzom/client/unix/ryzom_32x32.png | Bin 0 -> 3022 bytes code/ryzom/client/unix/ryzom_48x48.png | Bin 0 -> 6266 bytes 8 files changed, 629 insertions(+), 1 deletion(-) create mode 100644 code/ryzom/client/unix/ryzom.xpm create mode 100644 code/ryzom/client/unix/ryzom_128x128.png create mode 100644 code/ryzom/client/unix/ryzom_16x16.png create mode 100644 code/ryzom/client/unix/ryzom_22x22.png create mode 100644 code/ryzom/client/unix/ryzom_24x24.png create mode 100644 code/ryzom/client/unix/ryzom_32x32.png create mode 100644 code/ryzom/client/unix/ryzom_48x48.png diff --git a/code/ryzom/client/unix/CMakeLists.txt b/code/ryzom/client/unix/CMakeLists.txt index df17996fe..005c6bdb4 100644 --- a/code/ryzom/client/unix/CMakeLists.txt +++ b/code/ryzom/client/unix/CMakeLists.txt @@ -1,4 +1,11 @@ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/ryzom.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/ryzom.desktop") -INSTALL(FILES ryzom.png DESTINATION share/pixmaps) INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/ryzom.desktop" DESTINATION share/applications) +INSTALL(FILES ryzom.png DESTINATION share/pixmaps) +INSTALL(FILES ryzom.xpm DESTINATION share/pixmaps) +INSTALL(FILES res/ryzom16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ryzom.png) +INSTALL(FILES res/ryzom22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME ryzom.png) +INSTALL(FILES res/ryzom24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME ryzom.png) +INSTALL(FILES res/ryzom32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ryzom.png) +INSTALL(FILES res/ryzom48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME ryzom.png) +INSTALL(FILES res/ryzom128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME ryzom.png) diff --git a/code/ryzom/client/unix/ryzom.xpm b/code/ryzom/client/unix/ryzom.xpm new file mode 100644 index 000000000..43748c2ce --- /dev/null +++ b/code/ryzom/client/unix/ryzom.xpm @@ -0,0 +1,621 @@ +/* XPM */ +static char * ryzom_32x32_xpm[] = { +"32 32 586 2", +" c None", +". c #CACCCA", +"+ c #737766", +"@ c #747674", +"# c #717175", +"$ c #6E6E71", +"% c #8A9293", +"& c #888477", +"* c #63605B", +"= c #83856E", +"- c #888C7E", +"; c #666D60", +"> c #4A483C", +", c #433729", +"' c #8A816C", +") c #48453A", +"! c #3D3A32", +"~ c #6B6A61", +"{ c #8A8B8A", +"] c #989592", +"^ c #948F87", +"/ c #7E7861", +"( c #59513F", +"_ c #65604F", +": c #918F86", +"< c #5F5E45", +"[ c #4B5735", +"} c #3F462F", +"| c #443F31", +"1 c #49483C", +"2 c #7F7B6F", +"3 c #6E6049", +"4 c #696C6D", +"5 c #483C2F", +"6 c #403623", +"7 c #5B4C3B", +"8 c #514237", +"9 c #66553A", +"0 c #645B3E", +"a c #878B79", +"b c #93948B", +"c c #605C3B", +"d c #4D5032", +"e c #373117", +"f c #48512C", +"g c #52633A", +"h c #2B2818", +"i c #664E32", +"j c #37341B", +"k c #636156", +"l c #737769", +"m c #454935", +"n c #3F4430", +"o c #666637", +"p c #5E712F", +"q c #535435", +"r c #7D7E6A", +"s c #717267", +"t c #6E6B6A", +"u c #545B46", +"v c #6D715E", +"w c #767960", +"x c #575736", +"y c #42512E", +"z c #303828", +"A c #3E3C22", +"B c #4D4B1E", +"C c #323916", +"D c #565137", +"E c #4A3D26", +"F c #3E3E24", +"G c #746E37", +"H c #5F5B2F", +"I c #232A10", +"J c #1F2513", +"K c #5B5B3C", +"L c #807B63", +"M c #625C4B", +"N c #6B675B", +"O c #90968D", +"P c #7B7E7B", +"Q c #7C8380", +"R c #4B503E", +"S c #1D2212", +"T c #4D4F31", +"U c #494524", +"V c #7D9442", +"W c #4F6429", +"X c #57512D", +"Y c #4F3C1F", +"Z c #423F1D", +"` c #5F6A35", +" . c #3D481F", +".. c #404024", +"+. c #5F512B", +"@. c #3F381E", +"#. c #6E6C3F", +"$. c #717448", +"%. c #646C48", +"&. c #B4ADA3", +"*. c #E5E6E4", +"=. c #BEBEBE", +"-. c #444737", +";. c #2D311B", +">. c #222911", +",. c #1D220E", +"'. c #231E09", +"). c #3C3922", +"!. c #4C5324", +"~. c #4E4D27", +"{. c #3F3420", +"]. c #3C401F", +"^. c #4E552A", +"/. c #5C703B", +"(. c #778649", +"_. c #43442C", +":. c #736039", +"<. c #897648", +"[. c #847644", +"}. c #635F2D", +"|. c #525B31", +"1. c #647444", +"2. c #504E43", +"3. c #7F7774", +"4. c #8B8788", +"5. c #969591", +"6. c #4B542F", +"7. c #5C6041", +"8. c #5D513D", +"9. c #474638", +"0. c #4B442E", +"a. c #859F4A", +"b. c #373F1C", +"c. c #24260C", +"d. c #161407", +"e. c #2C2D14", +"f. c #3C4420", +"g. c #38401D", +"h. c #657B43", +"i. c #70804E", +"j. c #595C35", +"k. c #706B3A", +"l. c #66562B", +"m. c #3C4120", +"n. c #383B20", +"o. c #444B2E", +"p. c #75766C", +"q. c #DEDBD8", +"r. c #A49E98", +"s. c #7A726F", +"t. c #ADAFAA", +"u. c #9CA098", +"v. c #767164", +"w. c #402815", +"x. c #46362F", +"y. c #47341D", +"z. c #484A2B", +"A. c #576B2A", +"B. c #252210", +"C. c #3F3B17", +"D. c #4A2B12", +"E. c #442812", +"F. c #58582B", +"G. c #555F32", +"H. c #5C6433", +"I. c #48532E", +"J. c #636D42", +"K. c #574E30", +"L. c #524C2B", +"M. c #69623A", +"N. c #888661", +"O. c #CECDBF", +"P. c #E3DFDC", +"Q. c #C9C3C3", +"R. c #898481", +"S. c #5D574D", +"T. c #797271", +"U. c #8D8987", +"V. c #484638", +"W. c #534830", +"X. c #4A4C48", +"Y. c #5E4327", +"Z. c #252108", +"`. c #424030", +" + c #675F3D", +".+ c #32100A", +"++ c #2F180F", +"@+ c #887F5A", +"#+ c #817950", +"$+ c #615F39", +"%+ c #2C2D18", +"&+ c #2A2113", +"*+ c #695534", +"=+ c #947E52", +"-+ c #B8A37E", +";+ c #C3B29E", +">+ c #ACA09D", +",+ c #A09795", +"'+ c #BCBABA", +")+ c #857F7C", +"!+ c #544D3D", +"~+ c #30362B", +"{+ c #59564A", +"]+ c #A2A8A6", +"^+ c #62645A", +"/+ c #535453", +"(+ c #474534", +"_+ c #3D3C1F", +":+ c #575033", +"<+ c #776D51", +"[+ c #ACB2AA", +"}+ c #8A9080", +"|+ c #5A432F", +"1+ c #8B7B65", +"2+ c #746D50", +"3+ c #5F502C", +"4+ c #484224", +"5+ c #414122", +"6+ c #75673B", +"7+ c #9E8149", +"8+ c #BDB7A9", +"9+ c #E5E4E1", +"0+ c #EAE7E2", +"a+ c #9C9491", +"b+ c #ADABA6", +"c+ c #A0A3A0", +"d+ c #A8AFAE", +"e+ c #5C5F51", +"f+ c #5E5D32", +"g+ c #525431", +"h+ c #43382B", +"i+ c #453E34", +"j+ c #41412F", +"k+ c #5D6454", +"l+ c #464941", +"m+ c #60624D", +"n+ c #494644", +"o+ c #39382E", +"p+ c #444630", +"q+ c #584F2D", +"r+ c #444823", +"s+ c #30381B", +"t+ c #49562C", +"u+ c #7E8D54", +"v+ c #939472", +"w+ c #7F7F60", +"x+ c #7C8259", +"y+ c #373727", +"z+ c #3F3834", +"A+ c #85817E", +"B+ c #6D6D66", +"C+ c #666765", +"D+ c #352E27", +"E+ c #49493C", +"F+ c #969985", +"G+ c #A39D98", +"H+ c #928E81", +"I+ c #8C9892", +"J+ c #7E8B8A", +"K+ c #444130", +"L+ c #343021", +"M+ c #2D2D19", +"N+ c #28301C", +"O+ c #5E6257", +"P+ c #596044", +"Q+ c #3F4523", +"R+ c #384123", +"S+ c #65724F", +"T+ c #889176", +"U+ c #E6E6DF", +"V+ c #C2C0BD", +"W+ c #827B6D", +"X+ c #656551", +"Y+ c #3C3B28", +"Z+ c #524F43", +"`+ c #6A644D", +" @ c #655A42", +".@ c #7C735E", +"+@ c #9F9F8D", +"@@ c #B2B5B0", +"#@ c #C9D0CD", +"$@ c #8F9490", +"%@ c #3F4037", +"&@ c #4F504A", +"*@ c #292420", +"=@ c #2F2F19", +"-@ c #2C2710", +";@ c #252514", +">@ c #3F412A", +",@ c #5B6D68", +"'@ c #4D4C3D", +")@ c #282F1A", +"!@ c #526038", +"~@ c #49512D", +"{@ c #444B2D", +"]@ c #7F7B76", +"^@ c #5B5453", +"/@ c #535137", +"(@ c #525535", +"_@ c #565136", +":@ c #48432A", +"<@ c #483F23", +"[@ c #635636", +"}@ c #777664", +"|@ c #D5DBDA", +"1@ c #BECFD0", +"2@ c #A8BCC1", +"3@ c #525553", +"4@ c #4E4432", +"5@ c #4B402D", +"6@ c #403F26", +"7@ c #3B4A23", +"8@ c #323517", +"9@ c #454936", +"0@ c #30330E", +"a@ c #424513", +"b@ c #444F29", +"c@ c #434629", +"d@ c #746D5B", +"e@ c #585532", +"f@ c #4F552C", +"g@ c #677E43", +"h@ c #5A6E3D", +"i@ c #30361E", +"j@ c #424521", +"k@ c #5F5831", +"l@ c #3C3D1D", +"m@ c #414024", +"n@ c #3D391A", +"o@ c #413719", +"p@ c #5E593E", +"q@ c #929D9E", +"r@ c #77868D", +"s@ c #454C50", +"t@ c #2F2F2B", +"u@ c #4A3D1A", +"v@ c #3C451C", +"w@ c #313B19", +"x@ c #30401D", +"y@ c #23270F", +"z@ c #363617", +"A@ c #261605", +"B@ c #43360D", +"C@ c #5C5D29", +"D@ c #8F8D6B", +"E@ c #7F7563", +"F@ c #65512D", +"G@ c #433E23", +"H@ c #546137", +"I@ c #485332", +"J@ c #454D45", +"K@ c #60644A", +"L@ c #666C36", +"M@ c #57462C", +"N@ c #634E2A", +"O@ c #5D4A25", +"P@ c #4A3819", +"Q@ c #312513", +"R@ c #2B1F15", +"S@ c #1F2119", +"T@ c #16170F", +"U@ c #37391C", +"V@ c #373216", +"W@ c #313718", +"X@ c #1F2B11", +"Y@ c #111208", +"Z@ c #566631", +"`@ c #493915", +" # c #4A4314", +".# c #47501C", +"+# c #4A5A23", +"@# c #7B806A", +"## c #757260", +"$# c #3B3E23", +"%# c #3C4124", +"&# c #252314", +"*# c #3A413E", +"=# c #405B52", +"-# c #3E4331", +";# c #4C462A", +"># c #5E4C29", +",# c #654E26", +"'# c #634C2A", +")# c #583E1E", +"!# c #2C1D0E", +"~# c #3E2C17", +"{# c #42230F", +"]# c #443216", +"^# c #423817", +"/# c #1C200E", +"(# c #161605", +"_# c #394328", +":# c #232212", +"<# c #423E17", +"[# c #26370C", +"}# c #30371A", +"|# c #5A6B38", +"1# c #6E7364", +"2# c #5C6251", +"3# c #3D3E2D", +"4# c #4A473C", +"5# c #71664C", +"6# c #775E33", +"7# c #463921", +"8# c #574326", +"9# c #514528", +"0# c #524C2D", +"a# c #606139", +"b# c #4C502A", +"c# c #4B4923", +"d# c #3F351E", +"e# c #4F3F1E", +"f# c #53532B", +"g# c #202A13", +"h# c #2A2C16", +"i# c #2B2813", +"j# c #343525", +"k# c #32311A", +"l# c #3B3B1C", +"m# c #3F3214", +"n# c #3F3B19", +"o# c #333D1B", +"p# c #2B3215", +"q# c #272B27", +"r# c #636E75", +"s# c #766856", +"t# c #6D6B3A", +"u# c #5D6D38", +"v# c #565E35", +"w# c #56663A", +"x# c #504F2F", +"y# c #495331", +"z# c #404528", +"A# c #50542E", +"B# c #607239", +"C# c #4B5D2F", +"D# c #364A22", +"E# c #26301C", +"F# c #171C12", +"G# c #222417", +"H# c #353D24", +"I# c #666C6B", +"J# c #3A3216", +"K# c #4B4B2D", +"L# c #8D9384", +"M# c #8A9379", +"N# c #353C21", +"O# c #363820", +"P# c #3A3728", +"Q# c #434233", +"R# c #515034", +"S# c #4C5734", +"T# c #3C4929", +"U# c #353B26", +"V# c #3B3A24", +"W# c #575032", +"X# c #555C35", +"Y# c #495531", +"Z# c #4F6034", +"`# c #2F391F", +" $ c #2D3A20", +".$ c #353E30", +"+$ c #1C2417", +"@$ c #1D1D14", +"#$ c #2D311D", +"$$ c #333E2F", +"%$ c #585842", +"&$ c #34372B", +"*$ c #889191", +"=$ c #919E91", +"-$ c #4D5C34", +";$ c #565C4A", +">$ c #647171", +",$ c #595F52", +"'$ c #6E6E5F", +")$ c #403E34", +"!$ c #363125", +"~$ c #594C38", +"{$ c #655938", +"]$ c #3E4527", +"^$ c #343825", +"/$ c #404D2B", +"($ c #2D3521", +"_$ c #1A1B12", +":$ c #7D8988", +"<$ c #333936", +"[$ c #2B2D29", +"}$ c #262C1B", +"|$ c #3D3E34", +"1$ c #4F5A4C", +"2$ c #94A0A3", +"3$ c #A3B0B1", +"4$ c #454840", +"5$ c #3F3D2E", +"6$ c #6D6F64", +"7$ c #666150", +"8$ c #554F33", +"9$ c #666242", +"0$ c #5D553C", +"a$ c #4C503C", +"b$ c #545B41", +"c$ c #3B3D32", +"d$ c #8B928E", +"e$ c #25261B", +"f$ c #6D7877", +"g$ c #4F5D63", +"h$ c #343731", +"i$ c #555D58", +"j$ c #566259", +"k$ c #4E4B3E", +"l$ c #3F4232", +"m$ c #616A68", +"n$ c #252620", +"o$ c #383D30", +"p$ c #6A7366", +"q$ c #707569", +"r$ c #4F5443", +"s$ c #485038", +"t$ c #505641", +"u$ c #6F7861", +"v$ c #95A094", +"w$ c #8B958F", +"x$ c #676F67", +"y$ c #7E8582", +"z$ c #474B4A", +"A$ c #414137", +"B$ c #5F6B6A", +"C$ c #52626A", +"D$ c #393E3A", +"E$ c #5A6363", +"F$ c #484C44", +"G$ c #424A3E", +"H$ c #535C53", +"I$ c #474738", +"J$ c #5C5945", +"K$ c #7F8173", +"L$ c #939A95", +"M$ c #929C9C", +"N$ c #9EABAD", +"O$ c #A5B4B7", +"P$ c #89959A", +"Q$ c #3E443E", +"R$ c #3C463B", +"S$ c #485450", +"T$ c #53626A", +"U$ c #5C6B6C", +"V$ c #515F5E", +"W$ c #65767B", +"X$ c #899DA4", +"Y$ c #88999F", +"Z$ c #8E9A9B", +"`$ c #828B88", +" % c #696F66", +".% c #7F8A8A", +"+% c #7E8788", +"@% c #849196", +"#% c #899AA0", +"$% c #646F75", +"%% c #3C413F", +"&% c #252925", +"*% c #647074", +"=% c #36464E", +"-% c #505F67", +";% c #606F76", +">% c #55646E", +",% c #687B85", +"'% c #748890", +")% c #75878D", +"!% c #6F7F82", +"~% c #75858A", +"{% c #798D95", +"]% c #6C7E85", +"^% c #5E6F77", +"/% c #4D5A62", +"(% c #48555E", +"_% c #4B5C65", +":% c #50606A", +"<% c #5B6E7A", +"[% c #5D707B", +"}% c #5D6F79", +"|% c #5C6D77", +"1% c #5D6D78", +"2% c #5B6974", +"3% c #4F5C68", +"4% c #51606C", +"5% c #515E6A", +" ", +" ", +" . ", +" + @ # $ % & * = - ; > , ", +" ' ) ! ~ { ] ^ / ( _ : < [ } | ", +" 1 2 3 4 5 6 7 8 9 0 a b c d e f g ", +" h i j k l m n o p q r s t u v w x y z ", +" A B C D E F o G H I J K L M N O P Q R S ", +" T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'. ", +" ).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0. ", +" a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z. ", +" A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. ", +" e.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+ ", +" :+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+ ", +" m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+ ", +" M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@ ", +" ;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@ ", +" 0@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@ ", +" z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@ ", +" Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#y.)#!#~#{#]#^#/#(# ", +" _#:#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j# ", +" k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I# ", +" J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$ ", +" %$&$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$ ", +" |$1$2$3$4$5$6$7$8$9$0$a$b$c$d$! e$f$g$h$i$ ", +" j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$ ", +" D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$ ", +" U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*% ", +" =%-%;%>%,%'%)%!%~%{%]%^%/% ", +" (%_%:%<%[%}%|%1%2% ", +" 3%4% 5% ", +" "}; diff --git a/code/ryzom/client/unix/ryzom_128x128.png b/code/ryzom/client/unix/ryzom_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1146210ff229294f2f2b7cb7837c3a6f99bfeb GIT binary patch literal 37774 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

>adLO7#iU}!nC6#gh{KehJUp)0#Cx{AO7?oEx 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 literal 0 HcmV?d00001 diff --git a/code/ryzom/client/unix/ryzom_22x22.png b/code/ryzom/client/unix/ryzom_22x22.png new file mode 100644 index 0000000000000000000000000000000000000000..4030743e220cfb8940562eb324031e82f1e21d07 GIT binary patch literal 1684 zcmV;F25b3=P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iph^ z2sjh@u+}3000tCEL_t(I%Y9XAY+Gj;e!g?@@v)EZx!7)<%W|!|(p*TlcBN}pwsjpa zHd@+Dup$9N8)A$hF;T&f{Xp9fK+C(YkDWx2xl%+@^L(ZDBjvqz?9rv{c5BdQJ|zk6`+(rW0cI}x5FQlpPwz7~6{#kXk! z01U$b!!ZBjxs_N+%&}KKxqA2T`O_yfm1{QhZb7hEU>B=cjx3|KvjsDud92RP;2TGu zm~l1ues|B{{jWIe*3zdG-+1kvH(z>IF5ugFSr2GxhSyC+$`~b*u2oRhGbk175b!ln zSq_tzfB!n z_c<2;U}FCCoqu@c*FQy^)MGW1$igLvQVx<(!Qw<3h2jRv)g-#w{CM!*LrA7e zq*&l->RQZt_SEZld+PjO0B~LLl?&Hjv$fB8dU`5UPj#@lbcG0YCT!m3gA%Wx(_=@l z!wcQeP~s`lF&!qx0*}Xyq%up|JdIS>%c7Yj+KJcxGX0z5zs$0fQgU0ndv_@D!H;If zqUOxX2C=#Xlvx6Y#|hEIK`&|uMP&$*7kBkPghLMx;qusr@cIL=@J=jDjuQ?hZYng| zS0dHu`EwV?835c|c)>c`aN zEDVm|!3TQK9tgnFv(z z=PIt}kA5&V(UOqU;GHJSuY}=hYR1B4!%=`;EGmmVp3=8Lk%c(()s$if)ud+~SJ=Rib@FWLGq9{;6j^?rN zo;|-?ds`y#wLk) z_{jIMCAb5{Tn4HVM=Be|T(W>jqJ(r(g=jUQ%Ckr)I^wAkG8;VDDoah04Q(CU{|I0M z02lyph+N`}haQ*xtsR%no*714_a1uRSBK#C`QY((VUslguT_HA<$|VCWD^D?z7fS# z1p~YGQ%}8@v^EDLgF6R~6GAHgbvHr?-o5btimfhaxRT@YdS0k&m!RsWVRm5^? z1&q~-OfAjd^!{2#sdv9;}CO@uLtKc{eFC2e)r@%8$ zUK+hPNH}g2!%)~APD<4baX4)7HEjVaSRhIc{O!ysEH2ETYulabqYpju4?fx5QPr$~cugPuz0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iph^ z2si?h0QS)U00%@#L_t(Y$8D8aY*g17$N%TvJ9qZQ*E60OkH_2Cj%{3s!3400p-8AG z(1j!|sjAQlby3JeluAjfCJ&XW<|*w%tEx&AN)R!njg&M5n%gT8Z@ zu0d7R|6_4qe^?33fe-=!xIBESD9Xvv1E@DiZR<0&{$Y%IdwP zxjUV{$A$g-zW={+#ed*H~KY9s4^qytJRE`EF#{fCd^`ln}{R4Tpv z?<-eNj!!OX8=9JVueTX`T4d9aAlChUo@crMIgb*T!WXwM`=%B~o?pB_;aLgnZ$Kie`0fo__rn(9KnFW~4R=B)1aGFenE32p!MCVF) z!TS2|-<&#sb|ArKr4rlRWPE;ncId?7c*G>IlxoW|aWq#$!)uU;Z+j(anAvA((jx3dWo<9ERDT55*GP0r8O+1=jNzn}YblrwWW5()*}^EcwU zt=o1&jfP1iFQTWd3*mSSx9=`PC#iVqo7=E!Pe1hLCM-=9F9LY4c)o&X0I9ftF4Owl%gu zsII}?2*8F`A;~g=DG{M)6fLdwa66sw-y4I~UIi5;l8hy|s;Fg*q5g(Zq?7 z(dm}i<$2cbbRZbL53yWE*Y+KF@n^5Wps&Z+#5As6y@Xgaj8Z-VshC2`V?OjB_#PO} zg3@VomjgPX~bVaDrL8d&?X%#gNGnN-;FmQGN zr`~x7i~cECEgUkLHAL4JKv|&w&@tqQ374;a2{|1^r4WGL$%4_dY*LJ;#B?;q{$t>M z_0Hnp&efH`kzz8!vP=g1`}TqqWvFTaSt245i^6O)gVUCPq5{Yp$RuMJ9iPSECl@d~ zJpqHUh@7&4Tv0+gR?OAax-Km*&)r}MAxLJk8JEvVt(=B3Y#CF*I}qwxz^FDv0x6`U zMTn{csk{L!%c0t+gOvy3v$ufw3U;$b0Me1{aw06R z#BxlVk*iQCmLR-t0ve+W`aDHfs}>FR92Wd(Xf+%}g@ZxRL!;qfELC8UB$TyU`0tC< zpy5bOee>!ICx3mV+ES%30C4IrpHCg^?0MZ{)S$)NL3VB5L1)L8F+MU34R3?lq++?8 zLCK^?POAYi>X0l{z#4f-W-X$u7IVvKC}jfPCSX_J;R(TP%K-ob0A-od*Zy#Nq|xWQ znJLn8ZS!98?Prdop|uuOP6swv3z(7vsnrdbWgd*8AS0HM&Q{=`j-z|aK?oK%<+WPU zP}|~vyrb<+LWr~}pwloCfS9M_8^ubw5*;48f@-0iHZ<%;EHDGXY6njwbZ&7$XR|_I z<%QYcz`k8SfJJA8EUUD!y&Fxw&eBtdkNxS`bI;9e=D~x1n-Eg?<6EcC6grsSgn~=! zgBL!i&1X~8;j)utHUqIxM6InJzV@vU9QDZO@<@vrYI8VADlHPN-jV9-KJ?0-ox49G zgp>h5RaI~d!$6j0a2$t&eZA+a493!WecOr2nMqfb%gZ#iwnL|3K}%Vr#4r?UL?WJn z(I(LK$Py7#8Ps@NOKtTHBhP&2yElEU%}D@I6y>YI9~Jtq{`QT-w?@X^_ITVnMTSjq z))14)K&6c$I1LXKgr*WnwUAC1wsy1)3pOEQHW>c)ljFy(f1UM^fGCO(1OWgr@ZNdh z;+MCNf-w6eS?yK{<0TB?IEJYxvaDM4x;dN0H0^dduQhqxgGY}Z5dmO5w2oR&?V|+% zK$0YAG@8x(yYHUUg<=V-3R;y-XY3ryz-+aNS}mWFD^m8=U!E*H2(3!F0$$5M#QQHb WpK>0|6KI(L0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iph^ z2sIuuuhi2301Hk@L_t(o!pgVr>b|fc$Vf=C zR6xlf1X3_0cHvaXcBLpMDce=4gp`vC6gDQV*c2GBtq4OIJKU17ECB*^Un^;McJ`dv zot@d8`=0kYe>k#(95DR;>8`HsU;keJe%|G54cP{Unow z5ZAgjQp$E93)BE%Aw+s1HoL4)s&osC1qFgq%Aw!KAg^Elr@sH(R|_FHdG_U1fzXvb zHCpSGmn5MnkgW2jL zI5EleNPuE|Uhe;ge>z_(>4(B?p|KqD?&tBel?!Bv) zY_{NDHaH;LI{JjO%0{J>VJFmG!>%X^mwRfEP z$P`>V_F&-h#=zy%4<0@7?vh_V|Kh;L&opu_9AU}QjkxMOoIih(Qn^geA}a;0Kz7PP zfB$MS86CZ7BAf`&P*;!LrZ5p4B3df2FjFe*-M4=%pN@R(Ti^W0LmyiMPd@R@;NipX zX2Q|X(wdrz3@sEySA7SWSe%S7=}q2!TNHkilVWt9oT*IP5+5Vu5oSY0T&jXm7Tox`9vp6sST@b=TlaA1y?>30h5tJE zV@{nsLO2q_&~>u0h|8%t&)vG?uJD%6-#q-G6ZqdNr+)W`yN6zR?u6!QR2r0$NhD{A z=+%;1pN6x^O;eqdlW$Ei*zBOLu7)xd#v&2o6_wfs53ym%K;LqzU0yV&omYPQ6z=L; zM6$wMwk%a67u~dF*RvaMzT@DU6^l;-DA#fyPgiOTd%Cu4DK%cXFe~0WKF)kG1FB#y zn#Qi#D3;9B)!WfE!RYuDub&8TDUc?W&~YohJo?BJboX=-kIvw4Y~c1UJV>Lvlc~#B zkcqsgB;s{%{`TOP4j+ASCtwyr{Qeq-Vw2rJc>Hg^ee2uI#}Gdh_3D>Xf^EwF9bQCAELRln@YJ%K9}INx8J0%y^THh@8`(j zmmyIkQgl$?6@QJhQ=2GeHk?A~%)Et^q!E4uv6?4QA1sYo2 ztX|uT&)P~Xx`1vfa_E)Q*o1@4TemSAo26KioH>3JZ+c9HknwnVk2c^o^WW4Vg*)jSVd=B z5Bt9OAc5f^M-IJ2IGn_+3OwE#LQ`ib=d$=4n)&KCzKo}?6Ms_+@4kJEmwx>!E|-Vl zi$hqnB6=Y&6>4(P`S{|okrB5FQ19t@elCB?StykI8k^lh*W6^r!bIls^e=B^dMwD; z)gbvf2wWYdpid)JgT^{1sniU?M3E-HhqB4Snj3Zy$>bP|B{}xHW7Mc+Dv2rlO%}?U ziG0)$Qn9qn&IKP4R(r-|7zWviVN>2&*flzOrB~DP~}#T+-T+(0%SK`J_}%lyow zCK$Rjgi!MMGz*iFIV6H&DNizyL@`0pRLhyOL%jNngG`SNQ?15GS&O8L1xkh_HJ_zY zsQk3Kv9Y*k_r7DQq9_29`@gewnZ;z6)8`gMOM8iio@ScbU1+xDgaaQCI5LjA(@TAe z7ro>`RGaA^Fq0h4QSG!)s+5V1jqvn$AEH!J$S5lLTn<~61LjL$R){Auq@qQ3ePz?+ zJMW)z0w~v>L_-(n+Xov(XQvCR!%8%r=Fq9vsc2SQ9V;mSv*YuOo}DC{DKeh7apiKE zECyvmVp9bTUN?0$RV;0@pbbWt*ISkZko zn42A>H8Y-i7jBOg_h2)Dg3fG4Qe!jI+SZ=y=^1=&`}Q3%03oHk_A9o0`L0dRoEo{Z z+g_!h<_lmqlTj23*%FmvEjMi1iKjF{-ZV`@F(@W=u$d`EvJ_Q?d@7Ht#)7L=BO1*S zollbpmq^BPXf`vR1_#Rrw#@(M<3CslOb8)Rgb)ZJn4XDr?Yn2sw{4<=%jK3kzw~vs z@4gR3TF@*So@&AP#kUxl4KfxhF&0QNHku@KaSp36QEgYTyX?qn3ulgpnH)_bGfr}u zG8UnrIV{o;8uk8`XJ^8*>1#q&xh6cD8~lMAc0Qo?4X%30;qXNd{Pch{jC$_9|Lgd> zyfk+&qGRB5*lJo?-9cdZ7*iNEvR;tnY>C}T_aYrgYCCGfXnPg)9fVTahki9Vz06>u>7-?9k<{8 zqn&r$IVt%gG^p3<_Sj=jK6i0yB6WwU6q-rQh8s?O@D6VuejShB#fmlSFexS?=`=-Q zrks(qb#}9^cO|)OnSl2S>2!uFcRkHkGpTeMli7;fTmRnnZD0IxlgE1qNGd}42vO>D z@Y;a`Z=Aa{zJ5{nl7&J^&jzkuu3x--4YE=u5{*#OAs3&==XB85KS*=yVhm}+<*BE$ zXDNlE!O+E%=&GPxF|b%2+57kGefYNRo8N40YYANsDIb#MaxR4sLP{y`efqiQA2JQD z-=I`E`?HyprKNwZ?CR+gvQow(DrA!L%uENto<-_uQrQw_dle(YBN)0M5}GUbZdsrA z*ZR*j`h79gY>rea75Qhujj}t;$}i^LXQ`Y8qbI z*Zs)mt(zyV_xXv~@Oq1d!k(WTd}(uFVscX~nOa}27`2M3Dpht{K9|keY-V-ASL-@$ zv6xT%#j1f9w%xWP^l?!7sRQ_bz}0c^C(qUvibe64U-_#9h@=ogep+Au1F^w#-e`5L Qn*aa+07*qoM6N<$g6;YED*ylh literal 0 HcmV?d00001 diff --git a/code/ryzom/client/unix/ryzom_48x48.png b/code/ryzom/client/unix/ryzom_48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ce667082b5e284b0e50f0e5b76456d6b6eabf4 GIT binary patch literal 6266 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 literal 0 HcmV?d00001 From 84fd111146ab3dca7a847cd549167acc9c6eead9 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 14 Aug 2011 14:15:20 +0200 Subject: [PATCH 33/60] Fixed: Icons path --- code/ryzom/client/unix/CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/ryzom/client/unix/CMakeLists.txt b/code/ryzom/client/unix/CMakeLists.txt index 005c6bdb4..c6b50b37c 100644 --- a/code/ryzom/client/unix/CMakeLists.txt +++ b/code/ryzom/client/unix/CMakeLists.txt @@ -3,9 +3,9 @@ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/ryzom.desktop.in" "${CMAKE_CURRENT_B INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/ryzom.desktop" DESTINATION share/applications) INSTALL(FILES ryzom.png DESTINATION share/pixmaps) INSTALL(FILES ryzom.xpm DESTINATION share/pixmaps) -INSTALL(FILES res/ryzom16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ryzom.png) -INSTALL(FILES res/ryzom22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME ryzom.png) -INSTALL(FILES res/ryzom24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME ryzom.png) -INSTALL(FILES res/ryzom32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ryzom.png) -INSTALL(FILES res/ryzom48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME ryzom.png) -INSTALL(FILES res/ryzom128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME ryzom.png) +INSTALL(FILES ryzom16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ryzom.png) +INSTALL(FILES ryzom22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME ryzom.png) +INSTALL(FILES ryzom24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME ryzom.png) +INSTALL(FILES ryzom32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ryzom.png) +INSTALL(FILES ryzom48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME ryzom.png) +INSTALL(FILES ryzom128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME ryzom.png) From 55f26e7f162c91c859e8fd23fd65008f7574ed61 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 14 Aug 2011 16:05:47 +0200 Subject: [PATCH 34/60] Fixed: Icons name --- code/ryzom/client/unix/CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/ryzom/client/unix/CMakeLists.txt b/code/ryzom/client/unix/CMakeLists.txt index c6b50b37c..fef098783 100644 --- a/code/ryzom/client/unix/CMakeLists.txt +++ b/code/ryzom/client/unix/CMakeLists.txt @@ -3,9 +3,9 @@ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/ryzom.desktop.in" "${CMAKE_CURRENT_B INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/ryzom.desktop" DESTINATION share/applications) INSTALL(FILES ryzom.png DESTINATION share/pixmaps) INSTALL(FILES ryzom.xpm DESTINATION share/pixmaps) -INSTALL(FILES ryzom16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ryzom.png) -INSTALL(FILES ryzom22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME ryzom.png) -INSTALL(FILES ryzom24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME ryzom.png) -INSTALL(FILES ryzom32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ryzom.png) -INSTALL(FILES ryzom48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME ryzom.png) -INSTALL(FILES ryzom128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME ryzom.png) +INSTALL(FILES ryzom_16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME ryzom.png) +INSTALL(FILES ryzom_22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME ryzom.png) +INSTALL(FILES ryzom_24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME ryzom.png) +INSTALL(FILES ryzom_32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME ryzom.png) +INSTALL(FILES ryzom_48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME ryzom.png) +INSTALL(FILES ryzom_128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME ryzom.png) From 55e1452fe12e9abde04ed30867459b0e49acccd5 Mon Sep 17 00:00:00 2001 From: Fabien_HENON Date: Sun, 14 Aug 2011 19:39:35 +0200 Subject: [PATCH 35/60] Changed: #1304: Updating world_editor documentation. Adding a primitive for guild missions --HG-- branch : gsoc2011-guildmissions --- .../class_doc/destroy_item.html | 8 + .../class_doc/do_mission.html | 3 +- .../class_doc/recv_fame.html | 7 + .../class_doc/recv_item.html | 9 + .../class_doc/recv_money.html | 8 + .../class_doc/spawn_mission.html | 192 ++++++++ .../newbieland/guild_missions.primitive | 448 ++++++++++++++++++ 7 files changed, 674 insertions(+), 1 deletion(-) create mode 100644 code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/spawn_mission.html create mode 100644 code/ryzom/common/data_leveldesign/primitives/newbieland/guild_missions.primitive diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/destroy_item.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/destroy_item.html index 366a02977..9eaf62bfd 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/destroy_item.html +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/destroy_item.html @@ -253,6 +253,14 @@ NPC tag name. Used to write in the sys info who destroyed the items

item description. See item_guidelines for the formatting requirements.

+

 

+ +

guild (Boolean): This parameter is only for guild missions. If it is set to true the action is done for the guild (not for the players that completed the mission).

+ +

 

diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/do_mission.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/do_mission.html index 0c516a984..4a480e1b8 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/do_mission.html +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/do_mission.html @@ -160,7 +160,8 @@ mso-ansi-language:EN-US'> 

mission_names: Mission names with the specific mission -objective texts.

+objective texts. The name can be followed by a space and a number representing the number of +times this mission needs to be done (useful for guild missions to specify the number of members needed to complete the mission)

 

diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_fame.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_fame.html index 391814c2b..1921ec67b 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_fame.html +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_fame.html @@ -166,6 +166,13 @@ reduce fame, use a negative figure.

 

+

guild (Boolean): This parameter is only for guild missions. If it is set to true the action is done for the guild (not for the players that completed the mission).

+ +

 

+

Default variables:

diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_item.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_item.html index 96b454cd2..aa4ba81f3 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_item.html +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_item.html @@ -178,11 +178,20 @@ lang=EN-US style='mso-ansi-language:EN-US'>: Array containing given item description. See item_guidelines for the formatting requirements.

+

 

+ +

guild (Boolean): This parameter is only for guild missions. If it is set to true the action is done for the guild (not for the players that completed the mission).

+ +

 

+

Default variables:

diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_money.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_money.html index 88030c8d1..7de97c411 100644 --- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_money.html +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/recv_money.html @@ -169,6 +169,14 @@ lang=EN-US style='mso-ansi-language:EN-US'>amount
: Amount of money to add to the player’s funds. To withdraw money, use a negative figure.

+

 

+ +

guild (Boolean): This parameter is only for guild missions. If it is set to true the action is done for the guild (not for the players that completed the mission).

+ +

 

Default diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/spawn_mission.html b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/spawn_mission.html new file mode 100644 index 000000000..53b4f4cc9 --- /dev/null +++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/class_doc/spawn_mission.html @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + +
+ +

spawn_mission

+ +

 

+ +

Properties:

+ +

 

+ +

name: Action name, only used by the +mission designer.

+ +

 

+ +

giver_name: The NPC that gives the mission.

+ +

 

+ +

guild (Boolean): This parameter is only for guild missions. .

+ + +

 

+ +

mission_name: The name of the mission to spawn.

+ +

 

+ + +
+ + + + diff --git a/code/ryzom/common/data_leveldesign/primitives/newbieland/guild_missions.primitive b/code/ryzom/common/data_leveldesign/primitives/newbieland/guild_missions.primitive new file mode 100644 index 000000000..568d89398 --- /dev/null +++ b/code/ryzom/common/data_leveldesign/primitives/newbieland/guild_missions.primitive @@ -0,0 +1,448 @@ + + + + + + + class + missions_editor + + + name + guild_missions + + + + audience + guild + + + auto_remove_from_journal + false + + + automatic + false + + + class + mission_tree + + + fail_if_inventory_is_full + false + + + giver_primitive + urban_newbieland.primitive + + + mission_category + Killing + + + mission_description + GUILD_MISSION_DESC + + + mission_giver + $givervar@fullname$ + + + mission_title + GUILD_MISSION_TITLE + + + mono_instance + false + + + name + GUILD_MISSION + + + need_validation + false + + + non_abandonnable + false + + + not_in_journal + false + + + not_proposed + false + + + replayable + true + + + run_only_once + false + + + + class + variables + + + name + variables + + + + class + var_npc + + + npc_function + fct_ranger_leader + + + npc_name + chiang_the_strong + + + var_name + givervar + + + + + + class + pre_requisite + + + name + pre_requisite + + + require_guild_grade + Leader + + + require_guild_membership + true + + + + + + class + alias + + + name + alias + + + + + class + step + + + name + step + + + + class + actions + + + name + pre_actions + + + + class + spawn_mission + + + giver_name + chiang_the_strong + + + guild + true + + + mission_name + SOLO_GUILD_MISSION + + + + + + class + mission_objectives + + + name + objectives + + + + class + do_mission + + + mission_names + SOLO_GUILD_MISSION 2 + + + overload_objective + MIS_DO_MISSION + + + + + class + kill + + + fauna/quantity + chdfa1 2 + + + name + kill chdfa1 2 + + + + + + class + actions + + + name + post_actions + + + + amount + 100 + + + class + recv_money + + + guild + true + + + name + recv_money 100 guild + + + + + amount + 50 + + + class + recv_money + + + + + + + + audience + solo + + + auto_remove_from_journal + false + + + automatic + false + + + class + mission_tree + + + fail_if_inventory_is_full + false + + + giver_primitive + urban_newbieland.primitive + + + mission_category + Killing + + + mission_description + SOLO_GUILD_MISSION_DESC + + + mission_giver + $givervar@fullname$ + + + mission_title + SOLO_GUILD_MISSION_TITLE + + + mono_instance + false + + + name + SOLO_GUILD_MISSION + + + need_validation + false + + + non_abandonnable + false + + + not_in_journal + false + + + not_proposed + true + + + replayable + true + + + run_only_once + false + + + + class + variables + + + name + variables + + + + class + var_npc + + + npc_function + fct_ranger_leader + + + npc_name + chiang_the_strong + + + var_name + givervar + + + + + + class + pre_requisite + + + name + pre_requisite + + + + + + class + alias + + + name + alias + + + + + class + step + + + name + step + + + + class + actions + + + name + pre_actions + + + + + class + mission_objectives + + + name + objectives + + + + class + kill + + + fauna/quantity + chdfa1 1 + + + name + kill chdfa1 1 + + + + + + class + actions + + + name + post_actions + + + + amount + 20 + + + class + recv_money + + + + + + + + From 1e4a4b6724539698b81b43aa6e5209edb2131346 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sun, 14 Aug 2011 20:28:16 +0200 Subject: [PATCH 36/60] Changed: #1306 added basic sheet viewing --- .../plugins/core/general_settings_page.cpp | 2 + .../src/plugins/georges_editor/CMakeLists.txt | 9 +- .../src/plugins/georges_editor/formitem.cpp | 162 +++++ .../src/plugins/georges_editor/formitem.h | 69 ++ .../src/plugins/georges_editor/georges.cpp | 64 ++ .../src/plugins/georges_editor/georges.h | 69 ++ .../georges_editor/georges_dirtree_dialog.cpp | 34 +- .../georges_editor/georges_dirtree_dialog.h | 2 +- .../georges_editor/georges_dirtree_form.ui | 34 +- .../georges_editor/georges_editor_form.cpp | 251 ++++--- .../georges_editor/georges_editor_form.h | 8 + .../georges_editor/georges_editor_form.ui | 4 + .../georges_editor/georges_editor_plugin.cpp | 2 +- .../georges_filesystem_model.cpp | 65 ++ .../georges_editor/georges_filesystem_model.h | 61 +- .../georges_treeview_dialog.cpp | 411 +++++++++++ .../georges_editor/georges_treeview_dialog.h | 89 +++ .../georges_editor/georges_treeview_form.ui | 124 ++++ .../georges_editor/georgesform_model.cpp | 641 ++++++++++++++++++ .../georges_editor/georgesform_model.h | 79 +++ .../georgesform_proxy_model.cpp | 94 +++ .../georges_editor/georgesform_proxy_model.h | 45 ++ 22 files changed, 2200 insertions(+), 119 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp index a050f4789..88bd3a298 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp @@ -87,9 +87,11 @@ void GeneralSettingsPage::applyGeneralSettings() settings->beginGroup(Core::Constants::DATA_PATH_SECTION); QString primitivePath = settings->value(Core::Constants::PRIMITIVES_PATH, "l:/primitives").toString(); QString ligoConfigFile = settings->value(Core::Constants::LIGOCONFIG_FILE, "l:/leveldesign/world_editor_files/world_editor_classes.xml").toString(); + QString leveldesignPath = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString(); NLMISC::CPath::addSearchPath(primitivePath.toStdString(), true, false); NLMISC::CPath::display(); NLMISC::CPath::addSearchFile(ligoConfigFile.toStdString()); + NLMISC::CPath::addSearchPath(leveldesignPath.toStdString(), true, false); settings->endGroup(); } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt index d1dd346ba..7c668ec8a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt @@ -10,10 +10,13 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin SET(OVQT_PLUG_GEORGES_EDITOR_HDR georges_editor_plugin.h georges_editor_form.h - georges_dirtree_dialog.h) + georges_dirtree_dialog.h + georges_filesystem_model.h + georges_treeview_dialog.h) SET(OVQT_PLUG_GEORGES_EDITOR_UIS georges_editor_form.ui - georges_dirtree_form.ui) + georges_dirtree_form.ui + georges_treeview_form.ui) SET(OVQT_PLUGIN_GEORGES_EDITOR_RCS georges_editor.qrc) @@ -32,7 +35,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) ADD_LIBRARY(ovqt_plugin_georges_editor MODULE ${SRC} ${OVQT_PLUG_GEORGES_EDITOR_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_GEORGES_EDITOR_UI_HDRS} ${OVQT_PLUGIN_GEORGES_EDITOR_RC_SRCS}) -TARGET_LINK_LIBRARIES(ovqt_plugin_georges_editor ovqt_plugin_core nelmisc ${QT_LIBRARIES}) +TARGET_LINK_LIBRARIES(ovqt_plugin_georges_editor ovqt_plugin_core nelmisc nelgeorges ${QT_LIBRARIES}) NL_DEFAULT_PROPS(ovqt_plugin_georges_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Georges Editor") NL_ADD_RUNTIME_FLAGS(ovqt_plugin_georges_editor) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp new file mode 100644 index 000000000..205e18a52 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp @@ -0,0 +1,162 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "formitem.h" + +// Qt includes + +// NeL includes +#include +#include +#include + +namespace Plugin +{ + + CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList &data, CFormItem *parent, + NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN) + { + parentItem = parent; + itemData = data; + formElm = elm; + whereV = wV; + whereN = wN; + } + + CFormItem::~CFormItem() + { + qDeleteAll(childItems); + } + + void CFormItem::appendChild(CFormItem *item) + { + childItems.append(item); + } + + CFormItem *CFormItem::child(int row) + { + return childItems.value(row); + } + + int CFormItem::childCount() const + { + return childItems.count(); + } + + int CFormItem::columnCount() const + { + //nlinfo("columnCount %d",itemData.count()); + return itemData.count(); + } + + QVariant CFormItem::data(int column) const + { + return itemData.value(column); + } + + CFormItem *CFormItem::parent() + { + return parentItem; + } + + int CFormItem::row() const + { + if (parentItem) + return parentItem->childItems.indexOf(const_cast(this)); + + return 0; + } + + bool CFormItem::setData(int column, const QVariant &value) + { + if (column < 0 || column >= itemData.size()) + return false; + + // TODO: default values + if (!formElm) + return false; + + itemData[column] = value; + if (formElm->isAtom()) + { + const NLGEORGES::UType *type = formElm->getType(); + if (type) + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + case NLGEORGES::UType::Double: + case NLGEORGES::UType::String: + if (parentItem->formElm->isArray()) + { + //((NLGEORGES::CFormElm*)parentItem->formElm);//->arrayInsertNodeByName( + //if(parentItem->formElm->getArrayNode(elmName, num)) + //{ + //} + + bool ok; + // TODO: the node can be renamed from eg "#0" to "foobar" + int arrayIndex = itemData[0].toString().remove("#").toInt(&ok); + if(ok) + { + NLGEORGES::UFormElm *elmt = 0; + if(parentItem->formElm->getArrayNode(&elmt, arrayIndex) && elmt) + { + if (elmt->isAtom()) + { + ((NLGEORGES::CFormElmAtom*)elmt)->setValue(value.toString().toStdString().c_str()); + nldebug(QString("array element string %1 %2") + .arg(itemData[0].toString()).arg(value.toString()) + .toStdString().c_str()); + } + } + } + } + else + { + if(parentItem->formElm->setValueByName( + value.toString().toStdString().c_str(), + itemData[0].toString().toStdString().c_str())) + { + nldebug(QString("string %1 %2") + .arg(itemData[0].toString()).arg(value.toString()) + .toStdString().c_str()); + } + else + { + nldebug(QString("FAILED string %1 %2") + .arg(itemData[0].toString()).arg(value.toString()) + .toStdString().c_str()); + } + } + break; + case NLGEORGES::UType::Color: + nldebug("Color is TODO"); + break; + default: + break; + } + } + } + else + { + nldebug("setting sth other than Atom"); + } + //formElm->setValueByName(); + return true; + } +} diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h new file mode 100644 index 000000000..b85b12275 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h @@ -0,0 +1,69 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef FORMITEM_H +#define FORMITEM_H + +// NeL includes +#include + +// Qt includes +#include +#include + +namespace Plugin +{ + + class CFormItem + + { + public: + CFormItem(NLGEORGES::UFormElm *elm, const QList &data, + CFormItem *parent = 0, + NLGEORGES::UFormElm::TWhereIsValue = NLGEORGES::UFormElm::ValueForm, + NLGEORGES::UFormElm::TWhereIsNode = NLGEORGES::UFormElm::NodeForm); + ~CFormItem(); + + void appendChild(CFormItem *child); + + CFormItem *child(int row); + int childCount() const; + int columnCount() const; + QVariant data(int column) const; + int row() const; + CFormItem *parent(); + bool setData(int column, const QVariant &value); + NLGEORGES::UFormElm* getFormElm() {return formElm;} + NLGEORGES::UFormElm::TWhereIsValue valueFrom() + { + return whereV; + } + NLGEORGES::UFormElm::TWhereIsNode nodeFrom() + { + return whereN; + } + + private: + QList childItems; + QList itemData; + CFormItem *parentItem; + NLGEORGES::UFormElm* formElm; + NLGEORGES::UFormElm::TWhereIsValue whereV; + NLGEORGES::UFormElm::TWhereIsNode whereN; + }; // CFormItem + +} +#endif // FORMITEM_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.cpp new file mode 100644 index 000000000..b93f93ec4 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.cpp @@ -0,0 +1,64 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "georges.h" +#include "nel/misc/o_xml.h" + +// STL includes + +// NeL includes +#include +#include +#include + +// Project includes + +using namespace NLGEORGES; + +namespace Plugin +{ + + CGeorges::CGeorges(): FormLoader(0) + { + FormLoader = UFormLoader::createLoader(); + } + + CGeorges::~CGeorges() + { + } + + UForm *CGeorges::loadForm(std::string formName) + { + UForm *form = FormLoader->loadForm(formName.c_str()); + + return form; + } + + UFormDfn *CGeorges::loadFormDfn(std::string formName) + { + UFormDfn *formdfn = FormLoader->loadFormDfn(formName.c_str()); + + return formdfn; + } + + UType *CGeorges::loadFormType(std::string formName) + { + UType *type = FormLoader->loadFormType(formName.c_str()); + + return type; + } + +} /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.h new file mode 100644 index 000000000..eb9a6b7da --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges.h @@ -0,0 +1,69 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef GEORGES_H +#define GEORGES_H + +// Misc + +// STL includes +#include + +// NeL includes + +// Qt includes + +// Project includes + +namespace NLGEORGES +{ + class UType; + class UForm; + class UFormDfn; + class UFormLoader; +} + +using namespace NLGEORGES; + +namespace Plugin +{ + + /** + @class CGeorges + A CGeorges class loading and viewing sheets. + */ + class CGeorges + { + public: + /// Default constructor. + CGeorges(); + virtual ~CGeorges(); + + // Load the given form root + UForm* loadForm(std::string formName); + // Load a dfn + UFormDfn* loadFormDfn(std::string formName); + // Load a type + UType *loadFormType (std::string formName); + + // A form loader + UFormLoader *FormLoader; + + };/* class CGeorges */ + +} /* namespace Plugin */ + +#endif // GEORGES_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp index f7e250cce..2a1151164 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp @@ -23,24 +23,35 @@ // NeL includes -//using namespace NLMISC; - namespace Plugin { CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent) - :QDockWidget(parent), m_ldPath(ldPath) + :QDockWidget(parent), + m_ldPath(ldPath), + m_proxyModel(0) { m_ui.setupUi(this); + m_ui.filterResetButton->setIcon( + QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + m_dirModel = new CGeorgesFileSystemModel(m_ldPath); - m_ui.dirTree->setModel(m_dirModel); + m_proxyModel = new CGeorgesFileSystemProxyModel(this); + + m_proxyModel->setSourceModel(m_dirModel); + m_ui.dirTree->setModel(m_proxyModel); + + // TODO: filtering in tree model is ... complicated - so hide it for now + m_ui.filterLineEdit->hide(); + m_ui.filterResetButton->hide(); + m_ui.label->hide(); if (m_dirModel->isCorrectLDPath()) { m_dirModel->setRootPath(m_ldPath); - m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath)); + m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath))); } else { @@ -61,10 +72,9 @@ CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog() void CGeorgesDirTreeDialog::fileSelected(QModelIndex index) { - QString name; - if (index.isValid() && !m_dirModel->isDir(index)) + if (index.isValid() && !m_dirModel->isDir(m_proxyModel->mapToSource(index))) { - Q_EMIT selectedForm(m_dirModel->fileName(index)); + Q_EMIT selectedForm(m_dirModel->fileName(m_proxyModel->mapToSource(index))); } } @@ -81,14 +91,18 @@ void CGeorgesDirTreeDialog::ldPathChanged(QString path) m_ldPath = path; delete m_dirModel; + delete m_proxyModel; m_dirModel = new CGeorgesFileSystemModel(m_ldPath); - m_ui.dirTree->setModel(m_dirModel); + m_proxyModel = new CGeorgesFileSystemProxyModel(this); + + m_proxyModel->setSourceModel(m_dirModel); + m_ui.dirTree->setModel(m_proxyModel); if (m_dirModel->isCorrectLDPath()) { m_dirModel->setRootPath(m_ldPath); - m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath)); + m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath))); } else { diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h index 3079f76c2..d81897bf3 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h @@ -45,6 +45,7 @@ private: Ui::CGeorgesDirTreeDialog m_ui; CGeorgesFileSystemModel *m_dirModel; + CGeorgesFileSystemProxyModel *m_proxyModel; QString m_ldPath; Q_SIGNALS: @@ -54,7 +55,6 @@ private Q_SLOTS: void fileSelected(QModelIndex index); void changeFile(QString file); - friend class CMainWindow; }; /* CGEorgesDirTreeDialog */ } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_form.ui index 8731d1ca8..4a429af1f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_form.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_form.ui @@ -19,7 +19,7 @@ 200 - 111 + 141 @@ -36,7 +36,7 @@ - + @@ -46,9 +46,37 @@ + + + + + + + ... + + + + :/images/ic_nel_georges_editor.png:/images/ic_nel_georges_editor.png + + + true + + + + + + + Filter + + + - + + + + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp index aa614a161..21aa6d8c6 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp @@ -18,6 +18,7 @@ #include "georges_editor_form.h" #include "georges_editor_constants.h" #include "georges_dirtree_dialog.h" +#include "georges_treeview_dialog.h" #include "../core/icore.h" #include "../core/imenu_manager.h" @@ -30,110 +31,190 @@ #include #include #include +#include namespace Plugin { -GeorgesEditorForm::GeorgesEditorForm(QWidget *parent) - : QMainWindow(parent), - m_georgesDirTreeDialog(0) -{ - m_ui.setupUi(this); - - m_undoStack = new QUndoStack(this); - - _openAction = new QAction(tr("&Open..."), this); - _openAction->setIcon(QIcon(Core::Constants::ICON_OPEN)); - _openAction->setShortcut(QKeySequence::Open); - _openAction->setStatusTip(tr("Open an existing file")); - connect(_openAction, SIGNAL(triggered()), this, SLOT(open())); - - _newAction = new QAction(tr("&New..."), this); - _newAction->setIcon(QIcon(Core::Constants::ICON_NEW)); - _newAction->setShortcut(QKeySequence::New); - _newAction->setStatusTip(tr("Create a new file")); - connect(_newAction, SIGNAL(triggered()), this, SLOT(newFile())); - - _saveAction = new QAction(tr("&Save..."), this); - _saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE)); - _saveAction->setShortcut(QKeySequence::Save); - _saveAction->setStatusTip(tr("Save the current file")); - connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); - - _fileToolBar = addToolBar(tr("&File")); - _fileToolBar->addAction(_openAction); - _fileToolBar->addAction(_newAction); - _fileToolBar->addAction(_saveAction); - - readSettings(); - - // create leveldesign directory tree dockwidget - m_georgesDirTreeDialog = new CGeorgesDirTreeDialog(m_leveldesignPath, this); - addDockWidget(Qt::LeftDockWidgetArea, m_georgesDirTreeDialog); - //m_georgesDirTreeDialog->setVisible(false); - connect(Core::ICore::instance(), SIGNAL(changeSettings()), + GeorgesEditorForm::GeorgesEditorForm(QWidget *parent) + : QMainWindow(parent), + m_georgesDirTreeDialog(0), + m_emptyDock(0), + m_mainDock(0) + { + m_ui.setupUi(this); + + // background for the mainwindow + QString css = "QWidget#centralwidget {"; + css += "image: url(:/images/ic_nel_georges_editor.png);"; + css += "}"; + + // add new mainwindow for sheet dockwidgets + QWidget *widget = new QWidget(this); + widget->setObjectName("centralwidget"); + widget->setStyleSheet(css); + setCentralWidget(widget); + QGridLayout *layout = new QGridLayout(widget); + layout->setContentsMargins(0,0,0,0); + widget->setLayout(layout); + m_mainDock = new QMainWindow(this); + m_mainDock->setDockNestingEnabled(true); + layout->addWidget(m_mainDock); + + m_undoStack = new QUndoStack(this); + + Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); + _openAction = menuManager->action(Core::Constants::OPEN); + + /*_openAction = new QAction(tr("&Open..."), this); + _openAction->setIcon(QIcon(Core::Constants::ICON_OPEN)); + _openAction->setShortcut(QKeySequence::Open); + _openAction->setStatusTip(tr("Open an existing file")); + connect(_openAction, SIGNAL(triggered()), this, SLOT(open()));*/ + + _newAction = new QAction(tr("&New..."), this); + _newAction->setIcon(QIcon(Core::Constants::ICON_NEW)); + _newAction->setShortcut(QKeySequence::New); + _newAction->setStatusTip(tr("Create a new file")); + connect(_newAction, SIGNAL(triggered()), this, SLOT(newFile())); + + _saveAction = new QAction(tr("&Save..."), this); + _saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE)); + _saveAction->setShortcut(QKeySequence::Save); + _saveAction->setStatusTip(tr("Save the current file")); + connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); + + _fileToolBar = addToolBar(tr("&File")); + _fileToolBar->addAction(_openAction); + _fileToolBar->addAction(_newAction); + _fileToolBar->addAction(_saveAction); + + //_openAction->setEnabled(false); + //_newAction->setEnabled(false); + //_saveAction->setEnabled(false); + + readSettings(); + + // create leveldesign directory tree dockwidget + m_georgesDirTreeDialog = new CGeorgesDirTreeDialog(m_leveldesignPath, this); + addDockWidget(Qt::LeftDockWidgetArea, m_georgesDirTreeDialog); + restoreDockWidget(m_georgesDirTreeDialog); + + connect(Core::ICore::instance(), SIGNAL(changeSettings()), this, SLOT(settingsChanged())); -} + connect(m_georgesDirTreeDialog, SIGNAL(selectedForm(const QString)), + this, SLOT(loadFile(const QString))); + } -GeorgesEditorForm::~GeorgesEditorForm() -{ - writeSettings(); -} + GeorgesEditorForm::~GeorgesEditorForm() + { + writeSettings(); + } -QUndoStack *GeorgesEditorForm::undoStack() const -{ - return m_undoStack; -} + QUndoStack *GeorgesEditorForm::undoStack() const + { + return m_undoStack; + } -void GeorgesEditorForm::open() -{ - // TODO: FileDialog & loadFile(); - //QString fileName = QFileDialog::getOpenFileName(); - //loadFile(fileName); -} + void GeorgesEditorForm::open() + { + /*qDebug() << "GeorgesEditorForm::open()"; + if (!m_dockedWidgets.size()) + { + m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last()); + } + else + { + m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + Q_ASSERT(m_dockedWidgets.size() > 1); + m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last()); + }*/ + + // TODO: FileDialog & loadFile(); + //m_mainDock->addDockWidget(Qt::TopDockWidgetArea, new CGeorgesTreeViewDialog(m_mainDock, true)); + //m_mainDock->addDockWidget(Qt::LeftDockWidgetArea, new CGeorgesTreeViewDialog(m_mainDock, true)); + //QString fileName = QFileDialog::getOpenFileName(); + //loadFile(fileName); + } -void GeorgesEditorForm::newFile() -{ + void GeorgesEditorForm::newFile() + { -} + } -void GeorgesEditorForm::save() -{ + void GeorgesEditorForm::save() + { -} + } -void GeorgesEditorForm::readSettings() -{ - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); - settings->endGroup(); + void GeorgesEditorForm::readSettings() + { + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); - settings->beginGroup(Core::Constants::DATA_PATH_SECTION); - m_leveldesignPath = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString(); - settings->endGroup(); -} + restoreGeometry(settings->value("geometry").toByteArray()); + restoreState(settings->value("windowState").toByteArray()); -void GeorgesEditorForm::writeSettings() -{ - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); - settings->endGroup(); - settings->sync(); -} + settings->endGroup(); -void GeorgesEditorForm::settingsChanged() -{ - QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Core::Constants::DATA_PATH_SECTION); + m_leveldesignPath = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString(); + settings->endGroup(); + } + + void GeorgesEditorForm::writeSettings() + { + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); + + settings->setValue("geometry", saveGeometry()); + settings->setValue("windowState", saveState()); + + settings->endGroup(); + settings->sync(); + } - settings->beginGroup(Core::Constants::DATA_PATH_SECTION); - QString oldLDPath = m_leveldesignPath; - m_leveldesignPath = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString(); - settings->endGroup(); + void GeorgesEditorForm::settingsChanged() + { + QSettings *settings = Core::ICore::instance()->settings(); + + settings->beginGroup(Core::Constants::DATA_PATH_SECTION); + QString oldLDPath = m_leveldesignPath; + m_leveldesignPath = settings->value(Core::Constants::LEVELDESIGN_PATH, "l:/leveldesign").toString(); + settings->endGroup(); + + if (oldLDPath != m_leveldesignPath) + { + m_georgesDirTreeDialog->ldPathChanged(m_leveldesignPath); + } + } - if (oldLDPath != m_leveldesignPath) + void GeorgesEditorForm::loadFile(const QString fileName) { - m_georgesDirTreeDialog->ldPathChanged(m_leveldesignPath); + QFileInfo info(fileName); + + if (!m_dockedWidgets.size()) + { + m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last()); + } + else + { + m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + Q_ASSERT(m_dockedWidgets.size() > 1); + m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last()); + } + CForm *form = m_dockedWidgets.last()->getFormByName(info.fileName()); + if (form) + { + // delete newView; + // newView = createTreeView(fileName); + m_dockedWidgets.last()->setForm(form); + m_dockedWidgets.last()->loadFormIntoDialog(form); + //setCurrentFile(info.fileName()); + // return; + } } -} } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h index 96fceb4ed..9e938f62c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h @@ -27,6 +27,7 @@ namespace Plugin { class CGeorgesDirTreeDialog; +class CGeorgesTreeViewDialog; class GeorgesEditorForm: public QMainWindow { Q_OBJECT @@ -42,6 +43,7 @@ public Q_SLOTS: void newFile(); void save(); void settingsChanged(); + void loadFile(const QString fileName); private: void readSettings(); @@ -57,6 +59,12 @@ private: QAction *_saveAction; QString m_leveldesignPath; + + QDockWidget *m_emptyDock; + QMainWindow *m_mainDock; + + QList m_dockedWidgets; + QList m_tabBars; }; /* class GeorgesEditorForm */ } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui index 905814cc7..3f8cde0f7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui @@ -13,12 +13,16 @@ Georges Editor + + + QWidget#centralwidget { image: url(:/images/ic_nel_georges_editor.png); } + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp index a97188751..e6cad341d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp @@ -74,7 +74,7 @@ QString GeorgesEditorPlugin::name() const QString GeorgesEditorPlugin::version() const { - return "0.2"; + return "0.3"; } QString GeorgesEditorPlugin::vendor() const diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp index 20cb30b33..796b3c457 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp @@ -28,6 +28,8 @@ CGeorgesFileSystemModel::CGeorgesFileSystemModel(QString ldPath, QObject *parent m_correct(false) { checkLDPath(); + connect(this, SIGNAL(directoryLoaded(QString)), + this, SLOT(dir(const QString))); } CGeorgesFileSystemModel::~CGeorgesFileSystemModel() @@ -35,6 +37,21 @@ CGeorgesFileSystemModel::~CGeorgesFileSystemModel() } +void CGeorgesFileSystemModel::dir(const QString &dir) +{ + QModelIndex i = index(dir); + + if (hasChildren(i)) { + int childCount = rowCount(i); + for (int c=0; cnode(parent); +// return (!indexNode->populatedChildren);*/ +//} + +CGeorgesFileSystemProxyModel::CGeorgesFileSystemProxyModel(QObject *parent) : QSortFilterProxyModel(parent) +{ + setFilterCaseSensitivity(Qt::CaseInsensitive); +} + +bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + // TODO this is not perfect as it could be + // eg it should filter all dirs which have no entry + QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + if (sourceModel()->hasChildren(idx)) + { + // QString d = sourceModel()->data(idx).toString(); + // //QModelIndex i = mapFromSource(source_parent); + // //if (hasChildren(i)) { + // int childCount = sourceModel()->rowCount(idx); + // for (int c=0; cindex(c, 0, idx); + // if (child.isValid()) { + // bool test = filterAcceptsRow(c, child); + // }*/ + // } + return true; + } + return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); +} + +//QVariant CGeorgesFileSystemProxyModel::data ( const QModelIndex & index, int role ) const +//{ +// if (role == Qt::DisplayRole) +// { +// QString test = QSortFilterProxyModel::data(index, role).toString(); +// return test.append(QString(" (%1/%2)")). +// arg(rowCount(index)). +// arg(sourceModel()->rowCount(mapToSource(index))); +// } +// return QSortFilterProxyModel::data(index, role); +//} } /* namespace NLQT */ /* end of file */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h index 775dcb18d..8ee06b3ef 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h @@ -18,32 +18,61 @@ #define GEORGES_FILESYSTEM_MODEL_H #include +#include namespace Plugin { -class CGeorgesFileSystemModel : public QFileSystemModel -{ - QString m_ldPath; + class CGeorgesFileSystemModel : public QFileSystemModel + { + Q_OBJECT + + public: + CGeorgesFileSystemModel(QString ldPath, QObject *parent = 0); + ~CGeorgesFileSystemModel(); + + int columnCount(const QModelIndex &/*parent*/) const; + int rowCount(const QModelIndex &/*parent*/) const; -public: - CGeorgesFileSystemModel(QString ldPath, QObject *parent = 0); - ~CGeorgesFileSystemModel(); + QVariant data(const QModelIndex& index, int role) const ; - int columnCount(const QModelIndex &/*parent*/) const; - int rowCount(const QModelIndex &/*parent*/) const; + bool isCorrectLDPath() + { + return m_correct; + } + bool isInitialized() + { + return m_initialized; + } + void setInitialized( bool init) + { + m_initialized = init; + } + void checkLDPath(); - QVariant data(const QModelIndex& index, int role) const ; + private: + bool m_correct; + bool m_initialized; + QString m_ldPath; - bool isCorrectLDPath() +private Q_SLOTS: + void dir(const QString&); + };/* class CGeorgesFileSystemModel */ + + // A modified QSortFilterProxyModel that always accepts the root nodes in the tree + // so filtering is only done on the children. + class CGeorgesFileSystemProxyModel : public QSortFilterProxyModel { - return m_correct; - } - void checkLDPath(); + Q_OBJECT + + public: + CGeorgesFileSystemProxyModel(QObject *parent = 0); + + //QVariant data(const QModelIndex& index, int role) const ; -private: - bool m_correct; -};/* class CGeorgesFileSystemModel */ + protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; + }; } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp new file mode 100644 index 000000000..2bcef52cb --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp @@ -0,0 +1,411 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "georges_treeview_dialog.h" + +// Qt includes +#include +#include +#include + +// NeL includes +#include +#include +#include +#include + +// Project includes +#include "georges.h" +#include "georgesform_model.h" +#include "georgesform_proxy_model.h" +//#include "formitem.h" +//#include "formdelegate.h" + +using namespace NLMISC; +using namespace NLGEORGES; + +namespace Plugin +{ + + CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/) + : QDockWidget(parent) + { + m_georges = new CGeorges; + + loadedForm = ""; + m_modified = false; + + m_ui.setupUi(this); + m_ui.treeView->header()->setResizeMode(QHeaderView::ResizeToContents); + m_ui.treeViewTabWidget->setTabEnabled (2,false); + + m_ui.checkBoxParent->setStyleSheet("background-color: rgba(0,255,0,30)"); + m_ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)"); + m_form = 0; + + //FormDelegate *formdelegate = new FormDelegate(this); + //_ui.treeView->setItemDelegateForColumn(1, formdelegate); + + + connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), + this, SLOT(doubleClicked (QModelIndex))); + connect(m_ui.checkBoxParent, SIGNAL(toggled(bool)), + this, SLOT(filterRows())); + connect(m_ui.checkBoxDefaults, SIGNAL(toggled(bool)), + this, SLOT(filterRows())); + } + + CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog() + { + //delete _ui.treeView->itemDelegateForColumn(1); + delete m_form; + deleteLater(); + //QSettings settings("RyzomCore", "GeorgesQt"); + //settings.setValue("dirViewGeometry", saveGeometry()); + } + + void CGeorgesTreeViewDialog::setForm(const CForm *form) + { + m_form = (UForm*)form; + } + + CForm* CGeorgesTreeViewDialog::getFormByName(const QString formName) + { + if(NLMISC::CPath::exists(formName.toStdString())) + { + return (CForm*)m_georges->loadForm(formName.toStdString()); + } + //else + //{ + // CForm *form = 0; + // // Load the DFN + // std::string extStr = NLMISC::CFile::getExtension( formName.toStdString() ); + // QString dfnName = QString("%1.dfn").arg(extStr.c_str()); + // UFormDfn *formdfn; + // if (NLMISC::CPath::exists(dfnName.toStdString())) + // { + // formdfn = _georges->loadFormDfn (dfnName.toStdString()); + // if (!formdfn) + // { + // nlwarning("Failed to load dfn: %s", dfnName.toStdString().c_str()); + // return 0; + // } + // } + // else + // { + // nlwarning("Cannot find dfn: %s", dfnName.toStdString().c_str()); + // return 0; + // } + + // form = new CForm; + + // // Build the root element + // ((CFormElmStruct*)&form->getRootNode())->build((CFormDfn*)formdfn); + + // uint i; + // for (i=0; iHeldElements[i]))->build ((CFormDfn*)formdfn); + // } + // return form; + //} + return 0; + } + + void CGeorgesTreeViewDialog::loadFormIntoDialog(CForm *form) + { + + if(form) + m_form = form; + else + return; + + UFormElm *root = 0; + root = &m_form->getRootNode(); + + QStringList parents; + for (uint i = 0; i < m_form->getNumParent(); i++) + { + UForm *u = m_form->getParentForm(i); + parents << u->getFilename().c_str(); + } + + QString comments; + comments = m_form->getComment().c_str(); + + if (!comments.isEmpty()) + { + m_ui.treeViewTabWidget->setTabEnabled (1,true); + m_ui.commentEdit->setPlainText(comments); + } + + QStringList strList; + std::set dependencies; + m_form->getDependencies(dependencies); + + QMap< QString, QStringList> deps; + Q_FOREACH(std::string str, dependencies) + { + QString file = str.c_str(); + if (str == m_form->getFilename()) continue; + deps[file.remove(0,file.indexOf(".")+1)] << str.c_str(); + } + nlinfo("typ's %d",deps["typ"].count()); + nlinfo("dfn's %d",deps["dfn"].count()); + + //nlwarning(strList.join(";").toStdString().c_str()); + if (root) + { + loadedForm = m_form->getFilename().c_str(); + + CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents); + CGeorgesFormProxyModel *proxyModel = new CGeorgesFormProxyModel(); + proxyModel->setSourceModel(model); + m_ui.treeView->setModel(proxyModel); + m_ui.treeView->expandAll(); + // this is a debug output row + m_ui.treeView->hideColumn(3); + + filterRows(); + + // //_ui.treeView->setRowHidden(0,QModelIndex(),true); + // connect(model, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), + // this, SLOT(modifiedFile())); + + setWindowTitle(loadedForm); + // //Modules::mainWin().getTabBar(); + } + } + + void CGeorgesTreeViewDialog::addParentForm(CForm *form) + { + //((CForm*)_form)->insertParent(((CForm*)_form)->getParentCount(), form->getFilename().c_str(), form); + } + + void CGeorgesTreeViewDialog::modifiedFile( ) + { + /*if (!_modified) + { + _modified = true; + setWindowTitle(windowTitle()+"*"); + Modules::mainWin().setWindowTitle(Modules::mainWin().windowTitle()+"*"); + Q_EMIT modified(_modified); + }*/ + } + + void CGeorgesTreeViewDialog::write( ) + { + + //COFile file; + //std::string s = CPath::lookup(loadedForm.toStdString(), false); + //if (file.open (s)) + //{ + // try + // { + // if (loadedForm.contains(".typ")) + // { + // //nlassert (Type != NULL); + + // //// Write the file + // //// Modified ? + // //if (IsModified ()) + // //{ + // // Type->Header.MinorVersion++; + // // flushValueChange (); + // //} + // //Type->write (xmlStream.getDocument (), theApp.Georges4CVS); + // //modify (NULL, NULL, false); + // //flushValueChange (); + // //UpdateAllViews (NULL); + // //return TRUE; + // } + // else if (loadedForm.contains(".dfn")) + // { + // //nlassert (Dfn != NULL); + + // //// Write the file + // //if (IsModified ()) + // //{ + // // Dfn->Header.MinorVersion++; + // // flushValueChange (); + // //} + // //Dfn->write (xmlStream.getDocument (), lpszPathName, theApp.Georges4CVS); + // //modify (NULL, NULL, false); + // //UpdateAllViews (NULL); + // //return TRUE; + // } + // else + // { + // nlassert (_form != NULL); + + // // Write the file + // /*if (IsModified ()) + // { + // ((CForm*)(UForm*)Form)->Header.MinorVersion++; + // }*/ + // //((CForm*)(UForm*)Form)->write (xmlStream.getDocument (), lpszPathName, theApp.Georges4CVS); + // _form->write(file, false); + // setWindowTitle(windowTitle().remove("*")); + // _modified = false; + // //if (strcmp (xmlStream.getErrorString (), "") != 0) + // //{ + // // char message[512]; + // // smprintf (message, 512, "Error while saving file: %s", xmlStream.getErrorString ()); + // //theApp.outputError (message); + // //} + // //modify (NULL, NULL, false); + // //flushValueChange (); + // //UpdateAllViews (NULL); + + // // Get the left view + // //CView* pView = getLeftView (); + // } + // } + // catch (Exception &e) + // { + // nlerror("Error while loading file: %s", e.what()); + // } + //} + //else + //{ //if (!file.open()) + // nlerror("Can't open the file %s for writing.", s.c_str()); + //} + } + + void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) + { + // TODO: this is messy :( perhaps this can be done better + //CGeorgesFormProxyModel * mp = + // dynamic_cast(_ui.treeView->model()); + //CGeorgesFormModel *m = + // dynamic_cast(mp->sourceModel()); + //QModelIndex in = mp->mapToSource(index); + + //// col containing additional stuff like icons + //if (index.column() == 2) + //{ + // QModelIndex in2 = m->index(in.row(),in.column()-1,in.parent()); + // CFormItem *item = m->getItem(in2); + // QString value = item->data(1).toString(); + + // QString path = CPath::lookup(value.toStdString(),false).c_str(); + + // if(value.contains(".tga") || value.contains(".png")) + // { + // QString file = QFileDialog::getOpenFileName( + // this, + // "Select a new image", + // path, + // "Images (*.png *.tga)" + // ); + // if (file.isNull()) + // return; + // QFileInfo info = QFileInfo(file); + + // // TODO? + // // right way would be another delegate but im too lazy :) + // // so for now i just call it directly + // m->setData(in2, info.fileName()); + // return; + // } + // else + // { + // if (path.contains(".shape") || path.contains(".ps")) + // { + // if (Modules::objViewInt()) + // { + // Modules::objViewInt()->resetScene(); + // //Modules::config().configRemapExtensions(); + // Modules::objViewInt()->loadMesh(path.toStdString(),""); + // } + // return; + // } + // } + + // // open eg parent files + // if (!path.isEmpty()) + // Q_EMIT changeFile(path); + + //} + } + + void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event) + { + /*if (Modules::mainWin().getEmptyView() == this) + { + event->ignore(); + } + else + { + if(Modules::mainWin().getTreeViewList().size() == 1) + { + Modules::mainWin().createEmptyView( + Modules::mainWin().getTreeViewList().takeFirst()); + } + Modules::mainWin().getTreeViewList().removeOne(this); + deleteLater(); + }*/ + } + + void CGeorgesTreeViewDialog::filterRows() + { + nlinfo("CGeorgesTreeViewDialog::filterRows"); + CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model()); + CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); + if (m) { + m->setShowParents(m_ui.checkBoxParent->isChecked()); + m->setShowDefaults(m_ui.checkBoxDefaults->isChecked()); + } + + //CGeorgesFormProxyModel * mp = dynamic_cast(_ui.treeView->model()); + //CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); + + //for (int i = 0; i < m->rowCount(); i++) + //{ + // const QModelIndex in = m->index(i,0); + // if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) + // { + // if (newState == Qt::Checked) + // { + // _ui.treeView->setRowHidden(in.row(),in.parent(),false); + // } + // else + // { + // _ui.treeView->setRowHidden(in.row(),in.parent(),true); + // } + // } + // else + // { // search childs // recursive? + // for (int j = 0; j < m->rowCount(in); j++) + // { + // const QModelIndex in2 = m->index(j,0,in); + // if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) + // { + // if (newState == Qt::Checked) + // { + // _ui.treeView->setRowHidden(in2.row(),in,false); + // } + // else + // { + // _ui.treeView->setRowHidden(in2.row(),in,true); + // } + // } + // } + // } // end of search childs + //} + } + +} /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h new file mode 100644 index 000000000..dee1216ca --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h @@ -0,0 +1,89 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef GEORGES_TREEVIEWER_DIALOG_H +#define GEORGES_TREEVIEWER_DIALOG_H + +#include "ui_georges_treeview_form.h" + +// Qt includes +#include + +// STL includes + +// NeL includes + +// Project includes + +namespace NLGEORGES +{ + class UForm; + class CForm; +} + +using namespace NLGEORGES; + +namespace Plugin +{ + + class CGeorges; + + class CGeorgesTreeViewDialog: public QDockWidget + { + Q_OBJECT + + public: + CGeorgesTreeViewDialog(QWidget *parent = 0); + ~CGeorgesTreeViewDialog(); + + bool modified() {return m_modified;} + void setModified(bool m) {m_modified = m;} + + CForm* getFormByName(const QString); + void addParentForm(CForm *form); + + void write ( ); + + QTabWidget* tabWidget() { return m_ui.treeViewTabWidget; } + + QString loadedForm; + + protected: + void closeEvent(QCloseEvent *event); + + Q_SIGNALS: + void changeFile(QString); + void modified(bool); + public Q_SLOTS: + void setForm(const CForm*); + void loadFormIntoDialog(CForm *form = 0); + void modifiedFile( ); + private Q_SLOTS: + void doubleClicked ( const QModelIndex & index ); + void filterRows(); + + private: + Ui::CGeorgesTreeViewDialog m_ui; + UForm *m_form; + CGeorges *m_georges; + + bool m_modified; + + }; /* CGeorgesTreeViewDialog */ + +} /* namespace NLQT */ + +#endif // GEORGES_TREEVIEWER_DIALOG_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui new file mode 100644 index 000000000..71db74326 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui @@ -0,0 +1,124 @@ + + + CGeorgesTreeViewDialog + + + + 0 + 0 + 400 + 300 + + + + + 0 + 0 + + + + + 199 + 165 + + + + + + + + + + + QTabWidget::West + + + 0 + + + + Form + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + Parent + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Defaults + + + + + + + + Comment + + + + + + false + + + + + + + + Log + + + + + + + + + + + + + + + + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp new file mode 100644 index 000000000..234c2d169 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp @@ -0,0 +1,641 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "georgesform_model.h" + +// NeL includes +#include +#include +#include +#include +#include +#include + +// Qt includes +#include +#include +#include +#include +#include + +// project includes +#include "formitem.h" +//#include "modules.h" + +using namespace NLGEORGES; + +namespace Plugin +{ + + CGeorgesFormModel::CGeorgesFormModel(UFormElm *rootElm, QMap< QString, QStringList> deps, + QString comment, QStringList parents, QObject *parent) : QAbstractItemModel(parent) + { + QList rootData; + rootData << "Value" << "Data" << "Extra";// << "Type"; + m_rootElm = rootElm; + m_rootItem = new CFormItem(m_rootElm, rootData); + m_dependencies = deps; + m_comments = comment; + m_parents = parents; + m_parentRows = new QList; + + setupModelData(); + } + + CGeorgesFormModel::~CGeorgesFormModel() + { + delete m_rootItem; + } + + /******************************************************************************/ + + QVariant CGeorgesFormModel::data(const QModelIndex &p_index, int p_role) const + { + if (!p_index.isValid()) + return QVariant(); + + switch (p_role) + { + case Qt::DisplayRole: + { + return getItem(p_index)->data(p_index.column()); + } + case Qt::BackgroundRole: + { + QBrush defaultBrush = QBrush(QColor(255,0,0,30)); + QBrush parentBrush = QBrush(QColor(0,255,0,30)); + + // if elm not existing it must be some kind of default or type value + if(!getItem(p_index)->getFormElm()) + { + return defaultBrush; + } + + // else it might be some parent elm + switch (getItem(p_index)->nodeFrom()) + { + case NLGEORGES::UFormElm::NodeParentForm: + { + return parentBrush; + } + case NLGEORGES::UFormElm::NodeForm: + { + switch (getItem(p_index)->valueFrom()) + { + case NLGEORGES::UFormElm::ValueParentForm: + { + return parentBrush; + } + default: + { + // parent status test kindof ugly, testing only 2 steps deep + // only needed for colorization as treeview default hides childs + // when parent is hidden + CFormItem *parent = getItem(p_index)->parent(); + if (parent) + { + if (parent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm) + { + return parentBrush; + } + + CFormItem *parentParent = parent->parent(); + if (parentParent) + { + if (parentParent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm) + { + return parentBrush; + } + } // endif parentParent + } // endif parent + } // end default + } // end switch valueFrom + } // end case nodeForm + } // end switch nodeFrom + return QVariant(); + } + case Qt::DecorationRole: + { + if (p_index.column() == 2) + { + //p_index. + QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent()); + CFormItem *item = getItem(in); + + QString value = item->data(1).toString(); + //QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); + + /*if (value.contains(".shape")) + { + if (Modules::objViewInt()) + { + QIcon *icon = Modules::objViewInt()->saveOneImage(value.toStdString()); + if (icon) + { + if(icon->isNull()) + return QIcon(":/images/pqrticles.png"); + else + return QIcon(*icon); + } + else + { + return QIcon(); + } + } + }*/ + if(value.contains(".tga") || value.contains(".png")) + { + QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); + if(path.isEmpty()) + { + path = ":/images/pqrticles.png"; + } + return QIcon(path); + } + } + return QVariant(); + break; + } + case Qt::ToolTipRole: + { + if (p_index.column() == 2) + { + QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent()); + CFormItem *item = getItem(in); + QString value = item->data(1).toString(); + + /*if (value.contains(".shape")) + { + if (Modules::objViewInt()) + { + QIcon *icon = Modules::objViewInt()->saveOneImage(value.toStdString()); + if (icon) + { + if(icon->isNull()) + return QIcon(":/images/pqrticles.png"); + else + return QIcon(*icon); + } + else + { + return QIcon(); + } + } + }*/ + if(value.contains(".tga") || value.contains(".png")) + { + QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str(); + if(path.isEmpty()) + { + path = ":/images/pqrticles.png"; + } + + QString imageTooltip = QString("").arg(path); + + return imageTooltip; + } + } + return QVariant(); + break; + } + default: + return QVariant(); + } + } + + /******************************************************************************/ + + CFormItem *CGeorgesFormModel::getItem(const QModelIndex &index) const + { + if (index.isValid()) + { + CFormItem *item = static_cast(index.internalPointer()); + if (item) + return item; + } + return m_rootItem; + } + + /******************************************************************************/ + + //bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, + // int role) + //{ + + // if (role != Qt::EditRole) + // return false; + + // CFormItem *item = getItem(index); + // bool result = item->setData(index.column(), value); + + // // TODO: ugly hack for updating icon too + // if (result) + // Q_EMIT dataChanged(index, this->index(index.row(),index.column()+1,index.parent())); + + // setupModelData(); + // return result; + //} + + /******************************************************************************/ + + Qt::ItemFlags CGeorgesFormModel::flags(const QModelIndex& index) const { + + if (!index.isValid()) + return 0; + + Qt::ItemFlags returnValue = Qt::ItemIsSelectable | Qt::ItemIsEnabled; + + //if(index.column() == 1) + // returnValue |= Qt::ItemIsEditable; + // TODO? + // col 2 should go here too but i dont want to do another delegate + // so for now i just connected the dblClick in the dialog + + return returnValue; + + } + + /******************************************************************************/ + + QVariant CGeorgesFormModel::headerData(int section, + Qt::Orientation orientation, int role) const + { + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + return m_rootItem->data(section); + + return QVariant(); + + } + + /******************************************************************************/ + + QModelIndex CGeorgesFormModel::index(int row, int column, const QModelIndex &parent) + const + { + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + CFormItem *parentItem; + + if (!parent.isValid()) + parentItem = m_rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + CFormItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); + } + + /******************************************************************************/ + + QModelIndex CGeorgesFormModel::parent(const QModelIndex &index) const + { + if (!index.isValid()) + return QModelIndex(); + + CFormItem *childItem = static_cast(index.internalPointer()); + CFormItem *parentItem = childItem->parent(); + + if (parentItem == m_rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); + } + + /******************************************************************************/ + + int CGeorgesFormModel::rowCount(const QModelIndex &parent) const { + + CFormItem *parentItem; + if (parent.column() > 0) + return 0; + + if (!parent.isValid()) + parentItem = m_rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->childCount(); + + } + + /******************************************************************************/ + + int CGeorgesFormModel::columnCount(const QModelIndex &parent) const { + + if (parent.isValid()) + return static_cast(parent.internalPointer())->columnCount(); + else + return m_rootItem->columnCount(); + + } + + /******************************************************************************/ + + void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) { + + if (!root) + return; + + uint num = 0; + + + if (root->isStruct()) + { + //((CFormElm*)root)->getForm()->getComment(); + uint structSize = 0; + root->getStructSize(structSize); + while (num < structSize) + { + UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode; + UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue; + // Append a new item to the current parent's list of children. + std::string elmName; + if(root->getStructNodeName(num, elmName)) + { + QList columnData; + //QVariant value; + std::string value; + //NLMISC::CRGBA value_color; + //uint value_uint; + //sint value_sint; + //double value_double; + QString elmtType = ""; + UFormElm *elmt = 0; + if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true)) + { + if (elmt) + { + if (elmt->isArray()) + elmtType = "Array"; + if (elmt->isStruct()) + elmtType = "Struct"; + if (elmt->isAtom()) + { + elmtType = "Atom"; + uint numDefinitions = 0; + const UType *type = elmt->getType(); + if (type) + { + numDefinitions = type->getNumDefinition(); + root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); + switch (type->getType()) + { + case UType::UnsignedInt: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); + elmtType.append("_uint");break; + case UType::SignedInt: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString(); + elmtType.append("_sint");break; + case UType::Double: + value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble(),0,'f',1).toStdString(); + elmtType.append("_double");break; + case UType::String: + elmtType.append("_string");break; + case UType::Color: + elmtType.append("_color");break; + default: + elmtType.append("_unknownType"); + } + } + else + { + elmtType.append("_noType"); + } + + if (numDefinitions) + { + std::string l, v; + QString tmpLabel, tmpValue; + for (uint i = 0; i < numDefinitions; i++) + { + type->getDefinition(i,l,v); + tmpLabel = l.c_str(); + tmpValue = v.c_str(); + if (type->getType() == UType::SignedInt) + { + if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) { + value = l; + break; + } + } + if (type->getType() == UType::String) + { + if (QString(value.c_str()) == tmpValue) + { + value = l; + break; + } + } + } + } + } + if (elmt->isVirtualStruct()) + { + root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); + elmtType = "VirtualStruct"; + } + switch (*whereN) + { + case UFormElm::NodeForm: + elmtType.append("_fromForm"); break; + case UFormElm::NodeParentForm: + elmtType.append("_fromParentForm"); break; + case UFormElm::NodeDfn: + elmtType.append("_isDFN"); break; + case UFormElm::NodeType: + elmtType.append("_isType"); break; + default: + elmtType.append("_noNode"); + } + switch (*whereV) + { + case UFormElm::ValueForm: + elmtType.append("_formValue"); break; + case UFormElm::ValueParentForm: + elmtType.append("_parentValue"); break; + case UFormElm::ValueDefaultDfn: + elmtType.append("_dfnValue"); break; + case UFormElm::ValueDefaultType: + elmtType.append("_typeValue"); break; + default: + elmtType.append("_noValue"); + } + columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType; + parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN)); + //if (parents.last()->childCount() > 0) { + // parents << parents.last()->child(parents.last()->childCount()-1); + //} + loadFormData(elmt, parent->child(parent->childCount()-1)); + } + else + { + // add Defaults + // TODO: spams warnings for non ATOM values but i dont get type of non existing nodes + bool success = root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV); + switch (*whereN) + { + case UFormElm::NodeForm: + elmtType.append("_fromForm"); break; + case UFormElm::NodeParentForm: + elmtType.append("_fromParentForm"); break; + case UFormElm::NodeDfn: + elmtType.append("_isDFN"); break; + case UFormElm::NodeType: + elmtType.append("_isType"); break; + default: + elmtType.append("_noNode"); + } + switch (*whereV) + { + case UFormElm::ValueForm: + elmtType.append("_formValue"); break; + case UFormElm::ValueParentForm: + elmtType.append("_parentValue"); break; + case UFormElm::ValueDefaultDfn: + elmtType.append("_dfnValue"); break; + case UFormElm::ValueDefaultType: + elmtType.append("_typeValue"); break; + default: + elmtType.append("_noValue"); + } + + columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType; + parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN)); + } + } + else + { + nlinfo("getNodeByName returned false"); + } + } + num++; + } + } + if (root->isArray()) + { + uint arraySize = 0; + root->getArraySize(arraySize); + while (num < arraySize) + { + std::string elmName; + if(root->getArrayNodeName(elmName, num)) + { + QList columnData; + std::string value; + QString elmtType = ""; + + UFormElm *elmt = 0; + if(root->getArrayNode(&elmt,0) && elmt) + { + if (elmt->isArray()) + elmtType = "Array"; + if (elmt->isStruct()) { + elmtType = "Struct"; + } + if (elmt->isAtom()) + { + elmt->getValue(value); + elmtType = "Atom"; + } + if (elmt->isVirtualStruct()) + elmtType = "VirtualStruct"; + + elmtType.append("_arrayValue"); + columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType; + parent->appendChild(new CFormItem(elmt, columnData, parent)); + loadFormData(elmt, parent->child(parent->childCount()-1)); + } + } + num++; + } + } + } + + /******************************************************************************/ + + void CGeorgesFormModel::loadFormHeader() + { + + CFormItem *fi_pars = new CFormItem(m_rootElm, QList() << "parents", m_rootItem); + m_rootItem->appendChild(fi_pars); + + Q_FOREACH(QString str, m_parents) + { + fi_pars->appendChild(new CFormItem(m_rootElm, QList() << str, fi_pars)); + } + + /*QStringList dfns = _dependencies["dfn"]; + QStringList typs = _dependencies["typ"]; + + _dependencies.remove("dfn"); + _dependencies.remove("typ"); + + CFormItem *fi_dep = new CFormItem(_rootElm, QList() << "dependencies", _rootItem); + _rootItem->appendChild(fi_dep); + + if (!dfns.isEmpty()) { + CFormItem *fi_dfn = new CFormItem(_rootElm, QList() << "dfn", fi_dep); + fi_dep->appendChild(fi_dfn); + foreach(QString str, dfns) { + fi_dfn->appendChild(new CFormItem(_rootElm, QList() << str, fi_dfn)); + } + } + if (!typs.isEmpty()) { + CFormItem *fi_typ = new CFormItem(_rootElm, QList() << "typ", fi_dep); + fi_dep->appendChild(fi_typ); + foreach(QString str, typs) { + fi_typ->appendChild(new CFormItem(_rootElm, QList() << str, fi_typ)); + } + } + if (!_dependencies.isEmpty()) { + CFormItem *fi_other = new CFormItem(_rootElm, QList() << "other", fi_dep); + fi_dep->appendChild(fi_other); + foreach(QStringList list, _dependencies) { + foreach(QString str, list) { + fi_other->appendChild(new CFormItem(_rootElm, QList() << str, fi_other)); + } + } + }*/ + } + + /******************************************************************************/ + + void CGeorgesFormModel::setupModelData() + { + loadFormHeader(); + loadFormData(m_rootElm, m_rootItem); + } + + /******************************************************************************/ + + void CGeorgesFormModel::setShowParents( bool show ) { + m_showParents = show; + Q_EMIT layoutAboutToBeChanged(); + Q_EMIT layoutChanged(); + } + void CGeorgesFormModel::setShowDefaults( bool show ) + { + m_showDefaults = show; + Q_EMIT layoutAboutToBeChanged(); + Q_EMIT layoutChanged(); + } +} /* namespace Plugin */ + +/* end of file */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h new file mode 100644 index 000000000..7668f9e7f --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h @@ -0,0 +1,79 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef GEORGESFORM_MODEL_H +#define GEORGESFORM_MODEL_H + +// Qt includes +#include +#include +#include +#include + +// project includes + +namespace NLGEORGES { + class UFormElm; +} + +namespace Plugin +{ + + class CFormItem; + + class CGeorgesFormModel : public QAbstractItemModel + { + + public: + CGeorgesFormModel(NLGEORGES::UFormElm *root, QMap< QString, QStringList> deps, + QString comment, QStringList parents, QObject *parent = 0); + ~CGeorgesFormModel(); + + QVariant data(const QModelIndex &index, int role) const; + //bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + CFormItem *getItem(const QModelIndex &index) const; + CGeorgesFormModel *model() { return this; } + bool showParents() { return m_showParents;} + bool showDefaults() { return m_showDefaults;} + void setShowParents( bool show ); + void setShowDefaults( bool show ); + + private: + void setupModelData(); + void loadFormData(NLGEORGES::UFormElm *rootElm, CFormItem *parent); + void loadFormHeader(); + + CFormItem* m_rootItem; + NLGEORGES::UFormElm* m_rootElm; + QMap< QString, QStringList> m_dependencies; + QString m_comments; + QStringList m_parents; + QList* m_parentRows; + + bool m_showParents; + bool m_showDefaults; + + };/* class CGeorgesFormModel */ + +} /* namespace Plugin */ + +#endif // GEORGESFORM_MODEL_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp new file mode 100644 index 000000000..0950e1b04 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp @@ -0,0 +1,94 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "georgesform_proxy_model.h" +#include "georgesform_model.h" + +// NeL includes +#include +#include + +// project includes +#include "formitem.h" + +#include + +namespace Plugin +{ + + bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow, + const QModelIndex &sourceParent) const + { + //nlinfo("CGeorgesFormProxyModel::filterAcceptsRow"); + + // column doesnt matter for item + CGeorgesFormModel *smodel = dynamic_cast(sourceModel()); + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); + CFormItem *item = smodel->getItem(index); + + //qDebug() << smodel->showParents() << (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm); + //nlinfo("%s %d %d %d %d", item->data(index.column()).toString().toStdString().c_str(), + // item->valueFrom(), + // item->nodeFrom(), + // smodel->showParents(), + // (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm)); + + // if elm not existing it must be some kind of default or type value + if(!item->getFormElm()) + { + return smodel->showDefaults(); + } + + // else it might be some parent elm + switch (item->nodeFrom()) + { + case NLGEORGES::UFormElm::NodeParentForm: + { + return smodel->showParents(); + } + case NLGEORGES::UFormElm::NodeForm: + { + switch (item->valueFrom()) + { + case NLGEORGES::UFormElm::ValueParentForm: + { + return smodel->showParents(); + } + default: + { + CFormItem *parent = item->parent(); + if (parent && (parent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm)) + { + return smodel->showParents(); + } + } + } + } + } + return true; + } + +/******************************************************************************/ + + bool CGeorgesFormProxyModel::filterAcceptsColumn(int sourceRow, + const QModelIndex &sourceParent) const + { + //nlinfo("CGeorgesFormProxyModel::filterAcceptsColumn"); + return QSortFilterProxyModel::filterAcceptsColumn(sourceRow, sourceParent); + } +} /* namespace Plugin */ + +/* end of file */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h new file mode 100644 index 000000000..570913dab --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h @@ -0,0 +1,45 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef GEORGESFORM_PROXY_MODEL_H +#define GEORGESFORM_PROXY_MODEL_H + +// Qt includes +#include + +namespace Plugin +{ + + class CGeorgesFormProxyModel : public QSortFilterProxyModel + { + + public: + CGeorgesFormProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent) + { + } + ~CGeorgesFormProxyModel() + { + } + + protected: + virtual bool filterAcceptsColumn ( int source_column, const QModelIndex & source_parent ) const ; + virtual bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const ; + + };/* class CGeorgesFormProxyModel */ + +} /* namespace NLQT */ + +#endif // GEORGESFORM_PROXY_MODEL_H From 232712531ceea69186442897ebf324695c61b037 Mon Sep 17 00:00:00 2001 From: aquiles Date: Tue, 16 Aug 2011 19:27:12 +0200 Subject: [PATCH 37/60] Changed: #1206 added pill icon to object_viewer tab --- .../plugins/object_viewer/icons/ic_nel_pill.png | Bin 0 -> 9291 bytes .../src/plugins/object_viewer/object_viewer.qrc | 1 + .../plugins/object_viewer/object_viewer_plugin.h | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/icons/ic_nel_pill.png diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/icons/ic_nel_pill.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/icons/ic_nel_pill.png new file mode 100644 index 0000000000000000000000000000000000000000..e748b8190c5dcc4e24d157fa45a71216d27ec7e7 GIT binary patch literal 9291 zcmV-RB(&R!P)N2bPDNB8 zb~7$DE;i7Ety%y8BgjcaK~#8N?Og|$l-0SOZGfPF#+aCxXksKvOk#>kG)D1;8}KTU z2%+r4c367vz4s=)N)?a}B26&T(GZOyXixzw7C;mgSlDyl_h-J%=gIkJW|xKN%*^wg z=dUxnbKdvs-}xsHh`-`95TAkg48&(3J_GR?h|fTL2I4btv1cGFD=V>S)20>j^75|3 zsEqyln>1-s1^c&RRKorZjT<+vSgl&Mgp2*Z#6SNM%|LE$ZbEi;c6k6?7l2P~)~wlj zjQtoVn>TN6IIw>P<0!^K-19Vu(6fI1`jzgz_uk}MwQ9x5aEY)g(LV#w%K*sx0Q@9? z`a%2l?ah!OL(JsKlg*qtbIh`3%gmZJYs^zmJ!Lj**kCqo+GL)7`f0Ob#R@Ze^k`GN zcI^UyzXzYwJtrsU+7kWe;vaVLW*{RYqdcTO6~J%r+O_L(0={_hVh`B)^XHo}W5$?% z{rZ`1-MX31ojaS39XooXQ>RV__nTh5dYMt9MtSdf{PD+m@7WeDTD*$S%K#Csx_JM2 z{F5(e1^{{~jJqK1Yr1#u{^hJ$v&@rEK53>+o92PqrcE19-BT0v?%mr=m@vUS@x&8m z;lhPx#*7)JZ{NPAZQHh{VZ(+dJw4rY>C(m17Hik8^~iwtoB|Qn!$RXLIMyHLF*zHX}xiFgP|Kgf}SN>({S0Z@>MvId|@yalPJu|9!K0 z^JeqtqmLR$yf;W1eiqL!S+d0R?Ah}){?;gvq(aGli} z-LhrNLf|Rw1pc$nJ~IUc1y11Ylll4i=JnTK_p}5*i$tIXnLd5G*}i?dnKy6VIhc*j zAl@&F^-ss&R5CMwu&y#Z_uWv{1yuR8<0A1LI&|lJ-b$diULT4Z!w3AL`%xThsUSf< zIy!kG_1w~N`{a{PBEhvt_nba`+6x=$SC9nM2qeX>UAxTq@#D`y6Fdr1UU6aHEdK7W zGr(*f?0#oBb*BkF)iS|o*RGxC^`AO*sz|^V<>s?z&ze_WdBrmWLV`Yh`j}^)dB)6~ zIrB8gF%5ZxI0?d{cmX$Hf-6D#Kca&swwa;b?%lf$0lE|~nuLJ^2YSRK5qk9K;f0Hc zK+eKx91l%U@dCbL{H=a7fFw^T5MUZ(bY|-a0PXQV|M|~iJ9@<>%*P*p?1hIU00&9P z@N?0kMKlu=p{3$sVo6guH8u4YNYs2t>8Hx4r~lGRFI{r*g)}Emp7eYUApt|i<;#~d z`Zxzd%#UXdOOOFos#Hm+S+nKPX3+_e$zYg+ zvL!JGG5r|`{i(()oIXhlFih$Bk zp>0t8J4bcOe7i`Q2G0gbgJ}aM;Lu~&K)LpL4+m{}Q3ln&9&9%oJa}-SW5{q8jV1XY z_Hd9Oo+t{%1E^2n-?e}QU>ew#FagPLE5Hem8W;)3AI@EkKii60%vaV8Kb4w~h!8nG$^29I4s-y{1cPMq-G$1TUcefzvJHc7z9fZ0O$HYcG4YNOg2PZYUG z00Q(ub*+GHSoEm5fWrpO1+E`R;Q$n{WUIlHbL=|e(BRtFjvqhn-6KPe*;GP8lLRat zam@lk+|Q6ftd5j%oCG!rP*H0KX*tK1ZxVouJ6MmmffO(_C|W9QVD+&Eiu=5#fg^Y_ z?0b2hT1ke!*S>c2=uyMLo<(Xil7I_SNNPB_2SJD$@szQ}01zM*S|Fd#uL;N`sSLS~TRHdav(FZifWE=jty@Wg1JDG2h`=|F zom*fZD}w-^(+OnjHytRJU;V(;AZjoL7}>f&)d1N5`d!l?%RWOtJwE*KL&IU8r{vQN zP!q7jh?!1&&$p2%imy2kia+$wL&=z+Lkyi5Lz4g`!pkqe?2$kNslnBNYmn^o0*VG) z1L+4I@8Nspy58F0fAGNv#vZ)?$dM!7!WFJS;`bs6xE2AO#;+m!c}MJsd6;hs0*po@ zNP%S4I9Ut{If(?qmTm#ZmN*;iP*UmwmLSS`y|3>Tpb4%Ec%I`m8SlOKp0|iax{BEJ zLQODb%9OvuPl%I%+<+fY6%uibv9mN?&=+7ga3s=7pk06o0W_!@9C?ohRbRJ3*4LQ) zv5$GqHAn)cy6NPy?QPt+ah@iC-}4HKM>T5Hi0$YgEiJ7yCSn;EgY@s;zmNnp37kAX zRjh&alSW%2ZGc^Xxq#*WA@|C49`ig0+sQfPSYP8gE?i|B83|4jFnvrCAX)S=qXW!A zZ1)nt8N3H-@)#F{u;ofL0eb{&>DCgfL9r#-2G&j^BCb9is=&Gh0Y4 zM*{HsF*@MGD^Nu|0uz{l&ghhw^$U{QN4?FFvfUMQ9EtR&Kw!!t2T0gMu^8)l+Z@pz?*aXnm{`Iea zd20_z01ie8Y(K|y3JOM#7_p;q!-j3rYuEmMOlkv|f*NSOKF+)VCx#?oOEzrfe-OY0 zy4Yb2vY%A*ybTnOT~e%p)z>w!Bq;~aX;R2}y=BT+lYm4(XRKL_jOd(+6VJBG$~v6= z;DcFNcia(Mg(MVBk}(+rQB*lYRVmFDOsKG5z?NngxHf<;Np=Cxb2gy**bi*`9s&B$ zp+knlMF5_E@x>Rt$JgX!XPaz1x+Xg{)ilLpY=+|bM)Q#~=wHA7=ULZW)9;Z$;L4cN z2Ji>I%_ZWpP((}tohGJREz z`R7eXJfS4JK?9Rhx30eWq~`|mf8Rjq0URj80(KMcWYQ^Q(SYf$a`ZSY-^ECAai(C^jv96%JX6a_DWp9Ao7YSuKl_uON0 zZ@9rUOing+6!=1drXa-xXoAMc$@~8j2vmhhhz%0J6nqPkzlQk%W(ma~;3Cr3AVpeY zUAEd!ecM2~B-;j5jzyX&(S=eSlyWWYd>R>tzK6&2;psQc%sj95A^Ew#|Gmk+>MGM9 z2z*0q+hTOU$iWaoWG5z?$>qzNW+^F$;TYZ*Gv)x1!S#^-9n1$1cp(9+Yb1dORG7O?!JT7dfx+Z_bn1+b7pZ#@!Vyo#2w8Sr6p;pykptLNGLoV)Kf=@lw?;CC!n z&Mf%h56zC-Z#TQ{xWnxJ?QhLajO9Q2k?D2$<(^5%N=Pu1a6d?J9OmFp{}%{E|5MDW zSFfG`O>i6hfWurrNE1L3u(-k^3xN#feTM>Ht7gA_A%Y8Bo)aQ4LXmxYyB80;m;_&@ z3BtWxf?una$p*-20KFO1{>r0bjOjkt=9ky0mEuB1}E62|k7D?@V-=J(+(-~lG{KYT+4Lk@y zBJ2Y293+6}{lhE>@LKW-`gZsZdMt-I$c8Cko?zy;zfIHd7RKz+iw@RnhXN2Ys>fY{Qmv>&073QNgFt(xk2zV0dOkPxx-=ax5AEl z(k_xu0tEL-fSt7W0Dp%i^&%Z`@DnZB?&H-~#{ES6?+8HVJrcKVtk9c)D3zmatjasa@M- zKw>jtrzd>>`(`V^6|f7{eozDK1S#kb5PUj(wv@}UfG-5l=Vu{0Xo%>bCA7?J`WeZ| zufZJL9rc<3ZB&Wy2kM}6=u3IRC`rJ`VB^M(AxWSC4<+G#*F4}M^?MQKEyDw(TCmHf zeti%8blCYEN+hIn2Y}vr*InlcfFT+{q<#m$-vN8iSYN=^V29e@3X>vZ{598@1|UH@ zkZ$gGzf05b50K#2s3!rmKoXajAys^ujir()WV_XtEn5mhG?&WP;0hr^0WQ}FJ{N<& zj7Qnd!-Jxj;K`=5htzJy%{QB7ki;b@>=1Yld}RE*fql^cRQcPf@+tL}eJAJ|T<+UM zu&;0V`OnQ5m;k1Zdm+ETJVAOOup1e}=>K6XB#Bbs1dc<|=nQ{TKuExzLOylW_TWR= za#8i6wgjIsKC^pyjT(8*UN-9Z>5%v~aQM~%Fp+#AK_MBS1w5$-_}haj-w#}ZD#Hfc zMS#uFJVQ_~APEM71e313vH)r3weSh9j(Sbds8OS<;S?@~KTyD*fswWPd;%GB1b$w; zCPOIDsqQ%h{E^ETZcToD_>}^wy9ZBE^HqR4q zO$fjJr+@lW(-EN|8cED3)D1>~1oaXUCP5QajCvBFo9G5OgL~LWB0Ys90@KIrE)Heu z!+}rWIsT3=p24V0GP}oGe)hfhnp8-AAB;`R)&GaH7*M|a8T1$otQHH2BKQM8#^YJuVd02jp_l`bf&jX_ zcmbahZWBSIo{gM;!w*PwN6%hX(9_QZkZDl0qhN2h(US-GTJ>|E!1LO+pvvDG1l|QO z0VR-H6Ue>|zP`_OZN-m&?4^vU31-15?0@;?U!siMBkHw4aJktdSXp!wk8LX?0K1C# zq)#2n`ANMHL4&^$ze3s>j-@C0fBB0^M>;kG&fYkLU|WOW+xDIWAo!GeR{OM?j|5mD zgbQFf_qU(@>?>M<$1)b6%GfAaJbDb8phxM_CqaVxs3Jyp1rgz45~RN`p5U3UokE%g z{-mtf^Ke^g3`)Kvc-Xv2PoD*yMl8#se$N=6z>AvKCV(oRlD{n&;)&D?ur_!uphMlG z!FCa0^DVb{wF34VG(*Plagd-@QqmC+;Ez$?RRn*4zb3v=o^--O z@f6S&=sn0rjGv7YPd>h^@BG-faqVHj2yvrkouQcK9+|y$fH}BDAFX5#EwWk zf3ajHe=vd%f~3u-vNpkWlhzx!j)jk2bi`ht075RXV`1~R56!HhA`6w4n0)o$q zA{U|1iENCe!mMAJ^1AH&9|KNk3 z~0+NCqMl=yw$m@IHqhCJ*9l2?ksNs+lk$fQl zj|=w!zSw&|0{E%yNY1-})u0ks*Wf*JUf(|zy#r|o59t)H1POW~M*uC*=iX>8A)}Ls ztBvZ~3r%FLKCXF^&!P?`KND)7)it(cZ)OZ1l={NNPEZqUMJ12myMWiK+y%6sD%X-t z09|Tdz-8*!j{tt>HzJ2I65p#XOaU{P%U~K>B`1H1MJF|oCy3rfCjgn{;{|9RE08q? zT$-JomF0n-8(y0`@UA%r-I)d{*=*`3Utg zF)|w)obae>i47`DO~~I4%KY%{hT>1p)NIVOK>D=UlW6p?neZkUkfeQ z8re*)Mq*3ZOk_1v6B0HdGWc#(lK}aF7U&;1(;rQx9{60E4V#~dm^l@|v%6+Cojzvq zn8T;~4~BT#g5XPR9}avwJ`V-7w%J8h>vDf6zU#g2iOGMtKeZPo<38$l5ulM zceohc&#BYW>qmf4HeUnlA_A{(fQFMH_fJA22~9yKeD9SgBDF4E`U^OP*;sWHo&G?* zdi9dfwY#tv(!#@0;K_w8ZwOV$${7hT8{R(wmq8LRt-B>yvkwKnEB+4U#mhAtFq;73 zY`ROj^?L+t7XjA66!e8Zz$DRFL_ABN{ooHAgHu>3YPCSlBab}N_<;vbPeygG844zp z0D{l$OsGPUdYS-g1A6*?d3-JLE{|P%@_r^jOSbLUg#*`h-B$H30+0-Heignm{hlnC z0_F2;2z3 z5B23L-QbfsNCIZcRw8%qfe*E>!Hy(1FJ>STr_Ppk+nE#KT*T1e*>*jY%GbWYdVEhA z{0uaXc&2ay$bfnQBZLF+2coxVgfDkLp273}V5mPXu%IU3pcFh4jPYF+xo{ag8+;cT zLfQRD)VfW8a8jCTy zy4PAjUt0}_upLYyA4ahhjV~R`l*z~Zz+y)63mvm%U=E(_90(M&1N-FxP0R@pFd;!W z@coK1I(P5q)koskg_CYk=USq}kwIUV_fJPSNG&iF52s@37(%fDa}wRZhzgef08ZgH zYJpZ@KNnaqDj0#uuxs@$BDiwynh@c_IXh9~0^62!Tj~j*2H$1t1!R3M-^1gzNCa^_ z1* zAK5YH$Vq}M3@*ivB-VE&azc^7PxAf1cWD6^$Z}sO0=R%LGy~`&CIJQ^A`0e8@btPE zd4UAKf!cewFEjzOV1s04BdO#Z1!Cpp^*^4BW4<-G6Ub>d(P~_0y zy41g1r@gnq=e1SPc=Q3%L4XM$1DwJ&e~k7;C7K9Tz;LEAVL zp0Z7XNL0U{28hJrv%&RK`7U5XofAS(^>cqA+Qf26cshX~J0CWIcCqN~6bh%>K!Q>r zL0f2oGySLqSUH4r%txH8r8^V>LaF{p!4K!qg;MMKnoS0q0JBgF$zTW!0*nF~-~`SJ zH%C!_9VDPR$c833-3ODyIGL05I7o0IlJ9ctY(j(z*|bM*d-X0`@ACY4j?yoK-9cPM z)Ep!qh%zx8;9gM=a3o(4Ie}!1c1;3-PkLi=Xb$oqC44%UuFFT_=*c~iCTl`DeYOPK zHr|g2`hA)Jz2N|o06h@_b;S3C2Ebwb<;?&HPzs|%UP8jjJ^)`xFdt16t~$L2+RoJ% zC9Ly{?R7}!QuDTSyU3uy=RPH$W{&nB(a$L)f}*!ausFO10a7rUfdprS1WXw(vdlp^ zO%Tf4w~I7>aeYyx+Xh=7^RpJf{*%<%7^6@chUo8v28ho7z~X=}?@=T;NprvukyW(0 z&;;TWgmUg8k^XSryte0&NVdMmj|juDXq3{=AFb+Nwk#hvHyj~g^#4LhamYXtKs~l^ znvif@97E>M=fEe>1sOjgxUzkA!bX>A!vSuSKtOic`X|xwA=hPp1rk6VVE0LYJ|IAc zQl(DA0erAHa}zV~!SDB^Ktl2w2LdM8TmdorU^uU)(u~x%WX6B)}xp&I<(IA_=@i z3N*n4G+GisJDppUT)rkiIHym%{-Q`f@0|y-vII;53;_WU-o6g?A3MKVS`v)qgBGX> zK!Srb2P6SAhGXDZiMo#@sS{59yBs*bm_D59C-|$;0o)(b?}fDZe}^LfkNt5m@q0ui z0lfVga18H(IXKKU2h;*gstiL_Z4JV#Q0d%AynfrUi^Q|n&YnyC&q2C3I~d6f2N7}- z5)MK7Z@CzA6BD0_$xFbv4H?6|L(y537xb*zUbOrRkgn6RpPjkhF7bLWH!I!z>V$V&?d_FY6tyo#{97)g&5=JMBk8hoakc&_1u!}ja zie9L6uAh3>QtndwyuJYW3g#_H%&y4#bxlq_0n#Fb0N^CY(M2 zNMRmDcahZKBk}J2vVE?Y-X?}E{mYTI?#!+q{2wjwKVf-XKFB$+M8A0a!~Q)3&;-|^ z!E{yE#Kf~$g>=5L1dbPN?g~7ZL1+Bz>|Z#q-!HEBJI|Icdi~5-kcdOhJAMn1^oibe zfL{kPB09JZ61S*JAdt@mC?tUA7eErJj*F@d{A|B%=PCU%2>wVc`|^@iBp^%^^8PQO z*C8JBUkZ|7qRYe1PUw)Fe0B($EhvE`0b8&};h5lsis`i(2q*a(cm zhU9m_a{^=LM<*`@z>)k7Xo4iz+YT*~lRp^>=L?A=j|2pzHJ76yE)SK-3m4Z*az_(j z8EO+$`vjj}e_#CFZi$IU;PKb`-&k7o5eYz-;vP7Hr7+S^cYmh`qJp*no@&{v#bbW} z5=W22ED%JO51@-UHd%xKlz0xB7cP92^fW7dJrff@0^u4Ug&i;TUJAfne}kF;B=`e> z*xw-`p@34!Mht2Kuc}B%1rg>WWL&Mvx8XuOk^JSzH;jY5XZY#$D_{)AarcyzFJXq# zYQ@rOpZ^xfk^EhdfMMcnc;crALQ;FeLDWQ`X6OVECn0R4MEk|{LX4G&Dkh_x+dimO z`2KE?`qB8@mPtvB_0tiW#xs49fODztfi@@yzaST29YAWfU^4pg#=~Lj47*Lqm5>bp zn*IQDGOCPoP{CV(u?S;61|R#%nnN4hLjrMWcQ3sEQAj=2KKc}1#NT)T;79k5M_nq= zO8W1B1c}fFl~{>`Hh8c5WtW|s3=+(RM9)IvhJ+XdGtmWLw!z>NKD%Lb=RQKo4$S3a zj0WISVE4JK3)-Xr6~3b|DHAbnMujhSR{54RK$r0I5+JF!0kEDJdk`X?Z3}6J?e=~H zXegwA7&OFiNc;$lAvo?2(3xB40s^#PjE_g&!0zwE7y?4!SLNfcZ`=$(8zg`LNdWMA zY^wpxCK!V-Mq!M{n1bTXB!rO@nxc6VrlKRxHN^NM2y_ibGC$)R_r>G?aC`>hGZ3GF t_zc8nAU*@}8Hmq7dicons/ic_nel_water.png icons/ic_nel_wind.png icons/ic_nel_workspace_item.png + icons/ic_nel_pill.png images/nel.png icons/particles_system_24/ic_nel_collision_zone_item_24.png icons/particles_system_24/ic_nel_emitter_item_24.png diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h index b5f9c2881..f0f23d398 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h @@ -74,7 +74,7 @@ public: virtual QIcon icon() const { - return QIcon(); + return QIcon(":/icons/ic_nel_pill.png"); } virtual QUndoStack *undoStack(); From de16eef8fa96403d61c75bef933968677b5df8d3 Mon Sep 17 00:00:00 2001 From: aquiles Date: Tue, 16 Aug 2011 20:48:24 +0200 Subject: [PATCH 38/60] Changed: #1306 small additions/bug fixed here and there for your viewing pleasure :) --- .../georges_editor/georges_dirtree_dialog.cpp | 25 ++++++------- .../georges_editor/georges_dirtree_dialog.h | 2 +- .../georges_editor/georges_editor_form.cpp | 37 ++++++++++++++++--- .../georges_editor/georges_editor_form.h | 1 + .../georges_editor/georges_editor_plugin.cpp | 5 ++- .../georges_filesystem_model.cpp | 34 +++++++++-------- .../georges_editor/georges_filesystem_model.h | 16 ++++---- .../georges_treeview_dialog.cpp | 36 ++++++++---------- .../georges_editor/georges_treeview_dialog.h | 5 ++- .../georges_editor/georgesform_model.cpp | 13 ++++--- 10 files changed, 102 insertions(+), 72 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp index 2a1151164..de7a105ab 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.cpp @@ -28,8 +28,7 @@ namespace Plugin CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent) :QDockWidget(parent), - m_ldPath(ldPath), - m_proxyModel(0) + m_ldPath(ldPath) { m_ui.setupUi(this); @@ -38,10 +37,10 @@ CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent) QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); m_dirModel = new CGeorgesFileSystemModel(m_ldPath); - m_proxyModel = new CGeorgesFileSystemProxyModel(this); + //m_proxyModel = new CGeorgesFileSystemProxyModel(this); - m_proxyModel->setSourceModel(m_dirModel); - m_ui.dirTree->setModel(m_proxyModel); + //m_proxyModel->setSourceModel(m_dirModel); + m_ui.dirTree->setModel(m_dirModel); // TODO: filtering in tree model is ... complicated - so hide it for now m_ui.filterLineEdit->hide(); @@ -51,7 +50,7 @@ CGeorgesDirTreeDialog::CGeorgesDirTreeDialog(QString ldPath, QWidget *parent) if (m_dirModel->isCorrectLDPath()) { m_dirModel->setRootPath(m_ldPath); - m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath))); + m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath)); } else { @@ -72,9 +71,9 @@ CGeorgesDirTreeDialog::~CGeorgesDirTreeDialog() void CGeorgesDirTreeDialog::fileSelected(QModelIndex index) { - if (index.isValid() && !m_dirModel->isDir(m_proxyModel->mapToSource(index))) + if (index.isValid() && !m_dirModel->isDir(index)) { - Q_EMIT selectedForm(m_dirModel->fileName(m_proxyModel->mapToSource(index))); + Q_EMIT selectedForm(m_dirModel->fileName(index)); } } @@ -91,18 +90,18 @@ void CGeorgesDirTreeDialog::ldPathChanged(QString path) m_ldPath = path; delete m_dirModel; - delete m_proxyModel; + //delete m_proxyModel; m_dirModel = new CGeorgesFileSystemModel(m_ldPath); - m_proxyModel = new CGeorgesFileSystemProxyModel(this); + //m_proxyModel = new CGeorgesFileSystemProxyModel(this); - m_proxyModel->setSourceModel(m_dirModel); - m_ui.dirTree->setModel(m_proxyModel); + //m_proxyModel->setSourceModel(m_dirModel); + m_ui.dirTree->setModel(m_dirModel); if (m_dirModel->isCorrectLDPath()) { m_dirModel->setRootPath(m_ldPath); - m_ui.dirTree->setRootIndex(m_proxyModel->mapFromSource(m_dirModel->index(m_ldPath))); + m_ui.dirTree->setRootIndex(m_dirModel->index(m_ldPath)); } else { diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h index d81897bf3..fa783bca0 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_dirtree_dialog.h @@ -45,7 +45,7 @@ private: Ui::CGeorgesDirTreeDialog m_ui; CGeorgesFileSystemModel *m_dirModel; - CGeorgesFileSystemProxyModel *m_proxyModel; + //CGeorgesFileSystemProxyModel *m_proxyModel; QString m_ldPath; Q_SIGNALS: diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp index 21aa6d8c6..c623d440b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp @@ -198,23 +198,48 @@ namespace Plugin { m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last()); + connect(m_dockedWidgets.last(), SIGNAL(closing()), + this, SLOT(closingTreeView())); } else { + + Q_FOREACH(QDockWidget *wgt, m_dockedWidgets) + { + if (info.fileName() == wgt->windowTitle()) + { + wgt->raise(); + return; + } + } m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + connect(m_dockedWidgets.last(), SIGNAL(closing()), + this, SLOT(closingTreeView())); Q_ASSERT(m_dockedWidgets.size() > 1); m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last()); } CForm *form = m_dockedWidgets.last()->getFormByName(info.fileName()); if (form) { - // delete newView; - // newView = createTreeView(fileName); - m_dockedWidgets.last()->setForm(form); - m_dockedWidgets.last()->loadFormIntoDialog(form); - //setCurrentFile(info.fileName()); - // return; + m_dockedWidgets.last()->setForm(form); + m_dockedWidgets.last()->loadFormIntoDialog(form); + QApplication::processEvents(); + m_dockedWidgets.last()->raise(); + connect(m_dockedWidgets.last(), SIGNAL(changeFile(QString)), + m_georgesDirTreeDialog, SLOT(changeFile(QString))); + } + else + { + m_dockedWidgets.last()->close(); } } + void GeorgesEditorForm::closingTreeView() + { + int i = m_dockedWidgets.size(); + m_dockedWidgets.removeAll(qobject_cast(sender())); + i = m_dockedWidgets.size(); + int j = i; + } + } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h index 9e938f62c..4ed91a5f6 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h @@ -44,6 +44,7 @@ public Q_SLOTS: void save(); void settingsChanged(); void loadFile(const QString fileName); + void closingTreeView(); private: void readSettings(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp index e6cad341d..9ea9ae5ff 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp @@ -90,8 +90,9 @@ QString GeorgesEditorPlugin::description() const QStringList GeorgesEditorPlugin::dependencies() const { QStringList list; - list.append(Core::Constants::OVQT_CORE_PLUGIN); - list.append("ObjectViewer"); // TODO + // TODO + //list.append(Core::Constants::OVQT_CORE_PLUGIN); + //list.append("ObjectViewer"); return list; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp index 796b3c457..4e021f681 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.cpp @@ -28,8 +28,10 @@ CGeorgesFileSystemModel::CGeorgesFileSystemModel(QString ldPath, QObject *parent m_correct(false) { checkLDPath(); - connect(this, SIGNAL(directoryLoaded(QString)), - this, SLOT(dir(const QString))); + + // this yielded no relevant performance boost on my observations + //connect(this, SIGNAL(directoryLoaded(QString)), + // this, SLOT(dir(const QString))); } CGeorgesFileSystemModel::~CGeorgesFileSystemModel() @@ -39,6 +41,8 @@ CGeorgesFileSystemModel::~CGeorgesFileSystemModel() void CGeorgesFileSystemModel::dir(const QString &dir) { + // in theory this should prefetch all directory entries for the + // filesystem model to speed up later work QModelIndex i = index(dir); if (hasChildren(i)) { @@ -117,18 +121,18 @@ void CGeorgesFileSystemModel::checkLDPath() // return (!indexNode->populatedChildren);*/ //} -CGeorgesFileSystemProxyModel::CGeorgesFileSystemProxyModel(QObject *parent) : QSortFilterProxyModel(parent) -{ - setFilterCaseSensitivity(Qt::CaseInsensitive); -} +//CGeorgesFileSystemProxyModel::CGeorgesFileSystemProxyModel(QObject *parent) : QSortFilterProxyModel(parent) +//{ +// setFilterCaseSensitivity(Qt::CaseInsensitive); +//} -bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const -{ +//bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +//{ // TODO this is not perfect as it could be // eg it should filter all dirs which have no entry - QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); - if (sourceModel()->hasChildren(idx)) - { + //QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); + //if (sourceModel()->hasChildren(idx)) + //{ // QString d = sourceModel()->data(idx).toString(); // //QModelIndex i = mapFromSource(source_parent); // //if (hasChildren(i)) { @@ -139,10 +143,10 @@ bool CGeorgesFileSystemProxyModel::filterAcceptsRow(int source_row, const QModel // bool test = filterAcceptsRow(c, child); // }*/ // } - return true; - } - return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); -} + // return true; + //} + //return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); +//} //QVariant CGeorgesFileSystemProxyModel::data ( const QModelIndex & index, int role ) const //{ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h index 8ee06b3ef..03eb5ecc2 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_filesystem_model.h @@ -61,18 +61,18 @@ private Q_SLOTS: // A modified QSortFilterProxyModel that always accepts the root nodes in the tree // so filtering is only done on the children. - class CGeorgesFileSystemProxyModel : public QSortFilterProxyModel - { - Q_OBJECT + //class CGeorgesFileSystemProxyModel : public QSortFilterProxyModel + //{ + // Q_OBJECT - public: - CGeorgesFileSystemProxyModel(QObject *parent = 0); + //public: + // CGeorgesFileSystemProxyModel(QObject *parent = 0); //QVariant data(const QModelIndex& index, int role) const ; - protected: - bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; - }; + //protected: + // bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; + //}; } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp index 2bcef52cb..09556a21a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp @@ -31,7 +31,7 @@ #include "georges.h" #include "georgesform_model.h" #include "georgesform_proxy_model.h" -//#include "formitem.h" +#include "formitem.h" //#include "formdelegate.h" using namespace NLMISC; @@ -72,7 +72,6 @@ namespace Plugin { //delete _ui.treeView->itemDelegateForColumn(1); delete m_form; - deleteLater(); //QSettings settings("RyzomCore", "GeorgesQt"); //settings.setValue("dirViewGeometry", saveGeometry()); } @@ -288,11 +287,18 @@ namespace Plugin void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index ) { // TODO: this is messy :( perhaps this can be done better - //CGeorgesFormProxyModel * mp = - // dynamic_cast(_ui.treeView->model()); - //CGeorgesFormModel *m = - // dynamic_cast(mp->sourceModel()); - //QModelIndex in = mp->mapToSource(index); + CGeorgesFormProxyModel * proxyModel = + dynamic_cast(m_ui.treeView->model()); + CGeorgesFormModel *model = + dynamic_cast(proxyModel->sourceModel()); + QModelIndex sourceIndex = proxyModel->mapToSource(index); + + CFormItem *item = model->getItem(sourceIndex); + + if (item->parent() && item->parent()->data(0) == "parents") + { + Q_EMIT changeFile(CPath::lookup(item->data(0).toString().toStdString(),false).c_str()); + } //// col containing additional stuff like icons //if (index.column() == 2) @@ -344,20 +350,8 @@ namespace Plugin void CGeorgesTreeViewDialog::closeEvent(QCloseEvent *event) { - /*if (Modules::mainWin().getEmptyView() == this) - { - event->ignore(); - } - else - { - if(Modules::mainWin().getTreeViewList().size() == 1) - { - Modules::mainWin().createEmptyView( - Modules::mainWin().getTreeViewList().takeFirst()); - } - Modules::mainWin().getTreeViewList().removeOne(this); - deleteLater(); - }*/ + Q_EMIT closing(); + deleteLater(); } void CGeorgesTreeViewDialog::filterRows() diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h index dee1216ca..9d4f02e5d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h @@ -64,13 +64,16 @@ namespace Plugin protected: void closeEvent(QCloseEvent *event); - Q_SIGNALS: + Q_SIGNALS: void changeFile(QString); void modified(bool); + void closing(); + public Q_SLOTS: void setForm(const CForm*); void loadFormIntoDialog(CForm *form = 0); void modifiedFile( ); + private Q_SLOTS: void doubleClicked ( const QModelIndex & index ); void filterRows(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp index 234c2d169..0ec8f785a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp @@ -573,12 +573,15 @@ namespace Plugin void CGeorgesFormModel::loadFormHeader() { - CFormItem *fi_pars = new CFormItem(m_rootElm, QList() << "parents", m_rootItem); - m_rootItem->appendChild(fi_pars); - - Q_FOREACH(QString str, m_parents) + if (m_parents.size()) { - fi_pars->appendChild(new CFormItem(m_rootElm, QList() << str, fi_pars)); + CFormItem *fi_pars = new CFormItem(m_rootElm, QList() << "parents" << "" << "", m_rootItem); + m_rootItem->appendChild(fi_pars); + + Q_FOREACH(QString str, m_parents) + { + fi_pars->appendChild(new CFormItem(m_rootElm, QList() << str << "" << "", fi_pars)); + } } /*QStringList dfns = _dependencies["dfn"]; From f43774765d3e0ade14780ed391b35f425c78aab0 Mon Sep 17 00:00:00 2001 From: sfb Date: Fri, 19 Aug 2011 07:50:05 -0500 Subject: [PATCH 39/60] Changed: Turned off zone painter, fixed nelns and snowballs CMake builds for gcc 4.4.3 --- code/CMakeLists.txt | 4 +- .../src/plugins/CMakeLists.txt | 8 +- code/nelns/CMakeLists.txt | 28 +- .../admin_executor_service/log_report.cpp | 1161 +++++++++-------- .../nel_launcher_qt/CMakeLists.txt | 77 +- code/snowballs2/CMakeLists.txt | 170 +-- code/snowballs2/CMakePackaging.txt | 113 ++ 7 files changed, 765 insertions(+), 796 deletions(-) create mode 100644 code/snowballs2/CMakePackaging.txt diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 630ff4414..4d429e693 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -143,11 +143,11 @@ IF(WITH_RYZOM) ENDIF(WITH_RYZOM) IF(WITH_NELNS) -# ADD_SUBDIRECTORY(nelns) + ADD_SUBDIRECTORY(nelns) ENDIF(WITH_NELNS) IF(WITH_SNOWBALLS) -# ADD_SUBDIRECTORY(snowballs2) + ADD_SUBDIRECTORY(snowballs2) ENDIF(WITH_SNOWBALLS) IF(WITH_TOOLS) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt index 66cbdb188..3babfdab1 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt @@ -1,14 +1,16 @@ ADD_SUBDIRECTORY(core) ADD_SUBDIRECTORY(example) ADD_SUBDIRECTORY(ovqt_sheet_builder) -ADD_SUBDIRECTORY(landscape_editor) +ADD_SUBDIRECTORY(landscape_editor) ADD_SUBDIRECTORY(log) ADD_SUBDIRECTORY(disp_sheet_id) ADD_SUBDIRECTORY(object_viewer) -ADD_SUBDIRECTORY(zone_painter) ADD_SUBDIRECTORY(georges_editor) +# Note: Temporarily disabled until development continues. +#ADD_SUBDIRECTORY(zone_painter) + # Ryzom Specific Plugins IF(WITH_RYZOM AND WITH_RYZOM_TOOLS) ADD_SUBDIRECTORY(mission_compiler) -ENDIF(WITH_RYZOM AND WITH_RYZOM_TOOLS) \ No newline at end of file +ENDIF(WITH_RYZOM AND WITH_RYZOM_TOOLS) diff --git a/code/nelns/CMakeLists.txt b/code/nelns/CMakeLists.txt index 9a8402fac..63916ba08 100644 --- a/code/nelns/CMakeLists.txt +++ b/code/nelns/CMakeLists.txt @@ -1,14 +1,14 @@ -FIND_PACKAGE(MySQL) -FIND_PACKAGE(CURL) - -IF(BUILD_SERVICES) - ADD_SUBDIRECTORY(admin_executor_service) - ADD_SUBDIRECTORY(admin_service) - ADD_SUBDIRECTORY(naming_service) - ADD_SUBDIRECTORY(login_service) - ADD_SUBDIRECTORY(welcome_service) -ENDIF(BUILD_SERVICES) - -IF(BUILD_LOGIN_SYSTEM) - ADD_SUBDIRECTORY(login_system) -ENDIF(BUILD_LOGIN_SYSTEM) +FIND_PACKAGE(MySQL) +FIND_PACKAGE(CURL) + +IF(WITH_NELNS_SERVER) + ADD_SUBDIRECTORY(admin_executor_service) + ADD_SUBDIRECTORY(admin_service) + ADD_SUBDIRECTORY(naming_service) + ADD_SUBDIRECTORY(login_service) + ADD_SUBDIRECTORY(welcome_service) +ENDIF(WITH_NELNS_SERVER) + +IF(WITH_NELNS_LOGIN_SYSTEM) + ADD_SUBDIRECTORY(login_system) +ENDIF(WITH_NELNS_LOGIN_SYSTEM) diff --git a/code/nelns/admin_executor_service/log_report.cpp b/code/nelns/admin_executor_service/log_report.cpp index eac5f83c3..7106fb9d1 100644 --- a/code/nelns/admin_executor_service/log_report.cpp +++ b/code/nelns/admin_executor_service/log_report.cpp @@ -1,580 +1,581 @@ -// NeLNS - MMORPG Framework -// 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 . - -#include "log_report.h" -#include -#include "nel/misc/common.h" -#include "nel/misc/displayer.h" -#include "nel/misc/file.h" -#include "nel/misc/path.h" -#include "nel/misc/variable.h" - -using namespace NLMISC; -using namespace std; - - -CVariable LogPath( "LogReport","LogPath", "Path of the log files", ".", 0, true ); - -const uint MAX_LOG_LINE_SIZE = 1024; -//nlctassert(MAX_LOG_LINE_SIZE>0); - -enum TLogLineHeader { LHDate, LHTime, LHType, LHThread, LHService, LHCodeFile, LHCodeLine, LHSeparator, LH_NB_FIELDS }; - - -/// -bool isLogFile( const std::string& filename ) -{ - uint len = (uint)filename.size(); - return (len >= 4 ) && (filename.substr( len-4 ) == ".log"); -} - -/// -inline bool isNumberChar( char c ) -{ - return (c >= '0') && (c <= '9'); -} - -/// -void sortLogFiles( vector& filenames ) -{ - uint i; - for ( i=0; i!=filenames.size(); ++i ) - { - // Ensure that a log file without number comes *after* the ones with a number - string name = string(filenames[i]); - string::size_type dotpos = name.find_last_of('.'); - if ( (dotpos!=string::npos) && (dotpos > 2) ) - { - if ( ! (isNumberChar(name[dotpos-1]) && isNumberChar(name[dotpos-2]) && isNumberChar(name[dotpos-3])) ) - { - name = name.substr( 0, dotpos ) + "ZZZ" + name.substr( dotpos ); - filenames[i] = name.c_str(); - } - } - } - sort( filenames.begin(), filenames.end() ); - for ( i=0; i!=filenames.size(); ++i ) - { - // Set the original names back - string name = filenames[i]; - string::size_type tokenpos = name.find( "ZZZ." ); - if ( tokenpos != string::npos ) - { - name = name.substr( 0, tokenpos ) + name.substr( tokenpos + 3 ); - filenames[i] = name.c_str(); - } - } -} - -void CMakeLogTask::setLogPath(const std::string & logPath) -{ - _LogPaths.resize( 1 ); - _LogPaths[0] = logPath; -} - -void CMakeLogTask::setLogPaths(const std::vector& logPaths) -{ - _LogPaths = logPaths; -} - -void CMakeLogTask::setLogPathToDefault() -{ - setLogPath( LogPath.get() ); -} - -/* - * - */ -CMakeLogTask::~CMakeLogTask() -{ - if ( _Thread ) // implies && _OutputLogReport - { - if ( ! _Complete ) - { - pleaseStop(); - _Thread->wait(); - } - clear(); - } -} - - -/* - * - */ -void CMakeLogTask::start() -{ - if ( _Thread ) - { - if ( _Complete ) - clear(); - else - return; - } - _Stopping = false; - _Complete = false; - _Thread = NLMISC::IThread::create( this ); - _OutputLogReport = new CLogReport(); - _Thread->start(); -} - - -/* - * - */ -void CMakeLogTask::clear() -{ - if (_Thread) - { - delete _Thread; - _Thread = NULL; - } - if (_OutputLogReport) - { - delete _OutputLogReport; - _OutputLogReport = NULL; - } -} - -/* - * - */ -void CMakeLogTask::terminateTask() -{ - if (!_Thread) // _Thread _implies _OutputLogReport - return; - - pleaseStop(); - _Thread->wait(); - - clear(); -} - -// -bool isOfLogDotLogFamily( const std::string& filename ) -{ - return ((filename == "log.log") || - ((filename.size() == 10) && - (filename.substr( 0, 3 ) == "log") && - isNumberChar(filename[3]) && isNumberChar(filename[4]) && isNumberChar(filename[5]) && - (filename.substr( 6, 4 ) == ".log")) ); -} - - -enum TVersionTargetMode { TTMAll, TTMMatchAllV, TTMMatchExactV, TTMMatchGreaterV, TTMMatchLowerV } targetMode; -const uint CurrentVersion = std::numeric_limits::max(); - -// Return true and logVersion, or false if not a log with version -bool getLogVersion( const std::string& filename, uint& logVersion ) -{ - uint len = (uint)filename.size(); - if ( (len > 4) && (filename.substr( len-4 ) == ".log") ) - { - if ( filename.substr(0, 3) == "log" ) - { - if ( (len == 7) || - ((len == 10) && (isNumberChar(filename[3]) && isNumberChar(filename[4]) && isNumberChar(filename[5]))) ) - { - logVersion = CurrentVersion; - return true; - } - } - else if ( filename[0] == 'v' ) - { - string::size_type p = filename.find( "_", 1 ); - if ( p != string::npos ) - { - if ( (len == p + 8) || - ((len == p + 11) && (isNumberChar(filename[p+4]) && isNumberChar(filename[p+5]) && isNumberChar(filename[p+6]))) ) - { - NLMISC::fromString( filename.substr( 1, p-1 ), logVersion ); - return true; - } - } - } - } - return false; -} - -// Assumes filename is .log file -bool matchLogTarget( const std::string& filename, TVersionTargetMode targetMode, uint targetVersion ) -{ - if ( targetMode == TTMAll ) - return true; - - uint version; - - // Get version or exclude non-standard log files - if ( ! getLogVersion( filename, version ) ) - return false; - - // Exclude non-matching version - switch ( targetMode ) - { - case TTMMatchExactV: - return (version == targetVersion); // break; - case TTMMatchGreaterV: - return (version >= targetVersion); // break; - case TTMMatchLowerV: - return (version <= targetVersion); // break; - default: // TTMMatchAllV - return true; - } -} - -/* - * - */ -void CMakeLogTask::run() -{ - // Parse log target - uint targetVersion = CurrentVersion; - uint lts = (uint)_LogTarget.size(); - if ( _LogTarget.empty() || (_LogTarget == "v") ) - { - targetMode = TTMMatchExactV; - } - else if ( _LogTarget == "v*" ) - { - targetMode = TTMMatchAllV; - } - else if ( _LogTarget == "*" ) - { - targetMode = TTMAll; - } - else if ( (lts > 1) && (_LogTarget[0] == 'v') ) - { - uint additionalChars = 1; - if ( _LogTarget[lts-1] == '+' ) - targetMode = TTMMatchGreaterV; - else if ( _LogTarget[lts-1] == '-' ) - targetMode = TTMMatchLowerV; - else - { - targetMode = TTMMatchExactV; - additionalChars = 0; - } - - NLMISC::fromString( _LogTarget.substr( 1, lts-additionalChars-1 ), targetVersion ); - } - else - { - nlwarning( "Invalid log target argument: %s", _LogTarget.c_str() ); - _Complete = true; - return; - } - - // Get log files and sort them - vector filenames; - vector filenamesOfPath; - for ( vector::const_iterator ilf=_LogPaths.begin(); ilf!=_LogPaths.end(); ++ilf ) - { - string path = (*ilf); - if ( (! path.empty()) && (path[path.size()-1]!='/') ) - path += "/"; - filenamesOfPath.clear(); - CPath::getPathContent( path, false, false, true, filenamesOfPath, NULL, true ); - vector::iterator ilf2 = partition( filenamesOfPath.begin(), filenamesOfPath.end(), isLogFile ); - filenamesOfPath.erase( ilf2, filenamesOfPath.end() ); - sortLogFiles( filenamesOfPath ); - filenames.insert( filenames.end(), filenamesOfPath.begin(), filenamesOfPath.end() ); - } - - // Analyse log files - _OutputLogReport->reset(); - uint nbLines = 0; - char line [MAX_LOG_LINE_SIZE]; - - uint nbSkippedFiles = 0; - for ( vector::const_iterator ilf=filenames.begin(); ilf!=filenames.end(); ++ilf ) - { - string shortname = CFile::getFilename( *ilf ); - - // Filter log files based on filename before opening them - if ( ! matchLogTarget( shortname, targetMode, targetVersion ) ) - { - ++nbSkippedFiles; - continue; - } - - nlinfo( "Processing %s (%u/%u)", (*ilf).c_str(), ilf-filenames.begin(), filenames.size() ); - CIFile logfile; - if ( logfile.open( *ilf, true ) ) - { - _OutputLogReport->setProgress( (uint)(ilf-filenames.begin()), (uint)filenames.size() ); - while ( ! logfile.eof() ) - { - logfile.getline( line, MAX_LOG_LINE_SIZE ); - line[MAX_LOG_LINE_SIZE-1] = '\0'; // force valid end of line - _OutputLogReport->pushLine( line ); - ++nbLines; - - if ( isStopping() ) - return; - } - } - } - nlinfo( "%u lines processed", nbLines ); - if ( nbSkippedFiles != 0 ) - nlinfo( "%u log files skipped, not matching target %s", nbSkippedFiles, _LogTarget.c_str() ); - _Complete = true; -} - - -/* - * Add a log line to the report tree - */ -void CLogReport::pushLine( const std::string& line, NLMISC::CLog::TLogType onlyType, bool countOtherTypes ) -{ - // Ignore session title - if ( (line.size() > 14) && (line.substr( 0, 14 ) == "Log Starting [") ) - return; - - // Decode standard log line - vector lineTokens; - explode( line, string(" "), lineTokens ); - - if ( lineTokens.size() < LH_NB_FIELDS ) - return; - - // Filter log type - if ( onlyType != CLog::LOG_UNKNOWN ) - { - if ( lineTokens[LHType] != IDisplayer::logTypeToString( onlyType ) ) - { - if ( countOtherTypes ) - storeLine( lineTokens, true ); - return; - } - } - - // Store - storeLine( lineTokens, false ); -} - - -/* - * - */ -void CLogReportNode::storeLine( const std::vector& lineTokens, bool mainCountOnly ) -{ - // Get service name from "[machine/]serviceName-serviceId" - string service = lineTokens[LHService]; - string::size_type p = service.find( '/' ); - if ( p != string::npos ) - service = service.substr( p+1 ); - p = service.find( '-' ); - if ( p != string::npos ) - service = service.substr( 0, p ); - - // Store to appropriate child - CLogReportLeaf *child = getChild( service ); - if ( ! child ) - child = addChild( service ); - child->storeLine( lineTokens, mainCountOnly ); -} - - -/* - * - */ -void CLogReportLeaf::storeLine( const std::vector& lineTokens, bool mainCountOnly ) -{ - if ( ! mainCountOnly ) - { - // Build key from "codeFile codeLine" - string key = lineTokens[LHCodeFile] + ":" + lineTokens[LHCodeLine]; - _LogLineInfo[key].addAnOccurence( lineTokens ); - } - ++_Counts[lineTokens[LHType]]; - ++_TotalLines; -} - - -/* - * - */ -void CLogLineInfo::addAnOccurence( const std::vector& lineTokens ) -{ - if ( NbOccurences == 0 ) - { - for ( uint i=LH_NB_FIELDS; ireport( targetLog, true ); - } - else - { - targetLog->displayNL( "Nothing found for service %s", service.c_str() ); - } -} - - -/* - * Get results for a service (all distinct lines, sorted by occurence) - */ -void CLogReportLeaf::report( NLMISC::CLog *targetLog, bool ) -{ - // Sort it - typedef multimap< uint, pair< string, const CLogLineInfo * >, std::greater > CSortedByOccurenceLogLineInfoMap; - CSortedByOccurenceLogLineInfoMap sortedByOccurence; - for ( CLogLineInfoMap::const_iterator it=_LogLineInfo.begin(); it!=_LogLineInfo.end(); ++it ) - { - const string &key = (*it).first; - const CLogLineInfo& info = (*it).second; - sortedByOccurence.insert( make_pair( info.NbOccurences, make_pair( key, &info ) ) ); - } - - // Display it - for ( CSortedByOccurenceLogLineInfoMap::const_iterator iso=sortedByOccurence.begin(); iso!=sortedByOccurence.end(); ++iso ) - { - const string &key = (*iso).second.first; - const CLogLineInfo& info = *((*iso).second.second); - targetLog->displayRawNL( "%s %6u %s : %s", _Service.c_str(), info.NbOccurences, key.c_str(), info.SampleLogText.c_str() ); - } -} - - -/* - * Return the number of lines displayed - */ -uint CLogReportLeaf::reportPart( uint beginIndex, uint maxNbLines, NLMISC::CLog *targetLog ) -{ - uint i = 0; - CLogLineInfoMap::const_iterator it; - for ( it=_LogLineInfo.begin(); it!=_LogLineInfo.end(); ++it ) - { - if ( i >= beginIndex ) - { - if ( i >= maxNbLines ) - return i - beginIndex; - - const string &key = (*it).first; - const CLogLineInfo& info = (*it).second; - targetLog->displayRawNL( "%s %6u %s : %s", _Service.c_str(), info.NbOccurences, key.c_str(), info.SampleLogText.c_str() ); - } - ++i; - } - return i - beginIndex; -} - - -/* - * Get summary of results - */ -void CLogReportNode::report( NLMISC::CLog *targetLog, bool displayDetailsPerService ) -{ - uint nb1Sum=0, nb2Sum=0; - for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) - { - CLogReportLeaf *pt = (*it); - - // Get distinct warnings - uint nb1 = pt->getNbDistinctLines(); - nb1Sum += nb1; - - // Get total warnings, info... but filter out lines with no header - uint sumTotalLinesNotUnknown = 0; - uint nbTotalLines [CLog::LOG_UNKNOWN]; - for ( uint i=CLog::LOG_ERROR; i!=CLog::LOG_UNKNOWN; ++i ) - { - nbTotalLines[i] = pt->getNbTotalLines( (CLog::TLogType)i ); - sumTotalLinesNotUnknown += nbTotalLines[i]; - } - if ( sumTotalLinesNotUnknown != 0 ) - { - targetLog->displayRawNL( "%s: \t%u distinct WRN, %u total WRN, %u INF, %u DBG, %u STT, %u AST, %u ERR, %u TOTAL", - pt->service().c_str(), nb1, nbTotalLines[CLog::LOG_WARNING], - nbTotalLines[CLog::LOG_INFO], nbTotalLines[CLog::LOG_DEBUG], - nbTotalLines[CLog::LOG_STAT], nbTotalLines[CLog::LOG_ASSERT], - nbTotalLines[CLog::LOG_ERROR], pt->getNbTotalLines( CLog::LOG_UNKNOWN ) ); - nb2Sum += nbTotalLines[CLog::LOG_WARNING]; - } - } - targetLog->displayRawNL( "=> %u distinct, %u total WRN (%u pages)", nb1Sum, nb2Sum, nb1Sum / NB_LINES_PER_PAGE + 1 ); - - if ( displayDetailsPerService ) - { - for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) - { - (*it)->report( targetLog, true ); - } - } -} - - -/* - * Get partial results (pageNum>=1) - */ -void CLogReportNode::reportPage( uint pageNum, NLMISC::CLog *targetLog ) -{ - if ( _Children.empty() ) - { - targetLog->displayRawNL( "[END OF LOG]" ); - return; - } - - uint beginIndex = pageNum * NB_LINES_PER_PAGE; - uint lineCounter = 0, prevLineCounter; - for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) - { - CLogReportLeaf *pt = (*it); - prevLineCounter = lineCounter; - lineCounter += pt->getNbDistinctLines(); - if ( lineCounter >= beginIndex ) - { - uint remainingLines = pageNum - (lineCounter - beginIndex ); - pt->reportPart( beginIndex - prevLineCounter, remainingLines, targetLog ); // - while ( remainingLines != 0 ) - { - ++it; - if ( it == _Children.end() ) - { - targetLog->displayRawNL( "[END OF LOG]" ); - return; - } - pt = (*it); - remainingLines -= pt->reportPart( 0, remainingLines, targetLog ); - } - return; - } - } -} +// NeLNS - MMORPG Framework +// 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 . + +#include "log_report.h" +#include +#include +#include "nel/misc/common.h" +#include "nel/misc/displayer.h" +#include "nel/misc/file.h" +#include "nel/misc/path.h" +#include "nel/misc/variable.h" + +using namespace NLMISC; +using namespace std; + + +CVariable LogPath( "LogReport","LogPath", "Path of the log files", ".", 0, true ); + +const uint MAX_LOG_LINE_SIZE = 1024; +//nlctassert(MAX_LOG_LINE_SIZE>0); + +enum TLogLineHeader { LHDate, LHTime, LHType, LHThread, LHService, LHCodeFile, LHCodeLine, LHSeparator, LH_NB_FIELDS }; + + +/// +bool isLogFile( const std::string& filename ) +{ + uint len = (uint)filename.size(); + return (len >= 4 ) && (filename.substr( len-4 ) == ".log"); +} + +/// +inline bool isNumberChar( char c ) +{ + return (c >= '0') && (c <= '9'); +} + +/// +void sortLogFiles( vector& filenames ) +{ + uint i; + for ( i=0; i!=filenames.size(); ++i ) + { + // Ensure that a log file without number comes *after* the ones with a number + string name = string(filenames[i]); + string::size_type dotpos = name.find_last_of('.'); + if ( (dotpos!=string::npos) && (dotpos > 2) ) + { + if ( ! (isNumberChar(name[dotpos-1]) && isNumberChar(name[dotpos-2]) && isNumberChar(name[dotpos-3])) ) + { + name = name.substr( 0, dotpos ) + "ZZZ" + name.substr( dotpos ); + filenames[i] = name.c_str(); + } + } + } + sort( filenames.begin(), filenames.end() ); + for ( i=0; i!=filenames.size(); ++i ) + { + // Set the original names back + string name = filenames[i]; + string::size_type tokenpos = name.find( "ZZZ." ); + if ( tokenpos != string::npos ) + { + name = name.substr( 0, tokenpos ) + name.substr( tokenpos + 3 ); + filenames[i] = name.c_str(); + } + } +} + +void CMakeLogTask::setLogPath(const std::string & logPath) +{ + _LogPaths.resize( 1 ); + _LogPaths[0] = logPath; +} + +void CMakeLogTask::setLogPaths(const std::vector& logPaths) +{ + _LogPaths = logPaths; +} + +void CMakeLogTask::setLogPathToDefault() +{ + setLogPath( LogPath.get() ); +} + +/* + * + */ +CMakeLogTask::~CMakeLogTask() +{ + if ( _Thread ) // implies && _OutputLogReport + { + if ( ! _Complete ) + { + pleaseStop(); + _Thread->wait(); + } + clear(); + } +} + + +/* + * + */ +void CMakeLogTask::start() +{ + if ( _Thread ) + { + if ( _Complete ) + clear(); + else + return; + } + _Stopping = false; + _Complete = false; + _Thread = NLMISC::IThread::create( this ); + _OutputLogReport = new CLogReport(); + _Thread->start(); +} + + +/* + * + */ +void CMakeLogTask::clear() +{ + if (_Thread) + { + delete _Thread; + _Thread = NULL; + } + if (_OutputLogReport) + { + delete _OutputLogReport; + _OutputLogReport = NULL; + } +} + +/* + * + */ +void CMakeLogTask::terminateTask() +{ + if (!_Thread) // _Thread _implies _OutputLogReport + return; + + pleaseStop(); + _Thread->wait(); + + clear(); +} + +// +bool isOfLogDotLogFamily( const std::string& filename ) +{ + return ((filename == "log.log") || + ((filename.size() == 10) && + (filename.substr( 0, 3 ) == "log") && + isNumberChar(filename[3]) && isNumberChar(filename[4]) && isNumberChar(filename[5]) && + (filename.substr( 6, 4 ) == ".log")) ); +} + + +enum TVersionTargetMode { TTMAll, TTMMatchAllV, TTMMatchExactV, TTMMatchGreaterV, TTMMatchLowerV } targetMode; +const uint CurrentVersion = std::numeric_limits::max(); + +// Return true and logVersion, or false if not a log with version +bool getLogVersion( const std::string& filename, uint& logVersion ) +{ + uint len = (uint)filename.size(); + if ( (len > 4) && (filename.substr( len-4 ) == ".log") ) + { + if ( filename.substr(0, 3) == "log" ) + { + if ( (len == 7) || + ((len == 10) && (isNumberChar(filename[3]) && isNumberChar(filename[4]) && isNumberChar(filename[5]))) ) + { + logVersion = CurrentVersion; + return true; + } + } + else if ( filename[0] == 'v' ) + { + string::size_type p = filename.find( "_", 1 ); + if ( p != string::npos ) + { + if ( (len == p + 8) || + ((len == p + 11) && (isNumberChar(filename[p+4]) && isNumberChar(filename[p+5]) && isNumberChar(filename[p+6]))) ) + { + NLMISC::fromString( filename.substr( 1, p-1 ), logVersion ); + return true; + } + } + } + } + return false; +} + +// Assumes filename is .log file +bool matchLogTarget( const std::string& filename, TVersionTargetMode targetMode, uint targetVersion ) +{ + if ( targetMode == TTMAll ) + return true; + + uint version; + + // Get version or exclude non-standard log files + if ( ! getLogVersion( filename, version ) ) + return false; + + // Exclude non-matching version + switch ( targetMode ) + { + case TTMMatchExactV: + return (version == targetVersion); // break; + case TTMMatchGreaterV: + return (version >= targetVersion); // break; + case TTMMatchLowerV: + return (version <= targetVersion); // break; + default: // TTMMatchAllV + return true; + } +} + +/* + * + */ +void CMakeLogTask::run() +{ + // Parse log target + uint targetVersion = CurrentVersion; + uint lts = (uint)_LogTarget.size(); + if ( _LogTarget.empty() || (_LogTarget == "v") ) + { + targetMode = TTMMatchExactV; + } + else if ( _LogTarget == "v*" ) + { + targetMode = TTMMatchAllV; + } + else if ( _LogTarget == "*" ) + { + targetMode = TTMAll; + } + else if ( (lts > 1) && (_LogTarget[0] == 'v') ) + { + uint additionalChars = 1; + if ( _LogTarget[lts-1] == '+' ) + targetMode = TTMMatchGreaterV; + else if ( _LogTarget[lts-1] == '-' ) + targetMode = TTMMatchLowerV; + else + { + targetMode = TTMMatchExactV; + additionalChars = 0; + } + + NLMISC::fromString( _LogTarget.substr( 1, lts-additionalChars-1 ), targetVersion ); + } + else + { + nlwarning( "Invalid log target argument: %s", _LogTarget.c_str() ); + _Complete = true; + return; + } + + // Get log files and sort them + vector filenames; + vector filenamesOfPath; + for ( vector::const_iterator ilf=_LogPaths.begin(); ilf!=_LogPaths.end(); ++ilf ) + { + string path = (*ilf); + if ( (! path.empty()) && (path[path.size()-1]!='/') ) + path += "/"; + filenamesOfPath.clear(); + CPath::getPathContent( path, false, false, true, filenamesOfPath, NULL, true ); + vector::iterator ilf2 = partition( filenamesOfPath.begin(), filenamesOfPath.end(), isLogFile ); + filenamesOfPath.erase( ilf2, filenamesOfPath.end() ); + sortLogFiles( filenamesOfPath ); + filenames.insert( filenames.end(), filenamesOfPath.begin(), filenamesOfPath.end() ); + } + + // Analyse log files + _OutputLogReport->reset(); + uint nbLines = 0; + char line [MAX_LOG_LINE_SIZE]; + + uint nbSkippedFiles = 0; + for ( vector::const_iterator ilf=filenames.begin(); ilf!=filenames.end(); ++ilf ) + { + string shortname = CFile::getFilename( *ilf ); + + // Filter log files based on filename before opening them + if ( ! matchLogTarget( shortname, targetMode, targetVersion ) ) + { + ++nbSkippedFiles; + continue; + } + + nlinfo( "Processing %s (%u/%u)", (*ilf).c_str(), ilf-filenames.begin(), filenames.size() ); + CIFile logfile; + if ( logfile.open( *ilf, true ) ) + { + _OutputLogReport->setProgress( (uint)(ilf-filenames.begin()), (uint)filenames.size() ); + while ( ! logfile.eof() ) + { + logfile.getline( line, MAX_LOG_LINE_SIZE ); + line[MAX_LOG_LINE_SIZE-1] = '\0'; // force valid end of line + _OutputLogReport->pushLine( line ); + ++nbLines; + + if ( isStopping() ) + return; + } + } + } + nlinfo( "%u lines processed", nbLines ); + if ( nbSkippedFiles != 0 ) + nlinfo( "%u log files skipped, not matching target %s", nbSkippedFiles, _LogTarget.c_str() ); + _Complete = true; +} + + +/* + * Add a log line to the report tree + */ +void CLogReport::pushLine( const std::string& line, NLMISC::CLog::TLogType onlyType, bool countOtherTypes ) +{ + // Ignore session title + if ( (line.size() > 14) && (line.substr( 0, 14 ) == "Log Starting [") ) + return; + + // Decode standard log line + vector lineTokens; + explode( line, string(" "), lineTokens ); + + if ( lineTokens.size() < LH_NB_FIELDS ) + return; + + // Filter log type + if ( onlyType != CLog::LOG_UNKNOWN ) + { + if ( lineTokens[LHType] != IDisplayer::logTypeToString( onlyType ) ) + { + if ( countOtherTypes ) + storeLine( lineTokens, true ); + return; + } + } + + // Store + storeLine( lineTokens, false ); +} + + +/* + * + */ +void CLogReportNode::storeLine( const std::vector& lineTokens, bool mainCountOnly ) +{ + // Get service name from "[machine/]serviceName-serviceId" + string service = lineTokens[LHService]; + string::size_type p = service.find( '/' ); + if ( p != string::npos ) + service = service.substr( p+1 ); + p = service.find( '-' ); + if ( p != string::npos ) + service = service.substr( 0, p ); + + // Store to appropriate child + CLogReportLeaf *child = getChild( service ); + if ( ! child ) + child = addChild( service ); + child->storeLine( lineTokens, mainCountOnly ); +} + + +/* + * + */ +void CLogReportLeaf::storeLine( const std::vector& lineTokens, bool mainCountOnly ) +{ + if ( ! mainCountOnly ) + { + // Build key from "codeFile codeLine" + string key = lineTokens[LHCodeFile] + ":" + lineTokens[LHCodeLine]; + _LogLineInfo[key].addAnOccurence( lineTokens ); + } + ++_Counts[lineTokens[LHType]]; + ++_TotalLines; +} + + +/* + * + */ +void CLogLineInfo::addAnOccurence( const std::vector& lineTokens ) +{ + if ( NbOccurences == 0 ) + { + for ( uint i=LH_NB_FIELDS; ireport( targetLog, true ); + } + else + { + targetLog->displayNL( "Nothing found for service %s", service.c_str() ); + } +} + + +/* + * Get results for a service (all distinct lines, sorted by occurence) + */ +void CLogReportLeaf::report( NLMISC::CLog *targetLog, bool ) +{ + // Sort it + typedef multimap< uint, pair< string, const CLogLineInfo * >, std::greater > CSortedByOccurenceLogLineInfoMap; + CSortedByOccurenceLogLineInfoMap sortedByOccurence; + for ( CLogLineInfoMap::const_iterator it=_LogLineInfo.begin(); it!=_LogLineInfo.end(); ++it ) + { + const string &key = (*it).first; + const CLogLineInfo& info = (*it).second; + sortedByOccurence.insert( make_pair( info.NbOccurences, make_pair( key, &info ) ) ); + } + + // Display it + for ( CSortedByOccurenceLogLineInfoMap::const_iterator iso=sortedByOccurence.begin(); iso!=sortedByOccurence.end(); ++iso ) + { + const string &key = (*iso).second.first; + const CLogLineInfo& info = *((*iso).second.second); + targetLog->displayRawNL( "%s %6u %s : %s", _Service.c_str(), info.NbOccurences, key.c_str(), info.SampleLogText.c_str() ); + } +} + + +/* + * Return the number of lines displayed + */ +uint CLogReportLeaf::reportPart( uint beginIndex, uint maxNbLines, NLMISC::CLog *targetLog ) +{ + uint i = 0; + CLogLineInfoMap::const_iterator it; + for ( it=_LogLineInfo.begin(); it!=_LogLineInfo.end(); ++it ) + { + if ( i >= beginIndex ) + { + if ( i >= maxNbLines ) + return i - beginIndex; + + const string &key = (*it).first; + const CLogLineInfo& info = (*it).second; + targetLog->displayRawNL( "%s %6u %s : %s", _Service.c_str(), info.NbOccurences, key.c_str(), info.SampleLogText.c_str() ); + } + ++i; + } + return i - beginIndex; +} + + +/* + * Get summary of results + */ +void CLogReportNode::report( NLMISC::CLog *targetLog, bool displayDetailsPerService ) +{ + uint nb1Sum=0, nb2Sum=0; + for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) + { + CLogReportLeaf *pt = (*it); + + // Get distinct warnings + uint nb1 = pt->getNbDistinctLines(); + nb1Sum += nb1; + + // Get total warnings, info... but filter out lines with no header + uint sumTotalLinesNotUnknown = 0; + uint nbTotalLines [CLog::LOG_UNKNOWN]; + for ( uint i=CLog::LOG_ERROR; i!=CLog::LOG_UNKNOWN; ++i ) + { + nbTotalLines[i] = pt->getNbTotalLines( (CLog::TLogType)i ); + sumTotalLinesNotUnknown += nbTotalLines[i]; + } + if ( sumTotalLinesNotUnknown != 0 ) + { + targetLog->displayRawNL( "%s: \t%u distinct WRN, %u total WRN, %u INF, %u DBG, %u STT, %u AST, %u ERR, %u TOTAL", + pt->service().c_str(), nb1, nbTotalLines[CLog::LOG_WARNING], + nbTotalLines[CLog::LOG_INFO], nbTotalLines[CLog::LOG_DEBUG], + nbTotalLines[CLog::LOG_STAT], nbTotalLines[CLog::LOG_ASSERT], + nbTotalLines[CLog::LOG_ERROR], pt->getNbTotalLines( CLog::LOG_UNKNOWN ) ); + nb2Sum += nbTotalLines[CLog::LOG_WARNING]; + } + } + targetLog->displayRawNL( "=> %u distinct, %u total WRN (%u pages)", nb1Sum, nb2Sum, nb1Sum / NB_LINES_PER_PAGE + 1 ); + + if ( displayDetailsPerService ) + { + for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) + { + (*it)->report( targetLog, true ); + } + } +} + + +/* + * Get partial results (pageNum>=1) + */ +void CLogReportNode::reportPage( uint pageNum, NLMISC::CLog *targetLog ) +{ + if ( _Children.empty() ) + { + targetLog->displayRawNL( "[END OF LOG]" ); + return; + } + + uint beginIndex = pageNum * NB_LINES_PER_PAGE; + uint lineCounter = 0, prevLineCounter; + for ( std::vector::const_iterator it=_Children.begin(); it!=_Children.end(); ++it ) + { + CLogReportLeaf *pt = (*it); + prevLineCounter = lineCounter; + lineCounter += pt->getNbDistinctLines(); + if ( lineCounter >= beginIndex ) + { + uint remainingLines = pageNum - (lineCounter - beginIndex ); + pt->reportPart( beginIndex - prevLineCounter, remainingLines, targetLog ); // + while ( remainingLines != 0 ) + { + ++it; + if ( it == _Children.end() ) + { + targetLog->displayRawNL( "[END OF LOG]" ); + return; + } + pt = (*it); + remainingLines -= pt->reportPart( 0, remainingLines, targetLog ); + } + return; + } + } +} diff --git a/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt b/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt index bf2096b9a..1183a7b74 100644 --- a/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt +++ b/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt @@ -1,37 +1,40 @@ -INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/login_system/nel_launcher_qt/ ) -INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/login_system/nel_launcher_qt/ ) -INCLUDE( ${QT_USE_FILE} ) - -FILE(GLOB NEL_LAUNCHER_SRC *.cpp) -SET(NEL_LAUNCHER_HDR nel_launcher_dlg.h) -SET(NEL_LAUNCHER_UIS nel_launcher_dlg.ui) -SET(NEL_LAUNCHER_RCS ) - -SET( QT_USE_QT3SUPPORT TRUE) -SET( QT_USE_QTXML TRUE) - -QT4_ADD_RESOURCES( NEL_LAUNCHER_RC_SRCS ${NEL_LAUNCHER_RCS} ) -QT4_WRAP_UI( NEL_LAUNCHER_UI_HDRS ${NEL_LAUNCHER_UIS} ) -QT4_WRAP_CPP( NEL_LAUNCHER_MOC_SRCS ${NEL_LAUNCHER_HDR}) - -ADD_EXECUTABLE(nel_launcher_qt WIN32 ${NEL_LAUNCHER_SRC} ${NEL_LAUNCHER_MOC_SRCS} ${NEL_LAUNCHER_RC_SRCS} ${NEL_LAUNCHER_UI_HDRS}) - -INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR} ${QT_INCLUDES}) - -TARGET_LINK_LIBRARIES(nel_launcher_qt - ${LIBXML2_LIBRARIES} - ${QT_LIBRARIES} - nelmisc - nelnet) - -NL_DEFAULT_PROPS(nel_launcher_qt "NelNS, Launcher: NeL Launcher Qt") -NL_ADD_RUNTIME_FLAGS(nel_launcher_qt) - -ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS}) - -INSTALL(TARGETS nel_launcher_qt RUNTIME DESTINATION bin COMPONENT launcher) -IF(WIN32) - INSTALL(FILES nel_launcher.cfg DESTINATION bin COMPONENT launcher) -ELSE(WIN32) - INSTALL(FILES nel_launcher.cfg DESTINATION etc/nel/nelns COMPONENT launcher) -ENDIF(WIN32) \ No newline at end of file +INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIBXML2_INCLUDE_DIR} + ${QT_INCLUDES}) + +INCLUDE( ${QT_USE_FILE} ) + +FILE(GLOB NEL_LAUNCHER_SRC *.cpp) +SET(NEL_LAUNCHER_HDR nel_launcher_dlg.h) +SET(NEL_LAUNCHER_UIS nel_launcher_dlg.ui) +SET(NEL_LAUNCHER_RCS ) + +SET( QT_USE_QT3SUPPORT TRUE) +SET( QT_USE_QTXML TRUE) + +QT4_ADD_RESOURCES( NEL_LAUNCHER_RC_SRCS ${NEL_LAUNCHER_RCS} ) +QT4_WRAP_UI( NEL_LAUNCHER_UI_HDRS ${NEL_LAUNCHER_UIS} ) +QT4_WRAP_CPP( NEL_LAUNCHER_MOC_SRCS ${NEL_LAUNCHER_HDR}) + +ADD_EXECUTABLE(nel_launcher_qt WIN32 ${NEL_LAUNCHER_SRC} ${NEL_LAUNCHER_MOC_SRCS} ${NEL_LAUNCHER_RC_SRCS} ${NEL_LAUNCHER_UI_HDRS}) + +INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR} ${QT_INCLUDES}) + +TARGET_LINK_LIBRARIES(nel_launcher_qt + ${LIBXML2_LIBRARIES} + ${QT_LIBRARIES} + nelmisc + nelnet) + +NL_DEFAULT_PROPS(nel_launcher_qt "NelNS, Launcher: NeL Launcher Qt") +NL_ADD_RUNTIME_FLAGS(nel_launcher_qt) + +ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS}) + +INSTALL(TARGETS nel_launcher_qt RUNTIME DESTINATION bin COMPONENT launcher) +IF(WIN32) + INSTALL(FILES nel_launcher.cfg DESTINATION bin COMPONENT launcher) +ELSE(WIN32) + INSTALL(FILES nel_launcher.cfg DESTINATION etc/nel/nelns COMPONENT launcher) +ENDIF(WIN32) diff --git a/code/snowballs2/CMakeLists.txt b/code/snowballs2/CMakeLists.txt index 0f158fb88..0007259ee 100644 --- a/code/snowballs2/CMakeLists.txt +++ b/code/snowballs2/CMakeLists.txt @@ -1,177 +1,27 @@ -#-----------------------------------------------------------------------------^M -# Set CMake 2.6 Policies. -IF(COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) -ENDIF(COMMAND cmake_policy) - - -#----------------------------------------------------------------------------- -# Set default config options -# -NL_SETUP_DEFAULT_OPTIONS() -NL_SETUP_PREFIX_PATHS() - -#----------------------------------------------------------------------------- -# Override default options -OPTION(BUILD_CLIENT "Build the Snowballs Client" ON) -OPTION(ENABLE_SOUND "Enable sound in the Snowballs Client" OFF) - -OPTION(BUILD_SERVER "Build the Snowballs Servers" ON) SET(SNOWBALLS_CONFIG_FILE "${NL_ETC_PREFIX}/snowballs" CACHE FILEPATH "Snowballs config file location") SET(SNOWBALLS_DATA_FILE "${NL_SHARE_PREFIX}/games/snowballs" CACHE FILEPATH "Snowballs data file location") SET(SNOWBALLS_LOG_FILE "${NL_LOG_PREFIX}/snowballs" CACHE FILEPATH "Snowballs log file location") -INSTALL(CODE "FILE(MAKE_DIRECTORY ${SNOWBALLS_LOG_FILE})") + +# Note: Not sure if this is still the best way to do this... +#INSTALL(CODE "FILE(MAKE_DIRECTORY ${SNOWBALLS_LOG_FILE})") #----------------------------------------------------------------------------- #Platform specifics -FIND_PACKAGE(Threads REQUIRED) -FIND_PACKAGE(LibXml2 REQUIRED) -FIND_PACKAGE(PNG REQUIRED) - -NL_SETUP_BUILD() - -FIND_PACKAGE(NeL COMPONENTS nelmisc nelgeorges nel3d nelnet nelpacs REQUIRED) -FIND_PACKAGE(NeLNS COMPONENTS naming_service login_service welcome_service nel_launcher_qt) - ### # An example of finding NeL 3D and CEGUI Renderer. ### -IF(BUILD_CLIENT) - FIND_PACKAGE(FreeType) - FIND_PACKAGE(Jpeg) - - IF(ENABLE_SOUND) - FIND_PACKAGE(NeL COMPONENTS nelsound) - ENDIF(ENABLE_SOUND) -ENDIF(BUILD_CLIENT) - -IF(WIN32) - INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake) - SET(WINSOCK2_LIB ws2_32.lib) -ENDIF(WIN32) - -NL_SETUP_BUILD_FLAGS() - ADD_DEFINITIONS(-DSNOWBALLS_CONFIG="${SNOWBALLS_CONFIG_FILE}/" -DSNOWBALLS_STATE="${SNOWBALLS_LOG_FILE}/" -DSNOWBALLS_LOGS="${SNOWBALLS_LOG_FILE}/") -IF(BUILD_CLIENT) +IF(WITH_SNOWBALLS_CLIENT) ADD_SUBDIRECTORY(client) -ENDIF(BUILD_CLIENT) +ENDIF(WITH_SNOWBALLS_CLIENT) -IF(BUILD_SERVER) +IF(WITH_SNOWBALLS_SERVER) ADD_SUBDIRECTORY(server) -ENDIF(BUILD_SERVER) - -# packaging information -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "NeL MMORPG Framework - Snowballs Demo") -SET(CPACK_PACKAGE_VENDOR "NeL") -SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README) -SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) -SET(CPACK_PACKAGE_VERSION_MAJOR "${SB_VERSION_MAJOR}") -SET(CPACK_PACKAGE_VERSION_MINOR "${SB_VERSION_MINOR}") -SET(CPACK_PACKAGE_VERSION_PATCH "${SB_VERSION_PATCH}") -SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};Snowballs;ALL;/") -SET(CPACK_PACKAGE_EXECUTABLES "snowballs-${SB_VERSION}" "snowballs") - -# NSIS Specific Packing Setup -SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Snowballs") -SET(CPACK_NSIS_MODIFY_PATH "ON") -SET(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico) -SET(CPACK_NSIS_MUI_UNIICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico) -SET(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources\\\\nel.bmp) -SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} Snowballs") -SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel") -SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel") -SET(CPACK_NSIS_CONTACT "matt.raykowski@gmail.com") - -## Source Packages -SET(CPACK_PACKAGE_FILE_NAME "snowballs-${SB_VERSION}") -SET(CPACK_SOURCE_PACKAGE_FILE_NAME "snowballs-${SB_VERSION}") -IF(WIN32) - SET(CPACK_GENERATOR "NSIS") - SET(CPACK_SOURCE_GENERATOR "ZIP") -ELSE(WIN32) - SET(CPACK_GENERATOR "TGZ") - SET(CPACK_SOURCE_GENERATOR "TGZ") -ENDIF(WIN32) -set(CPACK_SOURCE_IGNORE_FILES - "~$" - "\\\\.cvsignore$" - "^${CMAKE_SOURCE_DIR}.*/CVS/" - "^${CMAKE_SOURCE_DIR}.*/\\\\.svn/" - "^${CMAKE_SOURCE_DIR}/debian/" - "^${CMAKE_SOURCE_DIR}/old/") -IF(WIN32) - IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - # Install "Debug" specific stuff here. - SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) - message(status "install debug libraries.") - ELSE(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - # Install "Release" Specific stuff here. - SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) - ENDIF(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - - IF(BUILD_CLIENT) - # Needed to find dependencies for nel_launcher_qt. - FIND_PACKAGE(Qt4 REQUIRED) - - # Install Qt dependencies for the launcher. - INCLUDE(${QT_USE_FILE}) - INSTALL(FILES - "${QT_LIBRARY_DIR}/QtGuid4.dll" - "${QT_LIBRARY_DIR}/QtXmld4.dll" - "${QT_LIBRARY_DIR}/QtCored4.dll" - DESTINATION bin) - - # Install the Qt Launcher. - INSTALL(FILES ${NELNS_NEL_LAUNCHER_BIN} DESTINATION bin COMPONENT snowballsclient) - - # Install the sound/video drivers - INSTALL(FILES ${NELDRVOPENGL_DLL} ${NELDRVDIRECT3D_DLL} DESTINATION bin COMPONENT snowballsclient) - ENDIF(BUILD_CLIENT) - - IF(BUILD_SERVER) - INSTALL(FILES - ${NELNS_NAMING_SERVICE_BIN} - ${NELNS_NAMING_SERVICE_CFG} - ${NELNS_LOGIN_SERVICE_BIN} - ${NELNS_LOGIN_SERVICE_CFG} - ${NELNS_WELCOME_SERVICE_BIN} - ${NELNS_WELCOME_SERVICE_CFG} - DESTINATION sbin - COMPONENT services) - ENDIF(BUILD_SERVER) - - INCLUDE(InstallRequiredSystemLibraries) -ENDIF(WIN32) +ENDIF(WITH_SNOWBALLS_SERVER) -INCLUDE(CPack) +IF(WITH_SNOWBALLS_PACKAGE) + INCLUDE(CMakePackaging.txt) +ENDIF(WITH_SNOWBALLS_PACKAGE) -cpack_add_install_type(Full DISPLAY_NAME "Full Install") -cpack_add_component_group(Client - EXPANDED - DESCRPTION "Snowballs Client") -cpack_add_component_group(Server - EXPANDED - DESCRPTION "Snowballs Services") -cpack_add_component(snowballsclient - DISPLAY_NAME "Snowballs Client Runtime" - DESCRIPTION "Hello World Application" - GROUP Application - INSTALL_TYPES Full) -cpack_add_component(Unspecified - DISPLAY_NAME "Application Runtime Libraries" - DESCRIPTION "Hello World Application Libraries" - GROUP Client - INSTALL_TYPES Full) -cpack_add_component(snowballsdata - DISPLAY_NAME "Snowballs Application Data" - DESCRIPTION "Snowballs Application Data" - GROUP Client - INSTALL_TYPES Full) -cpack_add_component(services - DISPLAY_NAME "Snowballs Services" - DESCRIPTION "Snowballs Services" - GROUP Server - INSTALL_TYPES Full) \ No newline at end of file diff --git a/code/snowballs2/CMakePackaging.txt b/code/snowballs2/CMakePackaging.txt new file mode 100644 index 000000000..eb564ba3b --- /dev/null +++ b/code/snowballs2/CMakePackaging.txt @@ -0,0 +1,113 @@ +# packaging information +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "NeL MMORPG Framework - Snowballs Demo") +SET(CPACK_PACKAGE_VENDOR "NeL") +SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README) +SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) +SET(CPACK_PACKAGE_VERSION_MAJOR "${SB_VERSION_MAJOR}") +SET(CPACK_PACKAGE_VERSION_MINOR "${SB_VERSION_MINOR}") +SET(CPACK_PACKAGE_VERSION_PATCH "${SB_VERSION_PATCH}") +SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};Snowballs;ALL;/") +SET(CPACK_PACKAGE_EXECUTABLES "snowballs-${SB_VERSION}" "snowballs") + +# NSIS Specific Packing Setup +SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Snowballs") +SET(CPACK_NSIS_MODIFY_PATH "ON") +SET(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico) +SET(CPACK_NSIS_MUI_UNIICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico) +SET(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources\\\\nel.bmp) +SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} Snowballs") +SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel") +SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel") +SET(CPACK_NSIS_CONTACT "matt.raykowski@gmail.com") + +## Source Packages +SET(CPACK_PACKAGE_FILE_NAME "snowballs-${SB_VERSION}") +SET(CPACK_SOURCE_PACKAGE_FILE_NAME "snowballs-${SB_VERSION}") +IF(WIN32) + SET(CPACK_GENERATOR "NSIS") + SET(CPACK_SOURCE_GENERATOR "ZIP") +ELSE(WIN32) + SET(CPACK_GENERATOR "TGZ") + SET(CPACK_SOURCE_GENERATOR "TGZ") +ENDIF(WIN32) +set(CPACK_SOURCE_IGNORE_FILES + "~$" + "\\\\.cvsignore$" + "^${CMAKE_SOURCE_DIR}.*/CVS/" + "^${CMAKE_SOURCE_DIR}.*/\\\\.svn/" + "^${CMAKE_SOURCE_DIR}/debian/" + "^${CMAKE_SOURCE_DIR}/old/") +IF(WIN32) + IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release") + # Install "Debug" specific stuff here. + SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) + message(status "install debug libraries.") + ELSE(NOT CMAKE_BUILD_TYPE STREQUAL "Release") + # Install "Release" Specific stuff here. + SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) + ENDIF(NOT CMAKE_BUILD_TYPE STREQUAL "Release") + + IF(BUILD_CLIENT) + # Needed to find dependencies for nel_launcher_qt. + FIND_PACKAGE(Qt4 REQUIRED) + + # Install Qt dependencies for the launcher. + INCLUDE(${QT_USE_FILE}) + INSTALL(FILES + "${QT_LIBRARY_DIR}/QtGuid4.dll" + "${QT_LIBRARY_DIR}/QtXmld4.dll" + "${QT_LIBRARY_DIR}/QtCored4.dll" + DESTINATION bin) + + # Install the Qt Launcher. + INSTALL(FILES ${NELNS_NEL_LAUNCHER_BIN} DESTINATION bin COMPONENT snowballsclient) + + # Install the sound/video drivers + INSTALL(FILES ${NELDRVOPENGL_DLL} ${NELDRVDIRECT3D_DLL} DESTINATION bin COMPONENT snowballsclient) + ENDIF(BUILD_CLIENT) + + IF(BUILD_SERVER) + INSTALL(FILES + ${NELNS_NAMING_SERVICE_BIN} + ${NELNS_NAMING_SERVICE_CFG} + ${NELNS_LOGIN_SERVICE_BIN} + ${NELNS_LOGIN_SERVICE_CFG} + ${NELNS_WELCOME_SERVICE_BIN} + ${NELNS_WELCOME_SERVICE_CFG} + DESTINATION sbin + COMPONENT services) + ENDIF(BUILD_SERVER) + + INCLUDE(InstallRequiredSystemLibraries) +ENDIF(WIN32) + +INCLUDE(CPack) + +cpack_add_install_type(Full DISPLAY_NAME "Full Install") +cpack_add_component_group(Client + EXPANDED + DESCRPTION "Snowballs Client") +cpack_add_component_group(Server + EXPANDED + DESCRPTION "Snowballs Services") +cpack_add_component(snowballsclient + DISPLAY_NAME "Snowballs Client Runtime" + DESCRIPTION "Hello World Application" + GROUP Application + INSTALL_TYPES Full) +cpack_add_component(Unspecified + DISPLAY_NAME "Application Runtime Libraries" + DESCRIPTION "Hello World Application Libraries" + GROUP Client + INSTALL_TYPES Full) +cpack_add_component(snowballsdata + DISPLAY_NAME "Snowballs Application Data" + DESCRIPTION "Snowballs Application Data" + GROUP Client + INSTALL_TYPES Full) +cpack_add_component(services + DISPLAY_NAME "Snowballs Services" + DESCRIPTION "Snowballs Services" + GROUP Server + INSTALL_TYPES Full) + From fa5b280a37231016cdb1be55f6399c628576b6a0 Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 19 Aug 2011 14:54:34 +0200 Subject: [PATCH 40/60] Changed: #1323 Cmake with snowballs (patch provided by dfighter) --- code/snowballs2/client/src/snowballs_client.cpp | 4 ++++ code/snowballs2/server/chat/src/main.cpp | 3 +++ code/snowballs2/server/collision/src/collision_service.cpp | 4 ++++ code/snowballs2/server/frontend/src/CMakeLists.txt | 2 +- code/snowballs2/server/frontend/src/main.cpp | 4 ++++ code/snowballs2/server/position/src/main.cpp | 3 +++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/code/snowballs2/client/src/snowballs_client.cpp b/code/snowballs2/client/src/snowballs_client.cpp index 3aa4d5540..79ccef7e6 100644 --- a/code/snowballs2/client/src/snowballs_client.cpp +++ b/code/snowballs2/client/src/snowballs_client.cpp @@ -70,6 +70,10 @@ #include "internationalization.h" #include "game_time.h" +#ifdef NL_OS_WINDOWS +#include +#endif + using namespace std; using namespace NLMISC; using namespace NL3D; diff --git a/code/snowballs2/server/chat/src/main.cpp b/code/snowballs2/server/chat/src/main.cpp index 9a1a3d057..37f58eb92 100644 --- a/code/snowballs2/server/chat/src/main.cpp +++ b/code/snowballs2/server/chat/src/main.cpp @@ -36,6 +36,9 @@ // We're using the NeL Service framework, and layer 5 #include +#ifdef NL_OS_WINDOWS +#include +#endif using namespace std; using namespace NLMISC; diff --git a/code/snowballs2/server/collision/src/collision_service.cpp b/code/snowballs2/server/collision/src/collision_service.cpp index fc48d02c3..ffde0c725 100644 --- a/code/snowballs2/server/collision/src/collision_service.cpp +++ b/code/snowballs2/server/collision/src/collision_service.cpp @@ -17,6 +17,10 @@ #include "collision_service.h" #include +#ifdef NL_OS_WINDOWS +#include +#endif + using namespace SBSERVICE; using namespace NLMISC; using namespace NLNET; diff --git a/code/snowballs2/server/frontend/src/CMakeLists.txt b/code/snowballs2/server/frontend/src/CMakeLists.txt index 086ecfcd1..d24c6743e 100644 --- a/code/snowballs2/server/frontend/src/CMakeLists.txt +++ b/code/snowballs2/server/frontend/src/CMakeLists.txt @@ -1,6 +1,6 @@ FILE(GLOB SRC *.cpp *.h) -ADD_EXECUTABLE(snowballs_frontend_service ${SRC}) +ADD_EXECUTABLE(snowballs_frontend_service WIN32 ${SRC}) INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR}) diff --git a/code/snowballs2/server/frontend/src/main.cpp b/code/snowballs2/server/frontend/src/main.cpp index ff036fe51..74ccdc50f 100644 --- a/code/snowballs2/server/frontend/src/main.cpp +++ b/code/snowballs2/server/frontend/src/main.cpp @@ -38,6 +38,10 @@ #include #include +#ifdef NL_OS_WINDOWS +#include +#endif + using namespace NLMISC; using namespace NLNET; using namespace std; diff --git a/code/snowballs2/server/position/src/main.cpp b/code/snowballs2/server/position/src/main.cpp index b908d1e73..44a94d560 100644 --- a/code/snowballs2/server/position/src/main.cpp +++ b/code/snowballs2/server/position/src/main.cpp @@ -41,6 +41,9 @@ #include "physics.h" +#ifdef NL_OS_WINDOWS +#include +#endif using namespace NLMISC; using namespace NLNET; From b5b21ba16958ded1ebec18ef658d539d7536adc6 Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 19 Aug 2011 15:48:33 +0200 Subject: [PATCH 41/60] Changed: #825 Remove all warnings when compiling Ryzom --- code/snowballs2/client/src/snowballs_client.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/snowballs2/client/src/snowballs_client.cpp b/code/snowballs2/client/src/snowballs_client.cpp index 79ccef7e6..bde24ac83 100644 --- a/code/snowballs2/client/src/snowballs_client.cpp +++ b/code/snowballs2/client/src/snowballs_client.cpp @@ -606,7 +606,7 @@ void loopLogin() string LSHost(ConfigFile->getVar("LSHost").asString()); Login = ConfigFile->getVar("Login").asString(); string Password = ConfigFile->getVar("Password").asString(); - CHashKeyMD5 hk = getMD5((uint8 *)Password.c_str(), Password.size()); + CHashKeyMD5 hk = getMD5((uint8 *)Password.c_str(), (uint32)Password.size()); string CPassword = hk.toString(); nlinfo("The crypted password is %s", CPassword.c_str()); string Application = ConfigFile->getVar("ClientApplication").asString(); @@ -1077,8 +1077,8 @@ sint main(int argc, char **argv) // extract the 2 first param (argv[1] and argv[2]) it must be cookie and addr string cmd = cmdline; - int pos1 = cmd.find_first_not_of (' '); - int pos2; + string::size_type pos1 = cmd.find_first_not_of (' '); + string::size_type pos2; if (pos1 != string::npos) { pos2 = cmd.find (' ', pos1); From 45eed6724219ce64aaf8cf9149fe835421aa5fb6 Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 19 Aug 2011 16:58:18 +0200 Subject: [PATCH 42/60] Changed: #1177 VS 2010 does not work under CMake --- code/CMakeModules/FindExternal.cmake | 2 +- code/CMakeModules/FindWindowsSDK.cmake | 6 +++++ code/CMakeModules/nel.cmake | 32 ++++++++++++++++++++------ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/code/CMakeModules/FindExternal.cmake b/code/CMakeModules/FindExternal.cmake index fae4af92d..1ca01bd99 100644 --- a/code/CMakeModules/FindExternal.cmake +++ b/code/CMakeModules/FindExternal.cmake @@ -41,7 +41,7 @@ IF(EXTERNAL_PATH) ELSE(TARGET_X64) SET(EXTERNAL_BINARY_PATH "${EXTERNAL_PATH}/bin") ENDIF(TARGET_X64) - + # Using 32 or 64 bits libraries IF(TARGET_X64) SET(EXTERNAL_LIBRARY_PATH "${EXTERNAL_PATH}/lib64") diff --git a/code/CMakeModules/FindWindowsSDK.cmake b/code/CMakeModules/FindWindowsSDK.cmake index 30e507f85..25903be14 100644 --- a/code/CMakeModules/FindWindowsSDK.cmake +++ b/code/CMakeModules/FindWindowsSDK.cmake @@ -33,6 +33,12 @@ FIND_PATH(WINSDK_INCLUDE_DIR Windows.h ${WINSDKCURRENT_DIR}/Include ) +FIND_PROGRAM(WINSDK_SIGNTOOL signtool + PATHS + ${WINSDK71_DIR}/Bin + ${WINSDKCURRENT_DIR}/Bin +) + IF(WINSDK_INCLUDE_DIR) SET(WINSDK_FOUND TRUE) ELSE(WINSDK_INCLUDE_DIR) diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 14a78d721..1524ebf46 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -37,9 +37,7 @@ ENDMACRO(NL_TARGET_DRIVER) # Argument: ### MACRO(NL_DEFAULT_PROPS name label) - IF(NOT MSVC10) - SET_TARGET_PROPERTIES(${name} PROPERTIES PROJECT_LABEL ${label}) - ENDIF(NOT MSVC10) + SET_TARGET_PROPERTIES(${name} PROPERTIES PROJECT_LABEL ${label}) GET_TARGET_PROPERTY(type ${name} TYPE) IF(${type} STREQUAL SHARED_LIBRARY) # Set versions only if target is a shared library @@ -49,6 +47,15 @@ MACRO(NL_DEFAULT_PROPS name label) SET_TARGET_PROPERTIES(${name} PROPERTIES INSTALL_NAME_DIR ${NL_LIB_PREFIX}) ENDIF(NL_LIB_PREFIX) ENDIF(${type} STREQUAL SHARED_LIBRARY) + + IF(${type} STREQUAL EXECUTABLE AND WIN32) + SET_TARGET_PROPERTIES(${name} PROPERTIES + VERSION ${NL_VERSION} + SOVERSION ${NL_VERSION_MAJOR} + COMPILE_FLAGS "/GA" + LINK_FLAGS "/VERSION:${NL_VERSION}") + ENDIF(${type} STREQUAL EXECUTABLE AND WIN32) + IF(WITH_STLPORT AND WIN32) SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "/X") ENDIF(WITH_STLPORT AND WIN32) @@ -308,25 +315,32 @@ MACRO(NL_SETUP_BUILD) ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) # ADD_DEFINITIONS(-DHAVE_IA64) # ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") - + IF(WIN32) IF(MSVC10) # /Ox is working with VC++ 2010, but custom optimizations don't exist SET(SPEED_OPTIMIZATIONS "/Ox /GF /GS-") # without inlining it's unusable, use custom optimizations again SET(MIN_OPTIMIZATIONS "/Od /Ob1") - ELSE(MSVC10) + ELSEIF(MSVC90) # don't use a /O[012x] flag if you want custom optimizations SET(SPEED_OPTIMIZATIONS "/Ob2 /Oi /Ot /Oy /GT /GF /GS-") # without inlining it's unusable, use custom optimizations again SET(MIN_OPTIMIZATIONS "/Ob1") + ELSEIF(MSVC80) + # don't use a /O[012x] flag if you want custom optimizations + SET(SPEED_OPTIMIZATIONS "/Ox /GF /GS-") + # without inlining it's unusable, use custom optimizations again + SET(MIN_OPTIMIZATIONS "/Od /Ob1") + ELSE(MSVC10) + MESSAGE(FATAL_ERROR "Can't determine compiler version ${MSVC_VERSION}") ENDIF(MSVC10) - SET(PLATFORM_CFLAGS "/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /DWIN32 /D_WINDOWS /W3 /Zi /Zm1000 /MP /Gy-") + SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /DWIN32 /D_WINDOWS /W3 /Zi /Zm1000 /MP /Gy-") # Common link flags SET(PLATFORM_LINKFLAGS "-DEBUG") - + IF(TARGET_X64) # Fix a bug with Intellisense SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} /D_WIN64") @@ -504,6 +518,10 @@ MACRO(SETUP_EXTERNAL) INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake) IF(MSVC10) + IF(NOT MSVC10_REDIST_DIR) + # If you have VC++ 2010 Express, put x64/Microsoft.VC100.CRT/*.dll in ${EXTERNAL_PATH}/redist + SET(MSVC10_REDIST_DIR "${EXTERNAL_PATH}/redist") + ENDIF(NOT MSVC10_REDIST_DIR) GET_FILENAME_COMPONENT(VC_ROOT_DIR "[HKEY_CURRENT_USER\\Software\\Microsoft\\VisualStudio\\10.0_Config;InstallDir]" ABSOLUTE) # VC_ROOT_DIR is set to "registry" when a key is not found IF(VC_ROOT_DIR MATCHES "registry") From c5445ad8979bed191506449ddc944261a097f5f6 Mon Sep 17 00:00:00 2001 From: sfb Date: Sat, 20 Aug 2011 11:54:55 -0500 Subject: [PATCH 43/60] Changed: #1323 Applied Molator's QtMain patch. --- code/nelns/login_system/nel_launcher_qt/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt b/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt index 1183a7b74..3bd503eef 100644 --- a/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt +++ b/code/nelns/login_system/nel_launcher_qt/CMakeLists.txt @@ -24,6 +24,7 @@ INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR} ${QT_INCLUDES}) TARGET_LINK_LIBRARIES(nel_launcher_qt ${LIBXML2_LIBRARIES} ${QT_LIBRARIES} + ${QT_QTMAIN_LIBRARY} nelmisc nelnet) From 16b3e28b7a2bae6a9c961f45183c87c1511ac59f Mon Sep 17 00:00:00 2001 From: aquiles Date: Thu, 25 Aug 2011 23:25:33 +0200 Subject: [PATCH 44/60] Changed: #1306 added basic editing possibillities for normal and parent values (no default values and no saving of changed values yet); added possibillity to expand/collapse whole tree by header click --- .../src/plugins/georges_editor/CMakeLists.txt | 3 +- .../georges_editor/expandable_headerview.cpp | 143 +++++++++ .../georges_editor/expandable_headerview.h | 49 +++ .../plugins/georges_editor/formdelegate.cpp | 278 ++++++++++++++++++ .../src/plugins/georges_editor/formdelegate.h | 41 +++ .../georges_editor/georges_editor_plugin.cpp | 2 +- .../georges_treeview_dialog.cpp | 30 +- .../georges_editor/georges_treeview_dialog.h | 3 + .../georges_editor/georgesform_model.cpp | 74 +++-- .../georges_editor/georgesform_model.h | 5 +- .../georgesform_proxy_model.cpp | 17 +- 11 files changed, 596 insertions(+), 49 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt index 7c668ec8a..b29f32152 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt @@ -12,7 +12,8 @@ SET(OVQT_PLUG_GEORGES_EDITOR_HDR georges_editor_plugin.h georges_editor_form.h georges_dirtree_dialog.h georges_filesystem_model.h - georges_treeview_dialog.h) + georges_treeview_dialog.h + expandable_headerview.h) SET(OVQT_PLUG_GEORGES_EDITOR_UIS georges_editor_form.ui georges_dirtree_form.ui diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.cpp new file mode 100644 index 000000000..7ae482824 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.cpp @@ -0,0 +1,143 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +// Project includes +#include "expandable_headerview.h" + +// Qt includes +#include +#include +#include + +namespace Plugin +{ + + ExpandableHeaderView::ExpandableHeaderView(Qt::Orientation orientation, QWidget * parent) + : QHeaderView(orientation, parent), + m_expanded(true), + m_inDecoration(false) + { + } + + void ExpandableHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const + { + painter->save(); + QHeaderView::paintSection(painter, rect, logicalIndex); + painter->restore(); + + if (logicalIndex == 0) + { + QRect sectionRect = this->orientation() == Qt::Horizontal ? + QRect(this->sectionPosition(logicalIndex), 0, + this->sectionSize(logicalIndex), this->height()): + QRect(0, this->sectionPosition(logicalIndex), + this->width(), this->sectionSize(logicalIndex)); + + QStyleOptionHeader opt; + initStyleOption(&opt); + opt.iconAlignment = Qt::AlignVCenter; + + QVariant variant = this->model()->headerData(logicalIndex, this->orientation(), + Qt::DecorationRole); + opt.icon = qvariant_cast(variant); + if (opt.icon.isNull()) + { + opt.icon = qvariant_cast(variant); + } + QRect headerLabelRect = this->style()->subElementRect(QStyle::SE_HeaderLabel, &opt, this); + + QPixmap pixmap + = opt.icon.pixmap(this->style()->pixelMetric(QStyle::PM_SmallIconSize), + (opt.state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled); + QRect aligned = this->style()->alignedRect(opt.direction, QFlag(opt.iconAlignment), + pixmap.size(), headerLabelRect); + QRect inter = aligned.intersected(headerLabelRect); + + QStyleOption option; + option.rect = QRect(inter.x()-2,inter.y(),inter.width(),inter.height()); + if (m_expanded) + option.state = QStyle::State_Children | QStyle::State_Open; + else + option.state = QStyle::State_Children; + if (m_inDecoration) + option.state |= QStyle::State_MouseOver; + QApplication::style()->drawPrimitive(QStyle::PE_IndicatorBranch, &option, painter); + } + } + + void ExpandableHeaderView::mousePressEvent(QMouseEvent *e) + { + int section = logicalIndexAt(e->x()); + + if (section == 0 && m_inDecoration) { + if (m_expanded) + m_expanded = false; + else + m_expanded = true; + this->QHeaderView::mousePressEvent(e); + Q_EMIT headerClicked(section); + } + } + + void ExpandableHeaderView::mouseMoveEvent(QMouseEvent *e) + { + int section = this->logicalIndexAt(e->x()); + + if (section != 0) + return; + + bool tmp = m_inDecoration; + if (isPointInDecoration(section, e->pos())) + m_inDecoration = true; + else + m_inDecoration = false; + + if (m_inDecoration != tmp) + updateSection(0); + } + + bool ExpandableHeaderView::isPointInDecoration(int section, QPoint pos)const + { + QRect sectionRect = this->orientation() == Qt::Horizontal ? + QRect(this->sectionPosition(section), 0, + this->sectionSize(section), this->height()): + QRect(0, this->sectionPosition(section), + this->width(), this->sectionSize(section)); + QStyleOptionHeader opt; + this->initStyleOption(&opt); + opt.iconAlignment = Qt::AlignVCenter; + QVariant variant = this->model()->headerData(section, this->orientation(), + Qt::DecorationRole); + opt.icon = qvariant_cast(variant); + if (opt.icon.isNull()) + { + opt.icon = qvariant_cast(variant); + } + QRect headerLabelRect = this->style()->subElementRect(QStyle::SE_HeaderLabel, &opt, this); + // from qcommonstyle.cpp + if (opt.icon.isNull()) + { + return false; + } + QPixmap pixmap + = opt.icon.pixmap(this->style()->pixelMetric(QStyle::PM_SmallIconSize), + (opt.state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled); + QRect aligned = this->style()->alignedRect(opt.direction, QFlag(opt.iconAlignment), + pixmap.size(), headerLabelRect); + QRect inter = aligned.intersected(headerLabelRect); + return inter.contains(pos); + } +} diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.h new file mode 100644 index 000000000..596bf5ba1 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/expandable_headerview.h @@ -0,0 +1,49 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef EXPANDABLE_HEADERVIEW_H +#define EXPANDABLE_HEADERVIEW_H + +// Qt includes +#include + +namespace Plugin +{ + class ExpandableHeaderView : public QHeaderView + { + Q_OBJECT + public: + ExpandableHeaderView(Qt::Orientation orientation, QWidget * parent = 0); + + bool* expanded() { return &m_expanded; } + + protected: + void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const; + bool isPointInDecoration(int section, QPoint pos)const; + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + + private: + bool m_expanded; + bool m_inDecoration; + +Q_SIGNALS: + void headerClicked(int); + }; + +} /* namespace NLQT */ + +#endif // EXPANDABLE_HEADERVIEW_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp new file mode 100644 index 000000000..4d04bc6b5 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp @@ -0,0 +1,278 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#include "formdelegate.h" + +// NeL includes +#include +#include +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Project includes +#include "georgesform_model.h" +#include "georgesform_proxy_model.h" +#include "formitem.h" + +namespace Plugin +{ + + FormDelegate::FormDelegate(QObject *parent) + : QStyledItemDelegate(parent) + { + } + + QWidget *FormDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem & option , + const QModelIndex &index) const + { + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + CFormItem *item = static_cast(mp->mapToSource(index).internalPointer()); + QString value = item->data(1).toString(); + + if (value.isEmpty() || !mp || !m) + return 0; + + CFormItem* curItem = m->getItem(mp->mapToSource(index)); + NLGEORGES::UFormElm *curElm = curItem->getFormElm(); + if (!curElm) { + // TODO: create new Element + return 0; + } + const NLGEORGES::UType *type = curElm->getType(); + if(type) + { + int numDefinitions = type->getNumDefinition(); + + if (numDefinitions) + { + std::string l, v; + QString label,value; + + QComboBox *editor = new QComboBox(parent); + for (int i = 0; i < numDefinitions; i++) + { + type->getDefinition(i,l,v); + label = l.c_str(); + value = v.c_str(); + editor->addItem(label); + } + return editor; + } + else + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + { + QSpinBox *editor = new QSpinBox(parent); + + //QString min = QString(type->getMin().c_str()); + //QString max = QString(type->getMax().c_str()); + //QString inc = QString(type->getIncrement().c_str()); + //nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str()); + + // TODO: use saved min/max values + editor->setMinimum(-99999); + editor->setMaximum(99999); + editor->setSingleStep(1); + return editor; + } + case NLGEORGES::UType::Double: + { + QDoubleSpinBox *editor = new QDoubleSpinBox(parent); + + //QString min = QString(type->getMin().c_str()); + //QString max = QString(type->getMax().c_str()); + //QString inc = QString(type->getIncrement().c_str()); + //nldebug(QString("min %1 max %2 inc %3").arg(min).arg(max).arg(inc).toStdString().c_str()); + + // TODO: use saved min/max values + editor->setMinimum(-99999); + editor->setMaximum(99999); + editor->setSingleStep(0.1); + editor->setDecimals(1); + return editor; + } + case NLGEORGES::UType::Color: + { + return new QColorDialog(); + } + default: // UType::String + { + QLineEdit *editor = new QLineEdit(parent); + return editor; + } + } + } + } + return 0; + } + + void FormDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const + { + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + + const NLGEORGES::UType *type = m->getItem(mp->mapToSource(index))->getFormElm()->getType(); + int numDefinitions = type->getNumDefinition(); + QString value = index.model()->data(index, Qt::DisplayRole).toString(); + + if (numDefinitions) + { + QComboBox *cb = static_cast(editor); + cb->setCurrentIndex(cb->findText(value)); + } + else + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + { + QSpinBox *spinBox = static_cast(editor); + spinBox->setValue((int)value.toDouble()); + break; + } + case NLGEORGES::UType::Double: + { + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->setValue(value.toDouble()); + break; + } + case NLGEORGES::UType::Color: + { + break; + } + default: + { + QLineEdit *textEdit = static_cast(editor); + textEdit->setText(value); + break; + } + } + } + } + + void FormDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const + { + const CGeorgesFormProxyModel * mp = dynamic_cast(index.model()); + const CGeorgesFormModel * m = dynamic_cast(mp->sourceModel()); + + const NLGEORGES::UType *type = m->getItem(mp->mapToSource(index))->getFormElm()->getType(); + int numDefinitions = type->getNumDefinition(); + + if (numDefinitions) + { + QComboBox *comboBox = static_cast(editor); + QString value = comboBox->currentText(); + QString oldValue = index.model()->data(index, Qt::DisplayRole).toString(); + if (value == oldValue) + { + // nothing's changed + } + else + { + nldebug(QString("setModelData from %1 to %2") + .arg(oldValue).arg(value).toStdString().c_str()); + model->setData(index, value, Qt::EditRole); + } + } + else + { + switch (type->getType()) + { + case NLGEORGES::UType::UnsignedInt: + case NLGEORGES::UType::SignedInt: + { + QSpinBox *spinBox = static_cast(editor); + int value = spinBox->value(); + QString oldValue = index.model()->data(index, Qt::DisplayRole).toString(); + if (QString("%1").arg(value) == oldValue) + { + // nothing's changed + } + else + { + nldebug(QString("setModelData from %1 to %2") + .arg(oldValue).arg(value).toStdString().c_str()); + model->setData(index, value, Qt::EditRole); + } + break; + } + case NLGEORGES::UType::Double: + { + QDoubleSpinBox *spinBox = static_cast(editor); + double value = spinBox->value(); + QString oldValue = index.model()->data(index, Qt::DisplayRole).toString(); + if (QString("%1").arg(value) == oldValue) + { + // nothing's changed + } + else + { + nldebug(QString("setModelData from %1 to %2") + .arg(oldValue).arg(value).toStdString().c_str()); + model->setData(index, value, Qt::EditRole); + } + break; + } + case NLGEORGES::UType::Color: + { + break; // TODO + } + default: // UType::String + { + QLineEdit *textEdit = static_cast(editor); + QString value = textEdit->text(); + QString oldValue = index.model()->data(index, Qt::DisplayRole).toString(); + if (value == oldValue) + { + // nothing's changed + } + else + { + nldebug(QString("setModelData from %1 to %2") + .arg(oldValue).arg(value).toStdString().c_str()); + model->setData(index, value, Qt::EditRole); + } + break; + } + } + } + } + + void FormDelegate::updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &index) const + { + QRect r = option.rect; + editor->setGeometry(r); + } +} /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h new file mode 100644 index 000000000..a309da1fc --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h @@ -0,0 +1,41 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// 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 . + +#ifndef FORMDELEGATE_H +#define FORMDELEGATE_H + +#include + +namespace Plugin +{ + + class FormDelegate : public QStyledItemDelegate + { + + public: + FormDelegate(QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const; + void updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &index) const; + }; + +} +#endif // FORMDELEGATE_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp index 9ea9ae5ff..425db7841 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp @@ -74,7 +74,7 @@ QString GeorgesEditorPlugin::name() const QString GeorgesEditorPlugin::version() const { - return "0.3"; + return "0.4"; } QString GeorgesEditorPlugin::vendor() const diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp index 09556a21a..bc5dd7487 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp @@ -32,7 +32,8 @@ #include "georgesform_model.h" #include "georgesform_proxy_model.h" #include "formitem.h" -//#include "formdelegate.h" +#include "formdelegate.h" +#include "expandable_headerview.h" using namespace NLMISC; using namespace NLGEORGES; @@ -41,7 +42,8 @@ namespace Plugin { CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/) - : QDockWidget(parent) + : QDockWidget(parent), + m_header(0) { m_georges = new CGeorges; @@ -49,16 +51,18 @@ namespace Plugin m_modified = false; m_ui.setupUi(this); + m_header = new ExpandableHeaderView(Qt::Horizontal, m_ui.treeView); + m_ui.treeView->setHeader(m_header); m_ui.treeView->header()->setResizeMode(QHeaderView::ResizeToContents); + m_ui.treeView->header()->setStretchLastSection(true); m_ui.treeViewTabWidget->setTabEnabled (2,false); m_ui.checkBoxParent->setStyleSheet("background-color: rgba(0,255,0,30)"); m_ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)"); m_form = 0; - //FormDelegate *formdelegate = new FormDelegate(this); - //_ui.treeView->setItemDelegateForColumn(1, formdelegate); - + FormDelegate *formdelegate = new FormDelegate(this); + m_ui.treeView->setItemDelegateForColumn(1, formdelegate); connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)), this, SLOT(doubleClicked (QModelIndex))); @@ -66,14 +70,22 @@ namespace Plugin this, SLOT(filterRows())); connect(m_ui.checkBoxDefaults, SIGNAL(toggled(bool)), this, SLOT(filterRows())); + connect(m_header, SIGNAL(headerClicked(int)), + this, SLOT(headerClicked(int))); } CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog() { - //delete _ui.treeView->itemDelegateForColumn(1); delete m_form; - //QSettings settings("RyzomCore", "GeorgesQt"); - //settings.setValue("dirViewGeometry", saveGeometry()); + } + + void CGeorgesTreeViewDialog::headerClicked(int section) + { + if (section == 0) + if (*(m_header->expanded())) + m_ui.treeView->expandAll(); + else + m_ui.treeView->collapseAll(); } void CGeorgesTreeViewDialog::setForm(const CForm *form) @@ -170,7 +182,7 @@ namespace Plugin { loadedForm = m_form->getFilename().c_str(); - CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents); + CGeorgesFormModel *model = new CGeorgesFormModel(root,deps,comments,parents,m_header->expanded()); CGeorgesFormProxyModel *proxyModel = new CGeorgesFormProxyModel(); proxyModel->setSourceModel(model); m_ui.treeView->setModel(proxyModel); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h index 9d4f02e5d..e4c5dcdf4 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h @@ -18,6 +18,7 @@ #define GEORGES_TREEVIEWER_DIALOG_H #include "ui_georges_treeview_form.h" +#include "expandable_headerview.h" // Qt includes #include @@ -77,9 +78,11 @@ namespace Plugin private Q_SLOTS: void doubleClicked ( const QModelIndex & index ); void filterRows(); + void headerClicked(int); private: Ui::CGeorgesTreeViewDialog m_ui; + ExpandableHeaderView *m_header; UForm *m_form; CGeorges *m_georges; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp index 0ec8f785a..3ae798dea 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp @@ -30,10 +30,13 @@ #include #include #include +#include +#include +#include +#include // project includes #include "formitem.h" -//#include "modules.h" using namespace NLGEORGES; @@ -41,7 +44,7 @@ namespace Plugin { CGeorgesFormModel::CGeorgesFormModel(UFormElm *rootElm, QMap< QString, QStringList> deps, - QString comment, QStringList parents, QObject *parent) : QAbstractItemModel(parent) + QString comment, QStringList parents, bool *expanded, QObject *parent) : QAbstractItemModel(parent) { QList rootData; rootData << "Value" << "Data" << "Extra";// << "Type"; @@ -51,6 +54,7 @@ namespace Plugin m_comments = comment; m_parents = parents; m_parentRows = new QList; + m_expanded = expanded; setupModelData(); } @@ -231,23 +235,23 @@ namespace Plugin /******************************************************************************/ - //bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, - // int role) - //{ + bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, + int role) + { - // if (role != Qt::EditRole) - // return false; + if (role != Qt::EditRole) + return false; - // CFormItem *item = getItem(index); - // bool result = item->setData(index.column(), value); + CFormItem *item = getItem(index); + bool result = item->setData(index.column(), value); // // TODO: ugly hack for updating icon too // if (result) // Q_EMIT dataChanged(index, this->index(index.row(),index.column()+1,index.parent())); - // setupModelData(); - // return result; - //} + //setupModelData(); + return result; + } /******************************************************************************/ @@ -258,11 +262,8 @@ namespace Plugin Qt::ItemFlags returnValue = Qt::ItemIsSelectable | Qt::ItemIsEnabled; - //if(index.column() == 1) - // returnValue |= Qt::ItemIsEditable; - // TODO? - // col 2 should go here too but i dont want to do another delegate - // so for now i just connected the dblClick in the dialog + if(index.column() == 1) + returnValue |= Qt::ItemIsEditable; return returnValue; @@ -273,11 +274,42 @@ namespace Plugin QVariant CGeorgesFormModel::headerData(int section, Qt::Orientation orientation, int role) const { - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) - return m_rootItem->data(section); - + if (orientation == Qt::Horizontal) + { + if (role == Qt::DisplayRole) + return m_rootItem->data(section); + if (role == Qt::TextAlignmentRole) + return Qt::AlignLeft; + if (section == 0 && role == Qt::DecorationRole) + { + // transparent pixmap as we paint it ourself with tree brach + // if we extend the HeaderView::paintSection for the CE_HeaderLabel + // we could drop this + QPixmap pixmap = QPixmap( + QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize), + QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize)); + // Create new picture for transparent + QPixmap transparent(pixmap.size()); + + // Do transparency + transparent.fill(Qt::transparent); + QPainter p(&transparent); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.drawPixmap(0, 0, pixmap); + p.setCompositionMode(QPainter::CompositionMode_DestinationIn); + // Set transparency level to 150 (possible values are 0-255) + // The alpha channel of a color specifies the transparency effect, + // 0 represents a fully transparent color, while 255 represents + // a fully opaque color. + p.fillRect(transparent.rect(), QColor(0, 0, 0, 0)); + p.end(); + + // Set original picture's reference to new transparent one + pixmap = transparent; + return pixmap; + } + } return QVariant(); - } /******************************************************************************/ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h index 7668f9e7f..0d8ce6e69 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.h @@ -39,11 +39,11 @@ namespace Plugin public: CGeorgesFormModel(NLGEORGES::UFormElm *root, QMap< QString, QStringList> deps, - QString comment, QStringList parents, QObject *parent = 0); + QString comment, QStringList parents, bool* expanded, QObject *parent = 0); ~CGeorgesFormModel(); QVariant data(const QModelIndex &index, int role) const; - //bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; @@ -71,6 +71,7 @@ namespace Plugin bool m_showParents; bool m_showDefaults; + bool *m_expanded; };/* class CGeorgesFormModel */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp index 0950e1b04..ae3720a57 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp @@ -14,17 +14,14 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -#include "georgesform_proxy_model.h" -#include "georgesform_model.h" - // NeL includes #include #include // project includes #include "formitem.h" - -#include +#include "georgesform_proxy_model.h" +#include "georgesform_model.h" namespace Plugin { @@ -32,20 +29,11 @@ namespace Plugin bool CGeorgesFormProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - //nlinfo("CGeorgesFormProxyModel::filterAcceptsRow"); - // column doesnt matter for item CGeorgesFormModel *smodel = dynamic_cast(sourceModel()); QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); CFormItem *item = smodel->getItem(index); - //qDebug() << smodel->showParents() << (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm); - //nlinfo("%s %d %d %d %d", item->data(index.column()).toString().toStdString().c_str(), - // item->valueFrom(), - // item->nodeFrom(), - // smodel->showParents(), - // (item->valueFrom() == NLGEORGES::UFormElm::NodeParentForm)); - // if elm not existing it must be some kind of default or type value if(!item->getFormElm()) { @@ -86,7 +74,6 @@ namespace Plugin bool CGeorgesFormProxyModel::filterAcceptsColumn(int sourceRow, const QModelIndex &sourceParent) const { - //nlinfo("CGeorgesFormProxyModel::filterAcceptsColumn"); return QSortFilterProxyModel::filterAcceptsColumn(sourceRow, sourceParent); } } /* namespace Plugin */ From cbeb115244005c66aa152ebfa67ea7570b66b318 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Fri, 2 Sep 2011 01:29:19 +0300 Subject: [PATCH 45/60] Changed: #1193 Fix typos in comments/code. --- .../src/plugins/object_viewer/bin_op_dialog.h | 2 +- .../src/plugins/object_viewer/entity.h | 2 +- .../object_viewer/graphics_viewport.cpp | 6 ++-- .../plugins/object_viewer/graphics_viewport.h | 2 +- .../src/plugins/object_viewer/hoverpoints.cpp | 2 +- .../object_viewer/morph_mesh_dialog.cpp | 2 +- .../plugins/object_viewer/object_viewer.cpp | 2 +- .../src/plugins/object_viewer/object_viewer.h | 2 +- .../object_viewer/particle_tree_model.cpp | 4 +-- .../particle_workspace_dialog.cpp | 4 +-- .../object_viewer/particle_workspace_dialog.h | 2 +- .../src/plugins/object_viewer/sound_system.h | 8 ++--- .../vegetable_appearance_page.cpp | 2 +- .../plugins/object_viewer/workspace_form.ui | 34 +++++++++---------- 14 files changed, 37 insertions(+), 37 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/bin_op_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/bin_op_dialog.h index 061edafd4..3180e5d84 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/bin_op_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/bin_op_dialog.h @@ -97,7 +97,7 @@ public: _AttrbDlg[k]->init(); } - static const char * const operators[] = + static const char *const operators[] = { QT_TR_NOOP("Select Arg1"), QT_TR_NOOP("Select Arg2"), diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/entity.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/entity.h index 88338f214..a322363be 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/entity.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/entity.h @@ -141,7 +141,7 @@ public: float getAnimLength(std::string name); /// Get slot infomation - void setSlotInfo(uint num, CSlotInfo& slotInfo) + void setSlotInfo(uint num, CSlotInfo &slotInfo) { _SlotInfo[num] = slotInfo; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.cpp index 93bc1043e..d8e36e785 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.cpp @@ -135,7 +135,7 @@ bool CGraphicsViewport::winEvent(MSG *message, long *result) { winProc proc = (winProc)driver->getWindowProc(); - // TODO: shouldn't it return false like the others? + // TODO: shouldn't it return false like the others? // see macEvent() and x11Event() below return proc(driver, message->hwnd, message->message, message->wParam, message->lParam); } @@ -163,7 +163,7 @@ bool CGraphicsViewport::macEvent(EventHandlerCallRef caller, EventRef event) } } - // return false to let Qt handle the event as well, + // return false to let Qt handle the event as well, // else the widget would never get focus return false; } @@ -184,7 +184,7 @@ bool CGraphicsViewport::x11Event(XEvent *event) } } - // return false to let Qt handle the event as well, + // return false to let Qt handle the event as well, // else the widget would never get focus // TODO: test me please, i have no linux at hand (rti) return false; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.h index d810d8c01..0c01fa1ad 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_viewport.h @@ -59,7 +59,7 @@ public: CGraphicsViewport(QWidget *parent); virtual ~CGraphicsViewport(); - virtual QPaintEngine* paintEngine() const + virtual QPaintEngine *paintEngine() const { return NULL; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/hoverpoints.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/hoverpoints.cpp index fe0751082..a2556c08d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/hoverpoints.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/hoverpoints.cpp @@ -161,7 +161,7 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) case QEvent::TouchBegin: case QEvent::TouchUpdate: { - const QTouchEvent *const touchEvent = static_cast(event); + const QTouchEvent *const touchEvent = static_cast(event); const QList points = touchEvent->touchPoints(); const qreal pointSize = qMax(m_pointSize.width(), m_pointSize.height()); Q_FOREACH (const QTouchEvent::TouchPoint &touchPoint, points) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/morph_mesh_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/morph_mesh_dialog.cpp index d125277e4..de88d14c8 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/morph_mesh_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/morph_mesh_dialog.cpp @@ -91,7 +91,7 @@ QString CMorphMeshDialog::getShapeDescStr(uint shapeIndex, sint numVerts) const } else { - QString error = qobject_cast(QObject::parent())->getShapeErrorString(numVerts); + QString error = qobject_cast(QObject::parent())->getShapeErrorString(numVerts); QString result = _CM->getShape(shapeIndex).c_str() + QString(" (%1)").arg(error); return result; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.cpp index dc248e563..4b0509018 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.cpp @@ -435,7 +435,7 @@ void CObjectViewer::setCurrentObject(const std::string &name) nlinfo("set current entity %s", _CurrentInstance.c_str()); } -CEntity& CObjectViewer::getEntity(const std::string &name) +CEntity &CObjectViewer::getEntity(const std::string &name) { if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); EIT eit = _Entities.find (name); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.h index dc96f5cdf..5e978d7e0 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer.h @@ -152,7 +152,7 @@ public: /// Get entity from the scene /// @return ref Entity - CEntity& getEntity(const std::string &name); + CEntity &getEntity(const std::string &name); /// Get full list instances from the scene /// @param listObj - ref of return list instances diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_tree_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_tree_model.cpp index 77286ed32..2daebd6e4 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_tree_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_tree_model.cpp @@ -404,7 +404,7 @@ bool CParticleTreeModel::insertRows(NL3D::CPSLocated *loc, int position, const Q bool CParticleTreeModel::insertRow(NL3D::CPSLocated *loc, uint32 index, int position, const QModelIndex &parent) { beginInsertRows(parent, position, position); - createItemFromLocatedInstance(loc, index, static_cast(parent.internalPointer())); + createItemFromLocatedInstance(loc, index, static_cast(parent.internalPointer())); endInsertRows(); return true; } @@ -424,7 +424,7 @@ bool CParticleTreeModel::removeRows(int position, const QModelIndex &parent) removeRows(0, parent.child(position, 0)); beginRemoveRows(parent, position, position); - static_cast(parent.internalPointer())->deleteChild(position); + static_cast(parent.internalPointer())->deleteChild(position); endRemoveRows(); return false; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.cpp index 858922af1..cb49def05 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.cpp @@ -46,7 +46,7 @@ namespace NLQT { -static const char * const LocatedBindable[] = +static const char *const LocatedBindable[] = { QT_TR_NOOP("Point"), QT_TR_NOOP("LookAt"), @@ -220,7 +220,7 @@ void CParticleWorkspaceDialog::touchPSState(CParticleTreeItem *item) } } -void CParticleWorkspaceDialog::clickedItem(const QModelIndex & index) +void CParticleWorkspaceDialog::clickedItem(const QModelIndex &index) { if (_currentItem != 0) _treeModel->getOwnerNode(_currentItem)->getPSPointer()->setCurrentEditedElement(NULL); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.h index 3a317adc7..c7aa0e52b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/particle_workspace_dialog.h @@ -59,7 +59,7 @@ Q_SIGNALS: void changeActiveNode(); private Q_SLOTS: - void clickedItem(const QModelIndex & index); + void clickedItem(const QModelIndex &index); void customContextMenu(); void setActiveNode(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.h index 4add4b9db..79ea68a46 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_system.h @@ -61,13 +61,13 @@ public: } /// Sets the path which contains samples - void setSamplePath(std::string& path) + void setSamplePath(std::string &path) { _SamplePath = NLMISC::CPath::standardizePath(path, true); } /// Sets the path which contains packed sheet - void setPackedSheetPath(std::string& path) + void setPackedSheetPath(std::string &path) { _PackedSheetPath = NLMISC::CPath::standardizePath(path, true); } @@ -88,13 +88,13 @@ public: NLSOUND::USource *create(const std::string &soundName); /// Load the sound animation with the specified name - void loadAnimation(std::string& name) + void loadAnimation(std::string &name) { _AnimManager->loadAnimation(name); } /// Start playing a sound animation. - void playAnimation(std::string& name, float lastTime, float curTime, NLSOUND::CSoundContext &context); + void playAnimation(std::string &name, float lastTime, float curTime, NLSOUND::CSoundContext &context); // Update the sound animations. //static void updateAnimations(float lastTime, float curTime) { _AnimManager->update(lastTime, curTime); }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_appearance_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_appearance_page.cpp index 9c49871b3..0366bc11f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_appearance_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_appearance_page.cpp @@ -60,7 +60,7 @@ CVegetableApperancePage::CVegetableApperancePage(QWidget *parent) connect(_ui.removePushButton, SIGNAL(clicked()), this, SLOT(removeColor())); connect(_ui.getListPushButton, SIGNAL(clicked()), this, SLOT(getFromListColors())); - connect(_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(browseColor(QListWidgetItem*))); + connect(_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(browseColor(QListWidgetItem *))); setEnabled(false); } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/workspace_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/workspace_form.ui index 28705f097..b8bec17b7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/workspace_form.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/workspace_form.ui @@ -6,8 +6,8 @@ 0 0 - 337 - 232 + 235 + 293 @@ -130,8 +130,8 @@ - - + + false @@ -154,11 +154,11 @@ - Save + Unload - :/icons/ic_nel_save.png:/icons/ic_nel_save.png + :/icons/ic_nel_particle_system_close.png:/icons/ic_nel_particle_system_close.png @@ -166,9 +166,6 @@ 32 - - false - Qt::ToolButtonTextUnderIcon @@ -177,8 +174,8 @@ - - + + false @@ -201,11 +198,11 @@ - Save As + Save - :/icons/ic_nel_save_as.png:/icons/ic_nel_save_as.png + :/icons/ic_nel_save.png:/icons/ic_nel_save.png @@ -213,6 +210,9 @@ 32 + + false + Qt::ToolButtonTextUnderIcon @@ -221,8 +221,8 @@ - - + + false @@ -245,11 +245,11 @@ - Unload + Save As - :/icons/ic_nel_particle_system_close.png:/icons/ic_nel_particle_system_close.png + :/icons/ic_nel_save_as.png:/icons/ic_nel_save_as.png From 52a6e8010cd9ca625c870e426a39c76e65370719 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sun, 4 Sep 2011 18:48:37 +0200 Subject: [PATCH 46/60] Changed: #1306 some focus (in terms of widget focus) related additions, to provide expected usabillity (Tab/Click Focus etc.) --- .../georges_editor/georges_editor_form.cpp | 116 ++++++++++++------ .../georges_editor/georges_editor_form.h | 16 +-- .../georges_treeview_dialog.cpp | 67 +++------- .../georges_editor/georges_treeview_dialog.h | 5 +- .../georges_editor/georges_treeview_form.ui | 6 + .../georges_editor/georgesform_model.cpp | 4 +- 6 files changed, 117 insertions(+), 97 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp index c623d440b..f67be6471 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp @@ -39,8 +39,8 @@ namespace Plugin GeorgesEditorForm::GeorgesEditorForm(QWidget *parent) : QMainWindow(parent), m_georgesDirTreeDialog(0), - m_emptyDock(0), - m_mainDock(0) + m_mainDock(0), + m_lastActiveDock(0) { m_ui.setupUi(this); @@ -64,34 +64,26 @@ namespace Plugin m_undoStack = new QUndoStack(this); Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); - _openAction = menuManager->action(Core::Constants::OPEN); - - /*_openAction = new QAction(tr("&Open..."), this); - _openAction->setIcon(QIcon(Core::Constants::ICON_OPEN)); - _openAction->setShortcut(QKeySequence::Open); - _openAction->setStatusTip(tr("Open an existing file")); - connect(_openAction, SIGNAL(triggered()), this, SLOT(open()));*/ - - _newAction = new QAction(tr("&New..."), this); - _newAction->setIcon(QIcon(Core::Constants::ICON_NEW)); - _newAction->setShortcut(QKeySequence::New); - _newAction->setStatusTip(tr("Create a new file")); - connect(_newAction, SIGNAL(triggered()), this, SLOT(newFile())); - - _saveAction = new QAction(tr("&Save..."), this); - _saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE)); - _saveAction->setShortcut(QKeySequence::Save); - _saveAction->setStatusTip(tr("Save the current file")); - connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); - - _fileToolBar = addToolBar(tr("&File")); - _fileToolBar->addAction(_openAction); - _fileToolBar->addAction(_newAction); - _fileToolBar->addAction(_saveAction); - - //_openAction->setEnabled(false); - //_newAction->setEnabled(false); - //_saveAction->setEnabled(false); + m_openAction = menuManager->action(Core::Constants::OPEN); + + m_newAction = new QAction(tr("&New..."), this); + m_newAction->setIcon(QIcon(Core::Constants::ICON_NEW)); + m_newAction->setShortcut(QKeySequence::New); + m_newAction->setStatusTip(tr("Create a new file")); + connect(m_newAction, SIGNAL(triggered()), this, SLOT(newFile())); + + m_saveAction = new QAction(tr("&Save..."), this); + m_saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE)); + m_saveAction->setShortcut(QKeySequence::Save); + m_saveAction->setStatusTip(tr("Save the current file")); + connect(m_saveAction, SIGNAL(triggered()), this, SLOT(save())); + + m_fileToolBar = addToolBar(tr("&File")); + m_fileToolBar->addAction(m_openAction); + m_fileToolBar->addAction(m_newAction); + m_fileToolBar->addAction(m_saveAction); + + m_saveAction->setEnabled(false); readSettings(); @@ -104,6 +96,8 @@ namespace Plugin this, SLOT(settingsChanged())); connect(m_georgesDirTreeDialog, SIGNAL(selectedForm(const QString)), this, SLOT(loadFile(const QString))); + connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), + this, SLOT(focusChanged(QWidget*, QWidget*))); } GeorgesEditorForm::~GeorgesEditorForm() @@ -196,25 +190,34 @@ namespace Plugin if (!m_dockedWidgets.size()) { - m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock); + m_lastActiveDock = dock; + m_dockedWidgets.append(dock); + m_mainDock->addDockWidget(Qt::RightDockWidgetArea, m_dockedWidgets.last()); connect(m_dockedWidgets.last(), SIGNAL(closing()), this, SLOT(closingTreeView())); + connect(m_dockedWidgets.last(), SIGNAL(visibilityChanged(bool)), + m_dockedWidgets.last(), SLOT(checkVisibility(bool))); } else { - Q_FOREACH(QDockWidget *wgt, m_dockedWidgets) + Q_FOREACH(CGeorgesTreeViewDialog *wgt, m_dockedWidgets) { - if (info.fileName() == wgt->windowTitle()) + if (info.fileName() == wgt->loadedForm) { wgt->raise(); return; } } - m_dockedWidgets.append(new CGeorgesTreeViewDialog(m_mainDock)); + CGeorgesTreeViewDialog *dock = new CGeorgesTreeViewDialog(m_mainDock); + m_dockedWidgets.append(dock); + connect(m_dockedWidgets.last(), SIGNAL(closing()), this, SLOT(closingTreeView())); + connect(m_dockedWidgets.last(), SIGNAL(visibilityChanged(bool)), + m_dockedWidgets.last(), SLOT(checkVisibility(bool))); Q_ASSERT(m_dockedWidgets.size() > 1); m_mainDock->tabifyDockWidget(m_dockedWidgets.at(m_dockedWidgets.size() - 2), m_dockedWidgets.last()); } @@ -224,6 +227,8 @@ namespace Plugin m_dockedWidgets.last()->setForm(form); m_dockedWidgets.last()->loadFormIntoDialog(form); QApplication::processEvents(); + connect(m_dockedWidgets.last(), SIGNAL(modified()), + this, SLOT(setModified())); m_dockedWidgets.last()->raise(); connect(m_dockedWidgets.last(), SIGNAL(changeFile(QString)), m_georgesDirTreeDialog, SLOT(changeFile(QString))); @@ -236,10 +241,47 @@ namespace Plugin void GeorgesEditorForm::closingTreeView() { - int i = m_dockedWidgets.size(); + //qDebug() << "closingTreeView"; m_dockedWidgets.removeAll(qobject_cast(sender())); - i = m_dockedWidgets.size(); - int j = i; + if (qobject_cast(sender()) == m_lastActiveDock) + m_lastActiveDock = 0; + } + + void GeorgesEditorForm::setModified () + { + qDebug() << "setModified"; + if (m_lastActiveDock) + m_saveAction->setEnabled(m_lastActiveDock->isModified()); + else + m_saveAction->setEnabled(false); } + void GeorgesEditorForm::focusChanged ( QWidget * old, QWidget * now ) + { + if (now) + { + // ugly, UGLY hack for compensating QDockWidgets failure in focus API + if (now->objectName() == "treeView" || + now->objectName() == "checkBoxDefaults" || + now->objectName() == "checkBoxParent" || + now->objectName() == "commentEdit") + { + QWidget *dlg = 0; + QApplication::focusWidget()? + QApplication::focusWidget()->parentWidget()? + QApplication::focusWidget()->parentWidget()->parentWidget()? + QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()? + QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget()? + QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget()? + dlg=QApplication::focusWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget():dlg=0:dlg=0:dlg=0:dlg=0:dlg=0:dlg=0; + CGeorgesTreeViewDialog *active = qobject_cast(dlg); + if(active) + { + //qDebug() << "focusChanged" << active->loadedForm; + m_lastActiveDock = active; + m_saveAction->setEnabled(active->isModified()); + } + } + } + } } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h index 4ed91a5f6..6b270ca3d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h @@ -40,11 +40,14 @@ public: public Q_SLOTS: void open(); + void loadFile(const QString fileName); void newFile(); void save(); void settingsChanged(); - void loadFile(const QString fileName); void closingTreeView(); + void setModified(); + + void focusChanged(QWidget *old, QWidget *now); private: void readSettings(); @@ -54,18 +57,17 @@ private: Ui::GeorgesEditorForm m_ui; CGeorgesDirTreeDialog *m_georgesDirTreeDialog; - QToolBar *_fileToolBar; - QAction *_openAction; - QAction *_newAction; - QAction *_saveAction; + QToolBar *m_fileToolBar; + QAction *m_openAction; + QAction *m_newAction; + QAction *m_saveAction; QString m_leveldesignPath; - QDockWidget *m_emptyDock; QMainWindow *m_mainDock; QList m_dockedWidgets; - QList m_tabBars; + CGeorgesTreeViewDialog *m_lastActiveDock; }; /* class GeorgesEditorForm */ } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp index bc5dd7487..13b0dab03 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp @@ -20,6 +20,7 @@ #include #include #include +#include // NeL includes #include @@ -43,12 +44,12 @@ namespace Plugin CGeorgesTreeViewDialog::CGeorgesTreeViewDialog(QWidget *parent /*= 0*/) : QDockWidget(parent), - m_header(0) + m_header(0), + m_modified(false) { m_georges = new CGeorges; loadedForm = ""; - m_modified = false; m_ui.setupUi(this); m_header = new ExpandableHeaderView(Qt::Horizontal, m_ui.treeView); @@ -77,6 +78,7 @@ namespace Plugin CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog() { delete m_form; + qDebug() << "DTOR"; } void CGeorgesTreeViewDialog::headerClicked(int section) @@ -193,8 +195,8 @@ namespace Plugin filterRows(); // //_ui.treeView->setRowHidden(0,QModelIndex(),true); - // connect(model, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), - // this, SLOT(modifiedFile())); + connect(model, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), + this, SLOT(modifiedFile())); setWindowTitle(loadedForm); // //Modules::mainWin().getTabBar(); @@ -208,13 +210,12 @@ namespace Plugin void CGeorgesTreeViewDialog::modifiedFile( ) { - /*if (!_modified) + if (!m_modified) { - _modified = true; - setWindowTitle(windowTitle()+"*"); - Modules::mainWin().setWindowTitle(Modules::mainWin().windowTitle()+"*"); - Q_EMIT modified(_modified); - }*/ + m_modified = true; + setWindowTitle(windowTitle() + "*"); + } + Q_EMIT modified(); } void CGeorgesTreeViewDialog::write( ) @@ -366,52 +367,22 @@ namespace Plugin deleteLater(); } + void CGeorgesTreeViewDialog::checkVisibility(bool visible) { + // this prevents invisible docks from getting tab focus + qDebug() << "checkVisibility" << visible; + setEnabled(visible); + //if (visible) + Q_EMIT modified(); + } + void CGeorgesTreeViewDialog::filterRows() { - nlinfo("CGeorgesTreeViewDialog::filterRows"); CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model()); CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); if (m) { m->setShowParents(m_ui.checkBoxParent->isChecked()); m->setShowDefaults(m_ui.checkBoxDefaults->isChecked()); } - - //CGeorgesFormProxyModel * mp = dynamic_cast(_ui.treeView->model()); - //CGeorgesFormModel *m = dynamic_cast(mp->sourceModel()); - - //for (int i = 0; i < m->rowCount(); i++) - //{ - // const QModelIndex in = m->index(i,0); - // if (m->getItem(in)->nodeFrom() == UFormElm::NodeParentForm) - // { - // if (newState == Qt::Checked) - // { - // _ui.treeView->setRowHidden(in.row(),in.parent(),false); - // } - // else - // { - // _ui.treeView->setRowHidden(in.row(),in.parent(),true); - // } - // } - // else - // { // search childs // recursive? - // for (int j = 0; j < m->rowCount(in); j++) - // { - // const QModelIndex in2 = m->index(j,0,in); - // if (m->getItem(in2)->nodeFrom() == UFormElm::NodeParentForm) - // { - // if (newState == Qt::Checked) - // { - // _ui.treeView->setRowHidden(in2.row(),in,false); - // } - // else - // { - // _ui.treeView->setRowHidden(in2.row(),in,true); - // } - // } - // } - // } // end of search childs - //} } } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h index e4c5dcdf4..4992c9b23 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.h @@ -50,7 +50,7 @@ namespace Plugin CGeorgesTreeViewDialog(QWidget *parent = 0); ~CGeorgesTreeViewDialog(); - bool modified() {return m_modified;} + bool isModified() {return m_modified;} void setModified(bool m) {m_modified = m;} CForm* getFormByName(const QString); @@ -67,13 +67,14 @@ namespace Plugin Q_SIGNALS: void changeFile(QString); - void modified(bool); + void modified(); void closing(); public Q_SLOTS: void setForm(const CForm*); void loadFormIntoDialog(CForm *form = 0); void modifiedFile( ); + void checkVisibility(bool); private Q_SLOTS: void doubleClicked ( const QModelIndex & index ); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui index 71db74326..183b16118 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui @@ -22,6 +22,9 @@ 165 + + Qt::NoFocus + @@ -36,6 +39,9 @@ 0 + + Qt::NoFocus + Form diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp index 3ae798dea..f6b9c441b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp @@ -245,9 +245,7 @@ namespace Plugin CFormItem *item = getItem(index); bool result = item->setData(index.column(), value); - // // TODO: ugly hack for updating icon too - // if (result) - // Q_EMIT dataChanged(index, this->index(index.row(),index.column()+1,index.parent())); + Q_EMIT dataChanged(index, index); //setupModelData(); return result; From 16383043d563a76ed40d57001f3546c4d1f27174 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 10 Sep 2011 18:43:21 +0200 Subject: [PATCH 47/60] Fixed: "relocation R_X86_64_32 against.." error when mixing static and shared libraries --- code/CMakeModules/nel.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 1524ebf46..19e0ea5c0 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -368,6 +368,11 @@ MACRO(NL_SETUP_BUILD) SET(PLATFORM_CFLAGS "-gdwarf-2 ${PLATFORM_CFLAGS}") ENDIF(APPLE) + # Fix "relocation R_X86_64_32 against.." error on x64 platforms + IF(TARGET_X64 AND WITH_STATIC AND NOT WITH_STATIC_DRIVERS) + SET(PLATFORM_CFLAGS "-fPIC ${PLATFORM_CFLAGS}") + ENDIF(TARGET_X64 AND WITH_STATIC AND NOT WITH_STATIC_DRIVERS) + SET(PLATFORM_CXXFLAGS ${PLATFORM_CFLAGS}) IF(NOT APPLE) From 60ba9387948b117b630a089b09ec6271692b2917 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 10 Sep 2011 18:45:54 +0200 Subject: [PATCH 48/60] Changed: Allow to use external under Linux and Mac OS X --- code/CMakeModules/FindExternal.cmake | 14 +++++++------- code/CMakeModules/nel.cmake | 16 +++++++++++----- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/code/CMakeModules/FindExternal.cmake b/code/CMakeModules/FindExternal.cmake index 1ca01bd99..5d6086bc6 100644 --- a/code/CMakeModules/FindExternal.cmake +++ b/code/CMakeModules/FindExternal.cmake @@ -8,7 +8,7 @@ # EXTERNAL_FOUND - True if the external libraries are available SET(EXTERNAL_TEMP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/../external ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty ${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty ${EXTERNAL_PATH}) -SET(EXTERNAL_TEMP_FILE "include/zlib.h") +SET(EXTERNAL_TEMP_FILE "include/wwwconf.h") SET(EXTERNAL_NAME "external") # If using STLport preprend external_stlport @@ -36,18 +36,18 @@ IF(EXTERNAL_PATH) SET(EXTERNAL_INCLUDE_PATH "${EXTERNAL_PATH}/include") # Using 32 or 64 bits binaries - IF(TARGET_X64) + IF(TARGET_X64 AND WIN32) SET(EXTERNAL_BINARY_PATH "${EXTERNAL_PATH}/bin64") - ELSE(TARGET_X64) + ELSE(TARGET_X64 AND WIN32) SET(EXTERNAL_BINARY_PATH "${EXTERNAL_PATH}/bin") - ENDIF(TARGET_X64) + ENDIF(TARGET_X64 AND WIN32) # Using 32 or 64 bits libraries - IF(TARGET_X64) + IF(TARGET_X64 AND WIN32) SET(EXTERNAL_LIBRARY_PATH "${EXTERNAL_PATH}/lib64") - ELSE(TARGET_X64) + ELSE(TARGET_X64 AND WIN32) SET(EXTERNAL_LIBRARY_PATH "${EXTERNAL_PATH}/lib") - ENDIF(TARGET_X64) + ENDIF(TARGET_X64 AND WIN32) SET(CMAKE_INCLUDE_PATH "${EXTERNAL_INCLUDE_PATH};${CMAKE_INCLUDE_PATH}") # Stupid hack for FindOpenAL.cmake diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 19e0ea5c0..64e3e7275 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -178,6 +178,11 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS) OPTION(WITH_STATIC "With static libraries." OFF) ENDIF(WIN32) OPTION(WITH_STATIC_DRIVERS "With static drivers." OFF) + IF(WIN32) + OPTION(WITH_EXTERNAL "With provided external." ON ) + ELSE(WIN32) + OPTION(WITH_EXTERNAL "With provided external." OFF) + ENDIF(WIN32) OPTION(WITH_STATIC_EXTERNAL "With static external libraries" OFF) ### @@ -203,9 +208,9 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS) OPTION(BUILD_DASHBOARD "Build to the CDash dashboard" OFF) - OPTION(WITH_NEL "Build NeL (nearly always required)." ON ) - OPTION(WITH_NELNS "Build NeL Network Services." OFF) - OPTION(WITH_RYZOM "Build Ryzom Core." ON ) + OPTION(WITH_NEL "Build NeL (nearly always required)." ON ) + OPTION(WITH_NELNS "Build NeL Network Services." OFF) + OPTION(WITH_RYZOM "Build Ryzom Core." ON ) OPTION(WITH_SNOWBALLS "Build Snowballs." OFF) ENDMACRO(NL_SETUP_DEFAULT_OPTIONS) @@ -518,9 +523,11 @@ MACRO(RYZOM_SETUP_PREFIX_PATHS) ENDMACRO(RYZOM_SETUP_PREFIX_PATHS) MACRO(SETUP_EXTERNAL) - IF(WIN32) + IF(WITH_EXTERNAL) FIND_PACKAGE(External REQUIRED) + ENDIF(WITH_EXTERNAL) + IF(WIN32) INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake) IF(MSVC10) IF(NOT MSVC10_REDIST_DIR) @@ -567,5 +574,4 @@ MACRO(SETUP_EXTERNAL) INCLUDE_DIRECTORIES(${VC_INCLUDE_DIR} ${WINSDK_INCLUDE_DIR}) ENDIF(WIN32) ENDIF(WITH_STLPORT) - ENDMACRO(SETUP_EXTERNAL) From 630683342339c4746038e8e9ba9cb68311d0535e Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 11 Sep 2011 14:44:37 +0200 Subject: [PATCH 49/60] Changed: New option WITH_INSTALL_LIBRARIES which allows user to install only final binaries and no development files (header, static libraries, etc...) --- code/CMakeModules/nel.cmake | 43 ++++++++++--------- code/nel/CMakeLists.txt | 39 +++++++++-------- code/nel/src/3d/CMakeLists.txt | 5 ++- .../nel/src/3d/driver/direct3d/CMakeLists.txt | 10 +++-- code/nel/src/3d/driver/opengl/CMakeLists.txt | 10 +++-- code/nel/src/cegui/CMakeLists.txt | 4 +- code/nel/src/georges/CMakeLists.txt | 5 ++- code/nel/src/ligo/CMakeLists.txt | 5 ++- code/nel/src/logic/CMakeLists.txt | 4 +- code/nel/src/misc/CMakeLists.txt | 5 ++- code/nel/src/net/CMakeLists.txt | 5 ++- code/nel/src/pacs/CMakeLists.txt | 5 ++- code/nel/src/sound/CMakeLists.txt | 5 ++- code/nel/src/sound/driver/CMakeLists.txt | 4 +- .../src/sound/driver/dsound/CMakeLists.txt | 10 +++-- code/nel/src/sound/driver/fmod/CMakeLists.txt | 10 +++-- .../src/sound/driver/openal/CMakeLists.txt | 10 +++-- .../src/sound/driver/xaudio2/CMakeLists.txt | 10 +++-- code/ryzom/client/CMakeLists.txt | 4 +- code/ryzom/client/src/CMakeLists.txt | 8 ++-- .../client/src/client_sheets/CMakeLists.txt | 4 +- .../ryzom/client/src/seven_zip/CMakeLists.txt | 6 ++- .../common/src/game_share/CMakeLists.txt | 5 ++- 23 files changed, 132 insertions(+), 84 deletions(-) diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 64e3e7275..5c5efc4a9 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -3,10 +3,10 @@ # Argument: name - the name of the .pc package, e.g. "nel-pacs.pc" ### MACRO(NL_GEN_PC name) - IF(NOT WIN32) + IF(NOT WIN32 AND WITH_INSTALL_LIBRARIES) CONFIGURE_FILE(${name}.in "${CMAKE_CURRENT_BINARY_DIR}/${name}") INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/${name}" DESTINATION lib/pkgconfig) - ENDIF(NOT WIN32) + ENDIF(NOT WIN32 AND WITH_INSTALL_LIBRARIES) ENDMACRO(NL_GEN_PC) ### @@ -184,6 +184,7 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS) OPTION(WITH_EXTERNAL "With provided external." OFF) ENDIF(WIN32) OPTION(WITH_STATIC_EXTERNAL "With static external libraries" OFF) + OPTION(WITH_INSTALL_LIBRARIES "Install development files." ON ) ### # GUI toolkits @@ -211,7 +212,7 @@ MACRO(NL_SETUP_DEFAULT_OPTIONS) OPTION(WITH_NEL "Build NeL (nearly always required)." ON ) OPTION(WITH_NELNS "Build NeL Network Services." OFF) OPTION(WITH_RYZOM "Build Ryzom Core." ON ) - OPTION(WITH_SNOWBALLS "Build Snowballs." OFF) + OPTION(WITH_SNOWBALLS "Build Snowballs." OFF) ENDMACRO(NL_SETUP_DEFAULT_OPTIONS) MACRO(NL_SETUP_NEL_DEFAULT_OPTIONS) @@ -327,18 +328,18 @@ MACRO(NL_SETUP_BUILD) SET(SPEED_OPTIMIZATIONS "/Ox /GF /GS-") # without inlining it's unusable, use custom optimizations again SET(MIN_OPTIMIZATIONS "/Od /Ob1") - ELSEIF(MSVC90) + ELSEIF(MSVC90) # don't use a /O[012x] flag if you want custom optimizations SET(SPEED_OPTIMIZATIONS "/Ob2 /Oi /Ot /Oy /GT /GF /GS-") # without inlining it's unusable, use custom optimizations again SET(MIN_OPTIMIZATIONS "/Ob1") - ELSEIF(MSVC80) + ELSEIF(MSVC80) # don't use a /O[012x] flag if you want custom optimizations SET(SPEED_OPTIMIZATIONS "/Ox /GF /GS-") # without inlining it's unusable, use custom optimizations again SET(MIN_OPTIMIZATIONS "/Od /Ob1") - ELSE(MSVC10) - MESSAGE(FATAL_ERROR "Can't determine compiler version ${MSVC_VERSION}") + ELSE(MSVC10) + MESSAGE(FATAL_ERROR "Can't determine compiler version ${MSVC_VERSION}") ENDIF(MSVC10) SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /DWIN32 /D_WINDOWS /W3 /Zi /Zm1000 /MP /Gy-") @@ -480,43 +481,43 @@ MACRO(RYZOM_SETUP_PREFIX_PATHS) IF(WIN32) SET(RYZOM_ETC_PREFIX "." CACHE PATH "Installation path for configurations") ELSE(WIN32) - SET(RYZOM_ETC_PREFIX "${CMAKE_INSTALL_PREFIX}/etc/ryzom" CACHE PATH "Installation path for configurations") + SET(RYZOM_ETC_PREFIX "${RYZOM_PREFIX}/etc/ryzom" CACHE PATH "Installation path for configurations") ENDIF(WIN32) ENDIF(NOT RYZOM_ETC_PREFIX) ## Allow override of install_prefix/share path. IF(NOT RYZOM_SHARE_PREFIX) IF(WIN32) - SET(RYZOM_SHARE_PREFIX "." CACHE PATH "Installation path for data.") - ELSE(WIN32) - SET(RYZOM_SHARE_PREFIX "${CMAKE_INSTALL_PREFIX}/share/ryzom" CACHE PATH "Installation path for data.") - ENDIF(WIN32) + SET(RYZOM_SHARE_PREFIX "." CACHE PATH "Installation path for data.") + ELSE(WIN32) + SET(RYZOM_SHARE_PREFIX "${RYZOM_PREFIX}/share/ryzom" CACHE PATH "Installation path for data.") + ENDIF(WIN32) ENDIF(NOT RYZOM_SHARE_PREFIX) ## Allow override of install_prefix/sbin path. IF(NOT RYZOM_SBIN_PREFIX) - IF(WIN32) - SET(RYZOM_SBIN_PREFIX "." CACHE PATH "Installation path for admin tools and services.") - ELSE(WIN32) - SET(RYZOM_SBIN_PREFIX "${CMAKE_INSTALL_PREFIX}/sbin" CACHE PATH "Installation path for admin tools and services.") - ENDIF(WIN32) + IF(WIN32) + SET(RYZOM_SBIN_PREFIX "." CACHE PATH "Installation path for admin tools and services.") + ELSE(WIN32) + SET(RYZOM_SBIN_PREFIX "${RYZOM_PREFIX}/sbin" CACHE PATH "Installation path for admin tools and services.") + ENDIF(WIN32) ENDIF(NOT RYZOM_SBIN_PREFIX) ## Allow override of install_prefix/bin path. IF(NOT RYZOM_BIN_PREFIX) IF(WIN32) - SET(RYZOM_BIN_PREFIX "." CACHE PATH "Installation path for tools and applications.") + SET(RYZOM_BIN_PREFIX "." CACHE PATH "Installation path for tools and applications.") ELSE(WIN32) - SET(RYZOM_BIN_PREFIX "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation path for tools.") + SET(RYZOM_BIN_PREFIX "${RYZOM_PREFIX}/bin" CACHE PATH "Installation path for tools.") ENDIF(WIN32) ENDIF(NOT RYZOM_BIN_PREFIX) ## Allow override of install_prefix/games path. IF(NOT RYZOM_GAMES_PREFIX) IF(WIN32) - SET(RYZOM_GAMES_PREFIX "." CACHE PATH "Installation path for tools and applications.") + SET(RYZOM_GAMES_PREFIX "." CACHE PATH "Installation path for tools and applications.") ELSE(WIN32) - SET(RYZOM_GAMES_PREFIX "${CMAKE_INSTALL_PREFIX}/games" CACHE PATH "Installation path for client.") + SET(RYZOM_GAMES_PREFIX "${RYZOM_PREFIX}/games" CACHE PATH "Installation path for client.") ENDIF(WIN32) ENDIF(NOT RYZOM_GAMES_PREFIX) diff --git a/code/nel/CMakeLists.txt b/code/nel/CMakeLists.txt index ead484a2d..57f7edd44 100644 --- a/code/nel/CMakeLists.txt +++ b/code/nel/CMakeLists.txt @@ -54,24 +54,27 @@ IF(WITH_GTK) FIND_PACKAGE(GTK2) ENDIF(WITH_GTK) -IF(UNIX) - SET(prefix ${CMAKE_INSTALL_PREFIX}) - SET(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin) - SET(libdir ${CMAKE_INSTALL_PREFIX}/lib) - SET(includedir ${CMAKE_INSTALL_PREFIX}/include) - SET(enable_ligo ${WITH_LIGO}) - SET(enable_logic ${WITH_LOGIC}) - SET(enable_georges ${WITH_GEORGES}) - SET(enable_net ${WITH_NET}) - SET(enable_3d ${WITH_3D}) - SET(enable_pacs ${WITH_PACS}) - SET(enable_sound ${WITH_SOUND}) - CONFIGURE_FILE(nel-config.in ${CMAKE_CURRENT_BINARY_DIR}/nel-config) - - INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/nel-config DESTINATION bin) -ENDIF(UNIX) - -ADD_SUBDIRECTORY(include) +IF(WITH_INSTALL_LIBRARIES) + IF(UNIX) + SET(prefix ${CMAKE_INSTALL_PREFIX}) + SET(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin) + SET(libdir ${CMAKE_INSTALL_PREFIX}/lib) + SET(includedir ${CMAKE_INSTALL_PREFIX}/include) + SET(enable_ligo ${WITH_LIGO}) + SET(enable_logic ${WITH_LOGIC}) + SET(enable_georges ${WITH_GEORGES}) + SET(enable_net ${WITH_NET}) + SET(enable_3d ${WITH_3D}) + SET(enable_pacs ${WITH_PACS}) + SET(enable_sound ${WITH_SOUND}) + CONFIGURE_FILE(nel-config.in ${CMAKE_CURRENT_BINARY_DIR}/nel-config) + + INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/nel-config DESTINATION bin) + ENDIF(UNIX) + + ADD_SUBDIRECTORY(include) +ENDIF(WITH_INSTALL_LIBRARIES) + ADD_SUBDIRECTORY(src) IF(WITH_NEL_SAMPLES) diff --git a/code/nel/src/3d/CMakeLists.txt b/code/nel/src/3d/CMakeLists.txt index 3888be211..45b38fcbd 100644 --- a/code/nel/src/3d/CMakeLists.txt +++ b/code/nel/src/3d/CMakeLists.txt @@ -706,6 +706,9 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-3d.pc) -INSTALL(TARGETS nel3d LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nel3d LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) ADD_SUBDIRECTORY(driver) diff --git a/code/nel/src/3d/driver/direct3d/CMakeLists.txt b/code/nel/src/3d/driver/direct3d/CMakeLists.txt index 5011c3c45..cc61fa9bd 100644 --- a/code/nel/src/3d/driver/direct3d/CMakeLists.txt +++ b/code/nel/src/3d/driver/direct3d/CMakeLists.txt @@ -16,7 +16,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(nel_drv_direct3d_win ${CMAKE_CURRENT_SOURCE_DIR}/stddirect3d.h ${CMAKE_CURRENT_SOURCE_DIR}/stddirect3d.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS nel_drv_direct3d_win LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib RUNTIME DESTINATION bin COMPONENT drivers3d) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS nel_drv_direct3d_win RUNTIME DESTINATION maxplugin COMPONENT drivers3d) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS nel_drv_direct3d_win LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib RUNTIME DESTINATION bin COMPONENT drivers3d) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS nel_drv_direct3d_win RUNTIME DESTINATION maxplugin COMPONENT drivers3d) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/nel/src/3d/driver/opengl/CMakeLists.txt b/code/nel/src/3d/driver/opengl/CMakeLists.txt index 6fdecab71..d90c7e0b3 100644 --- a/code/nel/src/3d/driver/opengl/CMakeLists.txt +++ b/code/nel/src/3d/driver/opengl/CMakeLists.txt @@ -61,7 +61,9 @@ IF(NOT APPLE AND WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(${NLDRV_OGL_LIB} ${CMAKE_CURRENT_SOURCE_DIR}/stdopengl.h ${CMAKE_CURRENT_SOURCE_DIR}/stdopengl.cpp) ENDIF(NOT APPLE AND WITH_PCH) -INSTALL(TARGETS ${NLDRV_OGL_LIB} LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib RUNTIME DESTINATION bin COMPONENT drivers3d) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS ${NLDRV_OGL_LIB} RUNTIME DESTINATION maxplugin COMPONENT drivers3d) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS ${NLDRV_OGL_LIB} LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib RUNTIME DESTINATION bin COMPONENT drivers3d) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS ${NLDRV_OGL_LIB} RUNTIME DESTINATION maxplugin COMPONENT drivers3d) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/nel/src/cegui/CMakeLists.txt b/code/nel/src/cegui/CMakeLists.txt index 99fcfedf3..342e08780 100644 --- a/code/nel/src/cegui/CMakeLists.txt +++ b/code/nel/src/cegui/CMakeLists.txt @@ -11,4 +11,6 @@ NL_ADD_LIB_SUFFIX(nelceguirenderer) ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DNEL_CEGUIRENDERER_EXPORTS) -INSTALL(TARGETS nelceguirenderer RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelceguirenderer RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/georges/CMakeLists.txt b/code/nel/src/georges/CMakeLists.txt index d3c0199d7..6954bb87b 100644 --- a/code/nel/src/georges/CMakeLists.txt +++ b/code/nel/src/georges/CMakeLists.txt @@ -21,4 +21,7 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-georges.pc) -INSTALL(TARGETS nelgeorges LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelgeorges LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/ligo/CMakeLists.txt b/code/nel/src/ligo/CMakeLists.txt index f600637b7..4d8d49f3d 100644 --- a/code/nel/src/ligo/CMakeLists.txt +++ b/code/nel/src/ligo/CMakeLists.txt @@ -19,4 +19,7 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-ligo.pc) -INSTALL(TARGETS nelligo LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelligo LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/logic/CMakeLists.txt b/code/nel/src/logic/CMakeLists.txt index 107c57850..c84e8d18e 100644 --- a/code/nel/src/logic/CMakeLists.txt +++ b/code/nel/src/logic/CMakeLists.txt @@ -14,4 +14,6 @@ NL_ADD_LIB_SUFFIX(nellogic) ADD_DEFINITIONS(${LIBXML2_DEFINITIONS}) -INSTALL(TARGETS nellogic LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nellogic LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/misc/CMakeLists.txt b/code/nel/src/misc/CMakeLists.txt index 1710e5b6b..38d291552 100644 --- a/code/nel/src/misc/CMakeLists.txt +++ b/code/nel/src/misc/CMakeLists.txt @@ -53,4 +53,7 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-misc.pc) -INSTALL(TARGETS nelmisc LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelmisc LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/net/CMakeLists.txt b/code/nel/src/net/CMakeLists.txt index ea68efe32..c24a94215 100644 --- a/code/nel/src/net/CMakeLists.txt +++ b/code/nel/src/net/CMakeLists.txt @@ -24,4 +24,7 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-net.pc) -INSTALL(TARGETS nelnet LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelnet LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/pacs/CMakeLists.txt b/code/nel/src/pacs/CMakeLists.txt index 0fa059d68..62a809407 100644 --- a/code/nel/src/pacs/CMakeLists.txt +++ b/code/nel/src/pacs/CMakeLists.txt @@ -19,4 +19,7 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-pacs.pc) -INSTALL(TARGETS nelpacs LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelpacs LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/nel/src/sound/CMakeLists.txt b/code/nel/src/sound/CMakeLists.txt index 9497357ee..21c1de1f8 100644 --- a/code/nel/src/sound/CMakeLists.txt +++ b/code/nel/src/sound/CMakeLists.txt @@ -19,6 +19,9 @@ IF(WITH_PCH) ENDIF(WITH_PCH) NL_GEN_PC(nel-sound.pc) -INSTALL(TARGETS nelsound LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelsound LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) ADD_SUBDIRECTORY(driver) diff --git a/code/nel/src/sound/driver/CMakeLists.txt b/code/nel/src/sound/driver/CMakeLists.txt index c2ae80606..1a8391c41 100644 --- a/code/nel/src/sound/driver/CMakeLists.txt +++ b/code/nel/src/sound/driver/CMakeLists.txt @@ -23,7 +23,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(nelsnd_lowlevel ${CMAKE_CURRENT_SOURCE_DIR}/stdsound_lowlevel.h ${CMAKE_CURRENT_SOURCE_DIR}/stdsound_lowlevel.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS nelsnd_lowlevel LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS nelsnd_lowlevel LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) IF(WITH_DRIVER_OPENAL) ADD_SUBDIRECTORY(openal) diff --git a/code/nel/src/sound/driver/dsound/CMakeLists.txt b/code/nel/src/sound/driver/dsound/CMakeLists.txt index f2d13d785..c2fc934dc 100644 --- a/code/nel/src/sound/driver/dsound/CMakeLists.txt +++ b/code/nel/src/sound/driver/dsound/CMakeLists.txt @@ -13,7 +13,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(nel_drv_dsound_win ${CMAKE_CURRENT_SOURCE_DIR}/stddsound.h ${CMAKE_CURRENT_SOURCE_DIR}/stddsound.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS nel_drv_dsound_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS nel_drv_dsound_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS nel_drv_dsound_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS nel_drv_dsound_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/nel/src/sound/driver/fmod/CMakeLists.txt b/code/nel/src/sound/driver/fmod/CMakeLists.txt index 049d8b627..e641a9277 100644 --- a/code/nel/src/sound/driver/fmod/CMakeLists.txt +++ b/code/nel/src/sound/driver/fmod/CMakeLists.txt @@ -13,7 +13,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(nel_drv_fmod_win ${CMAKE_CURRENT_SOURCE_DIR}/stdfmod.h ${CMAKE_CURRENT_SOURCE_DIR}/stdfmod.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS nel_drv_fmod_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS nel_drv_fmod_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS nel_drv_fmod_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS nel_drv_fmod_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/nel/src/sound/driver/openal/CMakeLists.txt b/code/nel/src/sound/driver/openal/CMakeLists.txt index 53b0c8c2a..47ce5b24f 100644 --- a/code/nel/src/sound/driver/openal/CMakeLists.txt +++ b/code/nel/src/sound/driver/openal/CMakeLists.txt @@ -44,7 +44,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(${NLDRV_AL_LIB} ${CMAKE_CURRENT_SOURCE_DIR}/stdopenal.h ${CMAKE_CURRENT_SOURCE_DIR}/stdopenal.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS ${NLDRV_AL_LIB} RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS ${NLDRV_AL_LIB} RUNTIME DESTINATION maxplugin COMPONENT driverssound) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS ${NLDRV_AL_LIB} RUNTIME DESTINATION ${NL_DRIVER_PREFIX} LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS ${NLDRV_AL_LIB} RUNTIME DESTINATION maxplugin COMPONENT driverssound) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/nel/src/sound/driver/xaudio2/CMakeLists.txt b/code/nel/src/sound/driver/xaudio2/CMakeLists.txt index 5e45a9809..eb342a4df 100644 --- a/code/nel/src/sound/driver/xaudio2/CMakeLists.txt +++ b/code/nel/src/sound/driver/xaudio2/CMakeLists.txt @@ -40,7 +40,9 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(nel_drv_xaudio2_win ${CMAKE_CURRENT_SOURCE_DIR}/stdxaudio2.h ${CMAKE_CURRENT_SOURCE_DIR}/stdxaudio2.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS nel_drv_xaudio2_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) -IF(WITH_MAXPLUGIN) - INSTALL(TARGETS nel_drv_xaudio2_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) -ENDIF(WITH_MAXPLUGIN) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) + INSTALL(TARGETS nel_drv_xaudio2_win RUNTIME DESTINATION bin LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION lib COMPONENT driverssound) + IF(WITH_MAXPLUGIN) + INSTALL(TARGETS nel_drv_xaudio2_win RUNTIME DESTINATION maxplugin COMPONENT driverssound) + ENDIF(WITH_MAXPLUGIN) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC_DRIVERS) OR NOT WITH_STATIC_DRIVERS) diff --git a/code/ryzom/client/CMakeLists.txt b/code/ryzom/client/CMakeLists.txt index db2ffce2a..36090be7b 100644 --- a/code/ryzom/client/CMakeLists.txt +++ b/code/ryzom/client/CMakeLists.txt @@ -1,6 +1,6 @@ ADD_SUBDIRECTORY(src) -ADD_SUBDIRECTORY(data) -ADD_SUBDIRECTORY(patcher) +#ADD_SUBDIRECTORY(data) +#ADD_SUBDIRECTORY(patcher) IF(UNIX AND NOT APPLE) ADD_SUBDIRECTORY(unix) diff --git a/code/ryzom/client/src/CMakeLists.txt b/code/ryzom/client/src/CMakeLists.txt index 84ea6a369..3971fb98f 100644 --- a/code/ryzom/client/src/CMakeLists.txt +++ b/code/ryzom/client/src/CMakeLists.txt @@ -94,12 +94,12 @@ TARGET_LINK_LIBRARIES(ryzom_client ) IF(NOT APPLE AND NOT WIN32) - TARGET_LINK_LIBRARIES(ryzom_client ${X11_LIBRARIES}) + TARGET_LINK_LIBRARIES(ryzom_client ${X11_LIBRARIES}) ENDIF(NOT APPLE AND NOT WIN32) IF(APPLE) - FIND_LIBRARY(FOUNDATION_LIBRARY Foundation) - TARGET_LINK_LIBRARIES(ryzom_client ${FOUNDATION_LIBRARY}) + FIND_LIBRARY(FOUNDATION_LIBRARY Foundation) + TARGET_LINK_LIBRARIES(ryzom_client ${FOUNDATION_LIBRARY}) ENDIF(APPLE) ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${CURL_DEFINITIONS} ${LUABIND_DEFINITIONS}) @@ -113,4 +113,4 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(ryzom_client ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS ryzom_client RUNTIME DESTINATION games COMPONENT client BUNDLE DESTINATION /Applications) +INSTALL(TARGETS ryzom_client RUNTIME DESTINATION ${RYZOM_GAMES_PREFIX} COMPONENT client BUNDLE DESTINATION /Applications) diff --git a/code/ryzom/client/src/client_sheets/CMakeLists.txt b/code/ryzom/client/src/client_sheets/CMakeLists.txt index cc02e3c64..4f21ecf9d 100644 --- a/code/ryzom/client/src/client_sheets/CMakeLists.txt +++ b/code/ryzom/client/src/client_sheets/CMakeLists.txt @@ -13,4 +13,6 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(ryzom_clientsheets ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS ryzom_clientsheets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS ryzom_clientsheets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/ryzom/client/src/seven_zip/CMakeLists.txt b/code/ryzom/client/src/seven_zip/CMakeLists.txt index 80bd946a6..85212084e 100644 --- a/code/ryzom/client/src/seven_zip/CMakeLists.txt +++ b/code/ryzom/client/src/seven_zip/CMakeLists.txt @@ -19,5 +19,7 @@ NL_ADD_LIB_SUFFIX(ryzom_sevenzip) ADD_DEFINITIONS(-D_SZ_ONE_DIRECTORY) -INSTALL(TARGETS ryzom_sevenzip LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) -INSTALL(TARGETS 7zDec RUNTIME DESTINATION bin COMPONENT client) +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS ryzom_sevenzip LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) + INSTALL(TARGETS 7zDec RUNTIME DESTINATION bin COMPONENT client) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) diff --git a/code/ryzom/common/src/game_share/CMakeLists.txt b/code/ryzom/common/src/game_share/CMakeLists.txt index 7883ce03d..6342f468d 100644 --- a/code/ryzom/common/src/game_share/CMakeLists.txt +++ b/code/ryzom/common/src/game_share/CMakeLists.txt @@ -22,5 +22,6 @@ IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(ryzom_gameshare ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp) ENDIF(WITH_PCH) -INSTALL(TARGETS ryzom_gameshare LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) - +IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) + INSTALL(TARGETS ryzom_gameshare LIBRARY DESTINATION lib ARCHIVE DESTINATION lib COMPONENT libraries) +ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC) From 54bfe9aff42f75a073f667db6b92290e6e425c9c Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 11 Sep 2011 16:41:16 +0200 Subject: [PATCH 50/60] Changed: Replaced 32x32 pixmap by a 48x48 one --- code/ryzom/client/unix/ryzom.xpm | 1930 ++++++++++++++++++++---------- 1 file changed, 1311 insertions(+), 619 deletions(-) diff --git a/code/ryzom/client/unix/ryzom.xpm b/code/ryzom/client/unix/ryzom.xpm index 43748c2ce..5e6ef89df 100644 --- a/code/ryzom/client/unix/ryzom.xpm +++ b/code/ryzom/client/unix/ryzom.xpm @@ -1,621 +1,1313 @@ /* XPM */ -static char * ryzom_32x32_xpm[] = { -"32 32 586 2", +static char * ryzom_48x48_xpm[] = { +"48 48 1262 2", " c None", -". c #CACCCA", -"+ c #737766", -"@ c #747674", -"# c #717175", -"$ c #6E6E71", -"% c #8A9293", -"& c #888477", -"* c #63605B", -"= c #83856E", -"- c #888C7E", -"; c #666D60", -"> c #4A483C", -", c #433729", -"' c #8A816C", -") c #48453A", -"! c #3D3A32", -"~ c #6B6A61", -"{ c #8A8B8A", -"] c #989592", -"^ c #948F87", -"/ c #7E7861", -"( c #59513F", -"_ c #65604F", -": c #918F86", -"< c #5F5E45", -"[ c #4B5735", -"} c #3F462F", -"| c #443F31", -"1 c #49483C", -"2 c #7F7B6F", -"3 c #6E6049", -"4 c #696C6D", -"5 c #483C2F", -"6 c #403623", -"7 c #5B4C3B", -"8 c #514237", -"9 c #66553A", -"0 c #645B3E", -"a c #878B79", -"b c #93948B", -"c c #605C3B", -"d c #4D5032", -"e c #373117", -"f c #48512C", -"g c #52633A", -"h c #2B2818", -"i c #664E32", -"j c #37341B", -"k c #636156", -"l c #737769", -"m c #454935", -"n c #3F4430", -"o c #666637", -"p c #5E712F", -"q c #535435", -"r c #7D7E6A", -"s c #717267", -"t c #6E6B6A", -"u c #545B46", -"v c #6D715E", -"w c #767960", -"x c #575736", -"y c #42512E", -"z c #303828", -"A c #3E3C22", -"B c #4D4B1E", -"C c #323916", -"D c #565137", -"E c #4A3D26", -"F c #3E3E24", -"G c #746E37", -"H c #5F5B2F", -"I c #232A10", -"J c #1F2513", -"K c #5B5B3C", -"L c #807B63", -"M c #625C4B", -"N c #6B675B", -"O c #90968D", -"P c #7B7E7B", -"Q c #7C8380", -"R c #4B503E", -"S c #1D2212", -"T c #4D4F31", -"U c #494524", -"V c #7D9442", -"W c #4F6429", -"X c #57512D", -"Y c #4F3C1F", -"Z c #423F1D", -"` c #5F6A35", -" . c #3D481F", -".. c #404024", -"+. c #5F512B", -"@. c #3F381E", -"#. c #6E6C3F", -"$. c #717448", -"%. c #646C48", -"&. c #B4ADA3", -"*. c #E5E6E4", -"=. c #BEBEBE", -"-. c #444737", -";. c #2D311B", -">. c #222911", -",. c #1D220E", -"'. c #231E09", -"). c #3C3922", -"!. c #4C5324", -"~. c #4E4D27", -"{. c #3F3420", -"]. c #3C401F", -"^. c #4E552A", -"/. c #5C703B", -"(. c #778649", -"_. c #43442C", -":. c #736039", -"<. c #897648", -"[. c #847644", -"}. c #635F2D", -"|. c #525B31", -"1. c #647444", -"2. c #504E43", -"3. c #7F7774", -"4. c #8B8788", -"5. c #969591", -"6. c #4B542F", -"7. c #5C6041", -"8. c #5D513D", -"9. c #474638", -"0. c #4B442E", -"a. c #859F4A", -"b. c #373F1C", -"c. c #24260C", -"d. c #161407", -"e. c #2C2D14", -"f. c #3C4420", -"g. c #38401D", -"h. c #657B43", -"i. c #70804E", -"j. c #595C35", -"k. c #706B3A", -"l. c #66562B", -"m. c #3C4120", -"n. c #383B20", -"o. c #444B2E", -"p. c #75766C", -"q. c #DEDBD8", -"r. c #A49E98", -"s. c #7A726F", -"t. c #ADAFAA", -"u. c #9CA098", -"v. c #767164", -"w. c #402815", -"x. c #46362F", -"y. c #47341D", -"z. c #484A2B", -"A. c #576B2A", -"B. c #252210", -"C. c #3F3B17", -"D. c #4A2B12", -"E. c #442812", -"F. c #58582B", -"G. c #555F32", -"H. c #5C6433", -"I. c #48532E", -"J. c #636D42", -"K. c #574E30", -"L. c #524C2B", -"M. c #69623A", -"N. c #888661", -"O. c #CECDBF", -"P. c #E3DFDC", -"Q. c #C9C3C3", -"R. c #898481", -"S. c #5D574D", -"T. c #797271", -"U. c #8D8987", -"V. c #484638", -"W. c #534830", -"X. c #4A4C48", -"Y. c #5E4327", -"Z. c #252108", -"`. c #424030", -" + c #675F3D", -".+ c #32100A", -"++ c #2F180F", -"@+ c #887F5A", -"#+ c #817950", -"$+ c #615F39", -"%+ c #2C2D18", -"&+ c #2A2113", -"*+ c #695534", -"=+ c #947E52", -"-+ c #B8A37E", -";+ c #C3B29E", -">+ c #ACA09D", -",+ c #A09795", -"'+ c #BCBABA", -")+ c #857F7C", -"!+ c #544D3D", -"~+ c #30362B", -"{+ c #59564A", -"]+ c #A2A8A6", -"^+ c #62645A", -"/+ c #535453", -"(+ c #474534", -"_+ c #3D3C1F", -":+ c #575033", -"<+ c #776D51", -"[+ c #ACB2AA", -"}+ c #8A9080", -"|+ c #5A432F", -"1+ c #8B7B65", -"2+ c #746D50", -"3+ c #5F502C", -"4+ c #484224", -"5+ c #414122", -"6+ c #75673B", -"7+ c #9E8149", -"8+ c #BDB7A9", -"9+ c #E5E4E1", -"0+ c #EAE7E2", -"a+ c #9C9491", -"b+ c #ADABA6", -"c+ c #A0A3A0", -"d+ c #A8AFAE", -"e+ c #5C5F51", -"f+ c #5E5D32", -"g+ c #525431", -"h+ c #43382B", -"i+ c #453E34", -"j+ c #41412F", -"k+ c #5D6454", -"l+ c #464941", -"m+ c #60624D", -"n+ c #494644", -"o+ c #39382E", -"p+ c #444630", -"q+ c #584F2D", -"r+ c #444823", -"s+ c #30381B", -"t+ c #49562C", -"u+ c #7E8D54", -"v+ c #939472", -"w+ c #7F7F60", -"x+ c #7C8259", -"y+ c #373727", -"z+ c #3F3834", -"A+ c #85817E", -"B+ c #6D6D66", -"C+ c #666765", -"D+ c #352E27", -"E+ c #49493C", -"F+ c #969985", -"G+ c #A39D98", -"H+ c #928E81", -"I+ c #8C9892", -"J+ c #7E8B8A", -"K+ c #444130", -"L+ c #343021", -"M+ c #2D2D19", -"N+ c #28301C", -"O+ c #5E6257", -"P+ c #596044", -"Q+ c #3F4523", -"R+ c #384123", -"S+ c #65724F", -"T+ c #889176", -"U+ c #E6E6DF", -"V+ c #C2C0BD", -"W+ c #827B6D", -"X+ c #656551", -"Y+ c #3C3B28", -"Z+ c #524F43", -"`+ c #6A644D", -" @ c #655A42", -".@ c #7C735E", -"+@ c #9F9F8D", -"@@ c #B2B5B0", -"#@ c #C9D0CD", -"$@ c #8F9490", -"%@ c #3F4037", -"&@ c #4F504A", -"*@ c #292420", -"=@ c #2F2F19", -"-@ c #2C2710", -";@ c #252514", -">@ c #3F412A", -",@ c #5B6D68", -"'@ c #4D4C3D", -")@ c #282F1A", -"!@ c #526038", -"~@ c #49512D", -"{@ c #444B2D", -"]@ c #7F7B76", -"^@ c #5B5453", -"/@ c #535137", -"(@ c #525535", -"_@ c #565136", -":@ c #48432A", -"<@ c #483F23", -"[@ c #635636", -"}@ c #777664", -"|@ c #D5DBDA", -"1@ c #BECFD0", -"2@ c #A8BCC1", -"3@ c #525553", -"4@ c #4E4432", -"5@ c #4B402D", -"6@ c #403F26", -"7@ c #3B4A23", -"8@ c #323517", -"9@ c #454936", -"0@ c #30330E", -"a@ c #424513", -"b@ c #444F29", -"c@ c #434629", -"d@ c #746D5B", -"e@ c #585532", -"f@ c #4F552C", -"g@ c #677E43", -"h@ c #5A6E3D", -"i@ c #30361E", -"j@ c #424521", -"k@ c #5F5831", -"l@ c #3C3D1D", -"m@ c #414024", -"n@ c #3D391A", -"o@ c #413719", -"p@ c #5E593E", -"q@ c #929D9E", -"r@ c #77868D", -"s@ c #454C50", -"t@ c #2F2F2B", -"u@ c #4A3D1A", -"v@ c #3C451C", -"w@ c #313B19", -"x@ c #30401D", -"y@ c #23270F", -"z@ c #363617", -"A@ c #261605", -"B@ c #43360D", -"C@ c #5C5D29", -"D@ c #8F8D6B", -"E@ c #7F7563", -"F@ c #65512D", -"G@ c #433E23", -"H@ c #546137", -"I@ c #485332", -"J@ c #454D45", -"K@ c #60644A", -"L@ c #666C36", -"M@ c #57462C", -"N@ c #634E2A", -"O@ c #5D4A25", -"P@ c #4A3819", -"Q@ c #312513", -"R@ c #2B1F15", -"S@ c #1F2119", -"T@ c #16170F", -"U@ c #37391C", -"V@ c #373216", -"W@ c #313718", -"X@ c #1F2B11", -"Y@ c #111208", -"Z@ c #566631", -"`@ c #493915", -" # c #4A4314", -".# c #47501C", -"+# c #4A5A23", -"@# c #7B806A", -"## c #757260", -"$# c #3B3E23", -"%# c #3C4124", -"&# c #252314", -"*# c #3A413E", -"=# c #405B52", -"-# c #3E4331", -";# c #4C462A", -"># c #5E4C29", -",# c #654E26", -"'# c #634C2A", -")# c #583E1E", -"!# c #2C1D0E", -"~# c #3E2C17", -"{# c #42230F", -"]# c #443216", -"^# c #423817", -"/# c #1C200E", -"(# c #161605", -"_# c #394328", -":# c #232212", -"<# c #423E17", -"[# c #26370C", -"}# c #30371A", -"|# c #5A6B38", -"1# c #6E7364", -"2# c #5C6251", -"3# c #3D3E2D", -"4# c #4A473C", -"5# c #71664C", -"6# c #775E33", -"7# c #463921", -"8# c #574326", -"9# c #514528", -"0# c #524C2D", -"a# c #606139", -"b# c #4C502A", -"c# c #4B4923", -"d# c #3F351E", -"e# c #4F3F1E", -"f# c #53532B", -"g# c #202A13", -"h# c #2A2C16", -"i# c #2B2813", -"j# c #343525", -"k# c #32311A", -"l# c #3B3B1C", -"m# c #3F3214", -"n# c #3F3B19", -"o# c #333D1B", -"p# c #2B3215", -"q# c #272B27", -"r# c #636E75", -"s# c #766856", -"t# c #6D6B3A", -"u# c #5D6D38", -"v# c #565E35", -"w# c #56663A", -"x# c #504F2F", -"y# c #495331", -"z# c #404528", -"A# c #50542E", -"B# c #607239", -"C# c #4B5D2F", -"D# c #364A22", -"E# c #26301C", -"F# c #171C12", -"G# c #222417", -"H# c #353D24", -"I# c #666C6B", -"J# c #3A3216", -"K# c #4B4B2D", -"L# c #8D9384", -"M# c #8A9379", -"N# c #353C21", -"O# c #363820", -"P# c #3A3728", -"Q# c #434233", -"R# c #515034", -"S# c #4C5734", -"T# c #3C4929", -"U# c #353B26", -"V# c #3B3A24", -"W# c #575032", -"X# c #555C35", -"Y# c #495531", -"Z# c #4F6034", -"`# c #2F391F", -" $ c #2D3A20", -".$ c #353E30", -"+$ c #1C2417", -"@$ c #1D1D14", -"#$ c #2D311D", -"$$ c #333E2F", -"%$ c #585842", -"&$ c #34372B", -"*$ c #889191", -"=$ c #919E91", -"-$ c #4D5C34", -";$ c #565C4A", -">$ c #647171", -",$ c #595F52", -"'$ c #6E6E5F", -")$ c #403E34", -"!$ c #363125", -"~$ c #594C38", -"{$ c #655938", -"]$ c #3E4527", -"^$ c #343825", -"/$ c #404D2B", -"($ c #2D3521", -"_$ c #1A1B12", -":$ c #7D8988", -"<$ c #333936", -"[$ c #2B2D29", -"}$ c #262C1B", -"|$ c #3D3E34", -"1$ c #4F5A4C", -"2$ c #94A0A3", -"3$ c #A3B0B1", -"4$ c #454840", -"5$ c #3F3D2E", -"6$ c #6D6F64", -"7$ c #666150", -"8$ c #554F33", -"9$ c #666242", -"0$ c #5D553C", -"a$ c #4C503C", -"b$ c #545B41", -"c$ c #3B3D32", -"d$ c #8B928E", -"e$ c #25261B", -"f$ c #6D7877", -"g$ c #4F5D63", -"h$ c #343731", -"i$ c #555D58", -"j$ c #566259", -"k$ c #4E4B3E", -"l$ c #3F4232", -"m$ c #616A68", -"n$ c #252620", -"o$ c #383D30", -"p$ c #6A7366", -"q$ c #707569", -"r$ c #4F5443", -"s$ c #485038", -"t$ c #505641", -"u$ c #6F7861", -"v$ c #95A094", -"w$ c #8B958F", -"x$ c #676F67", -"y$ c #7E8582", -"z$ c #474B4A", -"A$ c #414137", -"B$ c #5F6B6A", -"C$ c #52626A", -"D$ c #393E3A", -"E$ c #5A6363", -"F$ c #484C44", -"G$ c #424A3E", -"H$ c #535C53", -"I$ c #474738", -"J$ c #5C5945", -"K$ c #7F8173", -"L$ c #939A95", -"M$ c #929C9C", -"N$ c #9EABAD", -"O$ c #A5B4B7", -"P$ c #89959A", -"Q$ c #3E443E", -"R$ c #3C463B", -"S$ c #485450", -"T$ c #53626A", -"U$ c #5C6B6C", -"V$ c #515F5E", -"W$ c #65767B", -"X$ c #899DA4", -"Y$ c #88999F", -"Z$ c #8E9A9B", -"`$ c #828B88", -" % c #696F66", -".% c #7F8A8A", -"+% c #7E8788", -"@% c #849196", -"#% c #899AA0", -"$% c #646F75", -"%% c #3C413F", -"&% c #252925", -"*% c #647074", -"=% c #36464E", -"-% c #505F67", -";% c #606F76", -">% c #55646E", -",% c #687B85", -"'% c #748890", -")% c #75878D", -"!% c #6F7F82", -"~% c #75858A", -"{% c #798D95", -"]% c #6C7E85", -"^% c #5E6F77", -"/% c #4D5A62", -"(% c #48555E", -"_% c #4B5C65", -":% c #50606A", -"<% c #5B6E7A", -"[% c #5D707B", -"}% c #5D6F79", -"|% c #5C6D77", -"1% c #5D6D78", -"2% c #5B6974", -"3% c #4F5C68", -"4% c #51606C", -"5% c #515E6A", -" ", -" ", -" . ", -" + @ # $ % & * = - ; > , ", -" ' ) ! ~ { ] ^ / ( _ : < [ } | ", -" 1 2 3 4 5 6 7 8 9 0 a b c d e f g ", -" h i j k l m n o p q r s t u v w x y z ", -" A B C D E F o G H I J K L M N O P Q R S ", -" T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'. ", -" ).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0. ", -" a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z. ", -" A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. ", -" e.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+ ", -" :+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+ ", -" m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+ ", -" M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@ ", -" ;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@ ", -" 0@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@ ", -" z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@ ", -" Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#y.)#!#~#{#]#^#/#(# ", -" _#:#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j# ", -" k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I# ", -" J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$ ", -" %$&$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$ ", -" |$1$2$3$4$5$6$7$8$9$0$a$b$c$d$! e$f$g$h$i$ ", -" j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$ ", -" D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$ ", -" U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*% ", -" =%-%;%>%,%'%)%!%~%{%]%^%/% ", -" (%_%:%<%[%}%|%1%2% ", -" 3%4% 5% ", -" "}; +". c #AAB2A8", +"+ c #A6ABAF", +"@ c #79868A", +"# c #6A7B81", +"$ c #A6ABAA", +"% c #ADB0AF", +"& c #AAAFA9", +"* c #C8D2CE", +"= c #838679", +"- c #5F6159", +"; c #656766", +"> c #636365", +", c #504E50", +"' c #646464", +") c #7E8180", +"! c #9B988B", +"~ c #6D695B", +"{ c #636564", +"] c #535843", +"^ c #686A54", +"/ c #7E7D70", +"( c #717262", +"_ c #556056", +": c #47493B", +"< c #423E30", +"[ c #413629", +"} c #323229", +"| c #424039", +"1 c #5E5D56", +"2 c #656560", +"3 c #A8AAA7", +"4 c #989795", +"5 c #76726D", +"6 c #888074", +"7 c #807256", +"8 c #675B47", +"9 c #4B442E", +"0 c #808076", +"a c #8C8A7D", +"b c #817962", +"c c #4F4F36", +"d c #4A5535", +"e c #515E3E", +"f c #434736", +"g c #4C483F", +"h c #6E634E", +"i c #434233", +"j c #4A4943", +"k c #585347", +"l c #797367", +"m c #938B85", +"n c #908781", +"o c #746860", +"p c #605349", +"q c #897C6E", +"r c #958C81", +"s c #746953", +"t c #6C5E46", +"u c #665B43", +"v c #756852", +"w c #84847B", +"x c #AEB2AD", +"y c #737661", +"z c #49492E", +"A c #3A361F", +"B c #33371D", +"C c #34381F", +"D c #3D4028", +"E c #475131", +"F c #524F45", +"G c #7C7F76", +"H c #7D725E", +"I c #7E6847", +"J c #51534E", +"K c #4F5B5F", +"L c #3A3833", +"M c #332B18", +"N c #37331D", +"O c #51432D", +"P c #393326", +"Q c #423728", +"R c #55482E", +"S c #53482F", +"T c #565436", +"U c #727660", +"V c #888B7F", +"W c #88897C", +"X c #6E714C", +"Y c #6B724A", +"Z c #555B3A", +"` c #4B3D1D", +" . c #363119", +".. c #4B572D", +"+. c #536838", +"@. c #4C5740", +"#. c #4A3B24", +"$. c #795F3F", +"%. c #604D32", +"&. c #2E2D18", +"*. c #413C2D", +"=. c #808276", +"-. c #535C54", +";. c #474D43", +">. c #3C3E37", +",. c #353A30", +"'. c #807246", +"). c #4B5329", +"!. c #606F31", +"~. c #525730", +"{. c #73735E", +"]. c #8E9080", +"^. c #87887D", +"/. c #B7B6B6", +"(. c #858281", +"_. c #515941", +":. c #707C5F", +"<. c #656754", +"[. c #626A4B", +"}. c #645E3E", +"|. c #3C4023", +"1. c #44512E", +"2. c #38462C", +"3. c #21230E", +"4. c #29270D", +"5. c #382E14", +"6. c #39341B", +"7. c #524C33", +"8. c #53524A", +"9. c #645F55", +"0. c #48452C", +"a. c #464521", +"b. c #5D522D", +"c. c #716F3B", +"d. c #5C642A", +"e. c #51602B", +"f. c #37481B", +"g. c #33381E", +"h. c #5C5B3B", +"i. c #514D2F", +"j. c #4D462D", +"k. c #3F3A30", +"l. c #35352B", +"m. c #4C4C43", +"n. c #5B5B4A", +"o. c #91978B", +"p. c #9CA19B", +"q. c #B0B7AB", +"r. c #898D77", +"s. c #51593C", +"t. c #2F3B22", +"u. c #919162", +"v. c #464529", +"w. c #5F6031", +"x. c #545925", +"y. c #464E1F", +"z. c #373E23", +"A. c #585235", +"B. c #664F2F", +"C. c #3E3A23", +"D. c #595D35", +"E. c #666D38", +"F. c #75743D", +"G. c #636931", +"H. c #6E6B39", +"I. c #3D371C", +"J. c #222711", +"K. c #161A0E", +"L. c #353A24", +"M. c #6B7054", +"N. c #7D7F67", +"O. c #978C75", +"P. c #696450", +"Q. c #78786D", +"R. c #89887D", +"S. c #929591", +"T. c #52534E", +"U. c #5D5F5D", +"V. c #4B4E48", +"W. c #45493C", +"X. c #3F4533", +"Y. c #181C0D", +"Z. c #53512E", +"`. c #7D9042", +" + c #74903B", +".+ c #475525", +"++ c #4A5428", +"@+ c #534528", +"#+ c #513B1E", +"$+ c #554825", +"%+ c #494E26", +"&+ c #6E833A", +"*+ c #576B2A", +"=+ c #353E1D", +"-+ c #383D20", +";+ c #6F5B35", +">+ c #303017", +",+ c #2E2C17", +"'+ c #454426", +")+ c #737A49", +"!+ c #6D6F4B", +"~+ c #5A6140", +"{+ c #727260", +"]+ c #AFA799", +"^+ c #DDDFDA", +"/+ c #ECEDEC", +"(+ c #8F8F8D", +"_+ c #3C3E34", +":+ c #323623", +"<+ c #212415", +"[+ c #212712", +"}+ c #1C220F", +"|+ c #252310", +"1+ c #231E0C", +"2+ c #2F3317", +"3+ c #5C632E", +"4+ c #5E6C33", +"5+ c #465A22", +"6+ c #3D4022", +"7+ c #453921", +"8+ c #433E1D", +"9+ c #615C31", +"0+ c #3F471F", +"a+ c #545831", +"b+ c #586136", +"c+ c #29281A", +"d+ c #322F1B", +"e+ c #6B5836", +"f+ c #706134", +"g+ c #7F6B41", +"h+ c #83693F", +"i+ c #8F7846", +"j+ c #5C5B2B", +"k+ c #76804B", +"l+ c #6F7D47", +"m+ c #8C9178", +"n+ c #999188", +"o+ c #B0AAA8", +"p+ c #C7C6C6", +"q+ c #A29FA0", +"r+ c #9C9D95", +"s+ c #686E53", +"t+ c #414924", +"u+ c #373E1E", +"v+ c #303721", +"w+ c #343928", +"x+ c #212314", +"y+ c #363220", +"z+ c #2D3215", +"A+ c #333515", +"B+ c #5C4F2D", +"C+ c #5F5232", +"D+ c #2D2715", +"E+ c #31381A", +"F+ c #55592F", +"G+ c #4C552A", +"H+ c #677B43", +"I+ c #799250", +"J+ c #74864A", +"K+ c #656F46", +"L+ c #635637", +"M+ c #79683A", +"N+ c #968251", +"O+ c #665B33", +"P+ c #7D7840", +"Q+ c #616A32", +"R+ c #4C4F29", +"S+ c #4C562E", +"T+ c #556539", +"U+ c #595F44", +"V+ c #4D4D44", +"W+ c #6A6561", +"X+ c #95908F", +"Y+ c #74706F", +"Z+ c #797573", +"`+ c #595B4C", +" @ c #4E5532", +".@ c #5D603D", +"+@ c #797059", +"@@ c #655136", +"#@ c #5B5342", +"$@ c #504E3F", +"%@ c #3D461C", +"&@ c #21270E", +"*@ c #24280D", +"=@ c #141005", +"-@ c #191909", +";@ c #3D3A1C", +">@ c #454425", +",@ c #425024", +"'@ c #323C1B", +")@ c #506232", +"!@ c #7F9A5B", +"~@ c #75804F", +"{@ c #727F46", +"]@ c #635E36", +"^@ c #837443", +"/@ c #70562B", +"(@ c #505129", +"_@ c #454923", +":@ c #2E3019", +"<@ c #353920", +"[@ c #353B26", +"}@ c #404236", +"|@ c #98978C", +"1@ c #D6D4D2", +"2@ c #AFADA7", +"3@ c #8F8784", +"4@ c #7C7875", +"5@ c #A2A39D", +"6@ c #7E7D77", +"7@ c #868B7F", +"8@ c #A1A296", +"9@ c #5C5142", +"0@ c #553720", +"a@ c #543F33", +"b@ c #5F4A3A", +"c@ c #372A15", +"d@ c #657D32", +"e@ c #373D1B", +"f@ c #2C2B12", +"g@ c #343311", +"h@ c #3E3214", +"i@ c #392811", +"j@ c #3D3518", +"k@ c #393F1B", +"l@ c #2D3416", +"m@ c #5C713C", +"n@ c #678048", +"o@ c #47512F", +"p@ c #677346", +"q@ c #515132", +"r@ c #6B613A", +"s@ c #5D582D", +"t@ c #444224", +"u@ c #474B28", +"v@ c #5E5E37", +"w@ c #666B44", +"x@ c #999C81", +"y@ c #CDCBC5", +"z@ c #E5E1DE", +"A@ c #BEB9BA", +"B@ c #A9A3A0", +"C@ c #756D65", +"D@ c #877F79", +"E@ c #B2AFAA", +"F@ c #BEBEBA", +"G@ c #9FA19C", +"H@ c #443C2E", +"I@ c #302413", +"J@ c #301F0E", +"K@ c #27201A", +"L@ c #331D11", +"M@ c #432D13", +"N@ c #2D280F", +"O@ c #424F20", +"P@ c #1A1C0B", +"Q@ c #2F2E16", +"R@ c #54471F", +"S@ c #4F2E13", +"T@ c #1E0804", +"U@ c #542F14", +"V@ c #6F6534", +"W@ c #596332", +"X@ c #6F7444", +"Y@ c #645C32", +"Z@ c #526031", +"`@ c #434C2B", +" # c #4E5730", +".# c #48462A", +"+# c #5A5231", +"@# c #5C532E", +"## c #685A37", +"$# c #72673F", +"%# c #7F7C54", +"&# c #CAC8BA", +"*# c #DEDBD6", +"=# c #DBD7D3", +"-# c #D9D5D4", +";# c #C7C1C0", +"># c #857E7D", +",# c #59544B", +"'# c #544C44", +")# c #655F61", +"!# c #736D69", +"~# c #837E7E", +"{# c #595B4D", +"]# c #4D462F", +"^# c #7D7862", +"/# c #8D9594", +"(# c #4F3F2C", +"_# c #635237", +":# c #251E06", +"<# c #435120", +"[# c #262913", +"}# c #212012", +"|# c #3F3F27", +"1# c #6A5631", +"2# c #3D140C", +"3# c #1A0907", +"4# c #31180C", +"5# c #988561", +"6# c #7A804B", +"7# c #887C5D", +"8# c #596137", +"9# c #525633", +"0# c #242513", +"a# c #201A0F", +"b# c #453821", +"c# c #78613B", +"d# c #78603D", +"e# c #AB8E5D", +"f# c #A0865F", +"g# c #AB9575", +"h# c #C7BCB1", +"i# c #A49994", +"j# c #9E9492", +"k# c #A59E9D", +"l# c #A7A3A4", +"m# c #8A8280", +"n# c #7E7C72", +"o# c #403727", +"p# c #1C2119", +"q# c #55534F", +"r# c #555147", +"s# c #8C8F88", +"t# c #8E948D", +"u# c #788278", +"v# c #8C989C", +"w# c #444137", +"x# c #423E2D", +"y# c #3F3D1B", +"z# c #473C25", +"A# c #737367", +"B# c #818772", +"C# c #838365", +"D# c #431F14", +"E# c #3E251F", +"F# c #6B523E", +"G# c #8A7F5E", +"H# c #736544", +"I# c #6B5E3C", +"J# c #5D5134", +"K# c #494326", +"L# c #2C2715", +"M# c #3F371F", +"N# c #6D5835", +"O# c #79693D", +"P# c #A39B77", +"Q# c #D2CDB6", +"R# c #E4DCCD", +"S# c #E5DACF", +"T# c #C0B5AF", +"U# c #988E8B", +"V# c #9C9490", +"W# c #B6B3AF", +"X# c #AEAFAE", +"Y# c #A7A9A8", +"Z# c #55524A", +"`# c #514B37", +" $ c #434527", +".$ c #4A4D31", +"+$ c #595E45", +"@$ c #7E7A75", +"#$ c #4C4A47", +"$$ c #393023", +"%$ c #2B251E", +"&$ c #2F2C1E", +"*$ c #4B4C3C", +"=$ c #3D3E32", +"-$ c #4B4320", +";$ c #979789", +">$ c #C6CFCB", +",$ c #AFB1AB", +"'$ c #67695A", +")$ c #605136", +"!$ c #8F7E67", +"~$ c #867D62", +"{$ c #6D6D4E", +"]$ c #625434", +"^$ c #554B26", +"/$ c #464020", +"($ c #494825", +"_$ c #494926", +":$ c #75683D", +"<$ c #998149", +"[$ c #A3854F", +"}$ c #A89C86", +"|$ c #D8D5D1", +"1$ c #D9D7D5", +"2$ c #E7E6E4", +"3$ c #CDCAC9", +"4$ c #918986", +"5$ c #B5B5B0", +"6$ c #B2B6B2", +"7$ c #A8B0AB", +"8$ c #B8C2C2", +"9$ c #8B908E", +"0$ c #585B48", +"a$ c #64663A", +"b$ c #65643A", +"c$ c #565336", +"d$ c #4B3D2B", +"e$ c #443B31", +"f$ c #616057", +"g$ c #5F6251", +"h$ c #495134", +"i$ c #798175", +"j$ c #555648", +"k$ c #665D3F", +"l$ c #80857A", +"m$ c #646263", +"n$ c #48443F", +"o$ c #393528", +"p$ c #4C4836", +"q$ c #5D5739", +"r$ c #595733", +"s$ c #534A2C", +"t$ c #3C4420", +"u$ c #2C3318", +"v$ c #3E4623", +"w$ c #5C6E37", +"x$ c #7E8A52", +"y$ c #8B8964", +"z$ c #94976D", +"A$ c #797B56", +"B$ c #7C7855", +"C$ c #58573F", +"D$ c #353329", +"E$ c #413937", +"F$ c #544A47", +"G$ c #A1A09C", +"H$ c #817F79", +"I$ c #A6AEAB", +"J$ c #8C9091", +"K$ c #524F4D", +"L$ c #2D261F", +"M$ c #535645", +"N$ c #81886E", +"O$ c #938E77", +"P$ c #B0ADAA", +"Q$ c #807368", +"R$ c #A3A9A0", +"S$ c #818D86", +"T$ c #68726D", +"U$ c #727B6D", +"V$ c #444031", +"W$ c #363123", +"X$ c #545138", +"Y$ c #3C3F28", +"Z$ c #3A3B32", +"`$ c #2E3424", +" % c #383B31", +".% c #353E26", +"+% c #5E5A3A", +"@% c #403B21", +"#% c #3A4620", +"$% c #374320", +"%% c #414B2B", +"&% c #657349", +"*% c #8E9874", +"=% c #B8BBA1", +"-% c #B6BAAA", +";% c #A19D91", +">% c #9D9888", +",% c #A1AD86", +"'% c #565E41", +")% c #4A4A37", +"!% c #625C4E", +"~% c #585043", +"{% c #3D362B", +"]% c #2F2317", +"^% c #2D2619", +"/% c #3A3624", +"(% c #514C3C", +"_% c #85877D", +":% c #C2C4BF", +"<% c #AEAEAA", +"[% c #8F8D88", +"}% c #787870", +"|% c #767F77", +"1% c #757C7A", +"2% c #6C7274", +"3% c #43413B", +"4% c #2B2514", +"5% c #2D2814", +"6% c #26220F", +"7% c #3A331E", +"8% c #212413", +"9% c #273019", +"0% c #505644", +"a% c #6A6E66", +"b% c #5B644A", +"c% c #464B2A", +"d% c #404E28", +"e% c #313920", +"f% c #4C5A33", +"g% c #899377", +"h% c #737C60", +"i% c #CCCDC4", +"j% c #E9EAE5", +"k% c #DEDDDA", +"l% c #6B6159", +"m% c #665E4B", +"n% c #4B4736", +"o% c #2D3221", +"p% c #474029", +"q% c #59574B", +"r% c #726F62", +"s% c #7C7962", +"t% c #716A4E", +"u% c #958C6E", +"v% c #A39E8D", +"w% c #B8B8A9", +"x% c #CBCDC8", +"y% c #D1D8D7", +"z% c #D0DAD8", +"A% c #A1AAA6", +"B% c #7E8380", +"C% c #35382D", +"D% c #3F3D35", +"E% c #3A362B", +"F% c #2A261E", +"G% c #1F1A13", +"H% c #3B4223", +"I% c #2C2D13", +"J% c #2F2B15", +"K% c #2E2410", +"L% c #323424", +"M% c #313219", +"N% c #4F574C", +"O% c #616E64", +"P% c #4D4F40", +"Q% c #353624", +"R% c #2C341D", +"S% c #4E5D33", +"T% c #56663A", +"U% c #434A2B", +"V% c #4F5936", +"W% c #767668", +"X% c #9F9B9C", +"Y% c #878182", +"Z% c #504941", +"`% c #5E5940", +" & c #515137", +".& c #4E4B36", +"+& c #666148", +"@& c #564E34", +"#& c #4A452C", +"$& c #504829", +"%& c #66593B", +"&& c #68634F", +"*& c #9D9C92", +"=& c #DBDFDD", +"-& c #D7E0DF", +";& c #C4D4D5", +">& c #B6C8CC", +",& c #929FA3", +"'& c #555348", +")& c #423925", +"!& c #585143", +"~& c #444036", +"{& c #404524", +"]& c #35401D", +"^& c #2C3012", +"/& c #303214", +"(& c #423C1C", +"_& c #303210", +":& c #46471F", +"<& c #505E50", +"[& c #495747", +"}& c #484A3B", +"|& c #4C4832", +"1& c #363A24", +"2& c #4E522E", +"3& c #51552F", +"4& c #4E532E", +"5& c #586639", +"6& c #535D36", +"7& c #5B6249", +"8& c #38362A", +"9& c #33321F", +"0& c #52572C", +"a& c #51542A", +"b& c #4E4C2A", +"c& c #3A411E", +"d& c #2E3219", +"e& c #312B15", +"f& c #4C4220", +"g& c #51421F", +"h& c #554C27", +"i& c #747463", +"j& c #CCD6D6", +"k& c #B8CACD", +"l& c #9DB1B7", +"m& c #83959B", +"n& c #5A6368", +"o& c #403E38", +"p& c #422E18", +"q& c #503F1C", +"r& c #3C3B1B", +"s& c #343917", +"t& c #37421E", +"u& c #374820", +"v& c #2F3518", +"w& c #24230B", +"x& c #465122", +"y& c #32330A", +"z& c #414310", +"A& c #434A1B", +"B& c #3E4816", +"C& c #504D29", +"D& c #5B5A40", +"E& c #898778", +"F& c #615D3C", +"G& c #504E2A", +"H& c #586434", +"I& c #647E40", +"J& c #4E5E32", +"K& c #586D36", +"L& c #2F351C", +"M& c #373D20", +"N& c #474B23", +"O& c #6A6339", +"P& c #524B26", +"Q& c #3E3C1F", +"R& c #4E4C2B", +"S& c #4A4426", +"T& c #403B1D", +"U& c #443A1C", +"V& c #3B371B", +"W& c #5D553B", +"X& c #61635F", +"Y& c #78868B", +"Z& c #545C62", +"`& c #40444A", +" * c #252524", +".* c #27261F", +"+* c #4A4320", +"@* c #485022", +"#* c #2D3515", +"$* c #2C3415", +"%* c #3F4E26", +"&* c #273416", +"** c #262C11", +"=* c #1C1C0C", +"-* c #3D461E", +";* c #3D3815", +">* c #3B2406", +",* c #332508", +"'* c #3D390E", +")* c #504E1D", +"!* c #6C6138", +"~* c #A7A392", +"{* c #908674", +"]* c #715D3A", +"^* c #645633", +"/* c #2F2A15", +"(* c #4F5A31", +"_* c #47512E", +":* c #505933", +"<* c #40432B", +"[* c #59553D", +"}* c #554933", +"|* c #686136", +"1* c #717A3D", +"2* c #554C2F", +"3* c #604A29", +"4* c #625530", +"5* c #61572D", +"6* c #513F1D", +"7* c #443919", +"8* c #3C2E19", +"9* c #1F1812", +"0* c #1F1B17", +"a* c #23241D", +"b* c #1F2119", +"c* c #17180F", +"d* c #2F3319", +"e* c #3F421E", +"f* c #292813", +"g* c #343B19", +"h* c #35431D", +"i* c #1E290F", +"j* c #111309", +"k* c #465226", +"l* c #4A5024", +"m* c #231B09", +"n* c #492C0B", +"o* c #544113", +"p* c #605F28", +"q* c #6B7F38", +"r* c #6E7B45", +"s* c #696959", +"t* c #867E72", +"u* c #655432", +"v* c #574929", +"w* c #59663A", +"x* c #444B2D", +"y* c #444E29", +"z* c #25241F", +"A* c #41565B", +"B* c #41676B", +"C* c #5E7236", +"D* c #4D5134", +"E* c #544934", +"F* c #5B4627", +"G* c #5C4321", +"H* c #644A25", +"I* c #604A24", +"J* c #614C27", +"K* c #4F3E22", +"L* c #4A3118", +"M* c #50391F", +"N* c #292115", +"O* c #161007", +"P* c #2E2212", +"Q* c #46361C", +"R* c #533616", +"S* c #31220C", +"T* c #30250C", +"U* c #232811", +"V* c #141708", +"W* c #141407", +"X* c #536B32", +"Y* c #566434", +"Z* c #403B19", +"`* c #50471A", +" = c #3D4214", +".= c #3F4B1A", +"+= c #374519", +"@= c #3C451E", +"#= c #5B6742", +"$= c #909487", +"%= c #6B6954", +"&= c #363C22", +"*= c #3E4527", +"== c #2A2C18", +"-= c #262314", +";= c #2A2A26", +">= c #3C4E51", +",= c #3D585D", +"'= c #444D40", +")= c #39372B", +"!= c #413C24", +"~= c #534A2A", +"{= c #68532E", +"]= c #644E29", +"^= c #583A1B", +"/= c #5C492B", +"(= c #3F2F1C", +"_= c #4A321A", +":= c #4C3A1C", +"<= c #402F18", +"[= c #21140A", +"}= c #4E3D23", +"|= c #2D160B", +"1= c #422C15", +"2= c #4F411F", +"3= c #50451E", +"4= c #262A15", +"5= c #272C12", +"6= c #171606", +"7= c #425423", +"8= c #323927", +"9= c #282A17", +"0= c #483A1B", +"a= c #3A4115", +"b= c #25350C", +"c= c #212E0D", +"d= c #424F29", +"e= c #5E7137", +"f= c #8B947C", +"g= c #717868", +"h= c #3B432B", +"i= c #3B4030", +"j= c #2E2F20", +"k= c #38352A", +"l= c #485150", +"m= c #7A694F", +"n= c #7D5E39", +"o= c #624929", +"p= c #352919", +"q= c #4B3921", +"r= c #604E30", +"s= c #2F291B", +"t= c #423924", +"u= c #605736", +"v= c #605A31", +"w= c #656330", +"x= c #474C25", +"y= c #54562C", +"z= c #43361C", +"A= c #4B3A21", +"B= c #4D3417", +"C= c #5B4727", +"D= c #475228", +"E= c #222A12", +"F= c #343118", +"G= c #292811", +"H= c #282813", +"I= c #262513", +"J= c #1F2114", +"K= c #1A1F0B", +"L= c #352F12", +"M= c #3B3A12", +"N= c #303710", +"O= c #38381B", +"P= c #3B471E", +"Q= c #394420", +"R= c #3B3F2D", +"S= c #595C50", +"T= c #73756E", +"U= c #7E8079", +"V= c #7D7467", +"W= c #746244", +"X= c #736636", +"Y= c #6C6F3B", +"Z= c #646738", +"`= c #57542E", +" - c #5B5930", +".- c #625A31", +"+- c #5E5D31", +"@- c #44492A", +"#- c #4E5230", +"$- c #4C5431", +"%- c #404328", +"&- c #4A4725", +"*- c #525026", +"=- c #484C2A", +"-- c #47562B", +";- c #494E24", +">- c #3B4A28", +",- c #28341B", +"'- c #13150C", +")- c #1F2414", +"!- c #2C2C17", +"~- c #32311D", +"{- c #36362A", +"]- c #342E16", +"^- c #484C29", +"/- c #4D4827", +"(- c #4B3D22", +"_- c #393012", +":- c #3A3517", +"<- c #3A4721", +"[- c #283013", +"}- c #292F13", +"|- c #1A1E1D", +"1- c #242E32", +"2- c #505C62", +"3- c #5E534B", +"4- c #6A5A37", +"5- c #707D44", +"6- c #576931", +"7- c #49502E", +"8- c #596338", +"9- c #525F38", +"0- c #4F5833", +"a- c #4F482C", +"b- c #4C5632", +"c- c #525C33", +"d- c #454D2C", +"e- c #50562F", +"f- c #556536", +"g- c #637A3B", +"h- c #415229", +"i- c #3F5428", +"j- c #2A381B", +"k- c #242E1A", +"l- c #191E16", +"m- c #181D13", +"n- c #1F2116", +"o- c #343D22", +"p- c #313B28", +"q- c #392D15", +"r- c #38391C", +"s- c #645B45", +"t- c #8D8E7D", +"u- c #868C71", +"v- c #5D6640", +"w- c #282C17", +"x- c #282B16", +"y- c #262616", +"z- c #363426", +"A- c #30332E", +"B- c #43433A", +"C- c #55503A", +"D- c #545734", +"E- c #516038", +"F- c #42532A", +"G- c #43512E", +"H- c #3F482B", +"I- c #393C22", +"J- c #474428", +"K- c #4B452B", +"L- c #4E4A2C", +"M- c #505F35", +"N- c #48512E", +"O- c #525F35", +"P- c #46572C", +"Q- c #303D1D", +"R- c #2B371E", +"S- c #39482C", +"T- c #242D1E", +"U- c #1D2417", +"V- c #191E15", +"W- c #1B1B14", +"X- c #242718", +"Y- c #293219", +"Z- c #3B463C", +"`- c #454427", +" ; c #3F4A2B", +".; c #4F4F3E", +"+; c #8E9897", +"@; c #97A19A", +"#; c #808C77", +"$; c #5A6934", +"%; c #3A401E", +"&; c #383926", +"*; c #585747", +"=; c #485144", +"-; c #484932", +";; c #555A3E", +">; c #4B4F36", +",; c #303528", +"'; c #25271F", +"); c #26261D", +"!; c #3B3322", +"~; c #52472D", +"{; c #615E3B", +"]; c #515E34", +"^; c #475730", +"/; c #40492B", +"(; c #4C5C33", +"_; c #374425", +":; c #2E3820", +"<; c #212918", +"[; c #4A5149", +"}; c #4A5349", +"|; c #252D1F", +"1; c #1C211B", +"2; c #242219", +"3; c #2A2E1C", +"4; c #2D3622", +"5; c #464B40", +"6; c #4B5149", +"7; c #95A1A1", +"8; c #9FABA8", +"9; c #6C7966", +"0; c #556342", +"a; c #575F4A", +"b; c #6C7368", +"c; c #6F7D7D", +"d; c #586159", +"e; c #777B72", +"f; c #747267", +"g; c #524E41", +"h; c #443E31", +"i; c #463D2D", +"j; c #625644", +"k; c #685740", +"l; c #6E5F3A", +"m; c #454629", +"n; c #2C3120", +"o; c #373828", +"p; c #3A3F2A", +"q; c #3F4B30", +"r; c #24271B", +"s; c #1F1F16", +"t; c #414441", +"u; c #8E9E9F", +"v; c #3A4241", +"w; c #414849", +"x; c #2B2A21", +"y; c #48483D", +"z; c #3D4738", +"A; c #6D7872", +"B; c #A3B2B5", +"C; c #A8B6B7", +"D; c #808C85", +"E; c #555B53", +"F; c #393B2C", +"G; c #4D493E", +"H; c #878984", +"I; c #7F7B71", +"J; c #6D6252", +"K; c #574B32", +"L; c #635A3A", +"M; c #7A7452", +"N; c #6D6446", +"O; c #474431", +"P; c #404331", +"Q; c #484D39", +"R; c #4A4A39", +"S; c #33342D", +"T; c #787D77", +"U; c #5D5F59", +"V; c #2F2D23", +"W; c #36382F", +"X; c #8A9BA0", +"Y; c #637279", +"Z; c #262B2A", +"`; c #2B2C25", +" > c #404439", +".> c #403320", +"+> c #3A3C30", +"@> c #4E5648", +"#> c #646B69", +"$> c #6F7779", +"%> c #666B6D", +"&> c #434642", +"*> c #4B4C43", +"=> c #686A5F", +"-> c #666C5A", +";> c #64695C", +">> c #505240", +",> c #50553B", +"'> c #494F37", +")> c #464B30", +"!> c #52513A", +"~> c #797B67", +"{> c #848E75", +"]> c #7D8A6E", +"^> c #60675A", +"/> c #4B5147", +"(> c #767B78", +"_> c #7C807F", +":> c #37362A", +"<> c #2E3024", +"[> c #383C34", +"}> c #6D7C7F", +"|> c #63757D", +"1> c #4B5659", +"2> c #33362E", +"3> c #47534C", +"4> c #383E31", +"5> c #353A29", +"6> c #626C6A", +"7> c #4D5452", +"8> c #2A2E23", +"9> c #353B2A", +"0> c #49523F", +"a> c #4E5745", +"b> c #565A4E", +"c> c #5B6052", +"d> c #424934", +"e> c #434931", +"f> c #4C5339", +"g> c #616555", +"h> c #747E69", +"i> c #7D8679", +"j> c #95A299", +"k> c #929C99", +"l> c #79817F", +"m> c #6E776F", +"n> c #7B827D", +"o> c #858F93", +"p> c #3A3E3E", +"q> c #3E3B2E", +"r> c #596059", +"s> c #6C7B7A", +"t> c #5B6D75", +"u> c #404A4D", +"v> c #313730", +"w> c #5D6669", +"x> c #4B534F", +"y> c #32362E", +"z> c #3B4231", +"A> c #3C4437", +"B> c #545F51", +"C> c #43473D", +"D> c #3D3C2C", +"E> c #4E4F3B", +"F> c #5E5E4B", +"G> c #84887B", +"H> c #8E928C", +"I> c #99A19E", +"J> c #9AA5A5", +"K> c #A2AFB1", +"L> c #9BA7AA", +"M> c #ACBCBF", +"N> c #97A3A7", +"O> c #676F72", +"P> c #3F4538", +"Q> c #576057", +"R> c #364132", +"S> c #607172", +"T> c #54676F", +"U> c #505854", +"V> c #4A524E", +"W> c #576062", +"X> c #6E797C", +"Y> c #707D7C", +"Z> c #748080", +"`> c #737E7D", +" , c #747C79", +"., c #6E7065", +"+, c #78776B", +"@, c #767467", +"#, c #767970", +"$, c #919B96", +"%, c #859090", +"&, c #747A7C", +"*, c #909CA0", +"=, c #96A5A9", +"-, c #9BABB0", +";, c #7E8B91", +">, c #4B5153", +",, c #373B37", +"', c #21251D", +"), c #282C23", +"!, c #5D6B6F", +"~, c #546465", +"{, c #566566", +"], c #71858B", +"^, c #82979E", +"/, c #86999F", +"(, c #8D9FA5", +"_, c #8D9B9C", +":, c #828E8E", +"<, c #737B76", +"[, c #727D74", +"}, c #808D8D", +"|, c #7E898B", +"1, c #838D8E", +"2, c #7E8B8F", +"3, c #84949B", +"4, c #7B8B91", +"5, c #6C7A81", +"6, c #515B5F", +"7, c #363C3A", +"8, c #2A302F", +"9, c #36474F", +"0, c #5C6C72", +"a, c #5B6971", +"b, c #596871", +"c, c #6F838C", +"d, c #7B9099", +"e, c #778A91", +"f, c #7B8D93", +"g, c #738487", +"h, c #6E7C7D", +"i, c #78878C", +"j, c #829399", +"k, c #7D9097", +"l, c #73868C", +"m, c #6C7D83", +"n, c #63747B", +"o, c #55646B", +"p, c #4F5B62", +"q, c #515E67", +"r, c #5F737D", +"s, c #637882", +"t, c #677C85", +"u, c #647780", +"v, c #64767D", +"w, c #62747C", +"x, c #62757E", +"y, c #60737D", +"z, c #5A6B74", +"A, c #55666F", +" ", +" ", +" ", +" ", +" . + @ # $ % & * = ", +" - ; > , ' ) ! ~ { ] ^ / ( _ : < [ ", +" } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g ", +" h i j k l m n o p q r s t u v w x y z A B C D E ", +" F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@. ", +" #.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2. ", +" 3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t. ", +" v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y. ", +" Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+ ", +" 2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+ ", +" z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@ ", +" %@&@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@c@ ", +" d@e@f@g@h@i@j@k@,@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@ ", +" O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:# ", +" <#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y# ", +" z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$ ", +" -$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$0$a$b$c$d$e$f$g$h$i$j$ ", +" k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$ ", +" X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%D$!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%4%5%6% ", +" 7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J% ", +" K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&;&>&,&V.'&)&!&~&{&]&^&/& ", +" (&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w& ", +" x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`& *.*+*@*#*$*%*&***=* ", +" -*;*>*,*'*)*!*~*{*]*^*/*(*_*:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j* ", +" k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W* ", +" X*Y*Z*`* =.=+=@=#=$=%=&=*===-=;=>=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=6= ", +" 7=8=9=0=a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I= ", +" J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{- ", +" ]-^-/-(-_-:-<-[-}-|-1-2-3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p- ", +" q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z- ", +" `- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;};|;1;2;3;4; ", +" 5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;3; ", +" y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;2;W;X;Y;Z;`; > ", +" .>+>@>#>$>%>&>*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2> ", +" 4>5>6>7>8>9>0>a>b>c>d>e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u> ", +" v>w>x>y>z>A>B>C>D>E>F>G>H>I>J>K>L>M>N>O>P>Q>R>S>T> ", +" U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,-,;,>,,,',), ", +" !,~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8, ", +" 0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p, ", +" q,r,s,t,u,v,w,x,y,z,A, ", +" ", +" ", +" ", +" "}; From 470a00a2c4d74eddcb813a36fe0f0bbd25541dbc Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Wed, 14 Sep 2011 01:47:27 +0300 Subject: [PATCH 51/60] Changed: #1193 Added the feature of enable/disable plugins on startup program. --- .../src/extension_system/iplugin.h | 2 +- .../src/extension_system/iplugin_manager.h | 2 +- .../src/extension_system/iplugin_spec.h | 6 +- .../src/extension_system/plugin_manager.cpp | 43 +++++++++++- .../src/extension_system/plugin_spec.cpp | 26 ++++++- .../src/extension_system/plugin_spec.h | 12 +++- .../tools/3d/object_viewer_qt/src/main.cpp | 21 ++---- .../src/plugins/core/core_plugin.cpp | 5 +- .../src/plugins/core/main_window.cpp | 6 +- .../src/plugins/core/main_window.h | 2 +- .../src/plugins/core/plugin_view_dialog.cpp | 67 ++++++++++++++----- .../src/plugins/core/plugin_view_dialog.h | 27 +++++--- .../src/plugins/core/plugin_view_dialog.ui | 18 ++--- 13 files changed, 171 insertions(+), 66 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h index fc2e0736b..864028501 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h @@ -105,6 +105,6 @@ public: }; //namespace ExtensionSystem -Q_DECLARE_INTERFACE(ExtensionSystem::IPlugin, "dev.ryzom.com.ObjectViewerQt.IPlugin/0.9.1") +Q_DECLARE_INTERFACE(ExtensionSystem::IPlugin, "dev.ryzom.com.ObjectViewerQt.IPlugin/0.9.2") #endif // IPLUGIN_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h index 05d4b832c..e38748e77 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h @@ -98,7 +98,7 @@ public: { QList all = allObjects(); QObject *result = 0; - Q_FOREACH (QObject *qobj, all) + Q_FOREACH(QObject *qobj, all) { if (qobj->objectName() == name) { diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_spec.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_spec.h index f0c62fec7..45895c36f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_spec.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_spec.h @@ -71,9 +71,13 @@ public: virtual IPlugin *plugin() const = 0; // state - virtual int getState() const = 0; + virtual int state() const = 0; virtual bool hasError() const = 0; virtual QString errorString() const = 0; + + /// Enables/disables load this plugin after restart the program + virtual void setEnabled(bool enabled) = 0; + virtual bool isEnabled() const = 0; }; } // namespace ExtensionSystem diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp index be5f18c74..3b2431a07 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp @@ -34,6 +34,7 @@ CPluginManager::CPluginManager(QObject *parent) CPluginManager::~CPluginManager() { + writeSettings(); stopAll(); deleteAll(); qDeleteAll(m_pluginSpecs); @@ -114,6 +115,7 @@ void CPluginManager::setPluginPaths(const QStringList &paths) { m_pluginPaths = paths; readPluginPaths(); + readSettings(); } QList CPluginManager::plugins() const @@ -133,10 +135,41 @@ QSettings *CPluginManager::settings() const void CPluginManager::readSettings() { + if (m_settings) + { + QStringList blackList; + m_settings->beginGroup("PluginManager"); + blackList = m_settings->value("BlackList").toStringList(); + m_settings->endGroup(); + Q_FOREACH (CPluginSpec *spec, m_pluginSpecs) + { + QString pluginName = spec->fileName(); + + if (blackList.contains(pluginName)) + { + spec->setEnabled(false); + spec->setEnabledStartup(false); + } + } + } } void CPluginManager::writeSettings() { + if (m_settings) + { + QStringList blackList; + Q_FOREACH(CPluginSpec *spec, m_pluginSpecs) + { + nlinfo(spec->fileName().toStdString().c_str()); + if (!spec->isEnabled()) + blackList.push_back(spec->fileName()); + } + m_settings->beginGroup("PluginManager"); + m_settings->setValue("BlackList", blackList); + m_settings->endGroup(); + m_settings->sync(); + } } void CPluginManager::readPluginPaths() @@ -176,7 +209,11 @@ void CPluginManager::readPluginPaths() void CPluginManager::setPluginState(CPluginSpec *spec, int destState) { - if (spec->hasError() || spec->getState() != destState-1) + if (spec->hasError() || spec->state() != destState-1) + return; + + // plugin in black list + if (!spec->isEnabledStartup()) return; switch (destState) @@ -198,7 +235,7 @@ void CPluginManager::setPluginState(CPluginSpec *spec, int destState) } Q_FOREACH (const CPluginSpec *depSpec, spec->dependencySpecs()) { - if (depSpec->getState() != destState) + if (depSpec->state() != destState) { spec->m_hasError = true; spec->m_errorString = tr("Cannot initializing plugin because dependency failed to load: %1\nReason: %2") @@ -251,7 +288,7 @@ bool CPluginManager::loadQueue(CPluginSpec *spec, QList &queue, } circularityCheckQueue.append(spec); // check if we have the dependencies - if (spec->getState() == State::Invalid || spec->getState() == State::Read) + if (spec->state() == State::Invalid || spec->state() == State::Read) { queue.append(spec); return false; diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp index d77d90962..6e15e1181 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp @@ -40,6 +40,8 @@ CPluginSpec::CPluginSpec() m_vendor(""), m_description(""), m_state(State::Invalid), + m_enabled(true), + m_enabledStartup(true), m_hasError(false), m_errorString(""), m_plugin(0), @@ -82,12 +84,12 @@ QString CPluginSpec::fileName() const return m_fileName; } -IPlugin* CPluginSpec::plugin() const +IPlugin *CPluginSpec::plugin() const { return m_plugin; } -int CPluginSpec::getState() const +int CPluginSpec::state() const { return m_state; } @@ -124,6 +126,16 @@ bool CPluginSpec::setFileName(const QString &fileName) return true; } +void CPluginSpec::setEnabled(bool enabled) +{ + m_enabled = enabled; +} + +bool CPluginSpec::isEnabled() const +{ + return m_enabled; +} + bool CPluginSpec::loadLibrary() { if (m_hasError) @@ -259,6 +271,16 @@ void CPluginSpec::kill() m_state = State::Deleted; } +void CPluginSpec::setEnabledStartup(bool enabled) +{ + m_enabledStartup = enabled; +} + +bool CPluginSpec::isEnabledStartup() const +{ + return m_enabledStartup; +} + bool CPluginSpec::reportError(const QString &err) { m_errorString = err; diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h index 0cc895ada..5d9605de7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h @@ -41,11 +41,15 @@ public: virtual IPlugin *plugin() const; // state - virtual int getState() const; + virtual int state() const; virtual bool hasError() const; virtual QString errorString() const; QList dependencySpecs() const; + /// Enables/disables load this plugin after restart the program + virtual void setEnabled(bool enabled); + virtual bool isEnabled() const; + private: CPluginSpec(); @@ -57,6 +61,11 @@ private: void stop(); void kill(); + /// Enables/disables load this plugin on startup the program + /// Method is used for disabling startup plugin by pluginmanager + void setEnabledStartup(bool enabled); + bool isEnabledStartup() const; + bool reportError(const QString &err); QString m_location; @@ -69,6 +78,7 @@ private: QString m_description; int m_state; + bool m_enabled, m_enabledStartup; bool m_hasError; QString m_errorString; diff --git a/code/nel/tools/3d/object_viewer_qt/src/main.cpp b/code/nel/tools/3d/object_viewer_qt/src/main.cpp index 050b7716c..1ddcc5565 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/main.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/main.cpp @@ -132,7 +132,7 @@ sint main(int argc, char **argv) QSettings::setDefaultFormat(QSettings::IniFormat); QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, - QLatin1String("RyzomCore"), QLatin1String(appNameC)); + QLatin1String("RyzomCore"), QLatin1String(appNameC)); QTranslator translator; QTranslator qtTranslator; @@ -162,17 +162,8 @@ sint main(int argc, char **argv) splash->hide(); - const QList plugins = pluginManager.plugins(); - ExtensionSystem::IPluginSpec *corePlugin = 0; - Q_FOREACH(ExtensionSystem::IPluginSpec *spec, plugins) - { - if (spec->name() == QLatin1String("Core")) - { - corePlugin = spec; - break; - } - } - + ExtensionSystem::IPluginSpec *corePlugin = pluginManager.pluginByName("Core"); + if (!corePlugin) { QDir absolutePluginPaths(pluginPaths.join(QLatin1String(","))); @@ -183,8 +174,8 @@ sint main(int argc, char **argv) QString newPath = QFileDialog::getExistingDirectory(0, QCoreApplication::translate("Application", "Change the plugins path"), QDir::homePath()); bool ok; QString text = QInputDialog::getText(0, QCoreApplication::translate("Application", "Enter the plugins path"), - QCoreApplication::translate("Application", "Plugin path:"), QLineEdit::Normal, - newPath, &ok); + QCoreApplication::translate("Application", "Plugin path:"), QLineEdit::Normal, + newPath, &ok); if (ok && !text.isEmpty()) settings->setValue("PluginPath", text); settings->sync(); @@ -203,7 +194,7 @@ sint main(int argc, char **argv) if (!errors.isEmpty()) QMessageBox::warning(0, QCoreApplication::translate("Application", "Object Viewer Qt - Plugin loader messages"), - errors.join(QString::fromLatin1("\n\n"))); + errors.join(QString::fromLatin1("\n\n"))); int result = app.exec(); return result; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_plugin.cpp index 92e776068..8aef51f2a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_plugin.cpp @@ -37,6 +37,8 @@ using namespace Core; CorePlugin::CorePlugin() + : m_plugMan(0), + m_mainWindow(0) { } @@ -49,7 +51,8 @@ CorePlugin::~CorePlugin() qDeleteAll(m_autoReleaseObjects); m_autoReleaseObjects.clear(); - delete m_mainWindow; + if (m_mainWindow) + delete m_mainWindow; } bool CorePlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index caaeb4d5c..2105b8b1b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -107,8 +107,8 @@ bool MainWindow::initialize(QString *errorString) void MainWindow::extensionsInitialized() { readSettings(); - connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext*)), - this, SLOT(updateContext(Core::IContext*))); + connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext *)), + this, SLOT(updateContext(Core::IContext *))); if (m_contextManager->currentContext() != NULL) updateContext(m_contextManager->currentContext()); show(); @@ -437,7 +437,7 @@ void MainWindow::createStatusBar() void MainWindow::createDialogs() { - m_pluginView = new ExtensionSystem::CPluginView(m_pluginManager, this); + m_pluginView = new PluginView(m_pluginManager, this); // Create undo/redo command list m_dockWidget = new QDockWidget("Command List", this); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h index d594692ee..48ce93a15 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h @@ -93,7 +93,7 @@ private: void writeSettings(); ExtensionSystem::IPluginManager *m_pluginManager; - ExtensionSystem::CPluginView *m_pluginView; + PluginView *m_pluginView; MenuManager *m_menuManager; ContextManager *m_contextManager; CoreImpl *m_coreImpl; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.cpp index b45d46418..175902d39 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.cpp @@ -16,11 +16,12 @@ // along with this program. If not, see . #include "plugin_view_dialog.h" +#include "core_constants.h" + +#include "nel/misc/debug.h" // Qt includes #include -#include -#include #include #include #include @@ -29,45 +30,79 @@ #include "../../extension_system/iplugin_spec.h" #include "../../extension_system/iplugin_manager.h" -namespace ExtensionSystem +namespace Core { -CPluginView::CPluginView(IPluginManager *pluginManager, QWidget *parent) - : QDialog(parent) +PluginView::PluginView(ExtensionSystem::IPluginManager *pluginManager, QWidget *parent) + : QDialog(parent), + m_checkStateColumn(0) { - _ui.setupUi(this); - _pluginManager = pluginManager; + m_ui.setupUi(this); + m_pluginManager = pluginManager; - connect(_pluginManager, SIGNAL(pluginsChanged()), this, SLOT(updateList())); + connect(m_pluginManager, SIGNAL(pluginsChanged()), this, SLOT(updateList())); + connect(this, SIGNAL(accepted()), this, SLOT(updateSettings())); + // WhiteList is list of plugins which can not disable. + m_whiteList << Constants::OVQT_CORE_PLUGIN; updateList(); } -CPluginView::~CPluginView() +PluginView::~PluginView() { } -void CPluginView::updateList() +void PluginView::updateList() { static QIcon okIcon = QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton); static QIcon errorIcon = QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton); + static QIcon notLoadedIcon = QApplication::style()->standardIcon(QStyle::SP_DialogResetButton); + + m_specToItem.clear(); QList items; - Q_FOREACH (IPluginSpec *spec, _pluginManager->plugins()) + Q_FOREACH (ExtensionSystem::IPluginSpec *spec, m_pluginManager->plugins()) { QTreeWidgetItem *item = new QTreeWidgetItem(QStringList() - << "" << spec->name() << QString("%1").arg(spec->version()) << spec->vendor() << QDir::toNativeSeparators(spec->filePath())); - item->setIcon(0, spec->hasError() ? errorIcon : okIcon); + + bool ok = !spec->hasError(); + QIcon icon = ok ? okIcon : errorIcon; + if (ok && (spec->state() != ExtensionSystem::State::Running)) + icon = notLoadedIcon; + + item->setIcon(m_checkStateColumn, icon); + + if (!m_whiteList.contains(spec->name())) + item->setCheckState(m_checkStateColumn, spec->isEnabled() ? Qt::Checked : Qt::Unchecked); + items.append(item); + m_specToItem.insert(spec, item); } - _ui.pluginTreeWidget->clear(); + m_ui.pluginTreeWidget->clear(); if (!items.isEmpty()) - _ui.pluginTreeWidget->addTopLevelItems(items); + m_ui.pluginTreeWidget->addTopLevelItems(items); + + m_ui.pluginTreeWidget->resizeColumnToContents(m_checkStateColumn); +} + +void PluginView::updateSettings() +{ + Q_FOREACH (ExtensionSystem::IPluginSpec *spec, m_pluginManager->plugins()) + { + if (m_specToItem.contains(spec) && (!m_whiteList.contains(spec->name()))) + { + QTreeWidgetItem *item = m_specToItem.value(spec); + if (item->checkState(m_checkStateColumn) == Qt::Checked) + spec->setEnabled(true); + else + spec->setEnabled(false); + } + } } -} /* namespace NLQT */ \ No newline at end of file +} /* namespace Core */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.h index 0f12b64a3..aae16749d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.h @@ -20,28 +20,39 @@ #include "ui_plugin_view_dialog.h" +#include +#include + namespace ExtensionSystem { - class IPluginManager; +class IPluginSpec; +} + +namespace Core +{ -class CPluginView: public QDialog +class PluginView: public QDialog { Q_OBJECT public: - CPluginView(IPluginManager *pluginManager, QWidget *parent = 0); - ~CPluginView(); + PluginView(ExtensionSystem::IPluginManager *pluginManager, QWidget *parent = 0); + ~PluginView(); private Q_SLOTS: void updateList(); + void updateSettings(); private: - IPluginManager *_pluginManager; - Ui::CPluginView _ui; -}; /* class CPluginView */ + const int m_checkStateColumn; + QMap m_specToItem; + QStringList m_whiteList; + ExtensionSystem::IPluginManager *m_pluginManager; + Ui::PluginView m_ui; +}; /* class PluginView */ -} /* namespace NLQT */ +} /* namespace Core */ #endif // PLUGIN_VIEW_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.ui index 2fb0f568e..60a9b9c46 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/plugin_view_dialog.ui @@ -1,13 +1,13 @@ - CPluginView - + PluginView + 0 0 - 691 - 249 + 756 + 296 @@ -37,14 +37,6 @@ true - - 100 - - - - State - - Name @@ -126,7 +118,7 @@ closePushButton clicked() - CPluginView + PluginView accept() From 6c1bdbec1ab02626af08cceea3429879625e8aeb Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 16 Sep 2011 13:55:48 +0200 Subject: [PATCH 52/60] Changed: #1093 Create client_dev, client_patch and client_install directories in setup if needed. --- code/nel/tools/build_gamedata/0_setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py index d921d03f4..228dbe2dd 100644 --- a/code/nel/tools/build_gamedata/0_setup.py +++ b/code/nel/tools/build_gamedata/0_setup.py @@ -277,6 +277,11 @@ for projectName in ProjectsToProcess: except Exception, e: printLog(log, "<" + projectName + "> " + str(e)) printLog(log, "") +# Additional directories +printLog(log, ">>> Setup additional directories <<<") +mkPath(log, ClientDevDirectory) +mkPath(log, ClientPatchDirectory) +mkPath(log, ClientInstallDirectory) log.close() if os.path.isfile("0_setup.log"): From 3a520e2fb85fecbaab412ae03ec887e109803e7f Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 16 Sep 2011 13:57:13 +0200 Subject: [PATCH 53/60] Changed: #1093 Also try ryzom_client_r.exe instead of client_ryzom_r.exe for copying exedll bnp... --- .../tools/build_gamedata/workspace/common/exedll/directories.py | 1 + 1 file changed, 1 insertion(+) diff --git a/code/ryzom/tools/build_gamedata/workspace/common/exedll/directories.py b/code/ryzom/tools/build_gamedata/workspace/common/exedll/directories.py index 967111b05..dddf60ec8 100644 --- a/code/ryzom/tools/build_gamedata/workspace/common/exedll/directories.py +++ b/code/ryzom/tools/build_gamedata/workspace/common/exedll/directories.py @@ -76,6 +76,7 @@ CopyWindowsExeDllCfgSourceFiles += [ "nel_drv_opengl_win_r.dll" ] CopyWindowsExeDllCfgSourceFiles += [ "nel_drv_xaudio2_win_r.dll" ] CopyWindowsExeDllCfgSourceFiles += [ "client_ryzom_r.exe" ] +CopyWindowsExeDllCfgSourceFiles += [ "ryzom_client_r.exe" ] # i blame sfb CopyWindowsExeDllCfgSourceFiles += [ "ryzom_configuration_r.exe" ] From 706c0a695f8fecacc30855fd9db620ea6368e8a5 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 16 Sep 2011 13:58:20 +0200 Subject: [PATCH 54/60] Changed: #1093 Create client_install using bnps made in client_patch. --- .../tools/build_gamedata/7_client_install.py | 63 +++++++------------ 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/code/nel/tools/build_gamedata/7_client_install.py b/code/nel/tools/build_gamedata/7_client_install.py index b5a5bab1f..c4c1ab03c 100644 --- a/code/nel/tools/build_gamedata/7_client_install.py +++ b/code/nel/tools/build_gamedata/7_client_install.py @@ -45,45 +45,30 @@ printLog(log, "-------") printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") -# Find tools -BnpMake = findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix) -printLog(log, "") - -if BnpMake == "": - toolLogFail(log, BnpMakeTool, ToolSuffix) -else: - for category in InstallClientData: - printLog(log, "CATEGORY " + category["Name"]) - if (category["UnpackTo"] != None): - targetPath = ClientInstallDirectory - if (category["UnpackTo"] != ""): - targetPath += "/" + category["UnpackTo"] - mkPath(log, targetPath) - for package in category["Packages"]: - printLog(log, "PACKAGE " + package[0]) - mkPath(log, InstallDirectory + "/" + package[0]) - copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath) - else: - targetPath = ClientInstallDirectory + "/data" - mkPath(log, targetPath) - for package in category["Packages"]: - printLog(log, "PACKAGE " + package[0]) - sourcePath = InstallDirectory + "/" + package[0] - mkPath(log, sourcePath) - targetBnp = targetPath + "/" + package[0] + ".bnp" - if (len(package[1]) > 0): - targetBnp = targetPath + "/" + package[1][0] - printLog(log, "TARGET " + package[1][0]) - needUpdateBnp = 1 - if (len(package) > 2): - needUpdateBnp = needUpdate(log, sourcePath + "/" + package[2], targetBnp) - else: - needUpdateBnp = needUpdateDirNoSubdirFile(log, sourcePath, targetBnp) - if (needUpdateBnp): - printLog(log, "BNP " + targetBnp) - subprocess.call([ BnpMake, "/p", sourcePath, targetPath ] + package[1]) - else: - printLog(log, "SKIP " + targetBnp) +for category in InstallClientData: + printLog(log, "CATEGORY " + category["Name"]) + if (category["UnpackTo"] != None): + targetPath = ClientInstallDirectory + if (category["UnpackTo"] != ""): + targetPath += "/" + category["UnpackTo"] + mkPath(log, targetPath) + for package in category["Packages"]: + printLog(log, "PACKAGE " + package[0]) + mkPath(log, InstallDirectory + "/" + package[0]) + copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath) + else: + sourcePath = ClientPatchDirectory + "/bnp" + targetPath = ClientInstallDirectory + "/data" + mkPath(log, targetPath) + for package in category["Packages"]: + printLog(log, "PACKAGE " + package[0]) + sourceBnp = sourcePath + "/" + package[0] + ".bnp" + targetBnp = targetPath + "/" + package[0] + ".bnp" + if (len(package[1]) > 0): + sourceBnp = sourcePath + "/" + package[1][0] + targetBnp = targetPath + "/" + package[1][0] + printLog(log, "TARGET " + package[1][0]) + copyFileIfNeeded(log, sourceBnp, targetBnp) printLog(log, "") log.close() From 2ec690675f47ee5d4b443073267216adc02ac3d4 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 16 Sep 2011 14:04:41 +0200 Subject: [PATCH 55/60] Changed: #1093 Common default setup values. --- code/nel/tools/build_gamedata/0_setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py index 228dbe2dd..52664460c 100644 --- a/code/nel/tools/build_gamedata/0_setup.py +++ b/code/nel/tools/build_gamedata/0_setup.py @@ -44,11 +44,11 @@ except NameError: try: ToolDirectories except NameError: - ToolDirectories = [ 'R:/code/nel', 'R:/code/ryzom/tools' ] + ToolDirectories = [ 'R:/build/dev/bin/Release', 'D:/libraries/external/bin' ] try: ToolSuffix except NameError: - ToolSuffix = "_r.exe" + ToolSuffix = ".exe" try: ScriptDirectory except NameError: @@ -112,7 +112,7 @@ except NameError: try: WindowsExeDllCfgDirectories except NameError: - WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/source/external_local/bin/x86', 'D:/source/external_shared/bin/x86', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/client', 'R:/code/ryzom/tools/client/client_config/bin' ] + WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/client', 'R:/code/ryzom/tools/client/client_config/bin' ] try: MaxAvailable except NameError: From e6e7e2a37e4151a524d337ea3d70b6bfc59ed0aa Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 16 Sep 2011 14:14:15 +0200 Subject: [PATCH 56/60] Changed: #1093 Changed order of some default build pipeline search paths to work better. --- code/nel/tools/build_gamedata/0_setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py index 52664460c..676bd45fe 100644 --- a/code/nel/tools/build_gamedata/0_setup.py +++ b/code/nel/tools/build_gamedata/0_setup.py @@ -112,7 +112,7 @@ except NameError: try: WindowsExeDllCfgDirectories except NameError: - WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/client', 'R:/code/ryzom/tools/client/client_config/bin' ] + WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ] try: MaxAvailable except NameError: From 0082dad3e5361064a4f9fa9cbdb14f4f36ac4a56 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 17 Sep 2011 11:35:07 +0200 Subject: [PATCH 57/60] Added: #1093 Command line arguments for build gamedata scripts, filter projects and processes, make setup buildsite config skippable, and verify tool paths in setup script. --- code/nel/tools/build_gamedata/0_setup.py | 532 ++++++++++-------- code/nel/tools/build_gamedata/1_export.py | 55 +- code/nel/tools/build_gamedata/2_build.py | 55 +- code/nel/tools/build_gamedata/3_install.py | 55 +- .../build_gamedata/configuration/tools.py | 6 +- .../tools/build_gamedata/processes/0_setup.py | 40 +- .../build_gamedata/processes/1_export.py | 39 +- .../tools/build_gamedata/processes/2_build.py | 39 +- .../build_gamedata/processes/3_install.py | 39 +- 9 files changed, 525 insertions(+), 335 deletions(-) diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py index 676bd45fe..1fe084407 100644 --- a/code/nel/tools/build_gamedata/0_setup.py +++ b/code/nel/tools/build_gamedata/0_setup.py @@ -24,9 +24,27 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("configuration") +parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Setup') +parser.add_argument('--noconf', '-nc', action='store_true') +parser.add_argument('--noverify', '-nv', action='store_true') +# parser.add_argument('--haltonerror', '-eh', action='store_true') +parser.add_argument('--includeproject', '-ipj', nargs='+') +parser.add_argument('--excludeproject', '-epj', nargs='+') +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + +if not args.includeproject == None and not args.excludeproject == None: + print "ERROR --includeproject cannot be combined with --excludeproject, exit." + exit() + +if not args.includeprocess == None and not args.excludeprocess == None: + print "ERROR --includeprocess cannot be combined with --excludeprocess, exit." + exit() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -35,221 +53,225 @@ try: from buildsite import * except ImportError: printLog(log, "*** FIRST RUN ***") + if args.noconf: + printLog(log, "ERROR --noconf is invalid on first run, exit.") + exit() from tools import * -try: - BuildQuality -except NameError: - BuildQuality = 1 -try: - ToolDirectories -except NameError: - ToolDirectories = [ 'R:/build/dev/bin/Release', 'D:/libraries/external/bin' ] -try: - ToolSuffix -except NameError: - ToolSuffix = ".exe" -try: - ScriptDirectory -except NameError: - ScriptDirectory = "R:/code/nel/tools/build_gamedata" -try: - WorkspaceDirectory -except NameError: - WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace" -try: - DatabaseDirectory -except NameError: - DatabaseDirectory = "W:/database" -try: - ExportBuildDirectory -except NameError: - ExportBuildDirectory = "W:/export" -try: - InstallDirectory -except NameError: - InstallDirectory = "W:/install" -try: - DataShardDirectory -except NameError: - DataShardDirectory = "R:/code/ryzom/server/data_shard" -try: - ClientDevDirectory -except NameError: - ClientDevDirectory = "W:/client_dev" -try: - ClientPatchDirectory -except NameError: - ClientPatchDirectory = "W:/client_patch" -try: - ClientInstallDirectory -except NameError: - ClientInstallDirectory = "W:/client_install" -try: - LeveldesignDirectory -except NameError: - LeveldesignDirectory = "L:/leveldesign" -try: - LeveldesignDfnDirectory -except NameError: - LeveldesignDfnDirectory = "L:/leveldesign/dfn" -try: - LeveldesignWorldDirectory -except NameError: - LeveldesignWorldDirectory = "L:/leveldesign/world" -try: - PrimitivesDirectory -except NameError: - PrimitivesDirectory = "L:/primitives" -try: - GamedevDirectory -except NameError: - GamedevDirectory = "R:/code/ryzom/client/data/gamedev" -try: - DataCommonDirectory -except NameError: - DataCommonDirectory = "R:/code/ryzom/common/data_common" -try: - WindowsExeDllCfgDirectories -except NameError: - WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ] -try: - MaxAvailable -except NameError: - MaxAvailable = 1 -try: - MaxDirectory -except NameError: - MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010" -try: - MaxUserDirectory -except NameError: - MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu" -try: - MaxExecutable -except NameError: - MaxExecutable = "3dsmax.exe" +if not args.noconf: + try: + BuildQuality + except NameError: + BuildQuality = 1 + try: + ToolDirectories + except NameError: + ToolDirectories = [ 'R:/build/dev/bin/Release', 'D:/libraries/external/bin' ] + try: + ToolSuffix + except NameError: + ToolSuffix = ".exe" + try: + ScriptDirectory + except NameError: + ScriptDirectory = "R:/code/nel/tools/build_gamedata" + try: + WorkspaceDirectory + except NameError: + WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace" + try: + DatabaseDirectory + except NameError: + DatabaseDirectory = "W:/database" + try: + ExportBuildDirectory + except NameError: + ExportBuildDirectory = "W:/export" + try: + InstallDirectory + except NameError: + InstallDirectory = "W:/install" + try: + DataShardDirectory + except NameError: + DataShardDirectory = "R:/code/ryzom/server/data_shard" + try: + ClientDevDirectory + except NameError: + ClientDevDirectory = "W:/client_dev" + try: + ClientPatchDirectory + except NameError: + ClientPatchDirectory = "W:/client_patch" + try: + ClientInstallDirectory + except NameError: + ClientInstallDirectory = "W:/client_install" + try: + LeveldesignDirectory + except NameError: + LeveldesignDirectory = "L:/leveldesign" + try: + LeveldesignDfnDirectory + except NameError: + LeveldesignDfnDirectory = "L:/leveldesign/dfn" + try: + LeveldesignWorldDirectory + except NameError: + LeveldesignWorldDirectory = "L:/leveldesign/world" + try: + PrimitivesDirectory + except NameError: + PrimitivesDirectory = "L:/primitives" + try: + GamedevDirectory + except NameError: + GamedevDirectory = "R:/code/ryzom/client/data/gamedev" + try: + DataCommonDirectory + except NameError: + DataCommonDirectory = "R:/code/ryzom/common/data_common" + try: + WindowsExeDllCfgDirectories + except NameError: + WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ] + try: + MaxAvailable + except NameError: + MaxAvailable = 1 + try: + MaxDirectory + except NameError: + MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010" + try: + MaxUserDirectory + except NameError: + MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu" + try: + MaxExecutable + except NameError: + MaxExecutable = "3dsmax.exe" -printLog(log, "") -printLog(log, "-------") -printLog(log, "--- Setup build site") -printLog(log, "-------") -printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) -printLog(log, "") -printLog(log, "This script will set up the buildsite configuration, and create needed directories.") -printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.") -printLog(log, "Use -- if you need to insert an empty value.") -printLog(log, "") -BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality))) -ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/") -ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/") -ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix) -ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/") -WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/") -DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/") -ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/") -InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/") -DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/") -ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/") -ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/") -ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/") -LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/") -LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/") -LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/") -PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/") -GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/") -DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).replace("\\", "/") -WindowsExeDllCfgDirectories[0] = askVar(log, "Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/") -WindowsExeDllCfgDirectories[1] = askVar(log, "Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/") -WindowsExeDllCfgDirectories[2] = askVar(log, "Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/") -WindowsExeDllCfgDirectories[3] = askVar(log, "Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/") -WindowsExeDllCfgDirectories[4] = askVar(log, "Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/") -WindowsExeDllCfgDirectories[5] = askVar(log, "Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/") -WindowsExeDllCfgDirectories[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/") -MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable))) -if MaxAvailable: - MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/") - MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/") - MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable) -if os.path.isfile("configuration/buildsite.py"): - os.remove("configuration/buildsite.py") -sf = open("configuration/buildsite.py", "w") -sf.write("#!/usr/bin/python\n") -sf.write("# \n") -sf.write("# \\file site.py\n") -sf.write("# \\brief Site configuration\n") -sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n") -sf.write("# \\author Jan Boon (Kaetemi)\n") -sf.write("# Python port of game data build pipeline.\n") -sf.write("# Site configuration.\n") -sf.write("# \n") -sf.write("# NeL - MMORPG Framework \n") -sf.write("# Copyright (C) 2010 Winch Gate Property Limited\n") -sf.write("# \n") -sf.write("# This program is free software: you can redistribute it and/or modify\n") -sf.write("# it under the terms of the GNU Affero General Public License as\n") -sf.write("# published by the Free Software Foundation, either version 3 of the\n") -sf.write("# License, or (at your option) any later version.\n") -sf.write("# \n") -sf.write("# This program is distributed in the hope that it will be useful,\n") -sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n") -sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n") -sf.write("# GNU Affero General Public License for more details.\n") -sf.write("# \n") -sf.write("# You should have received a copy of the GNU Affero General Public License\n") -sf.write("# along with this program. If not, see .\n") -sf.write("# \n") -sf.write("\n") -sf.write("\n") -sf.write("# *** SITE INSTALLATION ***\n") -sf.write("\n") -sf.write("# Use '/' in path name, not '\'\n") -sf.write("# Don't put '/' at the end of a directory name\n") -sf.write("\n") -sf.write("\n") -sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n") -sf.write("BuildQuality = " + str(BuildQuality) + "\n") -sf.write("\n") -sf.write("ToolDirectories = " + str(ToolDirectories) + "\n") -sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n") -sf.write("\n") -sf.write("# Build script directory\n") -sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n") -sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n") -sf.write("\n") -sf.write("# Data build directories\n") -sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n") -sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n") -sf.write("\n") -sf.write("# Install directories\n") -sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n") -sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n") -sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n") -sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n") -sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n") -sf.write("\n") -sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n") -sf.write("\n") -sf.write("# Leveldesign directories\n") -sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n") -sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n") -sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n") -sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n") -sf.write("\n") -sf.write("# Misc data directories\n") -sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n") -sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n") -sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n") -sf.write("\n") -sf.write("# 3dsMax directives\n") -sf.write("MaxAvailable = " + str(MaxAvailable) + "\n") -sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n") -sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n") -sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n") -sf.write("\n") -sf.write("\n") -sf.write("# end of file\n") -sf.close() + printLog(log, "") + printLog(log, "-------") + printLog(log, "--- Setup build site") + printLog(log, "-------") + printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) + printLog(log, "") + printLog(log, "This script will set up the buildsite configuration, and create needed directories.") + printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.") + printLog(log, "Use -- if you need to insert an empty value.") + printLog(log, "") + BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality))) + ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/") + ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/") + ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix) + ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/") + WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/") + DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/") + ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/") + InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/") + DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/") + ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/") + ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/") + ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/") + LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/") + LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/") + LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/") + PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/") + GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/") + DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).replace("\\", "/") + WindowsExeDllCfgDirectories[0] = askVar(log, "Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/") + WindowsExeDllCfgDirectories[1] = askVar(log, "Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/") + WindowsExeDllCfgDirectories[2] = askVar(log, "Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/") + WindowsExeDllCfgDirectories[3] = askVar(log, "Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/") + WindowsExeDllCfgDirectories[4] = askVar(log, "Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/") + WindowsExeDllCfgDirectories[5] = askVar(log, "Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/") + WindowsExeDllCfgDirectories[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/") + MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable))) + if MaxAvailable: + MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/") + MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/") + MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable) + if os.path.isfile("configuration/buildsite.py"): + os.remove("configuration/buildsite.py") + sf = open("configuration/buildsite.py", "w") + sf.write("#!/usr/bin/python\n") + sf.write("# \n") + sf.write("# \\file site.py\n") + sf.write("# \\brief Site configuration\n") + sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n") + sf.write("# \\author Jan Boon (Kaetemi)\n") + sf.write("# Python port of game data build pipeline.\n") + sf.write("# Site configuration.\n") + sf.write("# \n") + sf.write("# NeL - MMORPG Framework \n") + sf.write("# Copyright (C) 2010 Winch Gate Property Limited\n") + sf.write("# \n") + sf.write("# This program is free software: you can redistribute it and/or modify\n") + sf.write("# it under the terms of the GNU Affero General Public License as\n") + sf.write("# published by the Free Software Foundation, either version 3 of the\n") + sf.write("# License, or (at your option) any later version.\n") + sf.write("# \n") + sf.write("# This program is distributed in the hope that it will be useful,\n") + sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n") + sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n") + sf.write("# GNU Affero General Public License for more details.\n") + sf.write("# \n") + sf.write("# You should have received a copy of the GNU Affero General Public License\n") + sf.write("# along with this program. If not, see .\n") + sf.write("# \n") + sf.write("\n") + sf.write("\n") + sf.write("# *** SITE INSTALLATION ***\n") + sf.write("\n") + sf.write("# Use '/' in path name, not '\'\n") + sf.write("# Don't put '/' at the end of a directory name\n") + sf.write("\n") + sf.write("\n") + sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n") + sf.write("BuildQuality = " + str(BuildQuality) + "\n") + sf.write("\n") + sf.write("ToolDirectories = " + str(ToolDirectories) + "\n") + sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n") + sf.write("\n") + sf.write("# Build script directory\n") + sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n") + sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n") + sf.write("\n") + sf.write("# Data build directories\n") + sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n") + sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n") + sf.write("\n") + sf.write("# Install directories\n") + sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n") + sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n") + sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n") + sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n") + sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n") + sf.write("\n") + sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n") + sf.write("\n") + sf.write("# Leveldesign directories\n") + sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n") + sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n") + sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n") + sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n") + sf.write("\n") + sf.write("# Misc data directories\n") + sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n") + sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n") + sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n") + sf.write("\n") + sf.write("# 3dsMax directives\n") + sf.write("MaxAvailable = " + str(MaxAvailable) + "\n") + sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n") + sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n") + sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n") + sf.write("\n") + sf.write("\n") + sf.write("# end of file\n") + sf.close() sys.path.append(WorkspaceDirectory) from projects import * @@ -262,27 +284,83 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each project for projectName in ProjectsToProcess: - os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) - os.chdir("processes") - try: - subprocess.call([ "python", "0_setup.py" ]) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) - os.chdir("..") - try: - projectLog = open("processes/log.log", "r") - projectLogData = projectLog.read() - projectLog.close() - log.write(projectLogData) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) + if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)): + printLog(log, "PROJECT " + projectName) + os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) + os.chdir("processes") + try: + if not args.includeprocess == None: + subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess) + elif not args.excludeprocess == None: + subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess) + else: + subprocess.call([ "python", "0_setup.py" ]) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + os.chdir("..") + try: + projectLog = open("processes/log.log", "r") + projectLogData = projectLog.read() + projectLog.close() + log.write(projectLogData) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + else: + printLog(log, "IGNORE PROJECT " + projectName) printLog(log, "") + # Additional directories printLog(log, ">>> Setup additional directories <<<") mkPath(log, ClientDevDirectory) mkPath(log, ClientPatchDirectory) mkPath(log, ClientInstallDirectory) +if not args.noverify: + printLog(log, "") + printLog(log, "-------") + printLog(log, "--- Verify tool paths") + printLog(log, "-------") + printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) + printLog(log, "") + if MaxAvailable: + findMax(log, MaxDirectory, MaxExecutable) + findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix) + findTool(log, ToolDirectories, BuildInterfaceTool, ToolSuffix) + findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix) + findTool(log, ToolDirectories, BuildSmallbankTool, ToolSuffix) + findTool(log, ToolDirectories, BuildFarbankTool, ToolSuffix) + findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix) + findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix) + findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix) + findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix) + findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix) + findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix) + findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix) + findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix) + findTool(log, ToolDirectories, IgLighterTool, ToolSuffix) + findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix) + findTool(log, ToolDirectories, TileEditTool, ToolSuffix) + # findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix) # kaetemi stuff, ignore this + findTool(log, ToolDirectories, MakeSheetIdTool, ToolSuffix) + # findTool(log, ToolDirectories, BuildSheetsTool, ToolSuffix) # kaetemi stuff, ignore this + # findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix) # kaetemi stuff, ignore this + findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix) + findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix) + findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix) + findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix) + findTool(log, ToolDirectories, PanoplyMakerTool, ToolSuffix) + findTool(log, ToolDirectories, HlsBankMakerTool, ToolSuffix) + findTool(log, ToolDirectories, LandExportTool, ToolSuffix) + findTool(log, ToolDirectories, PrimExportTool, ToolSuffix) + findTool(log, ToolDirectories, IgElevationTool, ToolSuffix) + findTool(log, ToolDirectories, IgAddTool, ToolSuffix) + findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix) + findTool(log, ToolDirectories, SheetsPackerTool, ToolSuffix) + findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix) + findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix) + findTool(log, ToolDirectories, TgaCutTool, ToolSuffix) + findTool(log, ToolDirectories, PatchGenTool, ToolSuffix) + log.close() if os.path.isfile("0_setup.log"): os.remove("0_setup.log") diff --git a/code/nel/tools/build_gamedata/1_export.py b/code/nel/tools/build_gamedata/1_export.py index 0fb684592..6abe0a3a5 100644 --- a/code/nel/tools/build_gamedata/1_export.py +++ b/code/nel/tools/build_gamedata/1_export.py @@ -24,9 +24,25 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("configuration") +parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Export') +# parser.add_argument('--haltonerror', '-eh', action='store_true') +parser.add_argument('--includeproject', '-ipj', nargs='+') +parser.add_argument('--excludeproject', '-epj', nargs='+') +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + +if not args.includeproject == None and not args.excludeproject == None: + print "ERROR --includeproject cannot be combined with --excludeproject, exit." + exit() + +if not args.includeprocess == None and not args.excludeprocess == None: + print "ERROR --includeprocess cannot be combined with --excludeprocess, exit." + exit() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each project for projectName in ProjectsToProcess: - os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) - os.chdir("processes") - try: - subprocess.call([ "python", "1_export.py" ]) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) - os.chdir("..") - try: - projectLog = open("processes/log.log", "r") - projectLogData = projectLog.read() - projectLog.close() - log.write(projectLogData) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) + if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)): + printLog(log, "PROJECT " + projectName) + os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) + os.chdir("processes") + try: + if not args.includeprocess == None: + subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess) + elif not args.excludeprocess == None: + subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess) + else: + subprocess.call([ "python", "1_export.py" ]) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + os.chdir("..") + try: + projectLog = open("processes/log.log", "r") + projectLogData = projectLog.read() + projectLog.close() + log.write(projectLogData) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + else: + printLog(log, "IGNORE PROJECT " + projectName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/2_build.py b/code/nel/tools/build_gamedata/2_build.py index a6229c29c..36a171161 100644 --- a/code/nel/tools/build_gamedata/2_build.py +++ b/code/nel/tools/build_gamedata/2_build.py @@ -24,9 +24,25 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("configuration") +parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Build') +# parser.add_argument('--haltonerror', '-eh', action='store_true') +parser.add_argument('--includeproject', '-ipj', nargs='+') +parser.add_argument('--excludeproject', '-epj', nargs='+') +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + +if not args.includeproject == None and not args.excludeproject == None: + print "ERROR --includeproject cannot be combined with --excludeproject, exit." + exit() + +if not args.includeprocess == None and not args.excludeprocess == None: + print "ERROR --includeprocess cannot be combined with --excludeprocess, exit." + exit() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each project for projectName in ProjectsToProcess: - os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) - os.chdir("processes") - try: - subprocess.call([ "python", "2_build.py" ]) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) - os.chdir("..") - try: - projectLog = open("processes/log.log", "r") - projectLogData = projectLog.read() - projectLog.close() - log.write(projectLogData) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) + if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)): + printLog(log, "PROJECT " + projectName) + os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) + os.chdir("processes") + try: + if not args.includeprocess == None: + subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess) + elif not args.excludeprocess == None: + subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess) + else: + subprocess.call([ "python", "2_build.py" ]) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + os.chdir("..") + try: + projectLog = open("processes/log.log", "r") + projectLogData = projectLog.read() + projectLog.close() + log.write(projectLogData) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + else: + printLog(log, "IGNORE PROJECT " + projectName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/3_install.py b/code/nel/tools/build_gamedata/3_install.py index 70ece522b..39a19dea3 100644 --- a/code/nel/tools/build_gamedata/3_install.py +++ b/code/nel/tools/build_gamedata/3_install.py @@ -24,9 +24,25 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("configuration") +parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Install') +# parser.add_argument('--haltonerror', '-eh', action='store_true') +parser.add_argument('--includeproject', '-ipj', nargs='+') +parser.add_argument('--excludeproject', '-epj', nargs='+') +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + +if not args.includeproject == None and not args.excludeproject == None: + print "ERROR --includeproject cannot be combined with --excludeproject, exit." + exit() + +if not args.includeprocess == None and not args.excludeprocess == None: + print "ERROR --includeprocess cannot be combined with --excludeprocess, exit." + exit() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each project for projectName in ProjectsToProcess: - os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) - os.chdir("processes") - try: - subprocess.call([ "python", "3_install.py" ]) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) - os.chdir("..") - try: - projectLog = open("processes/log.log", "r") - projectLogData = projectLog.read() - projectLog.close() - log.write(projectLogData) - except Exception, e: - printLog(log, "<" + projectName + "> " + str(e)) + if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)): + printLog(log, "PROJECT " + projectName) + os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) + os.chdir("processes") + try: + if not args.includeprocess == None: + subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess) + elif not args.excludeprocess == None: + subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess) + else: + subprocess.call([ "python", "3_install.py" ]) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + os.chdir("..") + try: + projectLog = open("processes/log.log", "r") + projectLogData = projectLog.read() + projectLog.close() + log.write(projectLogData) + except Exception, e: + printLog(log, "<" + projectName + "> " + str(e)) + else: + printLog(log, "IGNORE PROJECT " + projectName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/configuration/tools.py b/code/nel/tools/build_gamedata/configuration/tools.py index e533270c1..5eff45977 100644 --- a/code/nel/tools/build_gamedata/configuration/tools.py +++ b/code/nel/tools/build_gamedata/configuration/tools.py @@ -69,10 +69,10 @@ ZoneIgLighterTool = "zone_ig_lighter" IgLighterTool = "ig_lighter" AnimBuilderTool = "anim_builder" TileEditTool = "tile_edit" -BuildImagesetTool = "th_build_imageset" +# BuildImagesetTool = "th_build_imageset" # kaetemi stuff, ignore this MakeSheetIdTool = "make_sheet_id" -BuildSheetsTool = "th_build_sheets" -BuildSoundTool = "th_build_sound" +# BuildSheetsTool = "th_build_sheets" # kaetemi stuff, ignore this +# BuildSoundTool = "th_build_sound" # kaetemi stuff, ignore this BuildCoarseMeshTool = "build_coarse_mesh" LightmapOptimizerTool = "lightmap_optimizer" BuildClodtexTool = "build_clodtex" diff --git a/code/nel/tools/build_gamedata/processes/0_setup.py b/code/nel/tools/build_gamedata/processes/0_setup.py index cb6de2abb..213158c92 100644 --- a/code/nel/tools/build_gamedata/processes/0_setup.py +++ b/code/nel/tools/build_gamedata/processes/0_setup.py @@ -24,8 +24,14 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("../configuration") + +parser = argparse.ArgumentParser() +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -60,20 +66,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each process for processName in ProcessToComplete: - os.chdir(processName) - try: - subprocess.call([ "python", "0_setup.py" ]) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - os.chdir("..") - try: - processLog = open(processName + "/log.log", "r") - processLogData = processLog.read() - processLog.close() - log.write(processLogData) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - # subprocess.call("idle.bat") + if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)): + printLog(log, "PROCESS " + processName) + os.chdir(processName) + try: + subprocess.call([ "python", "0_setup.py" ]) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + os.chdir("..") + try: + processLog = open(processName + "/log.log", "r") + processLogData = processLog.read() + processLog.close() + log.write(processLogData) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + # subprocess.call("idle.bat") + else: + printLog(log, "IGNORE PROCESS " + processName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/processes/1_export.py b/code/nel/tools/build_gamedata/processes/1_export.py index fdd497720..766639f17 100644 --- a/code/nel/tools/build_gamedata/processes/1_export.py +++ b/code/nel/tools/build_gamedata/processes/1_export.py @@ -24,9 +24,14 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("../configuration") +parser = argparse.ArgumentParser() +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each process for processName in ProcessToComplete: - os.chdir(processName) - try: - subprocess.call([ "python", "1_export.py" ]) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - os.chdir("..") - try: - processLog = open(processName + "/log.log", "r") - processLogData = processLog.read() - processLog.close() - log.write(processLogData) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - # subprocess.call("idle.bat") + if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)): + printLog(log, "PROCESS " + processName) + os.chdir(processName) + try: + subprocess.call([ "python", "1_export.py" ]) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + os.chdir("..") + try: + processLog = open(processName + "/log.log", "r") + processLogData = processLog.read() + processLog.close() + log.write(processLogData) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + # subprocess.call("idle.bat") + else: + printLog(log, "IGNORE PROCESS " + processName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/processes/2_build.py b/code/nel/tools/build_gamedata/processes/2_build.py index 28ee3147c..4ad70b2f4 100644 --- a/code/nel/tools/build_gamedata/processes/2_build.py +++ b/code/nel/tools/build_gamedata/processes/2_build.py @@ -24,9 +24,14 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("../configuration") +parser = argparse.ArgumentParser() +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each process for processName in ProcessToComplete: - os.chdir(processName) - try: - subprocess.call([ "python", "2_build.py" ]) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - os.chdir("..") - try: - processLog = open(processName + "/log.log", "r") - processLogData = processLog.read() - processLog.close() - log.write(processLogData) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - # subprocess.call("idle.bat") + if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)): + printLog(log, "PROCESS " + processName) + os.chdir(processName) + try: + subprocess.call([ "python", "2_build.py" ]) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + os.chdir("..") + try: + processLog = open(processName + "/log.log", "r") + processLogData = processLog.read() + processLog.close() + log.write(processLogData) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + # subprocess.call("idle.bat") + else: + printLog(log, "IGNORE PROCESS " + processName) printLog(log, "") log.close() diff --git a/code/nel/tools/build_gamedata/processes/3_install.py b/code/nel/tools/build_gamedata/processes/3_install.py index fe51c0772..89bf53660 100644 --- a/code/nel/tools/build_gamedata/processes/3_install.py +++ b/code/nel/tools/build_gamedata/processes/3_install.py @@ -24,9 +24,14 @@ # along with this program. If not, see . # -import time, sys, os, shutil, subprocess, distutils.dir_util +import time, sys, os, shutil, subprocess, distutils.dir_util, argparse sys.path.append("../configuration") +parser = argparse.ArgumentParser() +parser.add_argument('--includeprocess', '-ipc', nargs='+') +parser.add_argument('--excludeprocess', '-epc', nargs='+') +args = parser.parse_args() + if os.path.isfile("log.log"): os.remove("log.log") log = open("log.log", "w") @@ -44,20 +49,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, "") # For each process for processName in ProcessToComplete: - os.chdir(processName) - try: - subprocess.call([ "python", "3_install.py" ]) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - os.chdir("..") - try: - processLog = open(processName + "/log.log", "r") - processLogData = processLog.read() - processLog.close() - log.write(processLogData) - except Exception, e: - printLog(log, "<" + processName + "> " + str(e)) - # subprocess.call("idle.bat") + if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)): + printLog(log, "PROCESS " + processName) + os.chdir(processName) + try: + subprocess.call([ "python", "3_install.py" ]) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + os.chdir("..") + try: + processLog = open(processName + "/log.log", "r") + processLogData = processLog.read() + processLog.close() + log.write(processLogData) + except Exception, e: + printLog(log, "<" + processName + "> " + str(e)) + # subprocess.call("idle.bat") + else: + printLog(log, "IGNORE PROCESS " + processName) printLog(log, "") log.close() From 7b033676cb02c34c4df7b5eca5a0eedce6bfdf4b Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 17 Sep 2011 15:58:17 +0200 Subject: [PATCH 58/60] Added: #1093 Missing panoply_generique.cfg file. --- .../common/characters_maps_hr/panoply_generique.cfg | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 code/ryzom/tools/build_gamedata/workspace/common/characters_maps_hr/panoply_generique.cfg diff --git a/code/ryzom/tools/build_gamedata/workspace/common/characters_maps_hr/panoply_generique.cfg b/code/ryzom/tools/build_gamedata/workspace/common/characters_maps_hr/panoply_generique.cfg new file mode 100644 index 000000000..41bd8a2ef --- /dev/null +++ b/code/ryzom/tools/build_gamedata/workspace/common/characters_maps_hr/panoply_generique.cfg @@ -0,0 +1,7 @@ + +// the extension for the masks of the texture +// If "mask1" is a extension, and that there's a bitmap name "tex_mask1", it is a "mask1" mask for tex +// Each mask has its own set of colors +mask_extensions = { "skin" , "user" }; + +///////////////////////////////////////////// From 9956eec019f87edfbf880f014c170cf2aa02413d Mon Sep 17 00:00:00 2001 From: kaetemi Date: Tue, 20 Sep 2011 16:19:59 +0200 Subject: [PATCH 59/60] Added: Missing mode2animset.string_array --- .../anim/mode2animset.string_array | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 code/ryzom/common/data_leveldesign/leveldesign/game_element/anim/mode2animset.string_array diff --git a/code/ryzom/common/data_leveldesign/leveldesign/game_element/anim/mode2animset.string_array b/code/ryzom/common/data_leveldesign/leveldesign/game_element/anim/mode2animset.string_array new file mode 100644 index 000000000..b4600ce12 --- /dev/null +++ b/code/ryzom/common/data_leveldesign/leveldesign/game_element/anim/mode2animset.string_array @@ -0,0 +1,26 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + From a61b82fe1e37684577b6516abae977ff7129fbe8 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Tue, 20 Sep 2011 16:21:37 +0200 Subject: [PATCH 60/60] Changed: #1092 Fixed several issues concerning export with lightmaps. --- .../3d/plugin_max/nel_mesh_lib/calc_lm.cpp | 40 ++++++++++++------- .../nel_mesh_lib/export_particle_system.cpp | 2 +- .../plugin_max/nel_mesh_lib/export_scene.cpp | 16 ++++++-- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/calc_lm.cpp b/code/nel/tools/3d/plugin_max/nel_mesh_lib/calc_lm.cpp index e65b4ea56..03326cf44 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/calc_lm.cpp +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/calc_lm.cpp @@ -281,13 +281,21 @@ void SLightBuild::convertFromMaxLight (INode *node,TimeValue tvTime) } #if (MAX_RELEASE < 4000) - // Convert exclusion list - NameTab& ntExclu = maxLight->GetExclusionList(); - for( sint i = 0; i < ntExclu.Count(); ++i ) - { - string tmp = *ntExclu.Addr(i); - this->setExclusion.insert( tmp ); - } + // Convert exclusion list + NameTab& ntExclu = maxLight->GetExclusionList(); + for (sint i = 0; i < ntExclu.Count(); ++i) + { + string tmp = *ntExclu.Addr(i); + this->setExclusion.insert(tmp); + } +#else // (MAX_RELEASE < 4000) + ExclList& exclusionList = maxLight->GetExclusionList(); + for (sint i = 0; i < exclusionList.Count(); ++i) + { + INode *exclNode = exclusionList[i]; + string tmp = exclNode->GetName(); + this->setExclusion.insert(tmp); + } #endif // (MAX_RELEASE < 4000) // Get Soft Shadow informations @@ -1999,11 +2007,12 @@ void CExportNel::deleteLM(INode& ZeNode) sprintf( tmp, "%d", i ); sSaveName += tmp; sSaveName += ".tga"; - FILE *file; - if( file = fopen(sSaveName.c_str(),"rb") ) + if (CFile::fileExists(sSaveName)) { - fclose( file ); - DeleteFile( sSaveName.c_str() ); + if (!CFile::deleteFile(sSaveName)) + { + nlwarning("Failed to delete file %s.", sSaveName.c_str()); + } } } } @@ -2576,11 +2585,12 @@ bool CExportNel::calculateLM( CMesh::CMeshBuild *pZeMeshBuild, CMeshBase::CMeshB for (i = 0; i < 256; ++i) { string sLMName = sBaseName + NLMISC::toString(i) + ".tga"; - CIFile ifi; - if (ifi.open(sLMName)) + if (CFile::fileExists(sLMName)) { - ifi.close (); - DeleteFile (sLMName.c_str()); + if (!CFile::deleteFile(sLMName)) + { + nlwarning("Failed to delete file %s.", sLMName.c_str()); + } } } } diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_particle_system.cpp b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_particle_system.cpp index 4c6b6bc8b..e3504b324 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_particle_system.cpp +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_particle_system.cpp @@ -36,7 +36,7 @@ IShape* CExportNel::buildParticleSystem(INode& node, TimeValue time) // if not found, get from the APP_DATAS shapeName = CExportNel::getNelObjectName(node); if (shapeName.empty()) return NULL; - shapeName = NLMISC::CPath::lookup("shapeName", false); + shapeName = NLMISC::CPath::lookup(shapeName, false); if (shapeName.empty()) return NULL; } diff --git a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_scene.cpp b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_scene.cpp index 4e7edea8a..2d0268a74 100644 --- a/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_scene.cpp +++ b/code/nel/tools/3d/plugin_max/nel_mesh_lib/export_scene.cpp @@ -24,6 +24,7 @@ #include "../nel_patch_lib/rpo.h" #include "../../ig_lighter_lib/ig_lighter_lib.h" +#include "nel/misc/path.h" #include "nel/3d/scene_group.h" #include "nel/3d/scene.h" #include "nel/3d/shape_bank.h" @@ -418,12 +419,21 @@ CInstanceGroup* CExportNel::buildInstanceGroup(const vector& vectNode, v if (clid.PartA() == NEL_PARTICLE_SYSTEM_CLASS_ID) { // build the shape from the file name - std::string objName = CExportNel::getNelObjectName(*pNode); - if (!objName.empty()) + // std::string objName = CExportNel::getNelObjectName(*pNode); + std::string psFilePath; + // try to get the complete path + if (!CExportNel::getValueByNameUsingParamBlock2(*pNode, "ps_file_name", (ParamType2) TYPE_STRING, &psFilePath, 0)) + { + // if not found, get from the APP_DATAS + psFilePath = CExportNel::getNelObjectName(*pNode); + if (!psFilePath.empty()) + psFilePath = CPath::lookup(psFilePath, false); + } + if (!psFilePath.empty()) { NL3D::CShapeStream ss; NLMISC::CIFile iF; - if (iF.open(objName.c_str())) + if (iF.open(psFilePath.c_str())) { try {

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