File indexing completed on 2024-04-28 07:54:21
0001 /*************************************************************************** 0002 onu.cpp - description 0003 ------------------- 0004 begin : Wed Jul 18 2001 0005 copyright : (C) 2001-2006 by Gael de Chalendar (aka Kleag) 0006 email : kleag@free.fr 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either either version 2 0014 of the License, or (at your option) any later version.of the License, or * 0015 * (at your option) any later version. * 0016 * * 0017 * You should have received a copy of the GNU General Public License 0018 * along with this program; if not, write to the Free Software 0019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 0020 * 02110-1301, USA 0021 ***************************************************************************/ 0022 #include "onu.h" 0023 #include "skinSpritesData.h" 0024 #include "goal.h" 0025 #include "../ksirk/KsirkGlobalDefinitions.h" 0026 0027 #include <QApplication> 0028 #include <QFile> 0029 // #include <QDom> 0030 #include <QPainter> 0031 #include <QGraphicsItem> 0032 #include <QGraphicsScene> 0033 #include <QXmlStreamReader> 0034 0035 #include <KLocalizedString> 0036 #include "ksirkskineditor_debug.h" 0037 #include <KMessageBox> 0038 #include <KConfig> 0039 #include <KConfigGroup> 0040 #include <QRegExp> 0041 0042 namespace KsirkSkinEditor 0043 { 0044 0045 ONU::ONU(const QString& configDir, QObject *parent) 0046 : QObject(parent), 0047 m_configDir(configDir), 0048 m_configFileName(configDir + "/Data/world.desktop"), 0049 m_countries(), 0050 m_nationalities(), 0051 m_continents(), 0052 m_renderer(), 0053 m_itemsMap(), 0054 m_dirty(false) 0055 { 0056 0057 qCDebug(KSIRKSKINEDITOR_LOG) << "ONU constructor: " << m_configFileName; 0058 m_font.family = QStringLiteral("URW Chancery L"); 0059 m_font.size = 13; 0060 m_font.weight = QFont::Bold; 0061 m_font.italic = true; 0062 m_font.foregroundColor = QStringLiteral("black"); 0063 m_font.backgroundColor = QStringLiteral("white"); 0064 0065 SkinSpritesData::changeable().init(); 0066 // unsigned int nationalityId = 0; 0067 // unsigned int continentId = 0; 0068 KConfig config(m_configFileName); 0069 0070 KConfigGroup onugroup = config.group(QStringLiteral("onu")); 0071 0072 qCDebug(KSIRKSKINEDITOR_LOG) << "ONU XML format version: " << onugroup.readEntry("format-version"); 0073 QString formatVersion = onugroup.readEntry("format-version"); 0074 0075 if (!formatVersion.isEmpty() && formatVersion != ONU_FILE_FORMAT_VERSION) 0076 { 0077 KMessageBox::error(nullptr, 0078 i18n("Error - Invalid skin definition file format. Expected %1 and got %2",QStringLiteral(ONU_FILE_FORMAT_VERSION),formatVersion) + "<br>" + m_configFileName, 0079 i18n("Error")); 0080 // exit(1); 0081 } 0082 0083 m_name = onugroup.readEntry("name"); 0084 m_skin = onugroup.readEntry("skinpath"); 0085 qCDebug(KSIRKSKINEDITOR_LOG) << "skin snapshot file: " << m_configDir + "/Images/snapshot.jpg"; 0086 m_snapshot = QString(m_configDir + "/Images/snapshot.jpg"); 0087 if (m_snapshot.isNull()) 0088 { 0089 qCCritical(KSIRKSKINEDITOR_LOG) << "Was not able to load the snapshot image: " 0090 << m_configDir + "/Images/snapshot.jpg"; 0091 } 0092 m_width = onugroup.readEntry("width",1024); 0093 m_height = onugroup.readEntry("height",768); 0094 m_description = onugroup.readEntry("desc"); 0095 // countries.resize(onugroup.readEntry("nb-countries",0)); 0096 // nationalities.resize(onugroup.readEntry("nb-nationalities",0)); 0097 // m_continents.resize(onugroup.readEntry("nb-continents",0)); 0098 // root.attribute("map"); 0099 m_poolString = onugroup.readEntry("pool"); 0100 if (m_poolString.isEmpty()) 0101 { 0102 m_poolString = QStringLiteral("Images/pool.svg"); 0103 } 0104 qCDebug(KSIRKSKINEDITOR_LOG) << "Pool path: " << m_poolString; 0105 qCDebug(KSIRKSKINEDITOR_LOG) << "Searching resource: " << (m_configDir + '/' + m_poolString); 0106 QString poolFileName = m_configDir + '/' + m_poolString; 0107 qCDebug(KSIRKSKINEDITOR_LOG) << "Pool file name: " << poolFileName; 0108 if (poolFileName.isEmpty()) 0109 { 0110 KMessageBox::error(nullptr, 0111 i18n("Pool filename not found\nProgram cannot continue"), 0112 i18n("Error")); 0113 exit(2); 0114 } 0115 m_map = QPixmap(); 0116 m_renderer.load(poolFileName); 0117 m_svgDom.load(poolFileName); 0118 loadPoolIds(poolFileName); 0119 0120 QString mapMaskFileName = m_configDir + '/' + onugroup.readEntry("map-mask"); 0121 qCDebug(KSIRKSKINEDITOR_LOG) << "Map mask file name init: " << mapMaskFileName; 0122 if (mapMaskFileName == (m_configDir + '/')) 0123 { 0124 mapMaskFileName = m_configDir + '/' + "Images/map-mask.png"; 0125 } 0126 qCDebug(KSIRKSKINEDITOR_LOG) << "Map mask file name: " << mapMaskFileName; 0127 if (mapMaskFileName.isNull()) 0128 { 0129 KMessageBox::error(nullptr, 0130 i18n("Map mask image not found\nProgram cannot continue"), 0131 i18n("Error")); 0132 exit(2); 0133 } 0134 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading map mask file: " << mapMaskFileName; 0135 m_countriesMask = QImage(mapMaskFileName); 0136 0137 SkinSpritesData::changeable().intData(QStringLiteral("width-between-flag-and-fighter"), onugroup.readEntry("width-between-flag-and-fighter",0)); 0138 0139 0140 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading flag data"; 0141 SkinSpritesData::changeable().intData(QStringLiteral("flag-width"), config.group(QStringLiteral("flag")).readEntry("width",20)); 0142 SkinSpritesData::changeable().intData(QStringLiteral("flag-height"), config.group(QStringLiteral("flag")).readEntry("height",20)); 0143 SkinSpritesData::changeable().intData(QStringLiteral("flag-frames"), config.group(QStringLiteral("flag")).readEntry("frames",4)); 0144 SkinSpritesData::changeable().intData(QStringLiteral("flag-versions"), config.group(QStringLiteral("flag")).readEntry("versions",1)); 0145 0146 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading infantry data"; 0147 // SkinSpritesData::changeable().strData("infantry-id", config.group(QStringLiteral("infantry")).readEntry("id")); 0148 SkinSpritesData::changeable().intData(QStringLiteral("infantry-width"), config.group(QStringLiteral("infantry")).readEntry("width",23)); 0149 SkinSpritesData::changeable().intData(QStringLiteral("infantry-height"), config.group(QStringLiteral("infantry")).readEntry("height",32)); 0150 SkinSpritesData::changeable().intData(QStringLiteral("infantry-frames"), config.group(QStringLiteral("infantry")).readEntry("frames",1)); 0151 SkinSpritesData::changeable().intData(QStringLiteral("infantry-versions"), config.group(QStringLiteral("infantry")).readEntry("versions",3)); 0152 0153 // SkinSpritesData::changeable().strData("infantry1-id", config.group(QStringLiteral("infantry1")).readEntry("id")); 0154 SkinSpritesData::changeable().intData(QStringLiteral("infantry1-width"), config.group(QStringLiteral("infantry1")).readEntry("width",0)); 0155 SkinSpritesData::changeable().intData(QStringLiteral("infantry1-height"), config.group(QStringLiteral("infantry1")).readEntry("height",0)); 0156 SkinSpritesData::changeable().intData(QStringLiteral("infantry1-frames"), config.group(QStringLiteral("infantry1")).readEntry("frames",0)); 0157 SkinSpritesData::changeable().intData(QStringLiteral("infantry1-versions"), config.group(QStringLiteral("infantry1")).readEntry("versions",0)); 0158 0159 // SkinSpritesData::changeable().strData("infantry2-id", config.group(QStringLiteral("infantry2")).readEntry("id")); 0160 SkinSpritesData::changeable().intData(QStringLiteral("infantry2-width"), config.group(QStringLiteral("infantry2")).readEntry("width",0)); 0161 SkinSpritesData::changeable().intData(QStringLiteral("infantry2-height"), config.group(QStringLiteral("infantry2")).readEntry("height",0)); 0162 SkinSpritesData::changeable().intData(QStringLiteral("infantry2-frames"), config.group(QStringLiteral("infantry2")).readEntry("frames",0)); 0163 SkinSpritesData::changeable().intData(QStringLiteral("infantry2-versions"), config.group(QStringLiteral("infantry2")).readEntry("versions",0)); 0164 0165 // SkinSpritesData::changeable().strData("infantry3-id", config.group(QStringLiteral("infantry3")).readEntry("id")); 0166 SkinSpritesData::changeable().intData(QStringLiteral("infantry3-width"), config.group(QStringLiteral("infantry3")).readEntry("width",0)); 0167 SkinSpritesData::changeable().intData(QStringLiteral("infantry3-height"), config.group(QStringLiteral("infantry3")).readEntry("height",0)); 0168 SkinSpritesData::changeable().intData(QStringLiteral("infantry3-frames"), config.group(QStringLiteral("infantry3")).readEntry("frames",0)); 0169 SkinSpritesData::changeable().intData(QStringLiteral("infantry3-versions"), config.group(QStringLiteral("infantry3")).readEntry("versions",0)); 0170 0171 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading cavalry data"; 0172 // SkinSpritesData::changeable().strData("cavalry-id", config.group(QStringLiteral("cavalry")).readEntry("id")); 0173 SkinSpritesData::changeable().intData(QStringLiteral("cavalry-width"), config.group(QStringLiteral("cavalry")).readEntry("width",32)); 0174 SkinSpritesData::changeable().intData(QStringLiteral("cavalry-height"), config.group(QStringLiteral("cavalry")).readEntry("height",32)); 0175 SkinSpritesData::changeable().intData(QStringLiteral("cavalry-frames"), config.group(QStringLiteral("cavalry")).readEntry("frames",1)); 0176 SkinSpritesData::changeable().intData(QStringLiteral("cavalry-versions"), config.group(QStringLiteral("cavalry")).readEntry("versions",3)); 0177 0178 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading cannon data"; 0179 // SkinSpritesData::changeable().strData("cannon-id", config.group(QStringLiteral("cannon")).readEntry("id")); 0180 SkinSpritesData::changeable().intData(QStringLiteral("cannon-width"), config.group(QStringLiteral("cannon")).readEntry("width",32)); 0181 SkinSpritesData::changeable().intData(QStringLiteral("cannon-height"), config.group(QStringLiteral("cannon")).readEntry("height",32)); 0182 SkinSpritesData::changeable().intData(QStringLiteral("cannon-frames"), config.group(QStringLiteral("cannon")).readEntry("frames",2)); 0183 SkinSpritesData::changeable().intData(QStringLiteral("cannon-versions"), config.group(QStringLiteral("cannon")).readEntry("versions",3)); 0184 0185 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading firing data"; 0186 // SkinSpritesData::changeable().strData("firing-id", config.group(QStringLiteral("firing")).readEntry("id")); 0187 SkinSpritesData::changeable().intData(QStringLiteral("firing-width"), config.group(QStringLiteral("firing")).readEntry("width",64)); 0188 SkinSpritesData::changeable().intData(QStringLiteral("firing-height"), config.group(QStringLiteral("firing")).readEntry("height",32)); 0189 SkinSpritesData::changeable().intData(QStringLiteral("firing-frames"), config.group(QStringLiteral("firing")).readEntry("frames",4)); 0190 SkinSpritesData::changeable().intData(QStringLiteral("firing-versions"), config.group(QStringLiteral("firing")).readEntry("versions",3)); 0191 0192 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading exploding data"; 0193 // SkinSpritesData::changeable().strData("exploding-id", config.group(QStringLiteral("exploding")).readEntry("id")); 0194 SkinSpritesData::changeable().intData(QStringLiteral("exploding-width"), config.group(QStringLiteral("exploding")).readEntry("width",32)); 0195 SkinSpritesData::changeable().intData(QStringLiteral("exploding-height"), config.group(QStringLiteral("exploding")).readEntry("height",32)); 0196 SkinSpritesData::changeable().intData(QStringLiteral("exploding-frames"), config.group(QStringLiteral("exploding")).readEntry("frames",4)); 0197 SkinSpritesData::changeable().intData(QStringLiteral("exploding-versions"), config.group(QStringLiteral("exploding")).readEntry("versions",3)); 0198 0199 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading font data"; 0200 KConfigGroup fontgroup = config.group(QStringLiteral("font")); 0201 m_font.family = fontgroup.readEntry("family","URW Chancery L"); 0202 m_font.size = fontgroup.readEntry("size", 13); 0203 QString w = fontgroup.readEntry("weight", "bold");; 0204 if (w == QLatin1String("normal")) 0205 { 0206 m_font.weight = QFont::Normal; 0207 } 0208 else if (w == QLatin1String("light")) 0209 { 0210 m_font.weight = QFont::Light; 0211 } 0212 else if (w == QLatin1String("demibold")) 0213 { 0214 m_font.weight = QFont::DemiBold; 0215 } 0216 else if (w == QLatin1String("bold")) 0217 { 0218 m_font.weight = QFont::Bold; 0219 } 0220 else if (w == QLatin1String("black")) 0221 { 0222 m_font.weight = QFont::Black; 0223 } 0224 m_font.italic = fontgroup.readEntry("italic", true); 0225 m_font.foregroundColor = fontgroup.readEntry("foreground-color", "black"); 0226 m_font.backgroundColor = fontgroup.readEntry("background-color", "white"); 0227 0228 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading countries data"; 0229 QStringList countriesList = onugroup.readEntry("countries", QStringList()); 0230 /* while (m_countries.size() < countriesList.size()) 0231 { 0232 m_countries.push_back(0); 0233 }*/ 0234 foreach (const QString &country, countriesList) 0235 { 0236 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading"<<country<<"data"; 0237 KConfigGroup countryGroup = config.group(country); 0238 // unsigned int id = countryGroup.readEntry("id",0); 0239 QString name = country; 0240 QPointF anchorPoint = countryGroup.readEntry("anchor-point",QPointF()); 0241 QPointF centralPoint = countryGroup.readEntry("central-point",QPointF()); 0242 QPointF flagPoint = countryGroup.readEntry("flag-point",QPointF()); 0243 QPointF cannonPoint = countryGroup.readEntry("cannon-point",QPointF()); 0244 QPointF cavalryPoint = countryGroup.readEntry("cavalry-point",QPointF()); 0245 QPointF infantryPoint = countryGroup.readEntry("infantry-point",QPointF()); 0246 0247 m_countries.push_back(new Country(name, anchorPoint, centralPoint, 0248 flagPoint, cannonPoint, cavalryPoint, infantryPoint)); 0249 } 0250 0251 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading nationalities data"; 0252 QStringList nationalitiesList = onugroup.readEntry("nationalities", QStringList()); 0253 /* while (m_nationalities.size() < nationalitiesList.size()) 0254 { 0255 m_nationalities.push_back(0); 0256 }*/ 0257 foreach (const QString &nationality, nationalitiesList) 0258 { 0259 qCDebug(KSIRKSKINEDITOR_LOG) << "Creating nationality " << nationality; 0260 KConfigGroup nationalityGroup = config.group(nationality); 0261 QString leader = nationalityGroup.readEntry("leader",""); 0262 QString flag = nationalityGroup.readEntry("flag",""); 0263 // qCDebug(KSIRKSKINEDITOR_LOG) << "Creating nationality " << name << " ; flag: " << flag; 0264 m_nationalities.push_back(new Nationality(nationality, flag, leader)); 0265 // nationalityId++; 0266 } 0267 0268 0269 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading continents data"; 0270 QStringList continentsList = onugroup.readEntry("continents", QStringList()); 0271 /* while (m_continents.size() < continentsList.size()) 0272 { 0273 m_continents.push_back(0); 0274 }*/ 0275 foreach (const QString &continent, continentsList) 0276 { 0277 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading"<<continent<<"data"; 0278 KConfigGroup continentGroup = config.group(continent); 0279 0280 // unsigned int id = continentGroup.readEntry("id",0); 0281 unsigned int bonus = continentGroup.readEntry("bonus",0); 0282 QList<QString> countryIdList = continentGroup.readEntry("continent-countries",QList<QString>()); 0283 // int countryId; 0284 QList<Country*> continentList; 0285 foreach(const QString& countryId, countryIdList) 0286 { 0287 continentList.push_back(countryNamed(countryId)); 0288 } 0289 // qCDebug(KSIRKSKINEDITOR_LOG) << "Creating continent " << name; 0290 m_continents.push_back(new Continent(continent, continentList, bonus)); 0291 } 0292 0293 qCDebug(KSIRKSKINEDITOR_LOG) << "Loading goals data"; 0294 QStringList goalsList = onugroup.readEntry("goals", QStringList()); 0295 foreach (const QString &_goal, goalsList) 0296 { 0297 qCDebug(KSIRKSKINEDITOR_LOG) << "init goal " << _goal; 0298 KConfigGroup goalGroup = config.group(_goal); 0299 0300 Goal* goal = new Goal(); 0301 goal->setDescription(goalGroup.readEntry("desc","")); 0302 QString goalType = goalGroup.readEntry("type",""); 0303 if (goalType == QLatin1String("countries")) 0304 { 0305 goal->setType(Goal::Countries); 0306 goal->setNbCountries(goalGroup.readEntry("nbCountries",0)); 0307 goal->setNbArmiesByCountry(goalGroup.readEntry("nbArmiesByCountry",0)); 0308 qCDebug(KSIRKSKINEDITOR_LOG) << " nb countries: **********************************" << goal->nbCountries(); 0309 qCDebug(KSIRKSKINEDITOR_LOG) << " nbarmies countries: **********************************" << goal->nbArmiesByCountry(); 0310 } 0311 else if (goalType == QLatin1String("continents") ) 0312 { 0313 goal->setType(Goal::Continents); 0314 QList<QString> continentsList = goalGroup.readEntry("continents",QList<QString>()); 0315 foreach(const QString& continentId, continentsList) 0316 goal->continents().push_back(continentId); 0317 } 0318 else if (goalType == QLatin1String("player") ) 0319 { 0320 goal->setType(Goal::GoalPlayer); 0321 unsigned int nb = goalGroup.readEntry("nbCountriesFallback",0); 0322 goal->setNbCountries(nb); 0323 } 0324 m_goals.push_back(goal); 0325 } 0326 0327 foreach (const QString &country, countriesList) 0328 { 0329 qCDebug(KSIRKSKINEDITOR_LOG) << "building neighbours list of " << country; 0330 QList< Country* > theNeighbours; 0331 KConfigGroup countryGroup = config.group(country); 0332 QList<QString> theNeighboursIds = countryGroup.readEntry("neighbours",QList<QString>()); 0333 // int neighbourId; 0334 foreach(const QString& neighbourId, theNeighboursIds) 0335 { 0336 0337 theNeighbours.push_back(countryNamed(neighbourId)); 0338 } 0339 countryNamed(country)-> neighbours(theNeighbours); 0340 } 0341 qCDebug(KSIRKSKINEDITOR_LOG) << "Building map"; 0342 buildMap(); 0343 qCDebug(KSIRKSKINEDITOR_LOG) << "Map built"; 0344 0345 qCDebug(KSIRKSKINEDITOR_LOG) << "Building flag icon"; 0346 int flagWidth = SkinSpritesData::changeable().intData(QStringLiteral("flag-width")); 0347 int flagHeight = SkinSpritesData::changeable().intData(QStringLiteral("flag-height")); 0348 int flagFrames = SkinSpritesData::changeable().intData(QStringLiteral("flag-frames")); 0349 int flagVersions = SkinSpritesData::changeable().intData(QStringLiteral("flag-versions")); 0350 if (m_nationalities.empty()) 0351 { 0352 m_flagIcon = QPixmap(flagWidth,flagHeight); 0353 } 0354 else 0355 { 0356 m_flagIcon = QPixmap(pixmapForId(m_nationalities[0]->name().toLower(),flagWidth*flagFrames,flagHeight*flagVersions).copy(0,0,flagWidth,flagHeight)); 0357 } 0358 qCDebug(KSIRKSKINEDITOR_LOG) << "Building infantry icon"; 0359 int infantryWidth = SkinSpritesData::changeable().intData(QStringLiteral("infantry-width")); 0360 int infantryHeight = SkinSpritesData::changeable().intData(QStringLiteral("infantry-height")); 0361 int infantryFrames = SkinSpritesData::changeable().intData(QStringLiteral("infantry-frames")); 0362 int infantryVersions = SkinSpritesData::changeable().intData(QStringLiteral("infantry-versions")); 0363 m_infantryIcon = QPixmap( 0364 pixmapForId(QStringLiteral("infantry"),infantryWidth*infantryFrames,infantryHeight*infantryVersions).copy(0,0,infantryWidth,infantryHeight)); 0365 0366 qCDebug(KSIRKSKINEDITOR_LOG) << "Building cavalry icon"; 0367 int cavalryWidth = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-width")); 0368 int cavalryHeight = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-height")); 0369 int cavalryFrames = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-frames")); 0370 int cavalryVersions = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-versions")); 0371 m_cavalryIcon = QPixmap( 0372 pixmapForId(QStringLiteral("cavalry"),cavalryWidth*cavalryFrames,cavalryHeight*cavalryVersions).copy(0,0,cavalryWidth,cavalryHeight)); 0373 0374 qCDebug(KSIRKSKINEDITOR_LOG) << "Building cannon icon"; 0375 int cannonWidth = SkinSpritesData::changeable().intData(QStringLiteral("cannon-width")); 0376 int cannonHeight = SkinSpritesData::changeable().intData(QStringLiteral("cannon-height")); 0377 int cannonFrames = SkinSpritesData::changeable().intData(QStringLiteral("cannon-frames")); 0378 int cannonVersions = SkinSpritesData::changeable().intData(QStringLiteral("cannon-versions")); 0379 m_cannonIcon = QPixmap( 0380 pixmapForId(QStringLiteral("cannon"),cannonWidth*cannonFrames,cannonHeight*cannonVersions).copy(0,0,cannonWidth,cannonHeight)); 0381 0382 qCDebug(KSIRKSKINEDITOR_LOG) << "OUT"; 0383 } 0384 0385 ONU::~ONU() 0386 { 0387 qDeleteAll(m_countries); 0388 qDeleteAll(m_nationalities); 0389 qDeleteAll(m_continents); 0390 qDeleteAll(m_goals); 0391 } 0392 0393 void ONU::saveConfig(const QString& configFileName) 0394 { 0395 if (!configFileName.isNull()) 0396 { 0397 m_configFileName = configFileName; 0398 } 0399 qCDebug(KSIRKSKINEDITOR_LOG) << m_configFileName; 0400 0401 KConfig config(m_configFileName); 0402 0403 KConfigGroup onugroup = config.group(QStringLiteral("onu")); 0404 0405 qCDebug(KSIRKSKINEDITOR_LOG) << "ONU XML format version: "; 0406 onugroup.writeEntry("format-version",ONU_FILE_FORMAT_VERSION); 0407 0408 onugroup.writeEntry("name",m_name); 0409 onugroup.writeEntry("skinpath",m_skin); 0410 onugroup.writeEntry("width",m_width); 0411 onugroup.writeEntry("height",m_height); 0412 onugroup.writeEntry("desc",m_description); 0413 onugroup.writeEntry("pool",m_poolString); 0414 0415 onugroup.writeEntry("width-between-flag-and-fighter",SkinSpritesData::changeable().intData(QStringLiteral("width-between-flag-and-fighter"))); 0416 0417 0418 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving flag data"; 0419 config.group(QStringLiteral("flag")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("flag-width"))); 0420 config.group(QStringLiteral("flag")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("flag-height"))); 0421 config.group(QStringLiteral("flag")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("flag-frames"))); 0422 config.group(QStringLiteral("flag")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("flag-versions"))); 0423 0424 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving infantry data"; 0425 // config.group(QStringLiteral("infantry")).writeEntry("id",SkinSpritesData::changeable().strData("infantry-id")); 0426 config.group(QStringLiteral("infantry")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("infantry-width"))); 0427 config.group(QStringLiteral("infantry")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("infantry-height"))); 0428 config.group(QStringLiteral("infantry")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("infantry-frames"))); 0429 config.group(QStringLiteral("infantry")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("infantry-versions"))); 0430 0431 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving cavalry data"; 0432 // config.group(QStringLiteral("cavalry")).writeEntry("id",SkinSpritesData::changeable().strData("cavalry-id")); 0433 config.group(QStringLiteral("cavalry")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("cavalry-width"))); 0434 config.group(QStringLiteral("cavalry")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("cavalry-height"))); 0435 config.group(QStringLiteral("cavalry")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("cavalry-frames"))); 0436 config.group(QStringLiteral("cavalry")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("cavalry-versions"))); 0437 0438 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving cannon data"; 0439 // config.group(QStringLiteral("cannon")).writeEntry("id",SkinSpritesData::changeable().strData("cannon-id")); 0440 config.group(QStringLiteral("cannon")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("cannon-width"))); 0441 config.group(QStringLiteral("cannon")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("cannon-height"))); 0442 config.group(QStringLiteral("cannon")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("cannon-frames"))); 0443 config.group(QStringLiteral("cannon")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("cannon-versions"))); 0444 0445 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving firing data"; 0446 // config.group(QStringLiteral("firing")).writeEntry("id",SkinSpritesData::changeable().strData("firing-id")); 0447 config.group(QStringLiteral("firing")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("firing-width"))); 0448 config.group(QStringLiteral("firing")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("firing-height"))); 0449 config.group(QStringLiteral("firing")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("firing-frames"))); 0450 config.group(QStringLiteral("firing")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("firing-versions"))); 0451 0452 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving exploding data"; 0453 // config.group(QStringLiteral("exploding")).writeEntry("id",SkinSpritesData::changeable().strData("exploding-id")); 0454 config.group(QStringLiteral("exploding")).writeEntry("width",SkinSpritesData::changeable().intData(QStringLiteral("exploding-width"))); 0455 config.group(QStringLiteral("cannon")).writeEntry("height",SkinSpritesData::changeable().intData(QStringLiteral("exploding-height"))); 0456 config.group(QStringLiteral("exploding")).writeEntry("frames",SkinSpritesData::changeable().intData(QStringLiteral("exploding-frames"))); 0457 config.group(QStringLiteral("exploding")).writeEntry("versions",SkinSpritesData::changeable().intData(QStringLiteral("exploding-versions"))); 0458 0459 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving font data"; 0460 KConfigGroup fontgroup = config.group(QStringLiteral("font")); 0461 fontgroup.writeEntry("family",m_font.family); 0462 fontgroup.writeEntry("size",m_font.size); 0463 switch (m_font.weight) 0464 { 0465 case QFont::Normal: 0466 fontgroup.writeEntry("weight", "normal"); 0467 break; 0468 case QFont::Light: 0469 fontgroup.writeEntry("weight", "light"); 0470 break; 0471 case QFont::DemiBold: 0472 fontgroup.writeEntry("weight", "demibold"); 0473 break; 0474 case QFont::Bold: 0475 fontgroup.writeEntry("weight", "bold"); 0476 break; 0477 case QFont::Black: 0478 fontgroup.writeEntry("weight", "black"); 0479 break; 0480 default: 0481 fontgroup.writeEntry("weight", "normal"); 0482 } 0483 fontgroup.writeEntry("italic", m_font.italic); 0484 fontgroup.writeEntry("foreground-color", m_font.foregroundColor); 0485 fontgroup.writeEntry("background-color", m_font.backgroundColor); 0486 0487 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving countries data"; 0488 QStringList countriesList; 0489 foreach (Country* country, m_countries) 0490 { 0491 countriesList.push_back(country->name()); 0492 } 0493 onugroup.writeEntry("countries", countriesList); 0494 unsigned int countryNum = 0; 0495 foreach (Country* country, m_countries) 0496 { 0497 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving"<<country->name()<<"data" << countryNum; 0498 KConfigGroup countryGroup = config.group(country->name()); 0499 // countryGroup.writeEntry("id",countryNum); 0500 countryNum++; 0501 countryGroup.writeEntry("anchor-point",country->anchorPoint()); 0502 countryGroup.writeEntry("central-point",country->centralPoint()); 0503 countryGroup.writeEntry("flag-point",country->pointFlag()); 0504 countryGroup.writeEntry("cannon-point",country->pointCannon()); 0505 countryGroup.writeEntry("cavalry-point",country->pointCavalry()); 0506 countryGroup.writeEntry("infantry-point",country->pointInfantry()); 0507 } 0508 0509 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving nationalities data"; 0510 QStringList nationalitiesList; 0511 foreach (Nationality* nationality, m_nationalities) 0512 { 0513 nationalitiesList.push_back(nationality->name()); 0514 } 0515 onugroup.writeEntry("nationalities", nationalitiesList); 0516 foreach (Nationality* nationality, m_nationalities) 0517 { 0518 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving nationality " << nationality->name(); 0519 KConfigGroup nationalityGroup = config.group(nationality->name()); 0520 nationalityGroup.writeEntry("leader",nationality->leaderName()); 0521 nationalityGroup.writeEntry("flag",nationality->flagFileName()); 0522 } 0523 0524 0525 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving continents data"; 0526 QStringList continentsList; 0527 foreach (Continent* continent, m_continents) 0528 { 0529 continentsList.push_back(continent->name()); 0530 } 0531 onugroup.writeEntry("continents", continentsList); 0532 // unsigned int continentNum = 0; 0533 foreach (Continent* continent, m_continents) 0534 { 0535 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving"<<continent->name()<<"data"; 0536 KConfigGroup continentGroup = config.group(continent->name()); 0537 0538 // continentGroup.writeEntry("id",++continentNum); 0539 continentGroup.writeEntry("bonus",continent->bonus()); 0540 0541 QList<QString> countryIdList; 0542 foreach(Country* country, continent->members()) 0543 { 0544 countryIdList.push_back(country->name()); 0545 } 0546 continentGroup.writeEntry("continent-countries",countryIdList); 0547 } 0548 0549 qCDebug(KSIRKSKINEDITOR_LOG) << "Saving goals data"; 0550 QStringList goalsList; 0551 int goalNum = 0; 0552 foreach (Goal* goal, m_goals) 0553 { 0554 QString name = QStringLiteral("goal") + QString::number(++goalNum); 0555 KConfigGroup goalGroup = config.group(name); 0556 0557 goalGroup.writeEntry("desc",goal->description()); 0558 QList<QString> continentsList; 0559 switch(goal->type()) 0560 { 0561 case Goal::Countries: 0562 goalGroup.writeEntry("type","countries"); 0563 goalGroup.writeEntry("nbCountries",goal->nbCountries()); 0564 goalGroup.writeEntry("nbArmiesByCountry",goal->nbArmiesByCountry()); 0565 break; 0566 case Goal::Continents: 0567 goalGroup.writeEntry("type","continents"); 0568 foreach(const QString& continent, goal->continents()) 0569 { 0570 continentsList.push_back(continent); 0571 } 0572 goalGroup.writeEntry("continents",continentsList); 0573 break; 0574 case Goal::GoalPlayer: 0575 goalGroup.writeEntry("type","player"); 0576 goalGroup.writeEntry("nbCountriesFallback",goal->nbCountries()); 0577 break; 0578 default: 0579 goalGroup.writeEntry("type",""); 0580 } 0581 goalsList.push_back(name); 0582 } 0583 onugroup.writeEntry("goals", goalsList); 0584 0585 foreach (Country* country, m_countries) 0586 { 0587 QList<QString> theNeighboursIds; 0588 KConfigGroup countryGroup = config.group(country->name()); 0589 foreach(Country* theNeighbour, country->neighbours()) 0590 { 0591 theNeighboursIds.push_back(theNeighbour->name()); 0592 } 0593 countryGroup.writeEntry("neighbours",theNeighboursIds); 0594 } 0595 0596 m_dirty = false; 0597 qCDebug(KSIRKSKINEDITOR_LOG) << "OUT"; 0598 } 0599 0600 0601 /** This method returns a pointer to the country that contains the point (x,y). 0602 If there is no country at (x,y), the functions returns 0. */ 0603 Country* ONU::countryAt(const QPointF& point) 0604 { 0605 // qCDebug(KSIRKSKINEDITOR_LOG) << "ONU::countryAt x y " << x << " " << y; 0606 QPointF norm = point; 0607 if ( norm.x() < 0 || norm.x() >= m_countriesMask.width() 0608 || norm.y() < 0 || norm.y() >= m_countriesMask.height() ) 0609 return nullptr; 0610 0611 int index = qBlue(m_countriesMask.pixel(norm.toPoint())); 0612 // qCDebug(KSIRKSKINEDITOR_LOG) << "OUT ONU::countryAt: " << index; 0613 if (index >= m_countries.size()) return nullptr; 0614 return m_countries.at(index); 0615 } 0616 0617 void ONU::reset() 0618 { 0619 qCDebug(KSIRKSKINEDITOR_LOG); 0620 foreach (Country* country, m_countries) 0621 { 0622 country->reset(); 0623 } 0624 } 0625 0626 /** 0627 * Returns the country named "name" ; 0 in case there is no such country 0628 */ 0629 Country* ONU::countryNamed(const QString& name) 0630 { 0631 if (name.isEmpty()) 0632 { 0633 return nullptr; 0634 } 0635 foreach (Country *c, m_countries) 0636 { 0637 if (c-> name() == name) 0638 return c; 0639 } 0640 return nullptr; 0641 } 0642 0643 /** @return the number of countries in the world */ 0644 unsigned int ONU::getNbCountries() const 0645 { 0646 return(m_countries.size()); 0647 } 0648 0649 /** Returns the nation named "name" ; 0 in case there is no such nation */ 0650 Nationality* ONU::nationNamed(const QString& name) 0651 { 0652 foreach (Nationality *n, m_nationalities) 0653 { 0654 if (n->name() == name) 0655 { 0656 return n; 0657 } 0658 } 0659 return nullptr; 0660 } 0661 0662 // const Continent* ONU::continentWithId(const unsigned int id) const 0663 // { 0664 // foreach (const Continent* c, m_continents) 0665 // { 0666 // if (c->id() == id) 0667 // { 0668 // return c; 0669 // } 0670 // } 0671 // return 0; 0672 // } 0673 0674 Continent* ONU::continentNamed(const QString& name) 0675 { 0676 foreach (Continent *c, m_continents) 0677 { 0678 if (c-> name() == name) 0679 return c; 0680 } 0681 return nullptr; 0682 } 0683 0684 void ONU::buildMap() 0685 { 0686 qCDebug(KSIRKSKINEDITOR_LOG); 0687 //QSize size((int)(m_renderer.defaultSize().width()),(int)(m_renderer.defaultSize().height())); 0688 const qreal dpr = qApp->devicePixelRatio(); 0689 const QSize size((int)(m_width * dpr), (int)(m_height * dpr)); 0690 m_map = QPixmap(size); 0691 m_map.fill(Qt::transparent); 0692 QPainter painter(&m_map); 0693 m_renderer.render(&painter, QStringLiteral("map")); 0694 0695 QFont foregroundFont(m_font.family, m_font.size, m_font.weight, m_font.italic); 0696 QFont backgroundFont(m_font.family, m_font.size, QFont::Normal, m_font.italic); 0697 0698 painter.scale(dpr, dpr); 0699 for (int i = 0; i < m_countries.size(); i++) 0700 { 0701 Country* country = m_countries[i]; 0702 const QString& countryName = i18n(country->name().toUtf8().data()); 0703 if (m_font.backgroundColor != QLatin1String("none")) 0704 { 0705 painter.setPen(m_font.backgroundColor); 0706 painter.setFont(backgroundFont); 0707 QRect countryNameRect = painter.fontMetrics().boundingRect(countryName); 0708 painter.drawText( 0709 int((country->centralPoint().x()-countryNameRect.width()/2+1)), 0710 int((country->centralPoint().y()+countryNameRect.height()/2 + 1)), 0711 countryName); 0712 } 0713 painter.setPen(m_font.foregroundColor); 0714 painter.setFont(foregroundFont); 0715 QRect countryNameRect = painter.fontMetrics().boundingRect(countryName); 0716 painter.drawText( 0717 int((country->centralPoint().x()-countryNameRect.width()/2)), 0718 int((country->centralPoint().y()+countryNameRect.height()/2)), 0719 countryName); 0720 } 0721 m_map.setDevicePixelRatio(dpr); 0722 } 0723 0724 QPixmap ONU::pixmapForId(const QString& id, int width, int height) 0725 { 0726 qCDebug(KSIRKSKINEDITOR_LOG) << id << width << height; 0727 //QSize size((int)(m_renderer.defaultSize().width()),(int)(m_renderer.defaultSize().height())); 0728 const qreal dpr = qApp->devicePixelRatio(); 0729 const QSize size(width * dpr, height * dpr); 0730 QPixmap pixmap(size); 0731 pixmap.fill(Qt::transparent); 0732 QPainter p(&pixmap); 0733 m_renderer.render(&p, id); 0734 pixmap.setDevicePixelRatio(dpr); 0735 return pixmap; 0736 } 0737 0738 QSvgRenderer* ONU::renderer() 0739 { 0740 return &m_renderer; 0741 } 0742 0743 KGameSvgDocument* ONU::svgDom() 0744 { 0745 return &m_svgDom; 0746 } 0747 0748 QGraphicsItem* ONU::itemFor(const Country* country, SpriteType spriteType) 0749 { 0750 if (country==nullptr || spriteType == None) return nullptr; 0751 foreach (QGraphicsItem* item, m_itemsMap.keys()) 0752 { 0753 if (m_itemsMap[item].first == country && m_itemsMap[item].second == spriteType) 0754 { 0755 // qCDebug(KSIRKSKINEDITOR_LOG) << item << (void*)country << spriteType; 0756 return item; 0757 } 0758 } 0759 qCDebug(KSIRKSKINEDITOR_LOG) << 0; 0760 return nullptr; 0761 } 0762 0763 QFont ONU::foregroundFont() 0764 { 0765 QFont foregroundFont(m_font.family, m_font.size, m_font.weight, m_font.italic); 0766 return foregroundFont; 0767 } 0768 0769 QFont ONU::backgroundFont() 0770 { 0771 QFont backgroundFont(m_font.family, m_font.size, QFont::Normal, m_font.italic); 0772 return backgroundFont; 0773 } 0774 0775 void ONU::setFont(const QFont& font) 0776 { 0777 if (m_font.family == font.family() 0778 && m_font.size == font.pointSize() 0779 && m_font.weight == (QFont::Weight)font.weight() 0780 && m_font.italic == font.italic()) 0781 return; 0782 m_font.family = font.family(); 0783 m_font.size = font.pointSize(); 0784 m_font.weight = (QFont::Weight)font.weight(); 0785 m_font.italic = font.italic(); 0786 m_dirty = true; 0787 } 0788 0789 void ONU::setFontFgColor(const QColor& color) 0790 { 0791 if (m_font.foregroundColor == color.name()) 0792 return; 0793 m_font.foregroundColor = color.name(); 0794 m_dirty = true; 0795 } 0796 0797 void ONU::setFontBgColor(const QColor& color) 0798 { 0799 if (m_font.backgroundColor == color.name()) 0800 return; 0801 m_font.backgroundColor = color.name(); 0802 m_dirty = true; 0803 } 0804 0805 0806 void ONU::createCountry(const QString& newCountryName) 0807 { 0808 qCDebug(KSIRKSKINEDITOR_LOG); 0809 Country* newCountry = new Country(newCountryName, QPointF(), QPointF(), QPointF(), QPointF(), QPointF(), QPointF()/*, m_countries.size()*/); 0810 m_countries.push_back(newCountry); 0811 m_dirty = true; 0812 } 0813 0814 void ONU::deleteCountry(Country* country) 0815 { 0816 qCDebug(KSIRKSKINEDITOR_LOG) << country->name(); 0817 QList<QGraphicsItem*> itemsToRemove; 0818 foreach (QGraphicsItem* item, m_itemsMap.keys()) 0819 { 0820 if (m_itemsMap[item].first == country) 0821 { 0822 itemsToRemove.push_back(item); 0823 } 0824 } 0825 foreach (QGraphicsItem* item, itemsToRemove) 0826 { 0827 qCDebug(KSIRKSKINEDITOR_LOG) << "remove an item"; 0828 item->hide(); 0829 item->scene()->removeItem(item); 0830 m_itemsMap.remove(item); 0831 delete item; 0832 } 0833 qCDebug(KSIRKSKINEDITOR_LOG) << "remove and delete the country"; 0834 KConfig config(m_configFileName); 0835 config.deleteGroup(country->name()); 0836 0837 m_countries.removeAll(country); 0838 delete country; 0839 m_dirty = true; 0840 } 0841 0842 void ONU::createContinent(const QString& newContinentName) 0843 { 0844 qCDebug(KSIRKSKINEDITOR_LOG); 0845 Continent* newContinent = new Continent(newContinentName, QList<Country*>(), 0); 0846 m_continents.push_back(newContinent); 0847 m_dirty = true; 0848 } 0849 0850 void ONU::deleteContinent(Continent* continent) 0851 { 0852 qCDebug(KSIRKSKINEDITOR_LOG) << continent->name(); 0853 qCDebug(KSIRKSKINEDITOR_LOG) << "remove and delete the continent"; 0854 KConfig config(m_configFileName); 0855 config.deleteGroup(continent->name()); 0856 0857 m_continents.removeAll(continent); 0858 delete continent; 0859 m_dirty = true; 0860 } 0861 0862 void ONU::updateIcon(SpriteType type) 0863 { 0864 qCDebug(KSIRKSKINEDITOR_LOG) << type; 0865 int flagWidth; 0866 int flagHeight; 0867 int flagFrames; 0868 int flagVersions; 0869 int infantryWidth; 0870 int infantryHeight; 0871 int infantryFrames; 0872 int infantryVersions; 0873 int cavalryWidth; 0874 int cavalryHeight; 0875 int cavalryFrames; 0876 int cavalryVersions; 0877 int cannonWidth; 0878 int cannonHeight; 0879 int cannonFrames; 0880 int cannonVersions; 0881 0882 switch (type) 0883 { 0884 case Flag: 0885 flagWidth = SkinSpritesData::changeable().intData(QStringLiteral("flag-width")); 0886 flagHeight = SkinSpritesData::changeable().intData(QStringLiteral("flag-height")); 0887 flagFrames = SkinSpritesData::changeable().intData(QStringLiteral("flag-frames")); 0888 flagVersions = SkinSpritesData::changeable().intData(QStringLiteral("flag-versions")); 0889 if (m_nationalities.empty()) 0890 { 0891 m_flagIcon = QPixmap(flagWidth,flagHeight); 0892 } 0893 else 0894 { 0895 m_flagIcon = QPixmap(pixmapForId(nationalities()[0]->name().toLower(),flagWidth*flagFrames,flagHeight*flagVersions).copy(0,0,flagWidth,flagHeight)); 0896 } 0897 break; 0898 case Infantry: 0899 infantryWidth = SkinSpritesData::changeable().intData(QStringLiteral("infantry-width")); 0900 infantryHeight = SkinSpritesData::changeable().intData(QStringLiteral("infantry-height")); 0901 infantryFrames = SkinSpritesData::changeable().intData(QStringLiteral("infantry-frames")); 0902 infantryVersions = SkinSpritesData::changeable().intData(QStringLiteral("infantry-versions")); 0903 m_infantryIcon = QPixmap( 0904 pixmapForId(QStringLiteral("infantry"),infantryWidth*infantryFrames,infantryHeight*infantryVersions).copy(0,0,infantryWidth,infantryHeight)); 0905 break; 0906 case Cavalry: 0907 cavalryWidth = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-width")); 0908 cavalryHeight = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-height")); 0909 cavalryFrames = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-frames")); 0910 cavalryVersions = SkinSpritesData::changeable().intData(QStringLiteral("cavalry-versions")); 0911 m_cavalryIcon = QPixmap( 0912 pixmapForId(QStringLiteral("cavalry"),cavalryWidth*cavalryFrames,cavalryHeight*cavalryVersions).copy(0,0,cavalryWidth,cavalryHeight)); 0913 break; 0914 case Cannon: 0915 cannonWidth = SkinSpritesData::changeable().intData(QStringLiteral("cannon-width")); 0916 cannonHeight = SkinSpritesData::changeable().intData(QStringLiteral("cannon-height")); 0917 cannonFrames = SkinSpritesData::changeable().intData(QStringLiteral("cannon-frames")); 0918 cannonVersions = SkinSpritesData::changeable().intData(QStringLiteral("cannon-versions")); 0919 m_cannonIcon = QPixmap( 0920 pixmapForId(QStringLiteral("cannon"),cannonWidth*cannonFrames,cannonHeight*cannonVersions).copy(0,0,cannonWidth,cannonHeight)); 0921 break; 0922 default:; 0923 } 0924 } 0925 0926 void ONU::createGoal() 0927 { 0928 Goal* goal = new Goal(); 0929 m_goals.push_back(goal); 0930 m_dirty = true; 0931 } 0932 0933 void ONU::deleteGoal(int g) 0934 { 0935 qCDebug(KSIRKSKINEDITOR_LOG) << m_goals.size() << g; 0936 0937 KConfig config(m_configFileName); 0938 QString groupName = QStringLiteral("goal")+QString::number(g+1); 0939 qCDebug(KSIRKSKINEDITOR_LOG) << "delete group" << groupName; 0940 config.deleteGroup(groupName); 0941 0942 Goal* goal = m_goals.takeAt(g); 0943 delete goal; 0944 m_dirty = true; 0945 } 0946 0947 Nationality* ONU::nationalityNamed(const QString& name) 0948 { 0949 foreach (Nationality* nationality, m_nationalities) 0950 { 0951 if (nationality->name() == name) 0952 { 0953 return nationality; 0954 } 0955 } 0956 return nullptr; 0957 } 0958 0959 void ONU::createNationality(const QString& newNationalityName) 0960 { 0961 Nationality* nationality = new Nationality(newNationalityName, QLatin1String(""), QLatin1String("")); 0962 0963 m_nationalities.push_back(nationality); 0964 m_dirty = true; 0965 } 0966 0967 void ONU::deleteNationality(Nationality* nationality) 0968 { 0969 qCDebug(KSIRKSKINEDITOR_LOG); 0970 0971 KConfig config(m_configFileName); 0972 config.deleteGroup(nationality->name()); 0973 0974 m_nationalities.removeAll(nationality); 0975 delete nationality; 0976 m_dirty = true; 0977 } 0978 0979 void ONU::loadPoolIds(const QString& fileName) 0980 { 0981 qCDebug(KSIRKSKINEDITOR_LOG) << fileName; 0982 QFile file(fileName); 0983 if (!file.open(QFile::ReadOnly | QFile::Text)) 0984 { 0985 KMessageBox::error(nullptr, 0986 i18n("Cannot read file %1:\n%2.",fileName,file.errorString()), 0987 i18n("PoolLoader")); 0988 return; 0989 } 0990 0991 QXmlStreamReader xml(&file); 0992 QRegExp reg("\\D+\\d+"); 0993 while (!xml.atEnd()) 0994 { 0995 QXmlStreamReader::TokenType type = xml.readNext(); 0996 if (type == QXmlStreamReader::StartElement) 0997 { 0998 qCDebug(KSIRKSKINEDITOR_LOG) << xml.text().toString(); 0999 QXmlStreamAttributes attributes = xml.attributes (); 1000 auto id = attributes.value(QLatin1String(""), QStringLiteral("id") ); 1001 1002 if (!id.isEmpty() && !reg.exactMatch(id.toString())) 1003 { 1004 m_poolIds.push_back(id.toString()); 1005 } 1006 } 1007 } 1008 if (xml.hasError()) 1009 { 1010 qCCritical(KSIRKSKINEDITOR_LOG) << "Error: " << xml.errorString(); 1011 // do error handling 1012 } 1013 m_poolIds.sort(); 1014 } 1015 1016 } 1017 1018 #include "moc_onu.cpp"