diff -r 0ddb100fea61 -r f924be23ffb4 QTfrontend/pages.cpp --- a/QTfrontend/pages.cpp Mon Dec 27 23:57:44 2010 +0100 +++ b/QTfrontend/pages.cpp Tue Jan 04 12:53:46 2011 +0100 @@ -40,6 +40,7 @@ #include #include #include +#include #include "ammoSchemeModel.h" #include "pages.h" @@ -63,6 +64,7 @@ #include "togglebutton.h" #include "hwform.h" #include "SDLs.h" +#include "drawmapwidget.h" PageMain::PageMain(QWidget* parent) : AbstractPage(parent) @@ -440,17 +442,22 @@ { QGridLayout * pageLayout = new QGridLayout(this); - BtnBack = addButton(":/res/Exit.png", pageLayout, 2, 0, true); + BtnBack = addButton(":/res/Exit.png", pageLayout, 3, 0, true); gameCFG = new GameCFGWidget(this); pageLayout->addWidget(gameCFG, 0, 0, 1, 2); - pageLayout->setRowStretch(1, 1); + QPushButton * btnSetup = new QPushButton(this); + btnSetup->setText(QPushButton::tr("Setup")); + connect(btnSetup, SIGNAL(clicked()), this, SIGNAL(SetupClicked())); + pageLayout->addWidget(btnSetup, 1, 0, 1, 2); + + pageLayout->setRowStretch(2, 1); teamsSelect = new TeamSelWidget(this); - pageLayout->addWidget(teamsSelect, 0, 2, 2, 2); + pageLayout->addWidget(teamsSelect, 0, 2, 3, 2); - BtnStartMPGame = addButton(tr("Start"), pageLayout, 2, 3); + BtnStartMPGame = addButton(tr("Start"), pageLayout, 3, 3); } PageOptions::PageOptions(QWidget* parent) : @@ -522,45 +529,74 @@ } { - // TODO: This box should contain controls for all schemes: game modes and weapons - IconedGroupBox* groupWeapons = new IconedGroupBox(this); + //groupWeapons->setContentTopPadding(0); //groupWeapons->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); groupWeapons->setIcon(QIcon(":/res/weaponsicon.png")); groupWeapons->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - groupWeapons->setTitle(QGroupBox::tr("Weapons")); + groupWeapons->setTitle(QGroupBox::tr("Schemes and Weapons")); QGridLayout * WeaponsLayout = new QGridLayout(groupWeapons); + QLabel* SchemeLabel = new QLabel(groupWeapons); + SchemeLabel->setText(QLabel::tr("Game scheme")); + WeaponsLayout->addWidget(SchemeLabel, 1, 0); + + SchemesName = new QComboBox(groupWeapons); + WeaponsLayout->addWidget(SchemesName, 1, 1); + + SchemeNew = new QPushButton(groupWeapons); + SchemeNew->setToolTip(tr("New scheme")); + SchemeNew->setIconSize(pmNew.size()); + SchemeNew->setIcon(pmNew); + SchemeNew->setMaximumWidth(pmNew.width() + 6); + WeaponsLayout->addWidget(SchemeNew, 1, 2); + + SchemeEdit = new QPushButton(groupWeapons); + SchemeEdit->setToolTip(tr("Edit scheme")); + SchemeEdit->setIconSize(pmEdit.size()); + SchemeEdit->setIcon(pmEdit); + SchemeEdit->setMaximumWidth(pmEdit.width() + 6); + WeaponsLayout->addWidget(SchemeEdit, 1, 3); + + SchemeDelete = new QPushButton(groupWeapons); + SchemeDelete->setToolTip(tr("Delete scheme")); + SchemeDelete->setIconSize(pmDelete.size()); + SchemeDelete->setIcon(pmDelete); + SchemeDelete->setMaximumWidth(pmDelete.width() + 6); + WeaponsLayout->addWidget(SchemeDelete, 1, 4); + + QLabel* WeaponLabel = new QLabel(groupWeapons); + WeaponLabel->setText(QLabel::tr("Weapons")); + WeaponsLayout->addWidget(WeaponLabel, 2, 0); + WeaponsName = new QComboBox(groupWeapons); - WeaponsLayout->addWidget(WeaponsName, 0, 0); + WeaponsLayout->addWidget(WeaponsName, 2, 1); - WeaponsButt = new QPushButton(groupWeapons); - WeaponsButt->setToolTip(tr("New weapon scheme")); - WeaponsButt->setIconSize(pmNew.size()); - WeaponsButt->setIcon(pmNew); - WeaponsButt->setMaximumWidth(pmNew.width() + 6); - WeaponsLayout->addWidget(WeaponsButt, 0, 1); + WeaponNew = new QPushButton(groupWeapons); + WeaponNew->setToolTip(tr("New weapon set")); + WeaponNew->setIconSize(pmNew.size()); + WeaponNew->setIcon(pmNew); + WeaponNew->setMaximumWidth(pmNew.width() + 6); + WeaponsLayout->addWidget(WeaponNew, 2, 2); WeaponEdit = new QPushButton(groupWeapons); - WeaponEdit->setToolTip(tr("Edit weapon scheme")); + WeaponEdit->setToolTip(tr("Edit weapon set")); WeaponEdit->setIconSize(pmEdit.size()); WeaponEdit->setIcon(pmEdit); WeaponEdit->setMaximumWidth(pmEdit.width() + 6); - WeaponsLayout->addWidget(WeaponEdit, 0, 2); + WeaponsLayout->addWidget(WeaponEdit, 2, 3); WeaponDelete = new QPushButton(groupWeapons); - WeaponDelete->setToolTip(tr("Delete weapon scheme")); + WeaponDelete->setToolTip(tr("Delete weapon set")); WeaponDelete->setIconSize(pmDelete.size()); WeaponDelete->setIcon(pmDelete); WeaponDelete->setMaximumWidth(pmDelete.width() + 6); - WeaponDelete->setEnabled(false); - WeaponDelete->setVisible(false); // hide for now - WeaponsLayout->addWidget(WeaponDelete, 0, 3); + WeaponsLayout->addWidget(WeaponDelete, 2, 4); WeaponTooltip = new QCheckBox(this); WeaponTooltip->setText(QCheckBox::tr("Show ammo menu tooltips")); - WeaponsLayout->addWidget(WeaponTooltip, 1, 0, 1, 3); + WeaponsLayout->addWidget(WeaponTooltip, 3, 0, 1, 4); gbTBLayout->addWidget(groupWeapons, 1, 0); } @@ -942,19 +978,24 @@ // chatwidget pChatWidget = new HWChatWidget(this, gameSettings, sdli, true); pChatWidget->setShowReady(true); // show status bulbs by default - pageLayout->addWidget(pChatWidget, 1, 0, 1, 2); + pageLayout->addWidget(pChatWidget, 2, 0, 1, 2); pageLayout->setRowStretch(1, 100); pGameCFG = new GameCFGWidget(this); pageLayout->addWidget(pGameCFG, 0, 0); + QPushButton * btnSetup = new QPushButton(this); + btnSetup->setText(QPushButton::tr("Setup")); + connect(btnSetup, SIGNAL(clicked()), this, SIGNAL(SetupClicked())); + pageLayout->addWidget(btnSetup, 1, 0); + pNetTeamsWidget = new TeamSelWidget(this); pNetTeamsWidget->setAcceptOuter(true); - pageLayout->addWidget(pNetTeamsWidget, 0, 1); + pageLayout->addWidget(pNetTeamsWidget, 0, 1, 2, 1); QHBoxLayout * bottomLayout = new QHBoxLayout; - pageLayout->addLayout(bottomLayout, 3, 0, 1, 2); + pageLayout->addLayout(bottomLayout, 4, 0, 1, 2); BtnBack = addButton(":/res/Exit.png", bottomLayout, 0, true); @@ -1035,7 +1076,7 @@ BtnCampaignPage = addButton(":/res/Campaign.png", middleLine, 0, true); BtnCampaignPage->setToolTip(tr("Campaign Mode (...). IN DEVELOPMENT")); - BtnCampaignPage->setVisible(false); + //BtnCampaignPage->setVisible(false); BtnTrainPage = addButton(":/res/Trainings.png", middleLine, 1, true); BtnTrainPage->setToolTip(tr("Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT")); @@ -1069,7 +1110,10 @@ tmpdir.setFilter(QDir::Files); CBSelect->addItems(tmpdir.entryList(QStringList("*.lua")).replaceInStrings(QRegExp("^(.*)\\.lua"), "\\1")); for(int i = 0; i < CBSelect->count(); i++) + { CBSelect->setItemData(i, CBSelect->itemText(i)); + CBSelect->setItemText(i, CBSelect->itemText(i).replace("_", " ")); + } pageLayout->addWidget(CBSelect, 1, 1); @@ -1110,18 +1154,26 @@ QGridLayout * pageLayout = new QGridLayout(this); pWeapons = new SelWeaponWidget(cAmmoNumber, this); - pageLayout->addWidget(pWeapons, 0, 0, 1, 4); + pageLayout->addWidget(pWeapons, 0, 0, 1, 5); - BtnBack = addButton(":/res/Exit.png", pageLayout, 1, 0, true); - BtnDefault = addButton(tr("Default"), pageLayout, 1, 1); - BtnDelete = addButton(tr("Delete"), pageLayout, 1, 2); - BtnSave = addButton(":/res/Save.png", pageLayout, 1, 3, true); + BtnBack = addButton(":/res/Exit.png", pageLayout, 1, 0, 2, 1, true); + BtnDefault = addButton(tr("Default"), pageLayout, 1, 3); + BtnNew = addButton(tr("New"), pageLayout, 1, 2); + BtnCopy = addButton(tr("Copy"), pageLayout, 2, 2); + BtnDelete = addButton(tr("Delete"), pageLayout, 2, 3); + BtnSave = addButton(":/res/Save.png", pageLayout, 1, 4, 2, 1, true); BtnSave->setStyleSheet("QPushButton{margin: 24px 0px 0px 0px;}"); BtnBack->setFixedHeight(BtnSave->height()); BtnBack->setStyleSheet("QPushButton{margin-top: 31px;}"); + selectWeaponSet = new QComboBox(this); + pageLayout->addWidget(selectWeaponSet, 1, 1, 2, 1); + connect(BtnDefault, SIGNAL(clicked()), pWeapons, SLOT(setDefault())); connect(BtnSave, SIGNAL(clicked()), pWeapons, SLOT(save())); + connect(BtnNew, SIGNAL(clicked()), pWeapons, SLOT(newWeaponsName())); + connect(BtnCopy, SIGNAL(clicked()), pWeapons, SLOT(copy())); + connect(selectWeaponSet, SIGNAL(currentIndexChanged(const QString&)), pWeapons, SLOT(setWeaponsName(const QString&))); } PageInGame::PageInGame(QWidget* parent) : @@ -1502,7 +1554,7 @@ sp.setVerticalPolicy(QSizePolicy::MinimumExpanding); sp.setHorizontalPolicy(QSizePolicy::Expanding); - pageLayout->addWidget(gb, 1,0,13,4); + pageLayout->addWidget(gb, 1,0,13,5); gbGameModes = new QGroupBox(QGroupBox::tr("Game Modifiers"), gb); gbBasicSettings = new QGroupBox(QGroupBox::tr("Basic Settings"), gb); @@ -1705,105 +1757,118 @@ glBSLayout->addWidget(SB_HealthDecrease,5,2,1,1); l = new QLabel(gbBasicSettings); - l->setText(QLabel::tr("Crate Drops")); + l->setText(QLabel::tr("% Rope Length")); l->setWordWrap(true); glBSLayout->addWidget(l,6,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); - l->setPixmap(QPixmap(":/res/iconBox.png")); + l->setPixmap(QPixmap(":/res/iconRope.png")); glBSLayout->addWidget(l,6,1,1,1); - SB_CaseProb = new FreqSpinBox(gbBasicSettings); - SB_CaseProb->setRange(0, 9); - SB_CaseProb->setValue(5); - glBSLayout->addWidget(SB_CaseProb,6,2,1,1); + SB_RopeModifier = new QSpinBox(gbBasicSettings); + SB_RopeModifier->setRange(25, 999); + SB_RopeModifier->setValue(100); + SB_RopeModifier->setSingleStep(25); + glBSLayout->addWidget(SB_RopeModifier,6,2,1,1); l = new QLabel(gbBasicSettings); - l->setText(QLabel::tr("% Health Crates")); + l->setText(QLabel::tr("Crate Drops")); l->setWordWrap(true); glBSLayout->addWidget(l,7,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); - l->setPixmap(QPixmap(":/res/iconHealth.png")); // TODO: icon + l->setPixmap(QPixmap(":/res/iconBox.png")); glBSLayout->addWidget(l,7,1,1,1); - SB_HealthCrates = new QSpinBox(gbBasicSettings); - SB_HealthCrates->setRange(0, 100); - SB_HealthCrates->setValue(35); - SB_HealthCrates->setSingleStep(5); - glBSLayout->addWidget(SB_HealthCrates,7,2,1,1); + SB_CaseProb = new FreqSpinBox(gbBasicSettings); + SB_CaseProb->setRange(0, 9); + SB_CaseProb->setValue(5); + glBSLayout->addWidget(SB_CaseProb,7,2,1,1); l = new QLabel(gbBasicSettings); - l->setText(QLabel::tr("Health in Crates")); + l->setText(QLabel::tr("% Health Crates")); l->setWordWrap(true); glBSLayout->addWidget(l,8,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); l->setPixmap(QPixmap(":/res/iconHealth.png")); // TODO: icon glBSLayout->addWidget(l,8,1,1,1); + SB_HealthCrates = new QSpinBox(gbBasicSettings); + SB_HealthCrates->setRange(0, 100); + SB_HealthCrates->setValue(35); + SB_HealthCrates->setSingleStep(5); + glBSLayout->addWidget(SB_HealthCrates,8,2,1,1); + + l = new QLabel(gbBasicSettings); + l->setText(QLabel::tr("Health in Crates")); + l->setWordWrap(true); + glBSLayout->addWidget(l,9,0,1,1); + l = new QLabel(gbBasicSettings); + l->setFixedSize(32,32); + l->setPixmap(QPixmap(":/res/iconHealth.png")); // TODO: icon + glBSLayout->addWidget(l,9,1,1,1); SB_CrateHealth = new QSpinBox(gbBasicSettings); SB_CrateHealth->setRange(0, 200); SB_CrateHealth->setValue(25); SB_CrateHealth->setSingleStep(5); - glBSLayout->addWidget(SB_CrateHealth,8,2,1,1); + glBSLayout->addWidget(SB_CrateHealth,9,2,1,1); l = new QLabel(gbBasicSettings); l->setText(QLabel::tr("Mines Time")); l->setWordWrap(true); - glBSLayout->addWidget(l,9,0,1,1); + glBSLayout->addWidget(l,10,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); l->setPixmap(QPixmap(":/res/iconTime.png")); // TODO: icon - glBSLayout->addWidget(l,9,1,1,1); + glBSLayout->addWidget(l,10,1,1,1); SB_MinesTime = new QSpinBox(gbBasicSettings); SB_MinesTime->setRange(-1, 5); SB_MinesTime->setValue(3); SB_MinesTime->setSingleStep(1); SB_MinesTime->setSpecialValueText(tr("Random")); SB_MinesTime->setSuffix(" "+ tr("Seconds")); - glBSLayout->addWidget(SB_MinesTime,9,2,1,1); + glBSLayout->addWidget(SB_MinesTime,10,2,1,1); l = new QLabel(gbBasicSettings); l->setText(QLabel::tr("Mines")); l->setWordWrap(true); - glBSLayout->addWidget(l,10,0,1,1); + glBSLayout->addWidget(l,11,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); l->setPixmap(QPixmap(":/res/iconMine.png")); // TODO: icon - glBSLayout->addWidget(l,10,1,1,1); + glBSLayout->addWidget(l,11,1,1,1); SB_Mines = new QSpinBox(gbBasicSettings); SB_Mines->setRange(0, 80); SB_Mines->setValue(0); SB_Mines->setSingleStep(5); - glBSLayout->addWidget(SB_Mines,10,2,1,1); + glBSLayout->addWidget(SB_Mines,11,2,1,1); l = new QLabel(gbBasicSettings); l->setText(QLabel::tr("% Dud Mines")); l->setWordWrap(true); - glBSLayout->addWidget(l,11,0,1,1); + glBSLayout->addWidget(l,12,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); l->setPixmap(QPixmap(":/res/iconDud.png")); - glBSLayout->addWidget(l,11,1,1,1); + glBSLayout->addWidget(l,12,1,1,1); SB_MineDuds = new QSpinBox(gbBasicSettings); SB_MineDuds->setRange(0, 100); SB_MineDuds->setValue(0); SB_MineDuds->setSingleStep(5); - glBSLayout->addWidget(SB_MineDuds,11,2,1,1); + glBSLayout->addWidget(SB_MineDuds,12,2,1,1); l = new QLabel(gbBasicSettings); l->setText(QLabel::tr("Explosives")); l->setWordWrap(true); - glBSLayout->addWidget(l,12,0,1,1); + glBSLayout->addWidget(l,13,0,1,1); l = new QLabel(gbBasicSettings); l->setFixedSize(32,32); l->setPixmap(QPixmap(":/res/iconDamage.png")); - glBSLayout->addWidget(l,12,1,1,1); + glBSLayout->addWidget(l,13,1,1,1); SB_Explosives = new QSpinBox(gbBasicSettings); SB_Explosives->setRange(0, 40); SB_Explosives->setValue(0); SB_Explosives->setSingleStep(1); - glBSLayout->addWidget(SB_Explosives,12,2,1,1); - + glBSLayout->addWidget(SB_Explosives,13,2,1,1); l = new QLabel(gbBasicSettings); l->setText(QLabel::tr("Scheme Name:")); @@ -1816,12 +1881,14 @@ mapper = new QDataWidgetMapper(this); BtnBack = addButton(":/res/Exit.png", pageLayout, 15, 0, true); - BtnNew = addButton(tr("New"), pageLayout, 15, 2); - BtnDelete = addButton(tr("Delete"), pageLayout, 15, 3); + BtnCopy = addButton(tr("Copy"), pageLayout, 15, 2); + BtnNew = addButton(tr("New"), pageLayout, 15, 3); + BtnDelete = addButton(tr("Delete"), pageLayout, 15, 4); selectScheme = new QComboBox(this); pageLayout->addWidget(selectScheme, 15, 1); + connect(BtnCopy, SIGNAL(clicked()), this, SLOT(copyRow())); connect(BtnNew, SIGNAL(clicked()), this, SLOT(newRow())); connect(BtnDelete, SIGNAL(clicked()), this, SLOT(deleteRow())); connect(selectScheme, SIGNAL(currentIndexChanged(int)), mapper, SLOT(setCurrentIndex(int))); @@ -1870,6 +1937,7 @@ mapper->addMapping(SB_CrateHealth, 34); mapper->addMapping(SB_WaterRise, 35); mapper->addMapping(SB_HealthDecrease, 36); + mapper->addMapping(SB_RopeModifier, 37); mapper->toFirst(); } @@ -1877,14 +1945,25 @@ void PageScheme::newRow() { QAbstractItemModel * model = mapper->model(); - model->insertRow(model->rowCount()); + model->insertRow(-1); + selectScheme->setCurrentIndex(model->rowCount() - 1); +} + +void PageScheme::copyRow() +{ + QAbstractItemModel * model = mapper->model(); + model->insertRow(selectScheme->currentIndex()); selectScheme->setCurrentIndex(model->rowCount() - 1); } void PageScheme::deleteRow() { - QAbstractItemModel * model = mapper->model(); - model->removeRow(selectScheme->currentIndex()); + QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Schemes"), QMessageBox::tr("Really delete this game scheme?"), QMessageBox::Ok | QMessageBox::Cancel); + + if (reallyDelete.exec() == QMessageBox::Ok) { + QAbstractItemModel * model = mapper->model(); + model->removeRow(selectScheme->currentIndex()); + } } void PageScheme::schemeSelected(int n) @@ -1993,3 +2072,41 @@ BtnBack = addButton(":/res/Exit.png", pageLayout, 4, 0, true); } + +///////////////////////////////////////////////// + +PageDrawMap::PageDrawMap(QWidget* parent) : AbstractPage(parent) +{ + QGridLayout * pageLayout = new QGridLayout(this); + + QPushButton * pbUndo = addButton(tr("Undo"), pageLayout, 0, 0); + QPushButton * pbClear = addButton(tr("Clear"), pageLayout, 1, 0); + QPushButton * pbLoad = addButton(tr("Load"), pageLayout, 2, 0); + QPushButton * pbSave = addButton(tr("Save"), pageLayout, 3, 0); + + BtnBack = addButton(":/res/Exit.png", pageLayout, 5, 0, true); + + drawMapWidget = new DrawMapWidget(this); + pageLayout->addWidget(drawMapWidget, 0, 1, 5, 1); + + connect(pbUndo, SIGNAL(clicked()), drawMapWidget, SLOT(undo())); + connect(pbClear, SIGNAL(clicked()), drawMapWidget, SLOT(clear())); + connect(pbLoad, SIGNAL(clicked()), this, SLOT(load())); + connect(pbSave, SIGNAL(clicked()), this, SLOT(save())); +} + +void PageDrawMap::load() +{ + QString fileName = QFileDialog::getOpenFileName(this, tr("Load drawn map"), ".", tr("Drawn Maps (*.hwmap);;All files (*.*)")); + + if(!fileName.isEmpty()) + drawMapWidget->load(fileName); +} + +void PageDrawMap::save() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("Save drawn map"), ".", tr("Drawn Maps (*.hwmap);;All files (*.*)")); + + if(!fileName.isEmpty()) + drawMapWidget->save(fileName); +}