void HWMapContainer::previewClicked() { if (isMaster()) // should only perform these if master, but disabling the button when not, causes an unattractive preview. switch (m_mapInfo.type) { case MapModel::HandDrawnMap: emit drawMapRequested(); break; default: setRandomMap(); break; } }
HWMapContainer::HWMapContainer(QWidget * parent) : QWidget(parent), mainLayout(this), pMap(0), mapgen(MAPGEN_REGULAR) { hhSmall.load(":/res/hh_small.png"); hhLimit = 18; templateFilter = 0; mainLayout.setContentsMargins(QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin), 1, QApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin), QApplication::style()->pixelMetric(QStyle::PM_LayoutBottomMargin)); QWidget* mapWidget = new QWidget(this); mainLayout.addWidget(mapWidget, 0, 0, Qt::AlignHCenter); QGridLayout* mapLayout = new QGridLayout(mapWidget); mapLayout->setMargin(0); imageButt = new QPushButton(mapWidget); imageButt->setObjectName("imageButt"); imageButt->setFixedSize(256 + 6, 128 + 6); imageButt->setFlat(true); imageButt->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);//QSizePolicy::Minimum, QSizePolicy::Minimum); mapLayout->addWidget(imageButt, 0, 0, 1, 2); //connect(imageButt, SIGNAL(clicked()), this, SLOT(setRandomSeed())); //connect(imageButt, SIGNAL(clicked()), this, SLOT(setRandomTheme())); connect(imageButt, SIGNAL(clicked()), this, SLOT(setRandomMap())); chooseMap = new QComboBox(mapWidget); chooseMap->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); chooseMap->addItem( // FIXME - need real icons. Disabling until then //QIcon(":/res/mapRandom.png"), QComboBox::tr("generated map...")); chooseMap->addItem( // FIXME - need real icons. Disabling until then //QIcon(":/res/mapMaze.png"), QComboBox::tr("generated maze...")); chooseMap->addItem(QComboBox::tr("hand drawn map...")); chooseMap->insertSeparator(chooseMap->count()); // separator between generators and missions chooseMap->insertSeparator(chooseMap->count()); // separator between generators and missions int missionindex = chooseMap->count(); numMissions = 0; for (int i = 0; i < mapList->size(); ++i) { QString map = (*mapList)[i]; QFile mapCfgFile( QString("%1/Maps/%2/map.cfg") .arg(datadir->absolutePath()) .arg(map)); QFile mapLuaFile( QString("%1/Maps/%2/map.lua") .arg(datadir->absolutePath()) .arg(map)); if (mapCfgFile.open(QFile::ReadOnly)) { QString theme; quint32 limit = 0; QString scheme; QString weapons; QList<QVariant> mapInfo; QTextStream input(&mapCfgFile); input >> theme; input >> limit; input >> scheme; input >> weapons; mapInfo.push_back(map); mapInfo.push_back(theme); if (limit) mapInfo.push_back(limit); else mapInfo.push_back(18); mapInfo.push_back(mapLuaFile.exists()); if (scheme.isEmpty()) scheme = "locked"; scheme.replace("_", " "); if (weapons.isEmpty()) weapons = "locked"; weapons.replace("_", " "); mapInfo.push_back(scheme); mapInfo.push_back(weapons); if(mapLuaFile.exists()) { chooseMap->insertItem(missionindex++, // FIXME - need real icons. Disabling until then //QIcon(":/res/mapMission.png"), QComboBox::tr("Mission") + ": " + map, mapInfo); numMissions++; } else chooseMap->addItem( // FIXME - need real icons. Disabling until then //QIcon(":/res/mapCustom.png"), map, mapInfo); mapCfgFile.close(); } }
HWMapContainer::HWMapContainer(QWidget * parent) : QWidget(parent), mainLayout(this), pMap(0), mapgen(MAPGEN_REGULAR), m_previewSize(256, 128) { // don't show preview anything until first show event m_previewEnabled = false; m_missionsViewSetup = false; m_staticViewSetup = false; m_script = QString(); hhSmall.load(":/res/hh_small.png"); hhLimit = 18; templateFilter = 0; m_master = true; linearGrad = QLinearGradient(QPoint(128, 0), QPoint(128, 128)); linearGrad.setColorAt(1, QColor(0, 0, 192)); linearGrad.setColorAt(0, QColor(66, 115, 225)); mainLayout.setContentsMargins(HWApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin), 10, HWApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin), HWApplication::style()->pixelMetric(QStyle::PM_LayoutBottomMargin)); m_staticMapModel = DataManager::instance().staticMapModel(); m_missionMapModel = DataManager::instance().missionMapModel(); m_themeModel = DataManager::instance().themeModel(); /* Layouts */ QWidget * topWidget = new QWidget(); QHBoxLayout * topLayout = new QHBoxLayout(topWidget); topWidget->setContentsMargins(0, 0, 0, 0); topLayout->setContentsMargins(0, 0, 0, 0); QHBoxLayout * twoColumnLayout = new QHBoxLayout(); QVBoxLayout * leftLayout = new QVBoxLayout(); QVBoxLayout * rightLayout = new QVBoxLayout(); twoColumnLayout->addLayout(leftLayout, 0); twoColumnLayout->addStretch(1); twoColumnLayout->addLayout(rightLayout, 0); QVBoxLayout * drawnControls = new QVBoxLayout(); /* Map type combobox */ topLayout->setSpacing(10); topLayout->addWidget(new QLabel(tr("Map type:")), 0); cType = new QComboBox(this); topLayout->addWidget(cType, 1); cType->insertItem(0, tr("Image map"), MapModel::StaticMap); cType->insertItem(1, tr("Mission map"), MapModel::MissionMap); cType->insertItem(2, tr("Hand-drawn"), MapModel::HandDrawnMap); cType->insertItem(3, tr("Randomly generated"), MapModel::GeneratedMap); cType->insertItem(4, tr("Random maze"), MapModel::GeneratedMaze); cType->insertItem(5, tr("Random perlin"), MapModel::GeneratedPerlin); connect(cType, SIGNAL(currentIndexChanged(int)), this, SLOT(mapTypeChanged(int))); m_childWidgets << cType; /* Randomize button */ topLayout->addStretch(1); const QIcon& lp = QIcon(":/res/dice.png"); QSize sz = lp.actualSize(QSize(65535, 65535)); btnRandomize = new QPushButton(); btnRandomize->setText(tr("Random")); btnRandomize->setIcon(lp); btnRandomize->setFixedHeight(30); btnRandomize->setIconSize(sz); btnRandomize->setFlat(true); btnRandomize->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); connect(btnRandomize, SIGNAL(clicked()), this, SLOT(setRandomMap())); m_childWidgets << btnRandomize; btnRandomize->setStyleSheet("padding: 5px;"); btnRandomize->setFixedHeight(cType->height()); topLayout->addWidget(btnRandomize, 1); /* Seed button */ btnSeed = new QPushButton(parentWidget()->parentWidget()); btnSeed->setText(tr("Seed")); btnSeed->setStyleSheet("padding: 5px;"); btnSeed->setFixedHeight(cType->height()); connect(btnSeed, SIGNAL(clicked()), this, SLOT(showSeedPrompt())); topLayout->addWidget(btnSeed, 0); /* Map preview label */ QLabel * lblMapPreviewText = new QLabel(this); lblMapPreviewText->setText(tr("Map preview:")); leftLayout->addWidget(lblMapPreviewText, 0); /* Map Preview */ mapPreview = new QPushButton(this); mapPreview->setObjectName("mapPreview"); mapPreview->setFlat(true); mapPreview->setFixedSize(256 + 6, 128 + 6); mapPreview->setContentsMargins(0, 0, 0, 0); leftLayout->addWidget(mapPreview, 0); connect(mapPreview, SIGNAL(clicked()), this, SLOT(previewClicked())); /* Bottom-Left layout */ QVBoxLayout * bottomLeftLayout = new QVBoxLayout(); leftLayout->addLayout(bottomLeftLayout, 1); /* Map list label */ lblMapList = new QLabel(this); rightLayout->addWidget(lblMapList, 0); /* Static maps list */ staticMapList = new QListView(this); rightLayout->addWidget(staticMapList, 1); m_childWidgets << staticMapList; /* Mission maps list */ missionMapList = new QListView(this); rightLayout->addWidget(missionMapList, 1); m_childWidgets << missionMapList; /* Map load and edit buttons */ drawnControls->addStretch(1); btnLoadMap = new QPushButton(tr("Load map drawing")); btnLoadMap->setStyleSheet("padding: 20px;"); drawnControls->addWidget(btnLoadMap, 0); m_childWidgets << btnLoadMap; connect(btnLoadMap, SIGNAL(clicked()), this, SLOT(loadDrawing())); btnEditMap = new QPushButton(tr("Edit map drawing")); btnEditMap->setStyleSheet("padding: 20px;"); drawnControls->addWidget(btnEditMap, 0); m_childWidgets << btnEditMap; connect(btnEditMap, SIGNAL(clicked()), this, SIGNAL(drawMapRequested())); drawnControls->addStretch(1); rightLayout->addLayout(drawnControls); /* Generator style list */ generationStyles = new QListWidget(this); new QListWidgetItem(tr("All"), generationStyles); new QListWidgetItem(tr("Small"), generationStyles); new QListWidgetItem(tr("Medium"), generationStyles); new QListWidgetItem(tr("Large"), generationStyles); new QListWidgetItem(tr("Cavern"), generationStyles); new QListWidgetItem(tr("Wacky"), generationStyles); connect(generationStyles, SIGNAL(currentRowChanged(int)), this, SLOT(setTemplateFilter(int))); m_childWidgets << generationStyles; rightLayout->addWidget(generationStyles, 1); /* Maze style list */ mazeStyles = new QListWidget(this); new QListWidgetItem(tr("Small tunnels"), mazeStyles); new QListWidgetItem(tr("Medium tunnels"), mazeStyles); new QListWidgetItem(tr("Large tunnels"), mazeStyles); new QListWidgetItem(tr("Small islands"), mazeStyles); new QListWidgetItem(tr("Medium islands"), mazeStyles); new QListWidgetItem(tr("Large islands"), mazeStyles); connect(mazeStyles, SIGNAL(currentRowChanged(int)), this, SLOT(setMazeSize(int))); m_childWidgets << mazeStyles; rightLayout->addWidget(mazeStyles, 1); /* Mission description */ lblDesc = new QLabel(); lblDesc->setWordWrap(true); lblDesc->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); lblDesc->setAlignment(Qt::AlignTop | Qt::AlignLeft); lblDesc->setStyleSheet("font: 10px;"); bottomLeftLayout->addWidget(lblDesc, 100); /* Add stretch above theme button */ bottomLeftLayout->addStretch(1); /* Theme chooser */ btnTheme = new QPushButton(this); btnTheme->setFlat(true); connect(btnTheme, SIGNAL(clicked()), this, SLOT(showThemePrompt())); m_childWidgets << btnTheme; bottomLeftLayout->addWidget(btnTheme, 0); /* Add everything to main layout */ mainLayout.addWidget(topWidget, 0); mainLayout.addLayout(twoColumnLayout, 1); /* Set defaults */ setRandomSeed(); setMazeSize(0); setTemplateFilter(0); staticMapChanged(m_staticMapModel->index(0, 0)); missionMapChanged(m_missionMapModel->index(0, 0)); changeMapType(MapModel::GeneratedMap); }