void DeleteLine::execute(EditorModel& model) { row_ = model.cursorLine(); col_ = model.cursorColumn(); lines_ = model.lineCount(); deletedLine_ = model.line(row_); if (model.lineCount() == 1) { if (model.line(1) == "") { throw EditorException("Already Empty"); } else { model.line(1) = ""; model.setCursorHome(); } return; } model.deleteLine(); setCursorAfterDelete(model, col_); }
void CursorEnd::execute(EditorModel& model){ // Set old column position to be current position oldCursorColumnPosition = model.cursorColumn(); const std::string& currentString = model.line(model.cursorLine()); // Move cursor to the end of the line model.setCursorColumn(currentString.length()+1); }
void DeleteLine::execute(EditorModel& model) { backup_line = model.cursorLine(); backup_column = model.cursorColumn(); model.deleteLine(); backup_text = model.getBackupText(); }
void InsertChar::execute(EditorModel& model) { RightCtrl right; int insertCol = model.cursorColumn() - 1; std::string& temp = model.line(model.cursorLine()); temp = temp.substr(0, insertCol) + character + temp.substr(insertCol); right.execute(model); }
void RightCtrl::execute(EditorModel& model) { int max = model.line(model.cursorLine()).size(); if (model.cursorColumn() <= max) { model.moveCursorRight(); } else if (model.cursorColumn() == max + 1) { if (model.cursorLine() != model.lineCount()) { model.moveCursorDown(); model.setCursorHome(); } else { throw EditorException("Already at end"); } } }
void DeleteLine::execute(EditorModel& model){ // Obtain previous values of pre-deletion for line oldString = model.line(model.cursorLine()); lineNumber = model.cursorLine(); cursorPos = model.cursorColumn(); lineCount = model.lineCount(); // Throw error if text is empty if (lineNumber == firstLine && model.line(lineNumber) == emptyString && model.lineCount() == 1){ model.setErrorMessage( deleteLineError.getReason() ); throw deleteLineError; } // Empty the first line if that is the only line in the text (there should be at least one line in the text) if (model.lineCount() == firstLine){ model.setLineString(firstLine, emptyString); model.setCursorColumn(1); } // Delete the line and move the curser up if you are at the end of the page else{ // Set boolean variables for cursor line placement const bool atBeginningOfPage = model.cursorAtBeginningOfPage(); const bool atEndOfPage = model.cursorAtEndOfPage(); const bool previousColumnPlacementTooFar = model.cursorColumn() > model.line(model.cursorLine()).length(); // Only initialize this boolean if you are not at the end of the page const bool nextColumnPlacementTooFar = !atEndOfPage ? model.cursorColumn() > model.line(model.cursorLine()+1).length() : false; // Deletes current line from text model.deleteLine(model.cursorLine()); // Move cursor up if at the end of the page if (atEndOfPage){ CursorUp c; c.execute(model); } // Fix cursor column placement if cursor is at the beginning of text, else if (atBeginningOfPage && previousColumnPlacementTooFar){ model.setCursorColumn(model.line(model.cursorLine()).length()+1); } else if (nextColumnPlacementTooFar){ model.setCursorColumn(model.line(model.cursorLine()).length()+1); } // Decrement the current line count model.decrementLineCount(); } }