QTfrontend/ui/widget/gamecfgwidget.cpp
branchios-develop
changeset 13413 ba39a1d396c0
parent 13264 ad6c8069fe1a
child 14513 5230c063214a
equal deleted inserted replaced
13411:6e8b807bda4b 13413:ba39a1d396c0
    32 
    32 
    33 #include "gamecfgwidget.h"
    33 #include "gamecfgwidget.h"
    34 #include "igbox.h"
    34 #include "igbox.h"
    35 #include "DataManager.h"
    35 #include "DataManager.h"
    36 #include "hwconsts.h"
    36 #include "hwconsts.h"
    37 #include "ammoSchemeModel.h"
    37 #include "gameSchemeModel.h"
    38 #include "proto.h"
    38 #include "proto.h"
    39 #include "GameStyleModel.h"
    39 #include "GameStyleModel.h"
    40 #include "themeprompt.h"
    40 #include "themeprompt.h"
    41 
    41 
    42 GameCFGWidget::GameCFGWidget(QWidget* parent, bool randomWithoutDLC) :
    42 GameCFGWidget::GameCFGWidget(QWidget* parent, bool randomWithoutDLC) :
   104     m_childWidgets << OptionsInnerContainer;
   104     m_childWidgets << OptionsInnerContainer;
   105     OptionsInnerContainer->setFixedSize(optionsContainerFree->width(), optionsContainerFree->height());
   105     OptionsInnerContainer->setFixedSize(optionsContainerFree->width(), optionsContainerFree->height());
   106     OptionsInnerContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
   106     OptionsInnerContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
   107     GBoxOptionsLayout = new QGridLayout(OptionsInnerContainer);
   107     GBoxOptionsLayout = new QGridLayout(OptionsInnerContainer);
   108 
   108 
   109     GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Style"), this), 1, 0);
   109     lblScript = new QLabel(QLabel::tr("Style"), this);
       
   110     GBoxOptionsLayout->addWidget(lblScript, 1, 0);
   110 
   111 
   111     Scripts = new QComboBox(this);
   112     Scripts = new QComboBox(this);
   112     Scripts->setMaxVisibleItems(30);
   113     Scripts->setMaxVisibleItems(30);
   113     GBoxOptionsLayout->addWidget(Scripts, 1, 1);
   114     GBoxOptionsLayout->addWidget(Scripts, 1, 1);
   114 
       
   115     Scripts->setModel(DataManager::instance().gameStyleModel());
   115     Scripts->setModel(DataManager::instance().gameStyleModel());
   116     m_curScript = Scripts->currentText();
   116     m_curScript = Scripts->currentText();
       
   117 
       
   118     ScriptsLabel = new QLabel(this);
       
   119     ScriptsLabel->setHidden(true);
       
   120     ScriptsLabel->setTextFormat(Qt::PlainText);
       
   121     GBoxOptionsLayout->addWidget(ScriptsLabel, 1, 1);
       
   122 
   117     connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int)));
   123     connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int)));
   118 
   124 
   119     QWidget *SchemeWidget = new QWidget(this);
   125     QWidget *SchemeWidget = new QWidget(this);
   120     GBoxOptionsLayout->addWidget(SchemeWidget, 2, 0, 1, 2);
   126     GBoxOptionsLayout->addWidget(SchemeWidget, 2, 0, 1, 2);
   121 
   127 
   123     SchemeWidgetLayout->setMargin(0);
   129     SchemeWidgetLayout->setMargin(0);
   124 
   130 
   125     GameSchemes = new QComboBox(SchemeWidget);
   131     GameSchemes = new QComboBox(SchemeWidget);
   126     GameSchemes->setMaxVisibleItems(30);
   132     GameSchemes->setMaxVisibleItems(30);
   127     SchemeWidgetLayout->addWidget(GameSchemes, 0, 2);
   133     SchemeWidgetLayout->addWidget(GameSchemes, 0, 2);
       
   134 
       
   135     GameSchemesLabel = new QLabel(SchemeWidget);
       
   136     GameSchemesLabel->setHidden(true);
       
   137     GameSchemesLabel->setTextFormat(Qt::PlainText);
       
   138     SchemeWidgetLayout->addWidget(GameSchemesLabel, 0, 2);
       
   139 
   128     connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int)));
   140     connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int)));
   129 
   141 
   130     SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Scheme"), SchemeWidget), 0, 0);
   142     lblScheme = new QLabel(QLabel::tr("Scheme"), SchemeWidget);
       
   143     SchemeWidgetLayout->addWidget(lblScheme, 0, 0);
   131 
   144 
   132     QPixmap pmEdit(":/res/edit.png");
   145     QPixmap pmEdit(":/res/edit.png");
   133 
   146     QIcon iconEdit = QIcon(pmEdit);
   134     QPushButton * goToSchemePage = new QPushButton(SchemeWidget);
   147 
       
   148     goToSchemePage = new QPushButton(SchemeWidget);
   135     goToSchemePage->setWhatsThis(tr("Edit schemes"));
   149     goToSchemePage->setWhatsThis(tr("Edit schemes"));
   136     goToSchemePage->setIconSize(pmEdit.size());
   150     goToSchemePage->setIconSize(pmEdit.size());
   137     goToSchemePage->setIcon(pmEdit);
   151     goToSchemePage->setIcon(iconEdit);
   138     goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
   152     goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
   139     SchemeWidgetLayout->addWidget(goToSchemePage, 0, 3);
   153     SchemeWidgetLayout->addWidget(goToSchemePage, 0, 3);
   140     connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
   154     connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
   141 
   155 
   142     SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Weapons"), SchemeWidget), 1, 0);
   156     lblWeapons = new QLabel(QLabel::tr("Weapons"), SchemeWidget);
       
   157     SchemeWidgetLayout->addWidget(lblWeapons, 1, 0);
   143 
   158 
   144     WeaponsName = new QComboBox(SchemeWidget);
   159     WeaponsName = new QComboBox(SchemeWidget);
   145     WeaponsName->setMaxVisibleItems(30);
   160     WeaponsName->setMaxVisibleItems(30);
   146     SchemeWidgetLayout->addWidget(WeaponsName, 1, 2);
   161     SchemeWidgetLayout->addWidget(WeaponsName, 1, 2);
   147 
   162 
       
   163     WeaponsNameLabel = new QLabel(SchemeWidget);
       
   164     WeaponsNameLabel->setHidden(true);
       
   165     WeaponsNameLabel->setTextFormat(Qt::PlainText);
       
   166     SchemeWidgetLayout->addWidget(WeaponsNameLabel, 1, 2);
       
   167 
   148     connect(WeaponsName, SIGNAL(currentIndexChanged(int)), this, SLOT(ammoChanged(int)));
   168     connect(WeaponsName, SIGNAL(currentIndexChanged(int)), this, SLOT(ammoChanged(int)));
   149 
   169 
   150     QPushButton * goToWeaponPage = new QPushButton(SchemeWidget);
   170     goToWeaponPage = new QPushButton(SchemeWidget);
   151     goToWeaponPage->setWhatsThis(tr("Edit weapons"));
   171     goToWeaponPage->setWhatsThis(tr("Edit weapons"));
   152     goToWeaponPage->setIconSize(pmEdit.size());
   172     goToWeaponPage->setIconSize(pmEdit.size());
   153     goToWeaponPage->setIcon(pmEdit);
   173     goToWeaponPage->setIcon(pmEdit);
   154     goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
   174     goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
   155     SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3);
   175     SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3);
   157 
   177 
   158     bindEntries = new QCheckBox(SchemeWidget);
   178     bindEntries = new QCheckBox(SchemeWidget);
   159     bindEntries->setWhatsThis(tr("Game scheme will auto-select a weapon"));
   179     bindEntries->setWhatsThis(tr("Game scheme will auto-select a weapon"));
   160     bindEntries->setChecked(true);
   180     bindEntries->setChecked(true);
   161     bindEntries->setMaximumWidth(42);
   181     bindEntries->setMaximumWidth(42);
   162     bindEntries->setStyleSheet( "QCheckBox::indicator:checked   { image: url(\":/res/lock.png\"); }"
   182     bindEntries->setStyleSheet( "QCheckBox::indicator:checked:enabled    { image: url(\":/res/lock.png\"); }"
   163                                 "QCheckBox::indicator:unchecked { image: url(\":/res/unlock.png\");   }" );
   183                                 "QCheckBox::indicator:checked:disabled   { image: url(\":/res/lock_disabled.png\"); }"
       
   184                                 "QCheckBox::indicator:unchecked:enabled  { image: url(\":/res/unlock.png\");   }"
       
   185                                 "QCheckBox::indicator:unchecked:disabled { image: url(\":/res/unlock_disabled.png\");   }" );
   164     SchemeWidgetLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter);
   186     SchemeWidgetLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter);
   165 
   187 
   166     connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &)));
   188     connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &)));
   167     connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &)));
   189     connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &)));
   168     connect(pMapContainer, SIGNAL(mapgenChanged(MapGenerator)), this, SLOT(mapgenChanged(MapGenerator)));
   190     connect(pMapContainer, SIGNAL(mapgenChanged(MapGenerator)), this, SLOT(mapgenChanged(MapGenerator)));
   375     if (illegal)
   397     if (illegal)
   376     {
   398     {
   377         QMessageBox illegalMsg(parentWidget());
   399         QMessageBox illegalMsg(parentWidget());
   378         illegalMsg.setIcon(QMessageBox::Warning);
   400         illegalMsg.setIcon(QMessageBox::Warning);
   379         illegalMsg.setWindowTitle(QMessageBox::tr("Error"));
   401         illegalMsg.setWindowTitle(QMessageBox::tr("Error"));
   380         illegalMsg.setText(QMessageBox::tr("Cannot use the ammo '%1'!").arg(name));
   402         illegalMsg.setText(QMessageBox::tr("Cannot use the weapon scheme '%1'!").arg(name));
   381         illegalMsg.setWindowModality(Qt::WindowModal);
   403         illegalMsg.setWindowModality(Qt::WindowModal);
   382         illegalMsg.exec();
   404         illegalMsg.exec();
   383     }
   405     }
   384 
   406 
   385     int pos = WeaponsName->findText(name);
   407     int pos = WeaponsName->findText(name);
   462             pMapContainer->setMazeSize(value.toUInt());
   484             pMapContainer->setMazeSize(value.toUInt());
   463             return;
   485             return;
   464         }
   486         }
   465         if (param == "SCRIPT")
   487         if (param == "SCRIPT")
   466         {
   488         {
   467             Scripts->setCurrentIndex(Scripts->findText(value));
   489             int in = Scripts->findText(value);
       
   490             Scripts->setCurrentIndex(in);
       
   491             ScriptsLabel->setText(value);
   468             pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   492             pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   469             return;
   493             return;
   470         }
   494         }
   471         if (param == "DRAWNMAP")
   495         if (param == "DRAWNMAP")
   472         {
   496         {
   507 
   531 
   508 void GameCFGWidget::ammoChanged(int index)
   532 void GameCFGWidget::ammoChanged(int index)
   509 {
   533 {
   510     if (index >= 0)
   534     if (index >= 0)
   511     {
   535     {
       
   536         WeaponsNameLabel->setText(WeaponsName->currentText());
   512         emit paramChanged(
   537         emit paramChanged(
   513             "AMMO",
   538             "AMMO",
   514             QStringList() << WeaponsName->itemText(index) << WeaponsName->itemData(index).toString()
   539             QStringList() << WeaponsName->itemText(index) << WeaponsName->itemData(index).toString()
   515         );
   540         );
   516     }
   541     }
       
   542     else
       
   543     {
       
   544         WeaponsNameLabel->setText("");
       
   545     }
   517 }
   546 }
   518 
   547 
   519 void GameCFGWidget::mapChanged(const QString & value)
   548 void GameCFGWidget::mapChanged(const QString & value)
   520 {
   549 {
   521     if(isEnabled() && pMapContainer->getCurrentIsMission())
   550     if(isEnabled() && pMapContainer->getCurrentIsMission())
   522     {
   551     {
   523         Scripts->setEnabled(false);
   552         Scripts->setEnabled(false);
       
   553         lblScript->setEnabled(false);
   524         Scripts->setCurrentIndex(0);
   554         Scripts->setCurrentIndex(0);
   525 
   555 
   526         if (pMapContainer->getCurrentScheme() == "locked")
   556         if (pMapContainer->getCurrentScheme() == "locked")
   527         {
   557         {
   528             GameSchemes->setEnabled(false);
   558             GameSchemes->setEnabled(false);
       
   559             goToSchemePage->setEnabled(false);
       
   560             lblScheme->setEnabled(false);
   529             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   561             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   530         }
   562         }
   531         else
   563         else
   532         {
   564         {
   533             GameSchemes->setEnabled(true);
   565             GameSchemes->setEnabled(true);
       
   566             goToSchemePage->setEnabled(true);
       
   567             lblScheme->setEnabled(true);
   534             int num = GameSchemes->findText(pMapContainer->getCurrentScheme());
   568             int num = GameSchemes->findText(pMapContainer->getCurrentScheme());
   535             if (num != -1)
   569             if (num != -1)
   536                 GameSchemes->setCurrentIndex(num);
   570                 GameSchemes->setCurrentIndex(num);
   537             //else
   571             //else
   538             //    GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   572             //    GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   539         }
   573         }
   540 
   574 
   541         if (pMapContainer->getCurrentWeapons() == "locked")
   575         if (pMapContainer->getCurrentWeapons() == "locked")
   542         {
   576         {
   543             WeaponsName->setEnabled(false);
   577             WeaponsName->setEnabled(false);
       
   578             goToWeaponPage->setEnabled(false);
       
   579             lblWeapons->setEnabled(false);
   544             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   580             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   545         }
   581         }
   546         else
   582         else
   547         {
   583         {
   548             WeaponsName->setEnabled(true);
   584             WeaponsName->setEnabled(true);
       
   585             goToWeaponPage->setEnabled(true);
       
   586             lblWeapons->setEnabled(true);
   549             int num = WeaponsName->findText(pMapContainer->getCurrentWeapons());
   587             int num = WeaponsName->findText(pMapContainer->getCurrentWeapons());
   550             if (num != -1)
   588             if (num != -1)
   551                 WeaponsName->setCurrentIndex(num);
   589                 WeaponsName->setCurrentIndex(num);
   552             //else
   590             //else
   553             //    WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   591             //    WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   559             bindEntries->setEnabled(false);
   597             bindEntries->setEnabled(false);
   560     }
   598     }
   561     else
   599     else
   562     {
   600     {
   563         Scripts->setEnabled(true);
   601         Scripts->setEnabled(true);
       
   602         lblScript->setEnabled(true);
   564         GameSchemes->setEnabled(true);
   603         GameSchemes->setEnabled(true);
       
   604         goToSchemePage->setEnabled(true);
       
   605         lblScheme->setEnabled(true);
   565         WeaponsName->setEnabled(true);
   606         WeaponsName->setEnabled(true);
       
   607         goToWeaponPage->setEnabled(true);
       
   608         lblWeapons->setEnabled(true);
   566         bindEntries->setEnabled(true);
   609         bindEntries->setEnabled(true);
   567     }
   610     }
   568     emit paramChanged("MAP", QStringList(value));
   611     emit paramChanged("MAP", QStringList(value));
   569 }
   612 }
   570 
   613 
   610                 emit ammoChanged(i);
   653                 emit ammoChanged(i);
   611                 break;
   654                 break;
   612             }
   655             }
   613         }
   656         }
   614     }
   657     }
       
   658 
       
   659     if(index == -1)
       
   660         GameSchemesLabel->setText("");
       
   661     else
       
   662         GameSchemesLabel->setText(GameSchemes->currentText());
       
   663 
   615     pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   664     pMapContainer->setScript(Scripts->itemData(Scripts->currentIndex(), GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   616 }
   665 }
   617 
   666 
   618 void GameCFGWidget::scriptChanged(int index)
   667 void GameCFGWidget::scriptChanged(int index)
   619 {
   668 {
   626         QString weapons = Scripts->itemData(index, GameStyleModel::WeaponsRole).toString();
   675         QString weapons = Scripts->itemData(index, GameStyleModel::WeaponsRole).toString();
   627 
   676 
   628         if (scheme == "locked")
   677         if (scheme == "locked")
   629         {
   678         {
   630             GameSchemes->setEnabled(false);
   679             GameSchemes->setEnabled(false);
       
   680             goToSchemePage->setEnabled(false);
       
   681             lblScheme->setEnabled(false);
   631             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   682             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   632         }
   683         }
   633         else if (m_master)
   684         else if (m_master)
   634         {
   685         {
   635             GameSchemes->setEnabled(true);
   686             GameSchemes->setEnabled(true);
       
   687             goToSchemePage->setEnabled(true);
       
   688             lblScheme->setEnabled(true);
   636             int num = GameSchemes->findText(scheme);
   689             int num = GameSchemes->findText(scheme);
   637             if (num != -1)
   690             if (num != -1)
   638                 GameSchemes->setCurrentIndex(num);
   691                 GameSchemes->setCurrentIndex(num);
   639             //else
   692             //else
   640             //    GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   693             //    GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   641         }
   694         }
   642 
   695 
   643         if (weapons == "locked")
   696         if (weapons == "locked")
   644         {
   697         {
   645             WeaponsName->setEnabled(false);
   698             WeaponsName->setEnabled(false);
       
   699             goToWeaponPage->setEnabled(false);
       
   700             lblWeapons->setEnabled(false);
   646             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   701             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   647         }
   702         }
   648         else if (m_master)
   703         else if (m_master)
   649         {
   704         {
   650             WeaponsName->setEnabled(true);
   705             WeaponsName->setEnabled(true);
       
   706             goToWeaponPage->setEnabled(true);
       
   707             lblWeapons->setEnabled(true);
   651             int num = WeaponsName->findText(weapons);
   708             int num = WeaponsName->findText(weapons);
   652             if (num != -1)
   709             if (num != -1)
   653                 WeaponsName->setCurrentIndex(num);
   710                 WeaponsName->setCurrentIndex(num);
   654             //else
   711             //else
   655             //    WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   712             //    WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   661             bindEntries->setEnabled(false);
   718             bindEntries->setEnabled(false);
   662     }
   719     }
   663     else
   720     else
   664     {
   721     {
   665         GameSchemes->setEnabled(true);
   722         GameSchemes->setEnabled(true);
       
   723         goToSchemePage->setEnabled(true);
       
   724         lblScheme->setEnabled(true);
   666         WeaponsName->setEnabled(true);
   725         WeaponsName->setEnabled(true);
       
   726         goToWeaponPage->setEnabled(true);
       
   727         lblWeapons->setEnabled(true);
   667         bindEntries->setEnabled(true);
   728         bindEntries->setEnabled(true);
   668     }
   729     }
   669     if (!index)
   730     if (index == -1)
   670     {
   731     {
   671         pMapContainer->setScript(QString(""), QString(""));
   732         pMapContainer->setScript(QString(""), QString(""));
       
   733         ScriptsLabel->setStyleSheet("color: #b50000;");
   672     }
   734     }
   673     else
   735     else
   674     {
   736     {
   675         pMapContainer->setScript(Scripts->itemData(index, GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   737         pMapContainer->setScript(Scripts->itemData(index, GameStyleModel::ScriptRole).toString().toUtf8(), schemeData(43).toString());
   676     }
   738         ScriptsLabel->setText(Scripts->currentText());
       
   739         ScriptsLabel->setStyleSheet("");
       
   740     }
       
   741 
   677     emit paramChanged("SCRIPT", QStringList(name));
   742     emit paramChanged("SCRIPT", QStringList(name));
   678 }
   743 }
   679 
   744 
   680 void GameCFGWidget::mapgenChanged(MapGenerator m)
   745 void GameCFGWidget::mapgenChanged(MapGenerator m)
   681 {
   746 {
   729 void GameCFGWidget::setMaster(bool master)
   794 void GameCFGWidget::setMaster(bool master)
   730 {
   795 {
   731     if (master == m_master) return;
   796     if (master == m_master) return;
   732     m_master = master;
   797     m_master = master;
   733 
   798 
       
   799     if (master)
       
   800     {
       
   801         // Reset script if not found
       
   802         if (Scripts->currentIndex() == -1)
       
   803         {
       
   804             Scripts->setCurrentIndex(Scripts->findText("Normal"));
       
   805         }
       
   806     }
       
   807 
   734     pMapContainer->setMaster(master);
   808     pMapContainer->setMaster(master);
       
   809 
       
   810     GameSchemes->setHidden(!master);
       
   811     WeaponsName->setHidden(!master);
       
   812     Scripts->setHidden(!master);
       
   813     goToSchemePage->setHidden(!master);
       
   814     goToWeaponPage->setHidden(!master);
       
   815     bindEntries->setHidden(!master);
       
   816 
       
   817     GameSchemesLabel->setHidden(master);
       
   818     WeaponsNameLabel->setHidden(master);
       
   819     ScriptsLabel->setHidden(master);
   735 
   820 
   736     foreach (QWidget *widget, m_childWidgets)
   821     foreach (QWidget *widget, m_childWidgets)
   737         widget->setEnabled(master);
   822         widget->setEnabled(master);
   738 }
   823 }