author | unc0rr |
Fri, 22 Aug 2014 19:43:26 +0400 | |
changeset 10393 | c3daae6fd723 |
parent 10391 | ce3ccc45d790 |
child 10394 | 0e0c3936412f |
permissions | -rw-r--r-- |
184 | 1 |
/* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
6700 | 3 |
* Copyright (c) 2006-2012 Igor Ulyanov <iulyanov@gmail.com> |
184 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
9745
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
184 | 17 |
*/ |
18 |
||
19 |
#include <QPushButton> |
|
20 |
#include <QBuffer> |
|
21 |
#include <QUuid> |
|
22 |
#include <QBitmap> |
|
23 |
#include <QPainter> |
|
24 |
#include <QLinearGradient> |
|
25 |
#include <QColor> |
|
249 | 26 |
#include <QTextStream> |
1209 | 27 |
#include <QLabel> |
5289
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
5252
diff
changeset
|
28 |
#include <QListView> |
1209 | 29 |
#include <QVBoxLayout> |
1224 | 30 |
#include <QIcon> |
4519 | 31 |
#include <QLineEdit> |
5289
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
5252
diff
changeset
|
32 |
#include <QStringListModel> |
8377 | 33 |
#include <QListWidget> |
34 |
#include <QListWidgetItem> |
|
35 |
#include <QDebug> |
|
36 |
#include <QFile> |
|
37 |
#include <QFileDialog> |
|
38 |
#include <QInputDialog> |
|
39 |
#include <QMessageBox> |
|
249 | 40 |
|
41 |
#include "hwconsts.h" |
|
788
00720357601f
- Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents:
682
diff
changeset
|
42 |
#include "mapContainer.h" |
8377 | 43 |
#include "themeprompt.h" |
44 |
#include "seedprompt.h" |
|
1209 | 45 |
#include "igbox.h" |
5252 | 46 |
#include "HWApplication.h" |
7258 | 47 |
#include "ThemeModel.h" |
184 | 48 |
|
8377 | 49 |
|
50 |
||
184 | 51 |
HWMapContainer::HWMapContainer(QWidget * parent) : |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
52 |
QWidget(parent), |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
53 |
mainLayout(this), |
3133 | 54 |
pMap(0), |
7017
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
55 |
mapgen(MAPGEN_REGULAR), |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
56 |
m_previewSize(256, 128) |
184 | 57 |
{ |
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
58 |
// don't show preview anything until first show event |
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
59 |
m_previewEnabled = false; |
9744 | 60 |
m_missionsViewSetup = false; |
61 |
m_staticViewSetup = false; |
|
10159 | 62 |
m_script = QString(); |
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
63 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
64 |
hhSmall.load(":/res/hh_small.png"); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
65 |
hhLimit = 18; |
1797 | 66 |
templateFilter = 0; |
8377 | 67 |
m_master = true; |
2377 | 68 |
|
7017
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
69 |
linearGrad = QLinearGradient(QPoint(128, 0), QPoint(128, 128)); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
70 |
linearGrad.setColorAt(1, QColor(0, 0, 192)); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
71 |
linearGrad.setColorAt(0, QColor(66, 115, 225)); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
72 |
|
5252 | 73 |
mainLayout.setContentsMargins(HWApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin), |
8424
225ede46e3dc
On pagenetgame, when window is too small the map/game options becomes a tabbed interface to allow for a few lines of chat to always be visible.
dag10
parents:
8401
diff
changeset
|
74 |
10, |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
75 |
HWApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin), |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
76 |
HWApplication::style()->pixelMetric(QStyle::PM_LayoutBottomMargin)); |
2377 | 77 |
|
8377 | 78 |
m_staticMapModel = DataManager::instance().staticMapModel(); |
79 |
m_missionMapModel = DataManager::instance().missionMapModel(); |
|
80 |
m_themeModel = DataManager::instance().themeModel(); |
|
4557
4004bef2aa9d
fix layout in game config widget as per nemo's request
Henek
parents:
4550
diff
changeset
|
81 |
|
8377 | 82 |
/* Layouts */ |
249 | 83 |
|
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
84 |
QWidget * topWidget = new QWidget(); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
85 |
QHBoxLayout * topLayout = new QHBoxLayout(topWidget); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
86 |
topWidget->setContentsMargins(0, 0, 0, 0); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
87 |
topLayout->setContentsMargins(0, 0, 0, 0); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
88 |
|
8377 | 89 |
QHBoxLayout * twoColumnLayout = new QHBoxLayout(); |
90 |
QVBoxLayout * leftLayout = new QVBoxLayout(); |
|
91 |
QVBoxLayout * rightLayout = new QVBoxLayout(); |
|
92 |
twoColumnLayout->addLayout(leftLayout, 0); |
|
93 |
twoColumnLayout->addStretch(1); |
|
94 |
twoColumnLayout->addLayout(rightLayout, 0); |
|
95 |
QVBoxLayout * drawnControls = new QVBoxLayout(); |
|
96 |
||
97 |
/* Map type combobox */ |
|
4487 | 98 |
|
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
99 |
topLayout->setSpacing(10); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
100 |
topLayout->addWidget(new QLabel(tr("Map type:")), 0); |
8377 | 101 |
cType = new QComboBox(this); |
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
102 |
topLayout->addWidget(cType, 1); |
8377 | 103 |
cType->insertItem(0, tr("Image map"), MapModel::StaticMap); |
104 |
cType->insertItem(1, tr("Mission map"), MapModel::MissionMap); |
|
105 |
cType->insertItem(2, tr("Hand-drawn"), MapModel::HandDrawnMap); |
|
106 |
cType->insertItem(3, tr("Randomly generated"), MapModel::GeneratedMap); |
|
107 |
cType->insertItem(4, tr("Random maze"), MapModel::GeneratedMaze); |
|
10391 | 108 |
cType->insertItem(5, tr("Random perlin"), MapModel::GeneratedPerlin); |
8377 | 109 |
connect(cType, SIGNAL(currentIndexChanged(int)), this, SLOT(mapTypeChanged(int))); |
110 |
m_childWidgets << cType; |
|
249 | 111 |
|
8377 | 112 |
/* Randomize button */ |
1802 | 113 |
|
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
114 |
topLayout->addStretch(1); |
8377 | 115 |
const QIcon& lp = QIcon(":/res/dice.png"); |
116 |
QSize sz = lp.actualSize(QSize(65535, 65535)); |
|
117 |
btnRandomize = new QPushButton(); |
|
118 |
btnRandomize->setText(tr("Random")); |
|
119 |
btnRandomize->setIcon(lp); |
|
120 |
btnRandomize->setFixedHeight(30); |
|
121 |
btnRandomize->setIconSize(sz); |
|
122 |
btnRandomize->setFlat(true); |
|
123 |
btnRandomize->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); |
|
124 |
connect(btnRandomize, SIGNAL(clicked()), this, SLOT(setRandomMap())); |
|
125 |
m_childWidgets << btnRandomize; |
|
126 |
btnRandomize->setStyleSheet("padding: 5px;"); |
|
127 |
btnRandomize->setFixedHeight(cType->height()); |
|
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
128 |
topLayout->addWidget(btnRandomize, 1); |
1802 | 129 |
|
8377 | 130 |
/* Seed button */ |
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
131 |
|
8377 | 132 |
btnSeed = new QPushButton(parentWidget()->parentWidget()); |
133 |
btnSeed->setText(tr("Seed")); |
|
134 |
btnSeed->setStyleSheet("padding: 5px;"); |
|
135 |
btnSeed->setFixedHeight(cType->height()); |
|
136 |
connect(btnSeed, SIGNAL(clicked()), this, SLOT(showSeedPrompt())); |
|
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
137 |
topLayout->addWidget(btnSeed, 0); |
1802 | 138 |
|
8377 | 139 |
/* Map preview label */ |
140 |
||
141 |
QLabel * lblMapPreviewText = new QLabel(this); |
|
142 |
lblMapPreviewText->setText(tr("Map preview:")); |
|
8424
225ede46e3dc
On pagenetgame, when window is too small the map/game options becomes a tabbed interface to allow for a few lines of chat to always be visible.
dag10
parents:
8401
diff
changeset
|
143 |
leftLayout->addWidget(lblMapPreviewText, 0); |
8377 | 144 |
|
145 |
/* Map Preview */ |
|
4562 | 146 |
|
8467 | 147 |
mapPreview = new QPushButton(this); |
8377 | 148 |
mapPreview->setObjectName("mapPreview"); |
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
149 |
mapPreview->setFlat(true); |
10161 | 150 |
mapPreview->setFixedSize(256 + 6, 128 + 6); |
8467 | 151 |
mapPreview->setContentsMargins(0, 0, 0, 0); |
8377 | 152 |
leftLayout->addWidget(mapPreview, 0); |
8467 | 153 |
connect(mapPreview, SIGNAL(clicked()), this, SLOT(previewClicked())); |
8377 | 154 |
|
155 |
/* Bottom-Left layout */ |
|
3133 | 156 |
|
8377 | 157 |
QVBoxLayout * bottomLeftLayout = new QVBoxLayout(); |
158 |
leftLayout->addLayout(bottomLeftLayout, 1); |
|
159 |
||
160 |
/* Map list label */ |
|
161 |
||
162 |
lblMapList = new QLabel(); |
|
163 |
rightLayout->addWidget(lblMapList, 0); |
|
164 |
||
165 |
/* Static maps list */ |
|
1248 | 166 |
|
8377 | 167 |
staticMapList = new QListView; |
168 |
rightLayout->addWidget(staticMapList, 1); |
|
169 |
m_childWidgets << staticMapList; |
|
5289
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
5252
diff
changeset
|
170 |
|
8377 | 171 |
/* Mission maps list */ |
1802 | 172 |
|
9744 | 173 |
missionMapList = new QListView(this); |
8377 | 174 |
rightLayout->addWidget(missionMapList, 1); |
175 |
m_childWidgets << missionMapList; |
|
176 |
||
177 |
/* Map load and edit buttons */ |
|
178 |
||
179 |
drawnControls->addStretch(1); |
|
2377 | 180 |
|
8377 | 181 |
btnLoadMap = new QPushButton(tr("Load map drawing")); |
182 |
btnLoadMap->setStyleSheet("padding: 20px;"); |
|
183 |
drawnControls->addWidget(btnLoadMap, 0); |
|
184 |
m_childWidgets << btnLoadMap; |
|
185 |
connect(btnLoadMap, SIGNAL(clicked()), this, SLOT(loadDrawing())); |
|
186 |
||
187 |
btnEditMap = new QPushButton(tr("Edit map drawing")); |
|
188 |
btnEditMap->setStyleSheet("padding: 20px;"); |
|
189 |
drawnControls->addWidget(btnEditMap, 0); |
|
190 |
m_childWidgets << btnEditMap; |
|
191 |
connect(btnEditMap, SIGNAL(clicked()), this, SIGNAL(drawMapRequested())); |
|
192 |
||
193 |
drawnControls->addStretch(1); |
|
194 |
||
195 |
rightLayout->addLayout(drawnControls); |
|
196 |
||
197 |
/* Generator style list */ |
|
2377 | 198 |
|
8377 | 199 |
generationStyles = new QListWidget(); |
200 |
new QListWidgetItem(tr("All"), generationStyles); |
|
201 |
new QListWidgetItem(tr("Small"), generationStyles); |
|
202 |
new QListWidgetItem(tr("Medium"), generationStyles); |
|
203 |
new QListWidgetItem(tr("Large"), generationStyles); |
|
204 |
new QListWidgetItem(tr("Cavern"), generationStyles); |
|
205 |
new QListWidgetItem(tr("Wacky"), generationStyles); |
|
206 |
connect(generationStyles, SIGNAL(currentRowChanged(int)), this, SLOT(setTemplateFilter(int))); |
|
207 |
m_childWidgets << generationStyles; |
|
208 |
rightLayout->addWidget(generationStyles, 1); |
|
209 |
||
210 |
/* Maze style list */ |
|
4557
4004bef2aa9d
fix layout in game config widget as per nemo's request
Henek
parents:
4550
diff
changeset
|
211 |
|
8377 | 212 |
mazeStyles = new QListWidget(); |
213 |
new QListWidgetItem(tr("Small tunnels"), mazeStyles); |
|
214 |
new QListWidgetItem(tr("Medium tunnels"), mazeStyles); |
|
8695 | 215 |
new QListWidgetItem(tr("Large tunnels"), mazeStyles); |
8377 | 216 |
new QListWidgetItem(tr("Small islands"), mazeStyles); |
217 |
new QListWidgetItem(tr("Medium islands"), mazeStyles); |
|
218 |
new QListWidgetItem(tr("Large islands"), mazeStyles); |
|
219 |
connect(mazeStyles, SIGNAL(currentRowChanged(int)), this, SLOT(setMazeSize(int))); |
|
220 |
m_childWidgets << mazeStyles; |
|
221 |
rightLayout->addWidget(mazeStyles, 1); |
|
4557
4004bef2aa9d
fix layout in game config widget as per nemo's request
Henek
parents:
4550
diff
changeset
|
222 |
|
8377 | 223 |
/* Mission description */ |
4557
4004bef2aa9d
fix layout in game config widget as per nemo's request
Henek
parents:
4550
diff
changeset
|
224 |
|
8377 | 225 |
lblDesc = new QLabel(); |
226 |
lblDesc->setWordWrap(true); |
|
227 |
lblDesc->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
|
228 |
lblDesc->setAlignment(Qt::AlignTop | Qt::AlignLeft); |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
229 |
lblDesc->setStyleSheet("font: 10px;"); |
8467 | 230 |
bottomLeftLayout->addWidget(lblDesc, 100); |
8377 | 231 |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
232 |
/* Add stretch above theme button */ |
8377 | 233 |
|
234 |
bottomLeftLayout->addStretch(1); |
|
235 |
||
236 |
/* Theme chooser */ |
|
1215 | 237 |
|
8377 | 238 |
btnTheme = new QPushButton(); |
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
239 |
btnTheme->setFlat(true); |
8377 | 240 |
connect(btnTheme, SIGNAL(clicked()), this, SLOT(showThemePrompt())); |
241 |
m_childWidgets << btnTheme; |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
242 |
bottomLeftLayout->addWidget(btnTheme, 0); |
4699 | 243 |
|
8377 | 244 |
/* Add everything to main layout */ |
245 |
||
8886
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
246 |
mainLayout.addWidget(topWidget, 0); |
5c521d1fdd63
Fixed map preview overlap on certain locales (Fixes issue 549).
dag10
parents:
8695
diff
changeset
|
247 |
mainLayout.addLayout(twoColumnLayout, 1); |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
248 |
|
8377 | 249 |
/* Set defaults */ |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
250 |
|
8377 | 251 |
setRandomSeed(); |
252 |
setMazeSize(0); |
|
253 |
setTemplateFilter(0); |
|
254 |
staticMapChanged(m_staticMapModel->index(0, 0)); |
|
255 |
missionMapChanged(m_missionMapModel->index(0, 0)); |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
256 |
changeMapType(MapModel::GeneratedMap); |
184 | 257 |
} |
258 |
||
10161 | 259 |
void HWMapContainer::setImage(const QPixmap &newImage) |
184 | 260 |
{ |
10161 | 261 |
addInfoToPreview(newImage); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
262 |
pMap = 0; |
8377 | 263 |
|
264 |
cType->setEnabled(isMaster()); |
|
249 | 265 |
} |
266 |
||
1790 | 267 |
void HWMapContainer::setHHLimit(int newHHLimit) |
268 |
{ |
|
269 |
hhLimit = newHHLimit; |
|
270 |
} |
|
271 |
||
272 |
// Should this add text to identify map size? |
|
10161 | 273 |
void HWMapContainer::addInfoToPreview(const QPixmap &image) |
1790 | 274 |
{ |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
275 |
QPixmap finalImage = QPixmap(image.size()); |
10161 | 276 |
//finalImage.fill(QColor(0, 0, 0, 0)); |
2377 | 277 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
278 |
QPainter p(&finalImage); |
10161 | 279 |
p.fillRect(finalImage.rect(), linearGrad); |
280 |
p.drawPixmap(finalImage.rect(), image); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
281 |
//p.setPen(QColor(0xf4,0x9e,0xe9)); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
282 |
p.setPen(QColor(0xff,0xcc,0x00)); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
283 |
p.setBrush(QColor(0, 0, 0)); |
10161 | 284 |
p.drawRect(finalImage.rect().width() - hhSmall.rect().width() - 28, 3, 40, 20); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
285 |
p.setFont(QFont("MS Shell Dlg", 10)); |
7017
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
286 |
QString text = (hhLimit > 0) ? QString::number(hhLimit) : "?"; |
10161 | 287 |
p.drawText(finalImage.rect().width() - hhSmall.rect().width() - 14 - (hhLimit > 9 ? 10 : 0), 18, text); |
288 |
p.drawPixmap(finalImage.rect().width() - hhSmall.rect().width() - 5, 5, hhSmall.rect().width(), hhSmall.rect().height(), hhSmall); |
|
1790 | 289 |
|
8467 | 290 |
// Shrink, crop, and center preview image |
10161 | 291 |
/*QPixmap centered(QSize(m_previewSize.width() - 6, m_previewSize.height() - 6)); |
8467 | 292 |
QPainter pc(¢ered); |
293 |
pc.fillRect(centered.rect(), linearGrad); |
|
10161 | 294 |
pc.drawPixmap(-3, -3, finalImage);*/ |
8467 | 295 |
|
10161 | 296 |
mapPreview->setIcon(QIcon(finalImage)); |
297 |
mapPreview->setIconSize(finalImage.size()); |
|
184 | 298 |
} |
299 |
||
4562 | 300 |
void HWMapContainer::askForGeneratedPreview() |
184 | 301 |
{ |
8070
66bc20d089fc
Okay, remove previous request only if it has same parent
unc0rr
parents:
8049
diff
changeset
|
302 |
pMap = new HWMap(this); |
10161 | 303 |
connect(pMap, SIGNAL(ImageReceived(QPixmap)), this, SLOT(setImage(QPixmap))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
304 |
connect(pMap, SIGNAL(HHLimitReceived(int)), this, SLOT(setHHLimit(int))); |
7008
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
305 |
connect(pMap, SIGNAL(destroyed(QObject *)), this, SLOT(onPreviewMapDestroyed(QObject *))); |
4562 | 306 |
pMap->getImage(m_seed, |
307 |
getTemplateFilter(), |
|
308 |
get_mapgen(), |
|
4941 | 309 |
getMazeSize(), |
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
310 |
getDrawnMapData(), |
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
311 |
m_script |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
312 |
); |
7017
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
313 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
314 |
setHHLimit(0); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
315 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
316 |
const QPixmap waitIcon(":/res/iconTime.png"); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
317 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
318 |
QPixmap waitImage(m_previewSize); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
319 |
QPainter p(&waitImage); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
320 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
321 |
p.fillRect(waitImage.rect(), linearGrad); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
322 |
int x = (waitImage.width() - waitIcon.width()) / 2; |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
323 |
int y = (waitImage.height() - waitIcon.height()) / 2; |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
324 |
p.drawPixmap(QPoint(x, y), waitIcon); |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
325 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7014
diff
changeset
|
326 |
addInfoToPreview(waitImage); |
184 | 327 |
|
8377 | 328 |
cType->setEnabled(false); |
1215 | 329 |
} |
330 |
||
8467 | 331 |
void HWMapContainer::previewClicked() |
332 |
{ |
|
9452 | 333 |
if (isMaster()) // should only perform these if master, but disabling the button when not, causes an unattractive preview. |
334 |
switch (m_mapInfo.type) |
|
335 |
{ |
|
336 |
case MapModel::HandDrawnMap: |
|
337 |
emit drawMapRequested(); |
|
338 |
break; |
|
339 |
default: |
|
340 |
setRandomMap(); |
|
341 |
break; |
|
342 |
} |
|
8467 | 343 |
} |
344 |
||
184 | 345 |
QString HWMapContainer::getCurrentSeed() const |
346 |
{ |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
347 |
return m_seed; |
184 | 348 |
} |
349 |
||
249 | 350 |
QString HWMapContainer::getCurrentMap() const |
351 |
{ |
|
8377 | 352 |
switch (m_mapInfo.type) |
353 |
{ |
|
354 |
case MapModel::StaticMap: |
|
355 |
case MapModel::MissionMap: |
|
356 |
return m_curMap; |
|
357 |
default: |
|
358 |
return QString(); |
|
359 |
} |
|
249 | 360 |
} |
361 |
||
362 |
QString HWMapContainer::getCurrentTheme() const |
|
363 |
{ |
|
6940
211aca8c1f4f
decouple current theme from map theme (fixes theme confusion bugs of last commit)
sheepluva
parents:
6939
diff
changeset
|
364 |
return(m_theme); |
3008 | 365 |
} |
366 |
||
367 |
bool HWMapContainer::getCurrentIsMission() const |
|
368 |
{ |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
369 |
return(m_mapInfo.type == MapModel::MissionMap); |
1790 | 370 |
} |
371 |
||
372 |
int HWMapContainer::getCurrentHHLimit() const |
|
373 |
{ |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
374 |
return hhLimit; |
249 | 375 |
} |
376 |
||
4513
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
377 |
QString HWMapContainer::getCurrentScheme() const |
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
378 |
{ |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
379 |
return(m_mapInfo.scheme); |
4513
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
380 |
} |
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
381 |
|
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
382 |
QString HWMapContainer::getCurrentWeapons() const |
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
383 |
{ |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
384 |
return(m_mapInfo.weapons); |
4513
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
385 |
} |
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
386 |
|
1802 | 387 |
quint32 HWMapContainer::getTemplateFilter() const |
388 |
{ |
|
8377 | 389 |
return generationStyles->currentRow(); |
1802 | 390 |
} |
391 |
||
184 | 392 |
void HWMapContainer::resizeEvent ( QResizeEvent * event ) |
393 |
{ |
|
4560
5d6c7f88db73
- Some work on drawMap widget and scene to allow undo, clear, save and load operations
unc0rr
parents:
4557
diff
changeset
|
394 |
Q_UNUSED(event); |
184 | 395 |
} |
320 | 396 |
|
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
397 |
void HWMapContainer::intSetSeed(const QString & seed) |
320 | 398 |
{ |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
399 |
m_seed = seed; |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
400 |
} |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
401 |
|
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
402 |
void HWMapContainer::setSeed(const QString & seed) |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
403 |
{ |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
404 |
intSetSeed(seed); |
10391 | 405 |
if ((m_mapInfo.type == MapModel::GeneratedMap) |
406 |
|| (m_mapInfo.type == MapModel::GeneratedMaze) |
|
407 |
|| (m_mapInfo.type == MapModel::GeneratedPerlin)) |
|
4562 | 408 |
updatePreview(); |
320 | 409 |
} |
410 |
||
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
411 |
void HWMapContainer::setScript(const QString & script) |
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
412 |
{ |
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
413 |
m_script = script; |
10391 | 414 |
if ((m_mapInfo.type == MapModel::GeneratedMap) |
415 |
|| (m_mapInfo.type == MapModel::GeneratedMaze) |
|
416 |
|| (m_mapInfo.type == MapModel::GeneratedPerlin) |
|
417 |
|| (m_mapInfo.type == MapModel::HandDrawnMap)) |
|
10171
00f41ff0bf2d
Script might well override a static map, but can't risk it not doing it, and preview completely failing. Better to just not try it for static maps. Some script cfg might help. Could also avoid unnnecessary preview regenerations even if the script was doing nothing at all.
nemo
parents:
10169
diff
changeset
|
418 |
updatePreview(); |
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
419 |
} |
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
420 |
|
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
421 |
void HWMapContainer::intSetMap(const QString & map) |
320 | 422 |
{ |
8377 | 423 |
if (map == "+rnd+") |
424 |
{ |
|
10336 | 425 |
//changeMapType(MapModel::GeneratedMap); |
8377 | 426 |
} |
427 |
else if (map == "+maze+") |
|
428 |
{ |
|
10336 | 429 |
//changeMapType(MapModel::GeneratedMaze); |
8377 | 430 |
} |
10391 | 431 |
else if (map == "+perlin+") |
432 |
{ |
|
433 |
//changeMapType(MapModel::GeneratedPerlin); |
|
434 |
} |
|
8377 | 435 |
else if (map == "+drawn+") |
436 |
{ |
|
10336 | 437 |
//changeMapType(MapModel::HandDrawnMap); |
8377 | 438 |
} |
439 |
else if (m_staticMapModel->mapExists(map)) |
|
440 |
{ |
|
441 |
changeMapType(MapModel::StaticMap, m_staticMapModel->index(m_staticMapModel->findMap(map), 0)); |
|
442 |
} |
|
443 |
else if (m_missionMapModel->mapExists(map)) |
|
444 |
{ |
|
445 |
changeMapType(MapModel::MissionMap, m_missionMapModel->index(m_missionMapModel->findMap(map), 0)); |
|
446 |
} else |
|
447 |
{ |
|
448 |
qDebug() << "HWMapContainer::intSetMap: Map doesn't exist: " << map; |
|
449 |
} |
|
320 | 450 |
} |
451 |
||
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
452 |
void HWMapContainer::setMap(const QString & map) |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
453 |
{ |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
454 |
if ((m_mapInfo.type == MapModel::Invalid) || (map != m_mapInfo.name)) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
455 |
intSetMap(map); |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
456 |
} |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
457 |
|
320 | 458 |
void HWMapContainer::setTheme(const QString & theme) |
459 |
{ |
|
8475
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
460 |
QModelIndexList mdl = m_themeModel->match(m_themeModel->index(0), ThemeModel::ActualNameRole, theme); |
5289
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
5252
diff
changeset
|
461 |
|
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
5252
diff
changeset
|
462 |
if(mdl.size()) |
8377 | 463 |
updateTheme(mdl.at(0)); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
464 |
else |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
465 |
intSetIconlessTheme(theme); |
320 | 466 |
} |
4562 | 467 |
|
4337 | 468 |
void HWMapContainer::setRandomMap() |
469 |
{ |
|
8619
253750e192e7
Made pressing the button in mapContainer only randomize things if client is master. Fixes issue 545. Also synchronized themes. Fixes issue 547.
dag10
parents:
8475
diff
changeset
|
470 |
if (!m_master) return; |
8924 | 471 |
|
4419 | 472 |
setRandomSeed(); |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
473 |
switch(m_mapInfo.type) |
4337 | 474 |
{ |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
475 |
case MapModel::GeneratedMap: |
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
476 |
case MapModel::GeneratedMaze: |
10391 | 477 |
case MapModel::GeneratedPerlin: |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
478 |
setRandomTheme(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
479 |
break; |
8377 | 480 |
case MapModel::MissionMap: |
481 |
missionMapChanged(m_missionMapModel->index(rand() % m_missionMapModel->rowCount(), 0)); |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
482 |
break; |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
483 |
case MapModel::StaticMap: |
8377 | 484 |
staticMapChanged(m_staticMapModel->index(rand() % m_staticMapModel->rowCount(), 0)); |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
485 |
break; |
8377 | 486 |
default: |
487 |
break; |
|
4337 | 488 |
} |
489 |
} |
|
490 |
||
320 | 491 |
void HWMapContainer::setRandomSeed() |
492 |
{ |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
493 |
setSeed(QUuid::createUuid().toString()); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2377
diff
changeset
|
494 |
emit seedChanged(m_seed); |
320 | 495 |
} |
1318 | 496 |
|
497 |
void HWMapContainer::setRandomTheme() |
|
498 |
{ |
|
6937
7f77fa908a4e
messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents:
6933
diff
changeset
|
499 |
if(!m_themeModel->rowCount()) return; |
7f77fa908a4e
messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents:
6933
diff
changeset
|
500 |
quint32 themeNum = rand() % m_themeModel->rowCount(); |
8377 | 501 |
updateTheme(m_themeModel->index(themeNum)); |
8619
253750e192e7
Made pressing the button in mapContainer only randomize things if client is master. Fixes issue 545. Also synchronized themes. Fixes issue 547.
dag10
parents:
8475
diff
changeset
|
502 |
emit themeChanged(m_theme); |
1318 | 503 |
} |
1797 | 504 |
|
4941 | 505 |
void HWMapContainer::intSetTemplateFilter(int filter) |
506 |
{ |
|
8377 | 507 |
generationStyles->setCurrentRow(filter); |
4941 | 508 |
emit newTemplateFilter(filter); |
509 |
} |
|
510 |
||
1797 | 511 |
void HWMapContainer::setTemplateFilter(int filter) |
512 |
{ |
|
4941 | 513 |
intSetTemplateFilter(filter); |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
514 |
if (m_mapInfo.type == MapModel::GeneratedMap) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
515 |
updatePreview(); |
1802 | 516 |
} |
517 |
||
3133 | 518 |
MapGenerator HWMapContainer::get_mapgen(void) const |
519 |
{ |
|
520 |
return mapgen; |
|
521 |
} |
|
522 |
||
4941 | 523 |
int HWMapContainer::getMazeSize(void) const |
3133 | 524 |
{ |
8377 | 525 |
return mazeStyles->currentRow(); |
3133 | 526 |
} |
527 |
||
4941 | 528 |
void HWMapContainer::intSetMazeSize(int size) |
3133 | 529 |
{ |
8377 | 530 |
mazeStyles->setCurrentRow(size); |
4941 | 531 |
emit mazeSizeChanged(size); |
532 |
} |
|
533 |
||
534 |
void HWMapContainer::setMazeSize(int size) |
|
535 |
{ |
|
536 |
intSetMazeSize(size); |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
537 |
if (m_mapInfo.type == MapModel::GeneratedMaze) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
538 |
updatePreview(); |
3133 | 539 |
} |
540 |
||
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
541 |
void HWMapContainer::intSetMapgen(MapGenerator m) |
3133 | 542 |
{ |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
543 |
if (mapgen != m) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
544 |
{ |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
545 |
mapgen = m; |
5793
401ab167bd9f
This should be a real fix (7643cbb88f09 reverted). Not tested.
unc0rr
parents:
5789
diff
changeset
|
546 |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
547 |
switch (m) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
548 |
{ |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
549 |
case MAPGEN_REGULAR: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
550 |
m_mapInfo.type = MapModel::GeneratedMap; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
551 |
break; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
552 |
case MAPGEN_MAZE: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
553 |
m_mapInfo.type = MapModel::GeneratedMaze; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
554 |
break; |
10391 | 555 |
case MAPGEN_PERLIN: |
556 |
m_mapInfo.type = MapModel::GeneratedPerlin; |
|
557 |
break; |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
558 |
case MAPGEN_DRAWN: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
559 |
m_mapInfo.type = MapModel::HandDrawnMap; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
560 |
break; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
561 |
case MAPGEN_MAP: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
562 |
switch (m_mapInfo.type) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
563 |
{ |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
564 |
case MapModel::GeneratedMap: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
565 |
case MapModel::GeneratedMaze: |
10391 | 566 |
case MapModel::GeneratedPerlin: |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
567 |
case MapModel::HandDrawnMap: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
568 |
m_mapInfo.type = MapModel::Invalid; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
569 |
default: |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
570 |
break; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
571 |
} |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
572 |
break; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
573 |
} |
5793
401ab167bd9f
This should be a real fix (7643cbb88f09 reverted). Not tested.
unc0rr
parents:
5789
diff
changeset
|
574 |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
575 |
emit mapgenChanged(m); |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
576 |
} |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
577 |
} |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
578 |
|
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
579 |
void HWMapContainer::setMapgen(MapGenerator m) |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
580 |
{ |
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
581 |
intSetMapgen(m); |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
582 |
if(m != MAPGEN_MAP) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
583 |
updatePreview(); |
3133 | 584 |
} |
4489 | 585 |
|
4537 | 586 |
void HWMapContainer::setDrawnMapData(const QByteArray & ar) |
587 |
{ |
|
588 |
drawMapScene.decode(ar); |
|
4562 | 589 |
updatePreview(); |
4537 | 590 |
} |
591 |
||
4489 | 592 |
QByteArray HWMapContainer::getDrawnMapData() |
593 |
{ |
|
4520
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
594 |
return drawMapScene.encode(); |
4513
1dd97c710f5a
added general scripts to multiplayer and added option for scripts to allow user set schemes or weapon sets.
Henek
parents:
4511
diff
changeset
|
595 |
} |
4519 | 596 |
|
8377 | 597 |
void HWMapContainer::setNewSeed(const QString & newSeed) |
4519 | 598 |
{ |
8377 | 599 |
setSeed(newSeed); |
600 |
emit seedChanged(newSeed); |
|
4519 | 601 |
} |
4520
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
602 |
|
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
603 |
DrawMapScene * HWMapContainer::getDrawMapScene() |
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
604 |
{ |
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
605 |
return &drawMapScene; |
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
606 |
} |
4525 | 607 |
|
608 |
void HWMapContainer::mapDrawingFinished() |
|
609 |
{ |
|
4526 | 610 |
emit drawnMapChanged(getDrawnMapData()); |
4525 | 611 |
|
4562 | 612 |
updatePreview(); |
4550
d300ea498486
added set button to seed edit so maps won't regenerate as often
Henek
parents:
4537
diff
changeset
|
613 |
} |
4562 | 614 |
|
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
615 |
void HWMapContainer::showEvent(QShowEvent * event) |
9735
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
616 |
{ |
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
617 |
if (!m_previewEnabled) { |
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
618 |
m_previewEnabled = true; |
9745 | 619 |
setRandomTheme(); |
9735
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
620 |
updatePreview(); |
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
621 |
} |
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
622 |
QWidget::showEvent(event); |
9735
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
623 |
} |
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
624 |
|
4562 | 625 |
void HWMapContainer::updatePreview() |
626 |
{ |
|
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
627 |
// abort if the widget isn't supposed to show anything yet |
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
628 |
if (!m_previewEnabled) |
9735
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
629 |
return; |
6312152d92ad
don't generate any map previews until they are actually visible. this should improve hedgewars startup performance on weak machines
sheepluva
parents:
9452
diff
changeset
|
630 |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
631 |
if (pMap) |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
632 |
{ |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10171
diff
changeset
|
633 |
disconnect(pMap, 0, this, SLOT(setImage(const QPixmap))); |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
634 |
disconnect(pMap, 0, this, SLOT(setHHLimit(int))); |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
635 |
pMap = 0; |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
636 |
} |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
637 |
|
7014
c0b32404ef74
+ display lack of map in a nice way, don't generate bogus preview in the background
sheepluva
parents:
7008
diff
changeset
|
638 |
QPixmap failIcon; |
c0b32404ef74
+ display lack of map in a nice way, don't generate bogus preview in the background
sheepluva
parents:
7008
diff
changeset
|
639 |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
640 |
switch(m_mapInfo.type) |
4562 | 641 |
{ |
7014
c0b32404ef74
+ display lack of map in a nice way, don't generate bogus preview in the background
sheepluva
parents:
7008
diff
changeset
|
642 |
case MapModel::Invalid: |
c0b32404ef74
+ display lack of map in a nice way, don't generate bogus preview in the background
sheepluva
parents:
7008
diff
changeset
|
643 |
failIcon = QPixmap(":/res/btnDisabled.png"); |
8467 | 644 |
mapPreview->setIcon(QIcon(failIcon)); |
645 |
mapPreview->setIconSize(failIcon.size()); |
|
7014
c0b32404ef74
+ display lack of map in a nice way, don't generate bogus preview in the background
sheepluva
parents:
7008
diff
changeset
|
646 |
break; |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
647 |
case MapModel::GeneratedMap: |
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
648 |
case MapModel::GeneratedMaze: |
10391 | 649 |
case MapModel::GeneratedPerlin: |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
650 |
case MapModel::HandDrawnMap: |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
651 |
askForGeneratedPreview(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
652 |
break; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
653 |
default: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
654 |
QPixmap mapImage; |
8049 | 655 |
bool success = mapImage.load("physfs://Maps/" + m_mapInfo.name + "/preview.png"); |
6939
970389573788
MapModel converted to QStandardItemList; separators fixed; changed used data format (human-readable struct instead of magic list) for map info in HwMapContainer (+ various small cleanups in that class)
sheepluva
parents:
6938
diff
changeset
|
656 |
|
970389573788
MapModel converted to QStandardItemList; separators fixed; changed used data format (human-readable struct instead of magic list) for map info in HwMapContainer (+ various small cleanups in that class)
sheepluva
parents:
6938
diff
changeset
|
657 |
if(!success) |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
658 |
{ |
8467 | 659 |
mapPreview->setIcon(QIcon()); |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
660 |
return; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
661 |
} |
4562 | 662 |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
663 |
hhLimit = m_mapInfo.limit; |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
664 |
addInfoToPreview(mapImage); |
4562 | 665 |
} |
666 |
} |
|
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
667 |
|
4941 | 668 |
void HWMapContainer::setAllMapParameters(const QString &map, MapGenerator m, int mazesize, const QString &seed, int tmpl) |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
669 |
{ |
5793
401ab167bd9f
This should be a real fix (7643cbb88f09 reverted). Not tested.
unc0rr
parents:
5789
diff
changeset
|
670 |
intSetMapgen(m); |
4941 | 671 |
intSetMazeSize(mazesize); |
672 |
intSetSeed(seed); |
|
673 |
intSetTemplateFilter(tmpl); |
|
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
674 |
// this one last because it will refresh the preview |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
675 |
intSetMap(map); |
4936
d65d438acd23
Merge MAP, MAPGEN and SEED params into one on room join, so engine isn't spawned three times for a preview. Not tested as I'm unable to see my rooms (why?)
unc0rr
parents:
4701
diff
changeset
|
676 |
} |
6933
78d194a30520
mapContainer: use DataManager, reload maps after data update (e.g. by DLC)
sheepluva
parents:
6700
diff
changeset
|
677 |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
678 |
void HWMapContainer::updateModelViews() |
6933
78d194a30520
mapContainer: use DataManager, reload maps after data update (e.g. by DLC)
sheepluva
parents:
6700
diff
changeset
|
679 |
{ |
6960
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
680 |
// restore theme selection |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
681 |
// do this before map selection restore, because map may overwrite theme |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
682 |
if (!m_theme.isEmpty()) |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
683 |
{ |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
684 |
QModelIndexList mdl = m_themeModel->match(m_themeModel->index(0), Qt::DisplayRole, m_theme); |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
685 |
if (mdl.size() > 0) |
8377 | 686 |
updateTheme(mdl.at(0)); |
6960
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
687 |
else |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
688 |
setRandomTheme(); |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
689 |
} |
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
690 |
|
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6947
diff
changeset
|
691 |
// restore map selection |
8377 | 692 |
if (!m_curMap.isEmpty()) |
7018
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
693 |
intSetMap(m_curMap); |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
694 |
else |
6a1f46c026bf
some tweaks/fixes/etc to the map preview and reload stuff
sheepluva
parents:
7017
diff
changeset
|
695 |
updatePreview(); |
6933
78d194a30520
mapContainer: use DataManager, reload maps after data update (e.g. by DLC)
sheepluva
parents:
6700
diff
changeset
|
696 |
} |
7008
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
697 |
|
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
698 |
|
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
699 |
void HWMapContainer::onPreviewMapDestroyed(QObject * map) |
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
700 |
{ |
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
701 |
if (map == pMap) |
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
702 |
pMap = 0; |
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6983
diff
changeset
|
703 |
} |
8377 | 704 |
|
705 |
void HWMapContainer::mapTypeChanged(int index) |
|
706 |
{ |
|
707 |
changeMapType((MapModel::MapType)cType->itemData(index).toInt()); |
|
708 |
} |
|
709 |
||
710 |
void HWMapContainer::changeMapType(MapModel::MapType type, const QModelIndex & newMap) |
|
711 |
{ |
|
712 |
staticMapList->hide(); |
|
713 |
missionMapList->hide(); |
|
714 |
lblMapList->hide(); |
|
715 |
generationStyles->hide(); |
|
716 |
mazeStyles->hide(); |
|
717 |
lblDesc->hide(); |
|
718 |
btnLoadMap->hide(); |
|
719 |
btnEditMap->hide(); |
|
720 |
||
721 |
switch (type) |
|
722 |
{ |
|
723 |
case MapModel::GeneratedMap: |
|
724 |
mapgen = MAPGEN_REGULAR; |
|
725 |
setMapInfo(MapModel::MapInfoRandom); |
|
726 |
lblMapList->setText(tr("Map size:")); |
|
727 |
lblMapList->show(); |
|
728 |
generationStyles->show(); |
|
729 |
break; |
|
730 |
case MapModel::GeneratedMaze: |
|
731 |
mapgen = MAPGEN_MAZE; |
|
732 |
setMapInfo(MapModel::MapInfoMaze); |
|
733 |
lblMapList->setText(tr("Maze style:")); |
|
734 |
lblMapList->show(); |
|
735 |
mazeStyles->show(); |
|
736 |
break; |
|
10391 | 737 |
case MapModel::GeneratedPerlin: |
738 |
mapgen = MAPGEN_PERLIN; |
|
739 |
setMapInfo(MapModel::MapInfoPerlin); |
|
740 |
lblMapList->setText(tr("Style:")); |
|
741 |
lblMapList->show(); |
|
742 |
mazeStyles->show(); |
|
743 |
break; |
|
8377 | 744 |
case MapModel::HandDrawnMap: |
745 |
mapgen = MAPGEN_DRAWN; |
|
746 |
setMapInfo(MapModel::MapInfoDrawn); |
|
747 |
btnLoadMap->show(); |
|
748 |
btnEditMap->show(); |
|
749 |
break; |
|
750 |
case MapModel::MissionMap: |
|
9744 | 751 |
setupMissionMapsView(); |
8377 | 752 |
mapgen = MAPGEN_MAP; |
753 |
missionMapChanged(newMap.isValid() ? newMap : missionMapList->currentIndex()); |
|
754 |
lblMapList->setText(tr("Mission:")); |
|
755 |
lblMapList->show(); |
|
756 |
missionMapList->show(); |
|
757 |
lblDesc->setText(m_mapInfo.desc); |
|
758 |
lblDesc->show(); |
|
759 |
emit mapChanged(m_curMap); |
|
760 |
break; |
|
761 |
case MapModel::StaticMap: |
|
9744 | 762 |
setupStaticMapsView(); |
8377 | 763 |
mapgen = MAPGEN_MAP; |
764 |
staticMapChanged(newMap.isValid() ? newMap : staticMapList->currentIndex()); |
|
765 |
lblMapList->setText(tr("Map:")); |
|
766 |
lblMapList->show(); |
|
767 |
staticMapList->show(); |
|
768 |
emit mapChanged(m_curMap); |
|
769 |
break; |
|
770 |
default: |
|
771 |
break; |
|
772 |
} |
|
773 |
||
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
774 |
// Update theme button size |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
775 |
updateThemeButtonSize(); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
776 |
|
8377 | 777 |
// Update cType combobox |
778 |
for (int i = 0; i < cType->count(); i++) |
|
779 |
{ |
|
780 |
if ((MapModel::MapType)cType->itemData(i).toInt() == type) |
|
781 |
{ |
|
782 |
cType->setCurrentIndex(i); |
|
783 |
break; |
|
784 |
} |
|
785 |
} |
|
786 |
||
8467 | 787 |
repaint(); |
788 |
||
8377 | 789 |
emit mapgenChanged(mapgen); |
790 |
} |
|
791 |
||
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
792 |
void HWMapContainer::updateThemeButtonSize() |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
793 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
794 |
if (m_mapInfo.type == MapModel::MissionMap) |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
795 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
796 |
btnTheme->setIconSize(QSize(30, 30)); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
797 |
btnTheme->setFixedHeight(30); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
798 |
} |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
799 |
else |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
800 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
801 |
QSize iconSize = btnTheme->icon().actualSize(QSize(65535, 65535)); |
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8424
diff
changeset
|
802 |
btnTheme->setFixedHeight(64); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
803 |
btnTheme->setIconSize(iconSize); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
804 |
} |
8430
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8424
diff
changeset
|
805 |
|
5a5c34a75e1a
Aesthetic improvements to chat widget. Also fixed the ghosting issue in a few areas by using repaint().
dag10
parents:
8424
diff
changeset
|
806 |
repaint(); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
807 |
} |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
808 |
|
8377 | 809 |
void HWMapContainer::showThemePrompt() |
810 |
{ |
|
8475
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
811 |
ThemePrompt prompt(m_themeID, this); |
8377 | 812 |
int theme = prompt.exec() - 1; // Since 0 means canceled, so all indexes are +1'd |
813 |
if (theme < 0) return; |
|
814 |
||
815 |
QModelIndex current = m_themeModel->index(theme, 0); |
|
816 |
updateTheme(current); |
|
817 |
emit themeChanged(m_theme); |
|
818 |
} |
|
819 |
||
820 |
void HWMapContainer::updateTheme(const QModelIndex & current) |
|
821 |
{ |
|
8475
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
822 |
m_theme = selectedTheme = current.data(ThemeModel::ActualNameRole).toString(); |
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
823 |
m_themeID = current.row(); |
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
824 |
QIcon icon = qVariantValue<QIcon>(current.data(Qt::DecorationRole)); |
8377 | 825 |
QSize iconSize = icon.actualSize(QSize(65535, 65535)); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
826 |
btnTheme->setFixedHeight(64); |
8377 | 827 |
btnTheme->setIconSize(iconSize); |
828 |
btnTheme->setIcon(icon); |
|
8941 | 829 |
btnTheme->setText(tr("Theme: %1").arg(current.data(Qt::DisplayRole).toString())); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
830 |
updateThemeButtonSize(); |
8377 | 831 |
} |
832 |
||
833 |
void HWMapContainer::staticMapChanged(const QModelIndex & map, const QModelIndex & old) |
|
834 |
{ |
|
835 |
mapChanged(map, 0, old); |
|
836 |
} |
|
837 |
||
838 |
void HWMapContainer::missionMapChanged(const QModelIndex & map, const QModelIndex & old) |
|
839 |
{ |
|
840 |
mapChanged(map, 1, old); |
|
841 |
} |
|
842 |
||
843 |
// Type: 0 = static, 1 = mission |
|
844 |
void HWMapContainer::mapChanged(const QModelIndex & map, int type, const QModelIndex & old) |
|
845 |
{ |
|
846 |
QListView * mapList; |
|
847 |
||
848 |
if (type == 0) mapList = staticMapList; |
|
849 |
else if (type == 1) mapList = missionMapList; |
|
850 |
else return; |
|
851 |
||
852 |
// Make sure it is a valid index |
|
853 |
if (!map.isValid()) |
|
854 |
{ |
|
855 |
if (old.isValid()) |
|
856 |
{ |
|
857 |
mapList->setCurrentIndex(old); |
|
858 |
mapList->scrollTo(old); |
|
859 |
} |
|
860 |
else |
|
861 |
{ |
|
862 |
m_mapInfo.type = MapModel::Invalid; |
|
863 |
updatePreview(); |
|
864 |
} |
|
865 |
||
866 |
return; |
|
867 |
} |
|
868 |
||
869 |
// If map changed, update list selection |
|
870 |
if (mapList->currentIndex() != map) |
|
871 |
{ |
|
872 |
mapList->setCurrentIndex(map); |
|
873 |
mapList->scrollTo(map); |
|
874 |
} |
|
875 |
||
876 |
if (map.data(Qt::UserRole + 1).canConvert<MapModel::MapInfo>()) |
|
877 |
setMapInfo(map.data(Qt::UserRole + 1).value<MapModel::MapInfo>()); |
|
878 |
else |
|
879 |
Q_ASSERT(false); // Houston, we have a problem. |
|
880 |
||
881 |
} |
|
882 |
||
883 |
void HWMapContainer::setMapInfo(MapModel::MapInfo mapInfo) |
|
884 |
{ |
|
885 |
m_mapInfo = mapInfo; |
|
886 |
m_curMap = m_mapInfo.name; |
|
887 |
||
888 |
// the map has no pre-defined theme, so let's use the selected one |
|
889 |
if (m_mapInfo.theme.isEmpty()) |
|
890 |
{ |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
891 |
if (!selectedTheme.isEmpty()) |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
892 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
893 |
setTheme(selectedTheme); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
894 |
emit themeChanged(selectedTheme); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
895 |
} |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
896 |
} |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
897 |
else |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
898 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
899 |
setTheme(m_mapInfo.theme); |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
900 |
emit themeChanged(m_mapInfo.theme); |
8377 | 901 |
} |
902 |
||
903 |
lblDesc->setText(mapInfo.desc); |
|
904 |
||
905 |
updatePreview(); |
|
906 |
emit mapChanged(m_curMap); |
|
907 |
} |
|
908 |
||
909 |
void HWMapContainer::loadDrawing() |
|
910 |
{ |
|
911 |
QString fileName = QFileDialog::getOpenFileName(NULL, tr("Load drawn map"), ".", tr("Drawn Maps") + " (*.hwmap);;" + tr("All files") + " (*)"); |
|
912 |
||
913 |
if(fileName.isEmpty()) return; |
|
914 |
||
915 |
QFile f(fileName); |
|
916 |
||
917 |
if(!f.open(QIODevice::ReadOnly)) |
|
918 |
{ |
|
919 |
QMessageBox errorMsg(parentWidget()); |
|
920 |
errorMsg.setIcon(QMessageBox::Warning); |
|
921 |
errorMsg.setWindowTitle(QMessageBox::tr("File error")); |
|
922 |
errorMsg.setText(QMessageBox::tr("Cannot open '%1' for reading").arg(fileName)); |
|
923 |
errorMsg.setWindowModality(Qt::WindowModal); |
|
924 |
errorMsg.exec(); |
|
925 |
} |
|
926 |
else |
|
927 |
{ |
|
928 |
drawMapScene.decode(qUncompress(QByteArray::fromBase64(f.readAll()))); |
|
929 |
mapDrawingFinished(); |
|
930 |
} |
|
931 |
} |
|
932 |
||
933 |
void HWMapContainer::showSeedPrompt() |
|
934 |
{ |
|
935 |
SeedPrompt prompt(parentWidget()->parentWidget(), getCurrentSeed(), isMaster()); |
|
936 |
connect(&prompt, SIGNAL(seedSelected(const QString &)), this, SLOT(setNewSeed(const QString &))); |
|
937 |
prompt.exec(); |
|
938 |
} |
|
939 |
||
940 |
bool HWMapContainer::isMaster() |
|
941 |
{ |
|
942 |
return m_master; |
|
943 |
} |
|
944 |
||
945 |
void HWMapContainer::setMaster(bool master) |
|
946 |
{ |
|
8467 | 947 |
if (master == m_master) return; |
8377 | 948 |
m_master = master; |
8434 | 949 |
|
8377 | 950 |
foreach (QWidget *widget, m_childWidgets) |
951 |
widget->setEnabled(master); |
|
952 |
} |
|
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
953 |
|
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
954 |
void HWMapContainer::intSetIconlessTheme(const QString & name) |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
955 |
{ |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
956 |
if (name.isEmpty()) return; |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
957 |
|
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
958 |
m_theme = name; |
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
959 |
btnTheme->setIcon(QIcon()); |
8941 | 960 |
btnTheme->setText(tr("Theme: %1").arg(name)); |
8401
87410ae372f6
Server messages localization using Qt's l10n subsystem:
unc0rr
parents:
8393
diff
changeset
|
961 |
} |
9744 | 962 |
|
963 |
void HWMapContainer::setupMissionMapsView() |
|
964 |
{ |
|
965 |
if(m_missionsViewSetup) return; |
|
966 |
m_missionsViewSetup = true; |
|
967 |
||
968 |
m_missionMapModel->loadMaps(); |
|
969 |
missionMapList->setModel(m_missionMapModel); |
|
970 |
missionMapList->setEditTriggers(QAbstractItemView::NoEditTriggers); |
|
971 |
QItemSelectionModel * missionSelectionModel = missionMapList->selectionModel(); |
|
972 |
connect(missionSelectionModel, |
|
973 |
SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), |
|
974 |
this, |
|
975 |
SLOT(missionMapChanged(const QModelIndex &, const QModelIndex &))); |
|
976 |
missionSelectionModel->setCurrentIndex(m_missionMapModel->index(0, 0), QItemSelectionModel::Clear | QItemSelectionModel::SelectCurrent); |
|
977 |
} |
|
978 |
||
979 |
void HWMapContainer::setupStaticMapsView() |
|
980 |
{ |
|
981 |
if(m_staticViewSetup) return; |
|
982 |
m_staticViewSetup = true; |
|
983 |
||
984 |
m_staticMapModel->loadMaps(); |
|
985 |
staticMapList->setModel(m_staticMapModel); |
|
986 |
staticMapList->setEditTriggers(QAbstractItemView::NoEditTriggers); |
|
987 |
QItemSelectionModel * staticSelectionModel = staticMapList->selectionModel(); |
|
988 |
connect(staticSelectionModel, |
|
989 |
SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), |
|
990 |
this, |
|
991 |
SLOT(staticMapChanged(const QModelIndex &, const QModelIndex &))); |
|
992 |
staticSelectionModel->setCurrentIndex(m_staticMapModel->index(0, 0), QItemSelectionModel::Clear | QItemSelectionModel::SelectCurrent); |
|
993 |
} |