+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; y<BOARDSIZE; y++)
+ {
+ if (dx == 1)
+ {
+ uint8_t temp = level.board[BOARDSIZE - 1][y];
+
+ for(int x=BOARDSIZE-1; x>0; 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; x<BOARDSIZE; x++)
+ level.board[x][y] = level.board[x + 1][y];
+
+ level.board[BOARDSIZE - 1][y] = temp;
+ }
+ }
+ }
+ // Shift grid in the Y direction
+ else
+ {
+ for(int x=0; x<BOARDSIZE; x++)
+ {
+ if (dy == 1)
+ {
+ uint8_t temp = level.board[x][BOARDSIZE - 1];
+
+ for(int y=BOARDSIZE-1; y>0; 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<BOARDSIZE; y++)
+ level.board[x][y] = level.board[x][y + 1];
+
+ level.board[x][BOARDSIZE - 1] = temp;
+ }
+ }
+ }
+}
+
+