X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Feditorwidget.cpp;fp=src%2Feditorwidget.cpp;h=1431edc243c3db38397d694558e28d24f0d4f356;hb=195a185d42504cbface8c29911467ce8cff27229;hp=0c6ab283239781c0c5f3966281a3326c179cdcae;hpb=058aca46f433b3a36a341ca7272c39d2bef55c09;p=warehouse-man-deluxe diff --git a/src/editorwidget.cpp b/src/editorwidget.cpp index 0c6ab28..1431edc 100644 --- a/src/editorwidget.cpp +++ b/src/editorwidget.cpp @@ -178,40 +178,60 @@ void EditorWidget::keyPressEvent(QKeyEvent * event) if (key == Qt::Key_Up) { - if (cursor.y > 0) - cursor.y--; + if (event->modifiers() == Qt::ShiftModifier) + ShiftLevel(0, -1); + else + { + if (cursor.y > 0) + cursor.y--; - if (((cursor.y - corner.y) == 0) && (corner.y > -1)) - corner.y--; + if (((cursor.y - corner.y) == 0) && (corner.y > -1)) + corner.y--; + } } else if (key == Qt::Key_Down) { - if (cursor.y < (BOARDSIZE - 1)) - cursor.y++; - - if (cursor.y >= (range.y + corner.y - 1)) + if (event->modifiers() == Qt::ShiftModifier) + ShiftLevel(0, +1); + else { - if (corner.y < (BOARDSIZE - range.y)) - corner.y++; + if (cursor.y < (BOARDSIZE - 1)) + cursor.y++; + + if (cursor.y >= (range.y + corner.y - 1)) + { + if (corner.y < (BOARDSIZE - range.y)) + corner.y++; + } } } else if (key == Qt::Key_Left) { - if (cursor.x > 0) - cursor.x--; + if (event->modifiers() == Qt::ShiftModifier) + ShiftLevel(-1, 0); + else + { + if (cursor.x > 0) + cursor.x--; - if (((cursor.x - corner.x) == 0) && (corner.x > -1)) - corner.x--; + if (((cursor.x - corner.x) == 0) && (corner.x > -1)) + corner.x--; + } } else if (key == Qt::Key_Right) { - if (cursor.x < (BOARDSIZE - 1)) - cursor.x++; - - if (cursor.x >= (range.x + corner.x - 1)) + if (event->modifiers() == Qt::ShiftModifier) + ShiftLevel(+1, 0); + else { - if (corner.x < (BOARDSIZE - range.x)) - corner.x++; + if (cursor.x < (BOARDSIZE - 1)) + cursor.x++; + + if (cursor.x >= (range.x + corner.x - 1)) + { + if (corner.x < (BOARDSIZE - range.x)) + corner.x++; + } } } else if (key == Qt::Key_Period) @@ -421,6 +441,74 @@ void EditorWidget::SetNameOnCurrentLevel(const char * newName) } +void EditorWidget::AddNewLevelAtCurrentPosition(void) +{ + Level l; + memset(&l, 0, sizeof(l)); + l.corner.x = l.corner.y = -1; + + levelStorage.insert(levelStorage.begin() + currentLevel, l); +} + + +// Note: Only one parameter can be non-zero if you want expected behavior! +void EditorWidget::ShiftLevel(int dx, int dy) +{ + Level & level = levelStorage[currentLevel]; + + // Shift grid in the X direction + if (dy == 0) + { + for(int y=0; y0; x--) + level.board[x][y] = level.board[x - 1][y]; + + level.board[0][y] = temp; + } + else + { + uint8_t temp = level.board[0][y]; + + for(int x=0; x0; y--) + level.board[x][y] = level.board[x][y - 1]; + + level.board[x][0] = temp; + } + else + { + uint8_t temp = level.board[x][0]; + + for(int y=0; y