QTfrontend/gamecfgwidget.cpp
changeset 4513 1dd97c710f5a
parent 4511 df827e70ae63
child 4525 0a81be113e21
equal deleted inserted replaced
4512:c6aff8ceada0 4513:1dd97c710f5a
    45     GBoxOptions->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    45     GBoxOptions->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    46     mainLayout.addWidget(GBoxOptions);
    46     mainLayout.addWidget(GBoxOptions);
    47 
    47 
    48     QGridLayout *GBoxOptionsLayout = new QGridLayout(GBoxOptions);
    48     QGridLayout *GBoxOptionsLayout = new QGridLayout(GBoxOptions);
    49 
    49 
    50     GameSchemes = new QComboBox(GBoxOptions);
    50     GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Gameplay"), GBoxOptions), 0, 0);
    51     GBoxOptionsLayout->addWidget(GameSchemes, 0, 2);
    51 
       
    52     Scripts = new QComboBox(GBoxOptions);
       
    53     GBoxOptionsLayout->addWidget(Scripts, 0, 1);
       
    54 
       
    55     Scripts->addItem(QComboBox::tr("Normal"));
       
    56     Scripts->insertSeparator(1);
       
    57 
       
    58     for (int i = 0; i < scriptList->size(); ++i) {
       
    59         QString script = (*scriptList)[i].remove(".lua", Qt::CaseInsensitive);
       
    60         QList<QVariant> scriptInfo;
       
    61         QFile scriptCfgFile(QString("%1/Scripts/Multiplayer/%2.cfg").arg(datadir->absolutePath()).arg(script));
       
    62         if (scriptCfgFile.exists() && scriptCfgFile.open(QFile::ReadOnly)) {
       
    63             QString scheme;
       
    64             QString weapons;
       
    65             QTextStream input(&scriptCfgFile);
       
    66             input >> scheme;
       
    67             input >> weapons;
       
    68             if (scheme.isEmpty())
       
    69                 scheme = "locked";
       
    70             scheme.replace("_", " ");
       
    71             if (weapons.isEmpty())
       
    72                 weapons = "locked";
       
    73             weapons.replace("_", " ");
       
    74             scriptInfo.push_back(scheme);
       
    75             scriptInfo.push_back(weapons);
       
    76             scriptCfgFile.close();
       
    77         }
       
    78         else
       
    79         {
       
    80             scriptInfo.push_back("locked");
       
    81             scriptInfo.push_back("locked");
       
    82         }
       
    83         Scripts->addItem(script, scriptInfo);
       
    84     }
       
    85 
       
    86     connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int)));
       
    87 
       
    88     QWidget *SchemeWidget = new QWidget(GBoxOptions);
       
    89     GBoxOptionsLayout->addWidget(SchemeWidget, 1, 0, 1, 2);
       
    90 
       
    91     QGridLayout *SchemeWidgetLayout = new QGridLayout(SchemeWidget);
       
    92     SchemeWidgetLayout->setMargin(0);
       
    93 
       
    94     GameSchemes = new QComboBox(SchemeWidget);
       
    95     SchemeWidgetLayout->addWidget(GameSchemes, 0, 2);
    52     connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int)));
    96     connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int)));
    53 
    97 
    54     GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Game scheme"), GBoxOptions), 0, 0);
    98     SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Game scheme"), SchemeWidget), 0, 0);
    55 
    99 
    56     QPixmap pmEdit(":/res/edit.png");
   100     QPixmap pmEdit(":/res/edit.png");
    57     
   101     
    58     QPushButton * goToSchemePage = new QPushButton(GBoxOptions);
   102     QPushButton * goToSchemePage = new QPushButton(SchemeWidget);
    59     goToSchemePage->setToolTip(tr("Edit schemes"));
   103     goToSchemePage->setToolTip(tr("Edit schemes"));
    60     goToSchemePage->setIconSize(pmEdit.size());
   104     goToSchemePage->setIconSize(pmEdit.size());
    61     goToSchemePage->setIcon(pmEdit);
   105     goToSchemePage->setIcon(pmEdit);
    62     goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
   106     goToSchemePage->setMaximumWidth(pmEdit.width() + 6);
    63     GBoxOptionsLayout->addWidget(goToSchemePage, 0, 3);
   107     SchemeWidgetLayout->addWidget(goToSchemePage, 0, 3);
    64     connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
   108     connect(goToSchemePage, SIGNAL(clicked()), this, SLOT(jumpToSchemes()));
    65 
   109 
    66     GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Weapons"), GBoxOptions), 1, 0);
   110     SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Weapons"), SchemeWidget), 1, 0);
    67 
   111 
    68     WeaponsName = new QComboBox(GBoxOptions);
   112     WeaponsName = new QComboBox(SchemeWidget);
    69     GBoxOptionsLayout->addWidget(WeaponsName, 1, 2);
   113     SchemeWidgetLayout->addWidget(WeaponsName, 1, 2);
    70 
   114 
    71     connect(WeaponsName, SIGNAL(currentIndexChanged(int)), this, SLOT(ammoChanged(int)));
   115     connect(WeaponsName, SIGNAL(currentIndexChanged(int)), this, SLOT(ammoChanged(int)));
    72 
   116 
    73     QPushButton * goToWeaponPage = new QPushButton(GBoxOptions);
   117     QPushButton * goToWeaponPage = new QPushButton(SchemeWidget);
    74     goToWeaponPage->setToolTip(tr("Edit weapons"));
   118     goToWeaponPage->setToolTip(tr("Edit weapons"));
    75     goToWeaponPage->setIconSize(pmEdit.size());
   119     goToWeaponPage->setIconSize(pmEdit.size());
    76     goToWeaponPage->setIcon(pmEdit);
   120     goToWeaponPage->setIcon(pmEdit);
    77     goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
   121     goToWeaponPage->setMaximumWidth(pmEdit.width() + 6);
    78     GBoxOptionsLayout->addWidget(goToWeaponPage, 1, 3);
   122     SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3);
    79     connect(goToWeaponPage, SIGNAL(clicked()), this, SLOT(jumpToWeapons()));
   123     connect(goToWeaponPage, SIGNAL(clicked()), this, SLOT(jumpToWeapons()));
    80 
   124 
    81     //GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Bind schemes with weapons"), GBoxOptions), 2, 0);
   125     //GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Bind schemes with weapons"), GBoxOptions), 2, 0);
    82 
   126 
    83     bindEntries = new QCheckBox(GBoxOptions);
   127     bindEntries = new QCheckBox(SchemeWidget);
    84     bindEntries->setToolTip(tr("When this option is enabled selecting a game scheme will auto-select a weapon"));
   128     bindEntries->setToolTip(tr("When this option is enabled selecting a game scheme will auto-select a weapon"));
    85     bindEntries->setChecked(true);
   129     bindEntries->setChecked(true);
    86     bindEntries->setMaximumWidth(42);
   130     bindEntries->setMaximumWidth(42);
    87     bindEntries->setStyleSheet( "QCheckBox::indicator:checked   { image: url(\":/res/lock.png\"); }"
   131     bindEntries->setStyleSheet( "QCheckBox::indicator:checked   { image: url(\":/res/lock.png\"); }"
    88                                 "QCheckBox::indicator:unchecked { image: url(\":/res/unlock.png\");   }" );
   132                                 "QCheckBox::indicator:unchecked { image: url(\":/res/unlock.png\");   }" );
    89     GBoxOptionsLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter);
   133     SchemeWidgetLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter);
    90     //GBoxOptionsLayout->addWidget(bindEntries, 2, 2);
   134     //GBoxOptionsLayout->addWidget(bindEntries, 2, 2);
    91 
   135 
    92     connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &)));
   136     connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &)));
    93     connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &)));
   137     connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &)));
    94     connect(pMapContainer, SIGNAL(mapgenChanged(MapGenerator)), this, SLOT(mapgenChanged(MapGenerator)));
   138     connect(pMapContainer, SIGNAL(mapgenChanged(MapGenerator)), this, SLOT(mapgenChanged(MapGenerator)));
   222         if(pMapContainer->getCurrentIsMission())
   266         if(pMapContainer->getCurrentIsMission())
   223             bcfg << QString("escript Maps/%1/map.lua").arg(currentMap).toUtf8();
   267             bcfg << QString("escript Maps/%1/map.lua").arg(currentMap).toUtf8();
   224     }
   268     }
   225     bcfg << QString("etheme " + pMapContainer->getCurrentTheme()).toUtf8();
   269     bcfg << QString("etheme " + pMapContainer->getCurrentTheme()).toUtf8();
   226 
   270 
       
   271     if (Scripts->currentIndex() > 0)
       
   272     {
       
   273         bcfg << QString("escript Scripts/Multiplayer/%1.lua").arg(Scripts->currentText()).toUtf8();
       
   274     }
       
   275 
   227     QByteArray result;
   276     QByteArray result;
   228 
   277 
   229     foreach(QByteArray ba, bcfg)
   278     foreach(QByteArray ba, bcfg)
   230         HWProto::addByteArrayToBuffer(result, ba);
   279         HWProto::addByteArrayToBuffer(result, ba);
   231 
   280 
   255     seedChanged(pMapContainer->getCurrentSeed());
   304     seedChanged(pMapContainer->getCurrentSeed());
   256     templateFilterChanged(pMapContainer->getTemplateFilter());
   305     templateFilterChanged(pMapContainer->getTemplateFilter());
   257     themeChanged(pMapContainer->getCurrentTheme());
   306     themeChanged(pMapContainer->getCurrentTheme());
   258 
   307 
   259     schemeChanged(GameSchemes->currentIndex());
   308     schemeChanged(GameSchemes->currentIndex());
       
   309     scriptChanged(Scripts->currentIndex());
   260 
   310 
   261     mapgenChanged(pMapContainer->get_mapgen());
   311     mapgenChanged(pMapContainer->get_mapgen());
   262     maze_sizeChanged(pMapContainer->get_maze_size());
   312     maze_sizeChanged(pMapContainer->get_maze_size());
   263 
   313 
   264     // map must be the last
   314     // map must be the last
   292             pMapContainer->setMapgen((MapGenerator)value.toUInt());
   342             pMapContainer->setMapgen((MapGenerator)value.toUInt());
   293             return;
   343             return;
   294         }
   344         }
   295         if (param == "MAZE_SIZE") {
   345         if (param == "MAZE_SIZE") {
   296             pMapContainer->setMaze_size(value.toUInt());
   346             pMapContainer->setMaze_size(value.toUInt());
       
   347             return;
       
   348         }
       
   349         if (param == "SCRIPT") {
       
   350             Scripts->setCurrentIndex(Scripts->findText(value));
   297             return;
   351             return;
   298         }
   352         }
   299     }
   353     }
   300 
   354 
   301     if (slValue.size() == 2)
   355     if (slValue.size() == 2)
   321 
   375 
   322 void GameCFGWidget::mapChanged(const QString & value)
   376 void GameCFGWidget::mapChanged(const QString & value)
   323 {
   377 {
   324     if(pMapContainer->getCurrentIsMission())
   378     if(pMapContainer->getCurrentIsMission())
   325     {
   379     {
   326         GameSchemes->setEnabled(false);
   380         Scripts->setEnabled(false);
   327         WeaponsName->setEnabled(false);
   381         Scripts->setCurrentIndex(0);
   328         bindEntries->setEnabled(false);
   382 
   329         GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
   383         if (pMapContainer->getCurrentScheme() == "locked")
   330         WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
   384         {
       
   385             GameSchemes->setEnabled(false);
       
   386             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
       
   387         }
       
   388         else
       
   389         {
       
   390             GameSchemes->setEnabled(true);
       
   391             int num = GameSchemes->findText(pMapContainer->getCurrentScheme());
       
   392             if (num != -1)
       
   393                 GameSchemes->setCurrentIndex(num);
       
   394             else
       
   395                 GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
       
   396         }
       
   397 
       
   398         if (pMapContainer->getCurrentWeapons() == "locked")
       
   399         {
       
   400             WeaponsName->setEnabled(false);
       
   401             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
       
   402         }
       
   403         else
       
   404         {
       
   405             WeaponsName->setEnabled(true);
       
   406             int num = WeaponsName->findText(pMapContainer->getCurrentWeapons());
       
   407             if (num != -1)
       
   408                 WeaponsName->setCurrentIndex(num);
       
   409             else
       
   410                 WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
       
   411         }
       
   412 
       
   413         if (pMapContainer->getCurrentScheme() != "locked" && pMapContainer->getCurrentWeapons() != "locked")
       
   414             bindEntries->setEnabled(true);
       
   415         else
       
   416             bindEntries->setEnabled(false);
   331     }
   417     }
   332     else
   418     else
   333     {
   419     {
       
   420         Scripts->setEnabled(true);
   334         GameSchemes->setEnabled(true);
   421         GameSchemes->setEnabled(true);
   335         WeaponsName->setEnabled(true);
   422         WeaponsName->setEnabled(true);
   336         bindEntries->setEnabled(true);
   423         bindEntries->setEnabled(true);
   337     }
   424     }
   338     emit paramChanged("MAP", QStringList(value));
   425     emit paramChanged("MAP", QStringList(value));
   361     for(int i = 0; i < size; ++i)
   448     for(int i = 0; i < size; ++i)
   362         sl << schemeData(i).toString();
   449         sl << schemeData(i).toString();
   363 
   450 
   364     emit paramChanged("SCHEME", sl);
   451     emit paramChanged("SCHEME", sl);
   365 
   452 
   366     if (bindEntries->isChecked() == true) {
   453     if (bindEntries->isEnabled() && bindEntries->isChecked()) {
   367         QString schemeName = GameSchemes->itemText(index);
   454         QString schemeName = GameSchemes->itemText(index);
   368         for (int i = 0; i < WeaponsName->count(); i++) {
   455         for (int i = 0; i < WeaponsName->count(); i++) {
   369              QString weapName = WeaponsName->itemText(i);
   456              QString weapName = WeaponsName->itemText(i);
   370              int res = QString::compare(weapName, schemeName, Qt::CaseSensitive);
   457              int res = QString::compare(weapName, schemeName, Qt::CaseSensitive);
   371              if (0 == res) {
   458              if (0 == res) {
   375              }
   462              }
   376         }
   463         }
   377     }
   464     }
   378 }
   465 }
   379 
   466 
       
   467 void GameCFGWidget::scriptChanged(int index)
       
   468 {
       
   469     if(index > 0)
       
   470     {
       
   471         QString scheme = Scripts->itemData(Scripts->currentIndex()).toList()[0].toString();
       
   472         QString weapons = Scripts->itemData(Scripts->currentIndex()).toList()[1].toString();
       
   473 
       
   474         if (scheme == "locked")
       
   475         {
       
   476             GameSchemes->setEnabled(false);
       
   477             GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
       
   478         }
       
   479         else
       
   480         {
       
   481             GameSchemes->setEnabled(true);
       
   482             int num = GameSchemes->findText(scheme);
       
   483             if (num != -1)
       
   484                 GameSchemes->setCurrentIndex(num);
       
   485             else
       
   486                 GameSchemes->setCurrentIndex(GameSchemes->findText("Default"));
       
   487         }
       
   488 
       
   489         if (weapons == "locked")
       
   490         {
       
   491             WeaponsName->setEnabled(false);
       
   492             WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
       
   493         }
       
   494         else
       
   495         {
       
   496             WeaponsName->setEnabled(true);
       
   497             int num = WeaponsName->findText(weapons);
       
   498             if (num != -1)
       
   499                 WeaponsName->setCurrentIndex(num);
       
   500             else
       
   501                 WeaponsName->setCurrentIndex(WeaponsName->findText("Default"));
       
   502         }
       
   503 
       
   504         if (scheme != "locked" && weapons != "locked")
       
   505             bindEntries->setEnabled(true);
       
   506         else
       
   507             bindEntries->setEnabled(false);
       
   508     }
       
   509     else
       
   510     {
       
   511         GameSchemes->setEnabled(true);
       
   512         WeaponsName->setEnabled(true);
       
   513         bindEntries->setEnabled(true);
       
   514     }
       
   515     emit paramChanged("SCRIPT", QStringList(Scripts->itemText(index)));
       
   516 }
       
   517 
   380 void GameCFGWidget::mapgenChanged(MapGenerator m)
   518 void GameCFGWidget::mapgenChanged(MapGenerator m)
   381 {
   519 {
   382     emit paramChanged("MAPGEN", QStringList(QString::number(m)));
   520     emit paramChanged("MAPGEN", QStringList(QString::number(m)));
   383 }
   521 }
   384 
   522