QTfrontend/mapContainer.cpp
changeset 4562 b55f78fd2bf6
parent 4561 da9d27bc6ea6
child 4563 b09f4a52aca4
equal deleted inserted replaced
4561:da9d27bc6ea6 4562:b55f78fd2bf6
    28 #include <QLabel>
    28 #include <QLabel>
    29 #include <QListWidget>
    29 #include <QListWidget>
    30 #include <QVBoxLayout>
    30 #include <QVBoxLayout>
    31 #include <QIcon>
    31 #include <QIcon>
    32 #include <QLineEdit>
    32 #include <QLineEdit>
       
    33 #include <QMessageBox>
    33 
    34 
    34 #include "hwconsts.h"
    35 #include "hwconsts.h"
    35 #include "mapContainer.h"
    36 #include "mapContainer.h"
    36 #include "igbox.h"
    37 #include "igbox.h"
    37 
    38 
    38 HWMapContainer::HWMapContainer(QWidget * parent) :
    39 HWMapContainer::HWMapContainer(QWidget * parent) :
    39     QWidget(parent),
    40     QWidget(parent),
    40     mainLayout(this),
    41     mainLayout(this),
    41     pMap(0),
    42     pMap(0),
    42     mapgen(MAPGEN_REGULAR),
    43     mapgen(MAPGEN_REGULAR)
    43     maze_size(0)
       
    44 {
    44 {
    45     hhSmall.load(":/res/hh_small.png");
    45     hhSmall.load(":/res/hh_small.png");
    46     hhLimit = 18;
    46     hhLimit = 18;
    47     templateFilter = 0;
    47     templateFilter = 0;
    48 
    48 
   169     maze_size_selection->addItem(tr("Large tunnels"), 2);
   169     maze_size_selection->addItem(tr("Large tunnels"), 2);
   170     maze_size_selection->addItem(tr("Small floating islands"), 3);
   170     maze_size_selection->addItem(tr("Small floating islands"), 3);
   171     maze_size_selection->addItem(tr("Medium floating islands"), 4);
   171     maze_size_selection->addItem(tr("Medium floating islands"), 4);
   172     maze_size_selection->addItem(tr("Large floating islands"), 5);
   172     maze_size_selection->addItem(tr("Large floating islands"), 5);
   173     maze_size_selection->setCurrentIndex(1);
   173     maze_size_selection->setCurrentIndex(1);
   174     maze_size = 1;
   174 
   175     mapLayout->addWidget(maze_size_selection, 2, 1);
   175     mapLayout->addWidget(maze_size_selection, 2, 1);
   176     maze_size_selection->hide();
   176     maze_size_selection->hide();
   177     connect(maze_size_selection, SIGNAL(currentIndexChanged(int)), this, SLOT(setMaze_size(int)));
   177     connect(maze_size_selection, SIGNAL(currentIndexChanged(int)), this, SLOT(setMaze_size(int)));
   178 
   178 
   179     gbThemes = new IconedGroupBox(mapWidget);
   179     gbThemes = new IconedGroupBox(mapWidget);
   270 void HWMapContainer::mapChanged(int index)
   270 void HWMapContainer::mapChanged(int index)
   271 {
   271 {
   272     switch(index) {
   272     switch(index) {
   273     case MAPGEN_REGULAR:
   273     case MAPGEN_REGULAR:
   274         mapgen = MAPGEN_REGULAR;
   274         mapgen = MAPGEN_REGULAR;
   275         changeImage();
   275         updatePreview();
   276         gbThemes->show();
   276         gbThemes->show();
   277         lblFilter->show();
   277         lblFilter->show();
   278         CB_TemplateFilter->show();
   278         CB_TemplateFilter->show();
   279         maze_size_label->hide();
   279         maze_size_label->hide();
   280         maze_size_selection->hide();
   280         maze_size_selection->hide();
   282         emit mapgenChanged(mapgen);
   282         emit mapgenChanged(mapgen);
   283         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   283         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   284         break;
   284         break;
   285     case MAPGEN_MAZE:
   285     case MAPGEN_MAZE:
   286         mapgen = MAPGEN_MAZE;
   286         mapgen = MAPGEN_MAZE;
   287         changeImage();
   287         updatePreview();
   288         gbThemes->show();
   288         gbThemes->show();
   289         lblFilter->hide();
   289         lblFilter->hide();
   290         CB_TemplateFilter->hide();
   290         CB_TemplateFilter->hide();
   291         maze_size_label->show();
   291         maze_size_label->show();
   292         maze_size_selection->show();
   292         maze_size_selection->show();
   294         emit mapgenChanged(mapgen);
   294         emit mapgenChanged(mapgen);
   295         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   295         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   296         break;
   296         break;
   297     case MAPGEN_DRAWN:
   297     case MAPGEN_DRAWN:
   298         mapgen = MAPGEN_DRAWN;
   298         mapgen = MAPGEN_DRAWN;
   299         changeImage();
   299         updatePreview();
   300         gbThemes->show();
   300         gbThemes->show();
   301         lblFilter->hide();
   301         lblFilter->hide();
   302         CB_TemplateFilter->hide();
   302         CB_TemplateFilter->hide();
   303         maze_size_label->hide();
   303         maze_size_label->hide();
   304         maze_size_selection->hide();
   304         maze_size_selection->hide();
   305         emit mapChanged("+drawn+");
   305         emit mapChanged("+drawn+");
   306         emit mapgenChanged(mapgen);
   306         emit mapgenChanged(mapgen);
   307         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   307         emit themeChanged(chooseMap->itemData(index).toList()[1].toString());
   308         break;
   308         break;
   309     default:
   309     default:
   310         loadMap(index);
   310         updatePreview();
   311         gbThemes->hide();
   311         gbThemes->hide();
   312         lblFilter->hide();
   312         lblFilter->hide();
   313         CB_TemplateFilter->hide();
   313         CB_TemplateFilter->hide();
   314         maze_size_label->hide();
   314         maze_size_label->hide();
   315         maze_size_selection->hide();
   315         maze_size_selection->hide();
   316         emit mapChanged(chooseMap->itemData(index).toList()[0].toString());
   316         emit mapChanged(chooseMap->itemData(index).toList()[0].toString());
   317     }
   317     }
   318 }
       
   319 
       
   320 void HWMapContainer::loadMap(int index)
       
   321 {
       
   322     QPixmap mapImage;
       
   323     if(!mapImage.load(datadir->absolutePath() + "/Maps/" + chooseMap->itemData(index).toList()[0].toString() + "/preview.png")) {
       
   324         changeImage();
       
   325         chooseMap->setCurrentIndex(0);
       
   326         return;
       
   327     }
       
   328 
       
   329     hhLimit = chooseMap->itemData(index).toList()[2].toInt();
       
   330     addInfoToPreview(mapImage);
       
   331 }
   318 }
   332 
   319 
   333 // Should this add text to identify map size?
   320 // Should this add text to identify map size?
   334 void HWMapContainer::addInfoToPreview(QPixmap image)
   321 void HWMapContainer::addInfoToPreview(QPixmap image)
   335 {
   322 {
   348 
   335 
   349     imageButt->setIcon(finalImage);
   336     imageButt->setIcon(finalImage);
   350     imageButt->setIconSize(image.size());
   337     imageButt->setIconSize(image.size());
   351 }
   338 }
   352 
   339 
   353 void HWMapContainer::changeImage()
   340 void HWMapContainer::askForGeneratedPreview()
   354 {
   341 {
   355     if (pMap)
   342     if (pMap)
   356     {
   343     {
   357         disconnect(pMap, 0, this, SLOT(setImage(const QImage)));
   344         disconnect(pMap, 0, this, SLOT(setImage(const QImage)));
   358         disconnect(pMap, 0, this, SLOT(setHHLimit(int)));
   345         disconnect(pMap, 0, this, SLOT(setHHLimit(int)));
   360     }
   347     }
   361 
   348 
   362     pMap = new HWMap();
   349     pMap = new HWMap();
   363     connect(pMap, SIGNAL(ImageReceived(const QImage)), this, SLOT(setImage(const QImage)));
   350     connect(pMap, SIGNAL(ImageReceived(const QImage)), this, SLOT(setImage(const QImage)));
   364     connect(pMap, SIGNAL(HHLimitReceived(int)), this, SLOT(setHHLimit(int)));
   351     connect(pMap, SIGNAL(HHLimitReceived(int)), this, SLOT(setHHLimit(int)));
   365     pMap->getImage(m_seed, getTemplateFilter(), mapgen, maze_size, getDrawnMapData());
   352     pMap->getImage(m_seed,
       
   353                    getTemplateFilter(),
       
   354                    get_mapgen(),
       
   355                    get_maze_size(),
       
   356                    getDrawnMapData()
       
   357             );
   366 }
   358 }
   367 
   359 
   368 void HWMapContainer::themeSelected(int currentRow)
   360 void HWMapContainer::themeSelected(int currentRow)
   369 {
   361 {
   370     QString theme = Themes->at(currentRow);
   362     QString theme = Themes->at(currentRow);
   387     return m_seed;
   379     return m_seed;
   388 }
   380 }
   389 
   381 
   390 QString HWMapContainer::getCurrentMap() const
   382 QString HWMapContainer::getCurrentMap() const
   391 {
   383 {
   392     if(chooseMap->currentIndex() <= 2) return QString();
   384     if(chooseMap->currentIndex() < MAPGEN_MAP) return QString();
   393     return chooseMap->itemData(chooseMap->currentIndex()).toList()[0].toString();
   385     return chooseMap->itemData(chooseMap->currentIndex()).toList()[0].toString();
   394 }
   386 }
   395 
   387 
   396 QString HWMapContainer::getCurrentTheme() const
   388 QString HWMapContainer::getCurrentTheme() const
   397 {
   389 {
   433 void HWMapContainer::setSeed(const QString & seed)
   425 void HWMapContainer::setSeed(const QString & seed)
   434 {
   426 {
   435     m_seed = seed;
   427     m_seed = seed;
   436     if (seed != seedEdit->text())
   428     if (seed != seedEdit->text())
   437         seedEdit->setText(seed);
   429         seedEdit->setText(seed);
   438     if (chooseMap->currentIndex() < MAPGEN_LAST)
   430     if (chooseMap->currentIndex() < MAPGEN_MAP)
   439         changeImage();
   431         updatePreview();
   440 }
   432 }
   441 
   433 
   442 void HWMapContainer::setMap(const QString & map)
   434 void HWMapContainer::setMap(const QString & map)
   443 {
   435 {
   444     if(map == "+rnd+" || map == "+maze+" || map == "+drawn+")
       
   445     {
       
   446         changeImage();
       
   447         return;
       
   448     }
       
   449 
       
   450     int id = 0;
   436     int id = 0;
   451     for(int i = 0; i < chooseMap->count(); i++)
   437     for(int i = 0; i < chooseMap->count(); i++)
   452         if(!chooseMap->itemData(i).isNull() && chooseMap->itemData(i).toList()[0].toString() == map)
   438         if(!chooseMap->itemData(i).isNull() && chooseMap->itemData(i).toList()[0].toString() == map)
   453         {
   439         {
   454             id = i;
   440             id = i;
   458     if(id > 0) {
   444     if(id > 0) {
   459         if (pMap)
   445         if (pMap)
   460         {
   446         {
   461             disconnect(pMap, 0, this, SLOT(setImage(const QImage)));
   447             disconnect(pMap, 0, this, SLOT(setImage(const QImage)));
   462             disconnect(pMap, 0, this, SLOT(setHHLimit(int)));
   448             disconnect(pMap, 0, this, SLOT(setHHLimit(int)));
       
   449             pMap->deleteLater();
   463             pMap = 0;
   450             pMap = 0;
   464         }
   451         }
   465         chooseMap->setCurrentIndex(id);
   452         chooseMap->setCurrentIndex(id);
   466         loadMap(id);
   453         updatePreview();
   467     }
   454     }
   468 }
   455 }
   469 
   456 
   470 void HWMapContainer::setTheme(const QString & theme)
   457 void HWMapContainer::setTheme(const QString & theme)
   471 {
   458 {
   472     QList<QListWidgetItem *> items = lwThemes->findItems(theme, Qt::MatchExactly);
   459     QList<QListWidgetItem *> items = lwThemes->findItems(theme, Qt::MatchExactly);
   473     if(items.size())
   460     if(items.size())
   474         lwThemes->setCurrentItem(items.at(0));
   461         lwThemes->setCurrentItem(items.at(0));
   475 }
   462 }
   476 #include <QMessageBox>
   463 
   477 void HWMapContainer::setRandomMap()
   464 void HWMapContainer::setRandomMap()
   478 {
   465 {
   479     setRandomSeed();
   466     setRandomSeed();
   480     switch(chooseMap->currentIndex())
   467     switch(chooseMap->currentIndex())
   481     {
   468     {
   510 void HWMapContainer::setRandomSeed()
   497 void HWMapContainer::setRandomSeed()
   511 {
   498 {
   512     m_seed = QUuid::createUuid().toString();
   499     m_seed = QUuid::createUuid().toString();
   513     seedEdit->setText(m_seed);
   500     seedEdit->setText(m_seed);
   514     emit seedChanged(m_seed);
   501     emit seedChanged(m_seed);
   515     if (chooseMap->currentIndex() < MAPGEN_LAST)
   502     if (chooseMap->currentIndex() < MAPGEN_MAP)
   516         changeImage();
   503         askForGeneratedPreview();
   517 }
   504 }
   518 
   505 
   519 void HWMapContainer::setRandomTheme()
   506 void HWMapContainer::setRandomTheme()
   520 {
   507 {
   521     if(!Themes->size()) return;
   508     if(!Themes->size()) return;
   529 }
   516 }
   530 
   517 
   531 void HWMapContainer::templateFilterChanged(int filter)
   518 void HWMapContainer::templateFilterChanged(int filter)
   532 {
   519 {
   533     emit newTemplateFilter(filter);
   520     emit newTemplateFilter(filter);
   534     changeImage();
   521     updatePreview();
   535 }
   522 }
   536 
   523 
   537 MapGenerator HWMapContainer::get_mapgen(void) const
   524 MapGenerator HWMapContainer::get_mapgen(void) const
   538 {
   525 {
   539     return mapgen;
   526     return mapgen;
   540 }
   527 }
   541 
   528 
   542 int HWMapContainer::get_maze_size(void) const
   529 int HWMapContainer::get_maze_size(void) const
   543 {
   530 {
   544     return maze_size;
   531     return maze_size_selection->currentIndex();
   545 }
   532 }
   546 
   533 
   547 void HWMapContainer::setMaze_size(int size)
   534 void HWMapContainer::setMaze_size(int size)
   548 {
   535 {
   549     maze_size = size;
       
   550     maze_size_selection->setCurrentIndex(size);
   536     maze_size_selection->setCurrentIndex(size);
   551     emit maze_sizeChanged(size);
   537     emit maze_sizeChanged(size);
   552     changeImage();
   538     updatePreview();
   553 }
   539 }
   554 
   540 
   555 void HWMapContainer::setMapgen(MapGenerator m)
   541 void HWMapContainer::setMapgen(MapGenerator m)
   556 {
   542 {
   557     mapgen = m;
   543     mapgen = m;
       
   544     chooseMap->setCurrentIndex(m);
   558     emit mapgenChanged(m);
   545     emit mapgenChanged(m);
   559     changeImage();
   546     updatePreview();
   560 }
   547 }
   561 
   548 
   562 void HWMapContainer::setDrawnMapData(const QByteArray & ar)
   549 void HWMapContainer::setDrawnMapData(const QByteArray & ar)
   563 {
   550 {
   564     drawMapScene.decode(ar);
   551     drawMapScene.decode(ar);
   565     changeImage();
   552     updatePreview();
   566 }
   553 }
   567 
   554 
   568 QByteArray HWMapContainer::getDrawnMapData()
   555 QByteArray HWMapContainer::getDrawnMapData()
   569 {
   556 {
   570     return drawMapScene.encode();
   557     return drawMapScene.encode();
   588 
   575 
   589 void HWMapContainer::mapDrawingFinished()
   576 void HWMapContainer::mapDrawingFinished()
   590 {
   577 {
   591     emit drawnMapChanged(getDrawnMapData());
   578     emit drawnMapChanged(getDrawnMapData());
   592 
   579 
   593     changeImage();
   580     updatePreview();
   594 }
   581 }
       
   582 
       
   583 void HWMapContainer::updatePreview()
       
   584 {
       
   585     switch(chooseMap->currentIndex())
       
   586     {
       
   587     case MAPGEN_REGULAR:
       
   588         askForGeneratedPreview();
       
   589         break;
       
   590     case MAPGEN_MAZE:
       
   591         askForGeneratedPreview();
       
   592         break;
       
   593     case MAPGEN_DRAWN:
       
   594         askForGeneratedPreview();
       
   595         break;
       
   596     default:
       
   597         int curIndex = chooseMap->currentIndex();
       
   598         QPixmap mapImage;
       
   599         if(!mapImage.load(datadir->absolutePath() + "/Maps/" + chooseMap->itemData(curIndex).toList()[0].toString() + "/preview.png")) {
       
   600             imageButt->setIcon(QIcon());
       
   601             return;
       
   602         }
       
   603 
       
   604         hhLimit = chooseMap->itemData(curIndex).toList()[2].toInt();
       
   605         addInfoToPreview(mapImage);
       
   606     }
       
   607 }