# HG changeset patch # User Wuzzy # Date 1521037148 -3600 # Node ID 0bc5f618ca7ceca2dfc5d477af925c6846119ee1 # Parent f93658732448f445666210363ee9a1038e1df60c Rename the misleadingly-named AmmoSchemeModel to GameSchemeModel AmmoSchemeModel was a misleading name, this class was actually used only for game schemes. diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/hwform.cpp Wed Mar 14 15:19:08 2018 +0100 @@ -90,7 +90,7 @@ #include "chatwidget.h" #include "input_ip.h" #include "input_password.h" -#include "ammoSchemeModel.h" +#include "gameSchemeModel.h" #include "bgwidget.h" #include "drawmapwidget.h" #include "mouseoverfilter.h" @@ -347,10 +347,10 @@ connect(ui.pageVideos, SIGNAL(goBack()), config, SLOT(SaveVideosOptions())); - ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/Schemes/Game"); - ui.pageScheme->setModel(ammoSchemeModel); - ui.pageMultiplayer->gameCFG->GameSchemes->setModel(ammoSchemeModel); - ui.pageOptions->SchemesName->setModel(ammoSchemeModel); + gameSchemeModel = new GameSchemeModel(this, cfgdir->absolutePath() + "/Schemes/Game"); + ui.pageScheme->setModel(gameSchemeModel); + ui.pageMultiplayer->gameCFG->GameSchemes->setModel(gameSchemeModel); + ui.pageOptions->SchemesName->setModel(gameSchemeModel); wBackground = new BGWidget(this); wBackground->setFixedSize(this->width(), this->height()); @@ -919,7 +919,7 @@ //if (curid == ID_PAGE_NETGAME && (!game || game->gameState != gsStarted)) hwnet->partRoom(); if (curid == ID_PAGE_SCHEME) - ammoSchemeModel->Save(); + gameSchemeModel->Save(); #if (QT_VERSION >= 0x040600) /**Start animation :**/ @@ -1079,14 +1079,14 @@ void HWForm::DeleteScheme() { ui.pageScheme->selectScheme->setCurrentIndex(ui.pageOptions->SchemesName->currentIndex()); - if (ui.pageOptions->SchemesName->currentIndex() < ammoSchemeModel->numberOfDefaultSchemes) + if (ui.pageOptions->SchemesName->currentIndex() < gameSchemeModel->numberOfDefaultSchemes) { MessageDialog::ShowErrorMessage(QMessageBox::tr("Cannot delete default scheme '%1'!").arg(ui.pageOptions->SchemesName->currentText()), this); } else { ui.pageScheme->deleteRow(); - ammoSchemeModel->Save(); + gameSchemeModel->Save(); } } @@ -1899,7 +1899,7 @@ ui.pageNetGame->restrictJoins->setChecked(false); ui.pageNetGame->restrictTeamAdds->setChecked(false); ui.pageNetGame->restrictUnregistered->setChecked(false); - ui.pageNetGame->pGameCFG->GameSchemes->setModel(ammoSchemeModel); + ui.pageNetGame->pGameCFG->GameSchemes->setModel(gameSchemeModel); ui.pageNetGame->pGameCFG->setMaster(true); ui.pageNetGame->pNetTeamsWidget->setInteractivity(true); @@ -1936,7 +1936,7 @@ if (hwnet) { - NetAmmoSchemeModel * netAmmo = new NetAmmoSchemeModel(hwnet); + NetGameSchemeModel * netAmmo = new NetGameSchemeModel(hwnet); connect(hwnet, SIGNAL(netSchemeConfig(QStringList)), netAmmo, SLOT(setNetSchemeConfig(QStringList))); ui.pageNetGame->pGameCFG->GameSchemes->setModel(netAmmo); diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/hwform.h --- a/QTfrontend/hwform.h Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/hwform.h Wed Mar 14 15:19:08 2018 +0100 @@ -47,7 +47,7 @@ class GameUIConfig; class HWNetRegisterServer; class QCloseEvent; -class AmmoSchemeModel; +class GameSchemeModel; class QSettings; class QSignalMapper; @@ -197,7 +197,7 @@ QPointer editedTeam; QPointer hwnet; HWNamegen * namegen; - AmmoSchemeModel * ammoSchemeModel; + GameSchemeModel * gameSchemeModel; QStack PagesStack; QString previousCampaignName; QString previousTeamName; diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/model/ammoSchemeModel.cpp --- a/QTfrontend/model/ammoSchemeModel.cpp Wed Mar 14 14:42:50 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1050 +0,0 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2015 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include -#include -#include - -#include "ammoSchemeModel.h" -#include "hwconsts.h" - -QList defaultScheme = QList() - << QVariant("Default") // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(4) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(2) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - -AmmoSchemeModel::AmmoSchemeModel(QObject* parent, const QString & directory) : - QAbstractTableModel(parent), - fileConfig(cfgdir->absolutePath() + "/schemes.ini", QSettings::IniFormat) -{ - predefSchemesNames = QStringList() - << "Default" - << "Pro Mode" - << "Shoppa" - << "Clean Slate" - << "Minefield" - << "Barrel Mayhem" - << "Tunnel Hogs" - << "Timeless" - << "Thinking with Portals" - << "King Mode" - << "Construction Mode" - << "Space Invasion" - << "HedgeEditor" - ; - - numberOfDefaultSchemes = predefSchemesNames.size(); - - spNames = QStringList() - << "name" // 0 | Name should be first forever - << "fortsmode" // 1 - << "divteams" // 2 - << "solidland" // 3 - << "border" // 4 - << "lowgrav" // 5 - << "laser" // 6 - << "invulnerability" // 7 - << "resethealth" // 8 - << "vampiric" // 9 - << "karma" // 10 - << "artillery" // 11 - << "randomorder" // 12 - << "king" // 13 - << "placehog" // 14 - << "sharedammo" // 15 - << "disablegirders" // 16 - << "disablelandobjects" // 17 - << "aisurvival" // 18 - << "infattack" // 19 - << "resetweps" // 20 - << "perhogammo" // 21 - << "disablewind" // 22 - << "morewind" // 23 - << "tagteam" // 24 - << "bottomborder" // 25 - << "damagefactor" // 26 - << "turntime" // 27 - << "health" // 28 - << "suddendeath" // 29 - << "caseprobability" // 30 - << "minestime" // 31 - << "minesnum" // 32 - << "minedudpct" // 33 - << "explosives" // 34 - << "airmines" // 35 - << "healthprobability" // 36 - << "healthcaseamount" // 37 - << "waterrise" // 38 - << "healthdecrease" // 39 - << "ropepct" // 40 - << "getawaytime" // 41 - << "worldedge" // 42 - << "scriptparam" // scriptparam 43 - ; - - QList proMode; - proMode - << predefSchemesNames[1] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(true) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(15) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(0) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(2) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList shoppa; - shoppa - << predefSchemesNames[2] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(true) // solid land 3 - << QVariant(true) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(true) // shared ammo 15 - << QVariant(true) // disable girders 16 - << QVariant(true) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(true) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(30) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(50) // sudden death 29 - << QVariant(1) // case prob 30 - << QVariant(0) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(0) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(0) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(0) // water rise amt 38 - << QVariant(0) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList cleanslate; - cleanslate - << predefSchemesNames[3] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(true) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(true) // inf. attack 19 - << QVariant(true) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(4) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(2) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList minefield; - minefield - << predefSchemesNames[4] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(true) // shared ammo 15 - << QVariant(true) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(30) // turn time 27 - << QVariant(50) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(0) // case prob 30 - << QVariant(0) // mines time 31 - << QVariant(200) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(0) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList barrelmayhem; - barrelmayhem - << predefSchemesNames[5] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(true) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(30) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(0) // case prob 30 - << QVariant(0) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(200) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList tunnelhogs; - tunnelhogs - << predefSchemesNames[6] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(true) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(true) // shared ammo 15 - << QVariant(true) // disable girders 16 - << QVariant(true) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(30) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(10) // mines number 32 - << QVariant(10) // mine dud pct 33 - << QVariant(10) // explosives 34 - << QVariant(4) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList timeless; - timeless - << predefSchemesNames[7] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(true) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(9999) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(5) // mines number 32 - << QVariant(10) // mine dud pct 33 - << QVariant(2) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(30) // health case amt 37 - << QVariant(0) // water rise amt 38 - << QVariant(0) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList thinkingportals; - thinkingportals - << predefSchemesNames[8] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(true) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(2) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(5) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(5) // explosives 34 - << QVariant(4) // air mines 35 - << QVariant(25) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList kingmode; - kingmode - << predefSchemesNames[9] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(true) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(4) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(2) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - QList construction; - construction - << predefSchemesNames[10] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(true) // disable girders 16 - << QVariant(true) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(true) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(true) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(15) // sudden death 29 - << QVariant(5) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(0) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(47) // water rise amt 38 - << QVariant(5) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - // NOTE: If you change this, also change the defaults in the Construction Mode script - << QVariant("initialenergy=550, energyperround=50, maxenergy=1000, cratesperround=5") // scriptparam 43 - ; - - QList spaceinvasion; - spaceinvasion - << predefSchemesNames[11] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(true) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(true) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(false) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(45) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(50) // sudden death 29 - << QVariant(0) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(0) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(0) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(0) // water rise amt 38 - << QVariant(0) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - // NOTE: If you change this, also change the defaults in the Space Invasion script - << QVariant("rounds=3, shield=30, barrels=5, pings=2, barrelbonus=3, shieldbonus=30, timebonus=4") // scriptparam 43 - ; - - QList hedgeeditor; - hedgeeditor - << predefSchemesNames[12] // name 0 - << QVariant(false) // fortsmode 1 - << QVariant(false) // team divide 2 - << QVariant(false) // solid land 3 - << QVariant(false) // border 4 - << QVariant(false) // low gravity 5 - << QVariant(false) // laser sight 6 - << QVariant(false) // invulnerable 7 - << QVariant(false) // reset health 8 - << QVariant(false) // vampiric 9 - << QVariant(false) // karma 10 - << QVariant(false) // artillery 11 - << QVariant(false) // random order 12 - << QVariant(false) // king 13 - << QVariant(false) // place hog 14 - << QVariant(false) // shared ammo 15 - << QVariant(false) // disable girders 16 - << QVariant(false) // disable land objects 17 - << QVariant(false) // AI survival 18 - << QVariant(false) // inf. attack 19 - << QVariant(false) // reset weps 20 - << QVariant(true) // per hog ammo 21 - << QVariant(false) // no wind 22 - << QVariant(false) // more wind 23 - << QVariant(false) // tag team 24 - << QVariant(false) // bottom border 25 - << QVariant(100) // damage modfier 26 - << QVariant(9999) // turn time 27 - << QVariant(100) // init health 28 - << QVariant(50) // sudden death 29 - << QVariant(0) // case prob 30 - << QVariant(3) // mines time 31 - << QVariant(0) // mines number 32 - << QVariant(0) // mine dud pct 33 - << QVariant(0) // explosives 34 - << QVariant(0) // air mines 35 - << QVariant(35) // health case pct 36 - << QVariant(25) // health case amt 37 - << QVariant(0) // water rise amt 38 - << QVariant(0) // health dec amt 39 - << QVariant(100) // rope modfier 40 - << QVariant(100) // get away time 41 - << QVariant(0) // world edge 42 - << QVariant() // scriptparam 43 - ; - - - - schemes.append(defaultScheme); - schemes.append(proMode); - schemes.append(shoppa); - schemes.append(cleanslate); - schemes.append(minefield); - schemes.append(barrelmayhem); - schemes.append(tunnelhogs); - schemes.append(timeless); - schemes.append(thinkingportals); - schemes.append(kingmode); - schemes.append(construction); - schemes.append(spaceinvasion); - schemes.append(hedgeeditor); - - if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) { - QDir().mkdir(cfgdir->absolutePath() + "/Schemes"); - } - if (!QDir(directory).exists()) { - QDir().mkdir(directory); - - qDebug("No /Schemes/Game directory found. Trying to import game schemes from schemes.ini."); - - int size = fileConfig.beginReadArray("schemes"); - int imported = 0; - for (int i = 0; i < size; ++i) - { - fileConfig.setArrayIndex(i); - - QString schemeName = fileConfig.value(spNames[0]).toString(); - if (!schemeName.isNull() && !predefSchemesNames.contains(schemeName)) - { - QList scheme; - QFile file(directory + "/" + schemeName + ".hwg"); - - // Add keys to scheme info and create file - if (file.open(QIODevice::WriteOnly)) { - QTextStream stream(&file); - - for (int k = 0; k < spNames.size(); ++k) { - scheme << fileConfig.value(spNames[k], defaultScheme[k]); - - // File handling - // We skip the name key (k==0), it is not stored redundantly in file. - // The file name is used for that already. - if(k != 0) { - // The file is just a list of key=value pairs - stream << spNames[k] << "=" << fileConfig.value(spNames[k], defaultScheme[k]).toString(); - stream << endl; - } - } - file.close(); - } - imported++; - - schemes.append(scheme); - } - } - qDebug("%d game scheme(s) imported.", imported); - fileConfig.endArray(); - } else { - QStringList scheme_dir = QDir(directory).entryList(QDir::Files); - - for(int i = 0; i < scheme_dir.size(); i++) - { - QList scheme; - QFile file(directory + "/" + scheme_dir[i]); - - // Chop off file name suffix - QString schemeName = scheme_dir[i]; - if (schemeName.endsWith(".hwg", Qt::CaseInsensitive)) { - schemeName.chop(4); - } - // Parse game scheme file - if (file.open(QIODevice::ReadOnly)) { - QTextStream stream(&file); - QString line, key, value; - QHash fileKeyValues; - do { - // Read line and get key and value - line = stream.readLine(); - key = line.section(QChar('='), 0, 0); - value = line.section(QChar('='), 1); - if(!key.isNull() && !value.isNull()) { - fileKeyValues[key] = value; - } - } while (!line.isNull()); - - // Add scheme name manually - scheme << schemeName; - // Add other keys from the QHash. - for (int k = 1; k < spNames.size(); ++k) { - key = spNames[k]; - if (fileKeyValues.contains(key)) { - scheme << fileKeyValues.value(key); - } else { - // Use default value in case the key is not set - scheme << defaultScheme[k]; - } - } - schemes.append(scheme); - - file.close(); - } - } - } -} - -QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - Q_UNUSED(section); - Q_UNUSED(orientation); - Q_UNUSED(role); - - return QVariant(); -} - -int AmmoSchemeModel::rowCount(const QModelIndex &parent) const -{ - if (parent.isValid()) - return 0; - else - return schemes.size(); -} - -int AmmoSchemeModel::columnCount(const QModelIndex & parent) const -{ - if (parent.isValid()) - return 0; - else - return defaultScheme.size(); -} - -bool AmmoSchemeModel::hasScheme(QString name) -{ - for(int i=0; i= schemes.size() - || index.column() >= defaultScheme.size() - || role != Qt::EditRole) - return false; - - schemes[index.row()][index.column()] = value; - - emit dataChanged(index, index); - return true; -} - -bool AmmoSchemeModel::insertRows(int row, int count, const QModelIndex & parent) -{ - Q_UNUSED(count); - - beginInsertRows(parent, schemes.size(), schemes.size()); - - if (row == -1) - { - QList newScheme = defaultScheme; - - QString newName = tr("New"); - if(hasScheme(newName)) - { - //name already used -> look for an appropriate name: - int i=2; - while(hasScheme(newName = tr("New (%1)").arg(i++))) ; - } - newScheme[0] = QVariant(newName); - schemes.insert(schemes.size(), newScheme); - } - else - { - QList newScheme = schemes[row]; - QString oldName = newScheme[0].toString(); - QString newName = tr("Copy of %1").arg(oldName); - if(hasScheme(newName)) - { - //name already used -> look for an appropriate name: - int i=2; - while(hasScheme(newName = tr("Copy of %1 (%2)").arg(oldName).arg(i++))); - } - newScheme[0] = QVariant(newName); - schemes.insert(schemes.size(), newScheme); - } - - endInsertRows(); - - return true; -} - -bool AmmoSchemeModel::removeRows(int row, int count, const QModelIndex & parent) -{ - if(count != 1 - || row < numberOfDefaultSchemes - || row >= schemes.size()) - return false; - - beginRemoveRows(parent, row, row); - - QList scheme = schemes[row]; - int j = spNames.indexOf("name"); - QFile(cfgdir->absolutePath() + "/Schemes/Game/" + scheme[j].toString() + ".hwg").remove(); - schemes.removeAt(row); - - endRemoveRows(); - - return true; -} - -QVariant AmmoSchemeModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid() || index.row() < 0 - || index.row() >= schemes.size() - || index.column() >= defaultScheme.size() - || (role != Qt::EditRole && role != Qt::DisplayRole) - ) - return QVariant(); - - return schemes[index.row()][index.column()]; -} - -void AmmoSchemeModel::Save() -{ - fileConfig.beginWriteArray("schemes"); - for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i) - { - QList scheme = schemes[i + numberOfDefaultSchemes]; - int j = spNames.indexOf("name"); - - QString schemeName = scheme[j].toString(); - QFile file(cfgdir->absolutePath() + "/Schemes/Game/" + schemeName + ".hwg"); - - if (file.open(QIODevice::WriteOnly)) { - QTextStream stream(&file); - for (int k = 0; k < spNames.size(); ++k) { - // We skip the name key - if(k != j) { - // The file is just a list of key=value pairs - stream << spNames[k] << "=" << scheme[k].toString(); - stream << endl; - } - } - file.close(); - } - } - fileConfig.endArray(); -} - - -NetAmmoSchemeModel::NetAmmoSchemeModel(QObject * parent) : - QAbstractTableModel(parent) -{ - netScheme = defaultScheme; -} - -QVariant NetAmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - Q_UNUSED(section); - Q_UNUSED(orientation); - Q_UNUSED(role); - - return QVariant(); -} - -int NetAmmoSchemeModel::rowCount(const QModelIndex & parent) const -{ - if (parent.isValid()) - return 0; - else - return 1; -} - -int NetAmmoSchemeModel::columnCount(const QModelIndex & parent) const -{ - if (parent.isValid()) - return 0; - else - return defaultScheme.size(); -} - -QVariant NetAmmoSchemeModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid() || index.row() < 0 - || index.row() > 1 - || index.column() >= defaultScheme.size() - || (role != Qt::EditRole && role != Qt::DisplayRole) - ) - return QVariant(); - - return netScheme[index.column()]; -} - -void NetAmmoSchemeModel::setNetSchemeConfig(QStringList cfg) -{ - if(cfg.size() != netScheme.size()) - { - qWarning("Incorrect scheme cfg size"); - return; - } - - beginResetModel(); - - cfg[cfg.size()-1] = cfg[cfg.size()-1].mid(1); - - for(int i = 0; i < cfg.size(); ++i) - netScheme[i] = QVariant(cfg[i]); - - endResetModel(); -} diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/model/ammoSchemeModel.h --- a/QTfrontend/model/ammoSchemeModel.h Wed Mar 14 14:42:50 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2015 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef _AMMO_SCHEME_MODEL_INCLUDED -#define _AMMO_SCHEME_MODEL_INCLUDED - -#include -#include -#include -#include - -class AmmoSchemeModel : public QAbstractTableModel -{ - Q_OBJECT - - public: - AmmoSchemeModel(QObject * parent, const QString & fileName); - - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - int rowCount(const QModelIndex & parent) const; - int columnCount(const QModelIndex & parent) const; - bool hasScheme(QString name); - Qt::ItemFlags flags(const QModelIndex & index) const; - bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); - bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex()); - bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); - QVariant data(const QModelIndex &index, int role) const; - - int numberOfDefaultSchemes; - QStringList predefSchemesNames; - QStringList spNames; - - public slots: - void Save(); - -// signals: -// void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight); - - protected: - QList< QList > schemes; - - private: - QSettings fileConfig; -}; - -class NetAmmoSchemeModel : public QAbstractTableModel -{ - Q_OBJECT - - public: - NetAmmoSchemeModel(QObject * parent); - - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - int rowCount(const QModelIndex & parent) const; - int columnCount(const QModelIndex & parent) const; - QVariant data(const QModelIndex &index, int role) const; - - public slots: - void setNetSchemeConfig(QStringList cfg); - - private: - QList netScheme; -}; - -#endif // _AMMO_SCHEME_MODEL_INCLUDED diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/model/gameSchemeModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/model/gameSchemeModel.cpp Wed Mar 14 15:19:08 2018 +0100 @@ -0,0 +1,1050 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2015 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +#include "gameSchemeModel.h" +#include "hwconsts.h" + +QList defaultScheme = QList() + << QVariant("Default") // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(4) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(2) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + +GameSchemeModel::GameSchemeModel(QObject* parent, const QString & directory) : + QAbstractTableModel(parent), + fileConfig(cfgdir->absolutePath() + "/schemes.ini", QSettings::IniFormat) +{ + predefSchemesNames = QStringList() + << "Default" + << "Pro Mode" + << "Shoppa" + << "Clean Slate" + << "Minefield" + << "Barrel Mayhem" + << "Tunnel Hogs" + << "Timeless" + << "Thinking with Portals" + << "King Mode" + << "Construction Mode" + << "Space Invasion" + << "HedgeEditor" + ; + + numberOfDefaultSchemes = predefSchemesNames.size(); + + spNames = QStringList() + << "name" // 0 | Name should be first forever + << "fortsmode" // 1 + << "divteams" // 2 + << "solidland" // 3 + << "border" // 4 + << "lowgrav" // 5 + << "laser" // 6 + << "invulnerability" // 7 + << "resethealth" // 8 + << "vampiric" // 9 + << "karma" // 10 + << "artillery" // 11 + << "randomorder" // 12 + << "king" // 13 + << "placehog" // 14 + << "sharedammo" // 15 + << "disablegirders" // 16 + << "disablelandobjects" // 17 + << "aisurvival" // 18 + << "infattack" // 19 + << "resetweps" // 20 + << "perhogammo" // 21 + << "disablewind" // 22 + << "morewind" // 23 + << "tagteam" // 24 + << "bottomborder" // 25 + << "damagefactor" // 26 + << "turntime" // 27 + << "health" // 28 + << "suddendeath" // 29 + << "caseprobability" // 30 + << "minestime" // 31 + << "minesnum" // 32 + << "minedudpct" // 33 + << "explosives" // 34 + << "airmines" // 35 + << "healthprobability" // 36 + << "healthcaseamount" // 37 + << "waterrise" // 38 + << "healthdecrease" // 39 + << "ropepct" // 40 + << "getawaytime" // 41 + << "worldedge" // 42 + << "scriptparam" // scriptparam 43 + ; + + QList proMode; + proMode + << predefSchemesNames[1] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(true) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(15) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(0) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(2) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList shoppa; + shoppa + << predefSchemesNames[2] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(true) // solid land 3 + << QVariant(true) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(true) // shared ammo 15 + << QVariant(true) // disable girders 16 + << QVariant(true) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(true) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(30) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(50) // sudden death 29 + << QVariant(1) // case prob 30 + << QVariant(0) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(0) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(0) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(0) // water rise amt 38 + << QVariant(0) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList cleanslate; + cleanslate + << predefSchemesNames[3] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(true) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(true) // inf. attack 19 + << QVariant(true) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(4) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(2) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList minefield; + minefield + << predefSchemesNames[4] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(true) // shared ammo 15 + << QVariant(true) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(30) // turn time 27 + << QVariant(50) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(0) // case prob 30 + << QVariant(0) // mines time 31 + << QVariant(200) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(0) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList barrelmayhem; + barrelmayhem + << predefSchemesNames[5] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(true) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(30) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(0) // case prob 30 + << QVariant(0) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(200) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList tunnelhogs; + tunnelhogs + << predefSchemesNames[6] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(true) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(true) // shared ammo 15 + << QVariant(true) // disable girders 16 + << QVariant(true) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(30) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(10) // mines number 32 + << QVariant(10) // mine dud pct 33 + << QVariant(10) // explosives 34 + << QVariant(4) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList timeless; + timeless + << predefSchemesNames[7] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(true) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(9999) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(5) // mines number 32 + << QVariant(10) // mine dud pct 33 + << QVariant(2) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(30) // health case amt 37 + << QVariant(0) // water rise amt 38 + << QVariant(0) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList thinkingportals; + thinkingportals + << predefSchemesNames[8] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(true) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(2) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(5) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(5) // explosives 34 + << QVariant(4) // air mines 35 + << QVariant(25) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList kingmode; + kingmode + << predefSchemesNames[9] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(true) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(4) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(2) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + QList construction; + construction + << predefSchemesNames[10] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(true) // disable girders 16 + << QVariant(true) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(true) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(true) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(15) // sudden death 29 + << QVariant(5) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(0) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(47) // water rise amt 38 + << QVariant(5) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + // NOTE: If you change this, also change the defaults in the Construction Mode script + << QVariant("initialenergy=550, energyperround=50, maxenergy=1000, cratesperround=5") // scriptparam 43 + ; + + QList spaceinvasion; + spaceinvasion + << predefSchemesNames[11] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(true) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(true) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(false) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(45) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(50) // sudden death 29 + << QVariant(0) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(0) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(0) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(0) // water rise amt 38 + << QVariant(0) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + // NOTE: If you change this, also change the defaults in the Space Invasion script + << QVariant("rounds=3, shield=30, barrels=5, pings=2, barrelbonus=3, shieldbonus=30, timebonus=4") // scriptparam 43 + ; + + QList hedgeeditor; + hedgeeditor + << predefSchemesNames[12] // name 0 + << QVariant(false) // fortsmode 1 + << QVariant(false) // team divide 2 + << QVariant(false) // solid land 3 + << QVariant(false) // border 4 + << QVariant(false) // low gravity 5 + << QVariant(false) // laser sight 6 + << QVariant(false) // invulnerable 7 + << QVariant(false) // reset health 8 + << QVariant(false) // vampiric 9 + << QVariant(false) // karma 10 + << QVariant(false) // artillery 11 + << QVariant(false) // random order 12 + << QVariant(false) // king 13 + << QVariant(false) // place hog 14 + << QVariant(false) // shared ammo 15 + << QVariant(false) // disable girders 16 + << QVariant(false) // disable land objects 17 + << QVariant(false) // AI survival 18 + << QVariant(false) // inf. attack 19 + << QVariant(false) // reset weps 20 + << QVariant(true) // per hog ammo 21 + << QVariant(false) // no wind 22 + << QVariant(false) // more wind 23 + << QVariant(false) // tag team 24 + << QVariant(false) // bottom border 25 + << QVariant(100) // damage modfier 26 + << QVariant(9999) // turn time 27 + << QVariant(100) // init health 28 + << QVariant(50) // sudden death 29 + << QVariant(0) // case prob 30 + << QVariant(3) // mines time 31 + << QVariant(0) // mines number 32 + << QVariant(0) // mine dud pct 33 + << QVariant(0) // explosives 34 + << QVariant(0) // air mines 35 + << QVariant(35) // health case pct 36 + << QVariant(25) // health case amt 37 + << QVariant(0) // water rise amt 38 + << QVariant(0) // health dec amt 39 + << QVariant(100) // rope modfier 40 + << QVariant(100) // get away time 41 + << QVariant(0) // world edge 42 + << QVariant() // scriptparam 43 + ; + + + + schemes.append(defaultScheme); + schemes.append(proMode); + schemes.append(shoppa); + schemes.append(cleanslate); + schemes.append(minefield); + schemes.append(barrelmayhem); + schemes.append(tunnelhogs); + schemes.append(timeless); + schemes.append(thinkingportals); + schemes.append(kingmode); + schemes.append(construction); + schemes.append(spaceinvasion); + schemes.append(hedgeeditor); + + if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) { + QDir().mkdir(cfgdir->absolutePath() + "/Schemes"); + } + if (!QDir(directory).exists()) { + QDir().mkdir(directory); + + qDebug("No /Schemes/Game directory found. Trying to import game schemes from schemes.ini."); + + int size = fileConfig.beginReadArray("schemes"); + int imported = 0; + for (int i = 0; i < size; ++i) + { + fileConfig.setArrayIndex(i); + + QString schemeName = fileConfig.value(spNames[0]).toString(); + if (!schemeName.isNull() && !predefSchemesNames.contains(schemeName)) + { + QList scheme; + QFile file(directory + "/" + schemeName + ".hwg"); + + // Add keys to scheme info and create file + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream(&file); + + for (int k = 0; k < spNames.size(); ++k) { + scheme << fileConfig.value(spNames[k], defaultScheme[k]); + + // File handling + // We skip the name key (k==0), it is not stored redundantly in file. + // The file name is used for that already. + if(k != 0) { + // The file is just a list of key=value pairs + stream << spNames[k] << "=" << fileConfig.value(spNames[k], defaultScheme[k]).toString(); + stream << endl; + } + } + file.close(); + } + imported++; + + schemes.append(scheme); + } + } + qDebug("%d game scheme(s) imported.", imported); + fileConfig.endArray(); + } else { + QStringList scheme_dir = QDir(directory).entryList(QDir::Files); + + for(int i = 0; i < scheme_dir.size(); i++) + { + QList scheme; + QFile file(directory + "/" + scheme_dir[i]); + + // Chop off file name suffix + QString schemeName = scheme_dir[i]; + if (schemeName.endsWith(".hwg", Qt::CaseInsensitive)) { + schemeName.chop(4); + } + // Parse game scheme file + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream(&file); + QString line, key, value; + QHash fileKeyValues; + do { + // Read line and get key and value + line = stream.readLine(); + key = line.section(QChar('='), 0, 0); + value = line.section(QChar('='), 1); + if(!key.isNull() && !value.isNull()) { + fileKeyValues[key] = value; + } + } while (!line.isNull()); + + // Add scheme name manually + scheme << schemeName; + // Add other keys from the QHash. + for (int k = 1; k < spNames.size(); ++k) { + key = spNames[k]; + if (fileKeyValues.contains(key)) { + scheme << fileKeyValues.value(key); + } else { + // Use default value in case the key is not set + scheme << defaultScheme[k]; + } + } + schemes.append(scheme); + + file.close(); + } + } + } +} + +QVariant GameSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + Q_UNUSED(section); + Q_UNUSED(orientation); + Q_UNUSED(role); + + return QVariant(); +} + +int GameSchemeModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return 0; + else + return schemes.size(); +} + +int GameSchemeModel::columnCount(const QModelIndex & parent) const +{ + if (parent.isValid()) + return 0; + else + return defaultScheme.size(); +} + +bool GameSchemeModel::hasScheme(QString name) +{ + for(int i=0; i= schemes.size() + || index.column() >= defaultScheme.size() + || role != Qt::EditRole) + return false; + + schemes[index.row()][index.column()] = value; + + emit dataChanged(index, index); + return true; +} + +bool GameSchemeModel::insertRows(int row, int count, const QModelIndex & parent) +{ + Q_UNUSED(count); + + beginInsertRows(parent, schemes.size(), schemes.size()); + + if (row == -1) + { + QList newScheme = defaultScheme; + + QString newName = tr("New"); + if(hasScheme(newName)) + { + //name already used -> look for an appropriate name: + int i=2; + while(hasScheme(newName = tr("New (%1)").arg(i++))) ; + } + newScheme[0] = QVariant(newName); + schemes.insert(schemes.size(), newScheme); + } + else + { + QList newScheme = schemes[row]; + QString oldName = newScheme[0].toString(); + QString newName = tr("Copy of %1").arg(oldName); + if(hasScheme(newName)) + { + //name already used -> look for an appropriate name: + int i=2; + while(hasScheme(newName = tr("Copy of %1 (%2)").arg(oldName).arg(i++))); + } + newScheme[0] = QVariant(newName); + schemes.insert(schemes.size(), newScheme); + } + + endInsertRows(); + + return true; +} + +bool GameSchemeModel::removeRows(int row, int count, const QModelIndex & parent) +{ + if(count != 1 + || row < numberOfDefaultSchemes + || row >= schemes.size()) + return false; + + beginRemoveRows(parent, row, row); + + QList scheme = schemes[row]; + int j = spNames.indexOf("name"); + QFile(cfgdir->absolutePath() + "/Schemes/Game/" + scheme[j].toString() + ".hwg").remove(); + schemes.removeAt(row); + + endRemoveRows(); + + return true; +} + +QVariant GameSchemeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || index.row() < 0 + || index.row() >= schemes.size() + || index.column() >= defaultScheme.size() + || (role != Qt::EditRole && role != Qt::DisplayRole) + ) + return QVariant(); + + return schemes[index.row()][index.column()]; +} + +void GameSchemeModel::Save() +{ + fileConfig.beginWriteArray("schemes"); + for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i) + { + QList scheme = schemes[i + numberOfDefaultSchemes]; + int j = spNames.indexOf("name"); + + QString schemeName = scheme[j].toString(); + QFile file(cfgdir->absolutePath() + "/Schemes/Game/" + schemeName + ".hwg"); + + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream(&file); + for (int k = 0; k < spNames.size(); ++k) { + // We skip the name key + if(k != j) { + // The file is just a list of key=value pairs + stream << spNames[k] << "=" << scheme[k].toString(); + stream << endl; + } + } + file.close(); + } + } + fileConfig.endArray(); +} + + +NetGameSchemeModel::NetGameSchemeModel(QObject * parent) : + QAbstractTableModel(parent) +{ + netScheme = defaultScheme; +} + +QVariant NetGameSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + Q_UNUSED(section); + Q_UNUSED(orientation); + Q_UNUSED(role); + + return QVariant(); +} + +int NetGameSchemeModel::rowCount(const QModelIndex & parent) const +{ + if (parent.isValid()) + return 0; + else + return 1; +} + +int NetGameSchemeModel::columnCount(const QModelIndex & parent) const +{ + if (parent.isValid()) + return 0; + else + return defaultScheme.size(); +} + +QVariant NetGameSchemeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || index.row() < 0 + || index.row() > 1 + || index.column() >= defaultScheme.size() + || (role != Qt::EditRole && role != Qt::DisplayRole) + ) + return QVariant(); + + return netScheme[index.column()]; +} + +void NetGameSchemeModel::setNetSchemeConfig(QStringList cfg) +{ + if(cfg.size() != netScheme.size()) + { + qWarning("Incorrect scheme cfg size"); + return; + } + + beginResetModel(); + + cfg[cfg.size()-1] = cfg[cfg.size()-1].mid(1); + + for(int i = 0; i < cfg.size(); ++i) + netScheme[i] = QVariant(cfg[i]); + + endResetModel(); +} diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/model/gameSchemeModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/model/gameSchemeModel.h Wed Mar 14 15:19:08 2018 +0100 @@ -0,0 +1,80 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (c) 2004-2015 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _GAME_SCHEME_MODEL_INCLUDED +#define _GAME_SCHEME_MODEL_INCLUDED + +#include +#include +#include +#include + +class GameSchemeModel : public QAbstractTableModel +{ + Q_OBJECT + + public: + GameSchemeModel(QObject * parent, const QString & fileName); + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + int rowCount(const QModelIndex & parent) const; + int columnCount(const QModelIndex & parent) const; + bool hasScheme(QString name); + Qt::ItemFlags flags(const QModelIndex & index) const; + bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); + bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex()); + bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); + QVariant data(const QModelIndex &index, int role) const; + + int numberOfDefaultSchemes; + QStringList predefSchemesNames; + QStringList spNames; + + public slots: + void Save(); + +// signals: +// void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight); + + protected: + QList< QList > schemes; + + private: + QSettings fileConfig; +}; + +class NetGameSchemeModel : public QAbstractTableModel +{ + Q_OBJECT + + public: + NetGameSchemeModel(QObject * parent); + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + int rowCount(const QModelIndex & parent) const; + int columnCount(const QModelIndex & parent) const; + QVariant data(const QModelIndex &index, int role) const; + + public slots: + void setNetSchemeConfig(QStringList cfg); + + private: + QList netScheme; +}; + +#endif // _GAME_SCHEME_MODEL_INCLUDED diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/ui/page/pageroomslist.cpp --- a/QTfrontend/ui/page/pageroomslist.cpp Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/ui/page/pageroomslist.cpp Wed Mar 14 15:19:08 2018 +0100 @@ -34,7 +34,7 @@ #include "roomslistmodel.h" -#include "ammoSchemeModel.h" +#include "gameSchemeModel.h" #include "hwconsts.h" #include "chatwidget.h" #include "roomnameprompt.h" diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/ui/page/pageroomslist.h --- a/QTfrontend/ui/page/pageroomslist.h Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/ui/page/pageroomslist.h Wed Mar 14 15:19:08 2018 +0100 @@ -23,7 +23,7 @@ #include "AbstractPage.h" class HWChatWidget; -class AmmoSchemeModel; +class GameSchemeModel; class QTableView; class RoomsListModel; class QSortFilterProxyModel; @@ -100,7 +100,7 @@ QAction * showJoinRestricted; QSplitter * m_splitter; - AmmoSchemeModel * ammoSchemeModel; + GameSchemeModel * gameSchemeModel; bool restoreHeaderState(); }; diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/ui/page/pagescheme.cpp --- a/QTfrontend/ui/page/pagescheme.cpp Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/ui/page/pagescheme.cpp Wed Mar 14 15:19:08 2018 +0100 @@ -27,7 +27,7 @@ #include #include -#include "ammoSchemeModel.h" +#include "gameSchemeModel.h" #include "pagescheme.h" #include "FreqSpinBox.h" #include "MinesTimeSpinBox.h" @@ -608,7 +608,7 @@ void PageScheme::deleteRow() { - int numberOfDefaultSchemes = ((AmmoSchemeModel*)mapper->model())->numberOfDefaultSchemes; + int numberOfDefaultSchemes = ((GameSchemeModel*)mapper->model())->numberOfDefaultSchemes; if (selectScheme->currentIndex() < numberOfDefaultSchemes) { QMessageBox deniedMsg(this); @@ -637,7 +637,7 @@ void PageScheme::schemeSelected(int n) { - int c = ((AmmoSchemeModel*)mapper->model())->numberOfDefaultSchemes; + int c = ((GameSchemeModel*)mapper->model())->numberOfDefaultSchemes; gbGameModes->setEnabled(n >= c); gbBasicSettings->setEnabled(n >= c); LE_name->setEnabled(n >= c); diff -r f93658732448 -r 0bc5f618ca7c QTfrontend/ui/widget/gamecfgwidget.cpp --- a/QTfrontend/ui/widget/gamecfgwidget.cpp Wed Mar 14 14:42:50 2018 +0100 +++ b/QTfrontend/ui/widget/gamecfgwidget.cpp Wed Mar 14 15:19:08 2018 +0100 @@ -34,7 +34,7 @@ #include "igbox.h" #include "DataManager.h" #include "hwconsts.h" -#include "ammoSchemeModel.h" +#include "gameSchemeModel.h" #include "proto.h" #include "GameStyleModel.h" #include "themeprompt.h" diff -r f93658732448 -r 0bc5f618ca7c project_files/hedgewars.pro --- a/project_files/hedgewars.pro Wed Mar 14 14:42:50 2018 +0100 +++ b/project_files/hedgewars.pro Wed Mar 14 15:19:08 2018 +0100 @@ -21,7 +21,7 @@ HEADERS += ../QTfrontend/model/ThemeModel.h \ ../QTfrontend/model/MapModel.h \ - ../QTfrontend/model/ammoSchemeModel.h \ + ../QTfrontend/model/gameSchemeModel.h \ ../QTfrontend/model/netserverslist.h \ ../QTfrontend/ui/page/pagedrawmap.h \ ../QTfrontend/ui/page/pagedata.h \ @@ -121,7 +121,7 @@ ../QTfrontend/net/hwmapoptimizer.h -SOURCES += ../QTfrontend/model/ammoSchemeModel.cpp \ +SOURCES += ../QTfrontend/model/gameSchemeModel.cpp \ ../QTfrontend/model/MapModel.cpp \ ../QTfrontend/model/ThemeModel.cpp \ ../QTfrontend/model/netserverslist.cpp \ diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ar.ts --- a/share/hedgewars/Data/Locale/hedgewars_ar.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new جديد diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_bg.ts --- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new Нов diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_cs.ts --- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new nový diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_da.ts --- a/share/hedgewars/Data/Locale/hedgewars_da.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_da.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new ny diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_de.ts --- a/share/hedgewars/Data/Locale/hedgewars_de.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Wed Mar 14 15:19:08 2018 +0100 @@ -99,7 +99,7 @@ - AmmoSchemeModel + GameSchemeModel new Neu diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_el.ts --- a/share/hedgewars/Data/Locale/hedgewars_el.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_el.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new Νέο diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_en.ts --- a/share/hedgewars/Data/Locale/hedgewars_en.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_en.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new new diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_es.ts --- a/share/hedgewars/Data/Locale/hedgewars_es.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_es.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new Nuevo diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_fi.ts --- a/share/hedgewars/Data/Locale/hedgewars_fi.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel New Uusi diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_fr.ts --- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new Nouveau diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_gd.ts --- a/share/hedgewars/Data/Locale/hedgewars_gd.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel New Ùr diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_gl.ts --- a/share/hedgewars/Data/Locale/hedgewars_gl.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new novo diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_hu.ts --- a/share/hedgewars/Data/Locale/hedgewars_hu.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new új diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_it.ts --- a/share/hedgewars/Data/Locale/hedgewars_it.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new nuovo diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ja.ts --- a/share/hedgewars/Data/Locale/hedgewars_ja.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new 作成 diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ko.ts --- a/share/hedgewars/Data/Locale/hedgewars_ko.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel New diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_lt.ts --- a/share/hedgewars/Data/Locale/hedgewars_lt.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts Wed Mar 14 15:19:08 2018 +0100 @@ -106,24 +106,24 @@ - AmmoSchemeModel - - + GameSchemeModel + + New - + New (%1) - + Copy of %1 - + Copy of %1 (%2) diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ms.ts --- a/share/hedgewars/Data/Locale/hedgewars_ms.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts Wed Mar 14 15:19:08 2018 +0100 @@ -106,24 +106,24 @@ - AmmoSchemeModel - - + GameSchemeModel + + New - + New (%1) - + Copy of %1 - + Copy of %1 (%2) diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_nl.ts --- a/share/hedgewars/Data/Locale/hedgewars_nl.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel New diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_pl.ts --- a/share/hedgewars/Data/Locale/hedgewars_pl.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new nowy diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_pt_BR.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new novo diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_pt_PT.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new novo diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ro.ts --- a/share/hedgewars/Data/Locale/hedgewars_ro.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new new diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_ru.ts --- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new новый diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_sk.ts --- a/share/hedgewars/Data/Locale/hedgewars_sk.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new nový diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_sv.ts --- a/share/hedgewars/Data/Locale/hedgewars_sv.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new ny diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_tr_TR.ts --- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new yeni diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_uk.ts --- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new нова diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_zh_CN.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Wed Mar 14 15:19:08 2018 +0100 @@ -106,28 +106,28 @@ - AmmoSchemeModel + GameSchemeModel new - + New 新游戏 - + New (%1) - + Copy of %1 - + Copy of %1 (%2) diff -r f93658732448 -r 0bc5f618ca7c share/hedgewars/Data/Locale/hedgewars_zh_TW.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Wed Mar 14 14:42:50 2018 +0100 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Wed Mar 14 15:19:08 2018 +0100 @@ -87,7 +87,7 @@ - AmmoSchemeModel + GameSchemeModel new