Skip to content

Commit 86130bb

Browse files
committed
Fixed bug where level gen times would be removed from the List View. Also fixed a Crash when deleting the last level in the List View. Right click menu will now only appear when right-clicking on an actual row and not just blank space.
1 parent 85bb80d commit 86130bb

File tree

3 files changed

+44
-18
lines changed

3 files changed

+44
-18
lines changed

SokoGenerator.pro.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 3.6.0, 2016-03-22T23:59:20. -->
3+
<!-- Written by QtCreator 3.6.0, 2016-03-23T15:01:14. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

mainwindow.cpp

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ void MainWindow::resetGUI(){
219219
ui->combo_Levels->setCurrentIndex(0);
220220
ui->combo_RoomH->setCurrentIndex(0);
221221
ui->combo_RoomW->setCurrentIndex(0);
222+
ui->spin_TimeLimit->setValue(0);
222223
timer.stop();
223224
ui->label_GenerationTime->setText("Current Generation Time: 00:00:00");
224225
display = true;
@@ -259,23 +260,48 @@ void MainWindow::on_actionSave_As_triggered()
259260

260261
void MainWindow::rightClickMenu(const QPoint &pos){
261262
QPoint PItem = ui->list_LevelSet->mapToGlobal(pos);
262-
QMenu submenu;
263-
submenu.addAction("Regenerate Level");
264-
submenu.addAction("Delete Level");
265-
QAction* rightClickItem = submenu.exec(PItem);
266-
if(rightClickItem && rightClickItem->text().contains("Delete Level")){
267-
QListWidgetItem* item = ui->list_LevelSet->takeItem(ui->list_LevelSet->indexAt(pos).row());
268-
Generator.deleteLevel(item->data(Qt::UserRole).toInt()+1);
269-
for(int i = 0; i < ui->list_LevelSet->count(); i++){
270-
ui->list_LevelSet->item(i)->setData(Qt::UserRole, i);
271-
ui->list_LevelSet->item(i)->setText("Level " + QString::number(i+1));
263+
if(ui->list_LevelSet->indexAt(pos).row() >= 0){
264+
QMenu submenu;
265+
submenu.addAction("Regenerate Level");
266+
submenu.addAction("Delete Level");
267+
QAction* rightClickItem = submenu.exec(PItem);
268+
269+
if(rightClickItem && rightClickItem->text().contains("Delete Level")){
270+
QListWidgetItem* item = ui->list_LevelSet->takeItem(ui->list_LevelSet->indexAt(pos).row());
271+
if(item != NULL){
272+
int levelNum = item->data(Qt::UserRole).toInt();
273+
Generator.deleteLevel(levelNum);
274+
vector<SokoGenerator::Level> levelSet = Generator.getLevels();
275+
for(int i = levelNum; i < ui->list_LevelSet->count(); i++){
276+
ui->list_LevelSet->item(i)->setData(Qt::UserRole, i);
277+
278+
int millis = levelSet[i].generationTime % 1000;
279+
int seconds = ((int)levelSet[i].generationTime / 1000) % 60 ;
280+
int minutes = ((int)levelSet[i].generationTime / (1000*60)) % 60;
281+
QString padMillis = QString("%1").arg(millis, 3, 10, QChar('0'));
282+
QString padSeconds = QString("%1").arg(seconds, 2, 10, QChar('0'));
283+
QString padMinutes = QString("%1").arg(minutes, 2, 10, QChar('0'));
284+
285+
ui->list_LevelSet->item(i)->setText("Level " + QString::number(i+1) + " - " + padMinutes + ":" + padSeconds + ":" + padMillis);
286+
}
287+
if(item->data(Qt::UserRole).toInt() == ui->list_LevelSet->count()){
288+
ui->list_LevelSet->setCurrentRow(ui->list_LevelSet->count()-1);
289+
}
290+
else{
291+
ui->list_LevelSet->setCurrentRow(item->data(Qt::UserRole).toInt());
292+
}
293+
294+
delete item;
295+
}
272296
}
273-
ui->list_LevelSet->setCurrentRow(item->data(Qt::UserRole).toInt());
274-
delete item;
275-
}
276-
else if(rightClickItem && rightClickItem->text().contains("Regenerate Level")){
277-
regenerateLevel(ui->list_LevelSet->indexAt(pos).row());
278-
displayLevel(ui->list_LevelSet->indexAt(pos).row());
297+
else if(rightClickItem && rightClickItem->text().contains("Regenerate Level")){
298+
int row = ui->list_LevelSet->indexAt(pos).row();
299+
if(row >= 0){
300+
regenerateLevel(row);
301+
displayLevel(row);
302+
}
303+
}
304+
279305
}
280306

281307
}

sokogenerator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class SokoGenerator : public QObject{
7777
bool neighbourCheck(SokoGenerator::Level &level, int yCoord, int xCoord);
7878
level LevelToCLevel(SokoGenerator::Level lvl);
7979

80-
void deleteLevel(int lvlNum){ levels.erase(levels.begin() + lvlNum-1); }
80+
void deleteLevel(int lvlNum){ levels.erase(levels.begin() + lvlNum); }
8181
bool isTimeout(clock_t start, float timeout);
8282

8383
private:

0 commit comments

Comments
 (0)