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); |
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 } |