// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.collide.client.editor; import com.google.collide.client.editor.input.CommonActions; import com.google.collide.client.editor.input.DefaultActionExecutor; import com.google.collide.client.editor.input.InputScheme; import com.google.collide.client.editor.input.Shortcut; import com.google.collide.client.editor.selection.SelectionModel; import com.google.collide.shared.document.Line; import com.google.collide.shared.document.LineInfo; import com.google.collide.shared.document.Position; import com.google.collide.shared.document.util.LineUtils; import org.waveprotocol.wave.client.common.util.SignalEvent; /** * Implementation of some common textual actions. */ public class TextActions extends DefaultActionExecutor { public static final TextActions INSTANCE = new TextActions(); private TextActions() { addAction(CommonActions.SPLIT_LINE, new Shortcut(){ @Override public boolean event(InputScheme scheme, SignalEvent event) { splitLine(scheme.getInputController().getEditor()); return true; } }); addAction(CommonActions.START_NEW_LINE, new Shortcut(){ @Override public boolean event(InputScheme scheme, SignalEvent event) { startNewLine(scheme.getInputController().getEditor()); return true; } }); } private void startNewLine(Editor editor) { SelectionModel selection = editor.getSelection(); selection.deselect(); Line line = selection.getCursorLine(); int lineNumber = selection.getCursorLineNumber(); int lastCursorColumn = LineUtils.getLastCursorColumn(line); selection.setCursorPosition(new LineInfo(line, lineNumber), lastCursorColumn); editor.getEditorDocumentMutator().insertText(line, lineNumber, lastCursorColumn, "\n"); } private void splitLine(Editor editor) { // TODO: Add language specific logic (i.e. string splitting). SelectionModel selection = editor.getSelection(); Position[] selectionRange = selection.getSelectionRange(false); Position cursor = selectionRange[0]; editor.getEditorDocumentMutator().insertText(cursor.getLine(), cursor.getLineNumber(), cursor.getColumn(), "\n", true); selection.setCursorPosition(cursor.getLineInfo(), cursor.getColumn()); } }