Calculator editor
This commit is contained in:
@@ -537,10 +537,8 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
public void eraseButtonClickHandler(@NotNull View v) {
|
||||
calculatorModel.doTextOperation(new CalculatorModel.TextOperation() {
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
if (editor.getSelectionStart() > 0) {
|
||||
editor.getText().delete(editor.getSelectionStart() - 1, editor.getSelectionStart());
|
||||
}
|
||||
public void doOperation(@NotNull CalculatorEditor editor) {
|
||||
editor.erase();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -564,10 +562,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
public void pasteButtonClickHandler(@NotNull View v) {
|
||||
calculatorModel.doTextOperation(new CalculatorModel.TextOperation() {
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
public void doOperation(@NotNull CalculatorEditor editor) {
|
||||
final ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
|
||||
if (clipboard.hasText()) {
|
||||
editor.getText().insert(editor.getSelectionStart(), clipboard.getText());
|
||||
editor.insert(String.valueOf(clipboard.getText()));
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -754,15 +752,18 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
if ( dragDirection == DragDirection.left ) {
|
||||
CalculatorModel.instance.doTextOperation(new CalculatorModel.TextOperation() {
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
final int cursorPosition = editor.getSelectionStart();
|
||||
final StringBuilder text = new StringBuilder("(");
|
||||
final String oldText = editor.getText().toString();
|
||||
text.append(oldText.substring(0, cursorPosition));
|
||||
text.append(")");
|
||||
text.append(oldText.substring(cursorPosition));
|
||||
editor.setText(text);
|
||||
editor.setSelection(cursorPosition + 2);
|
||||
public void doOperation(@NotNull CalculatorEditor editor) {
|
||||
CalculatorEditorViewState viewState = editor.getViewState();
|
||||
|
||||
final int cursorPosition = viewState.getSelection();
|
||||
final String oldText = viewState.getText();
|
||||
|
||||
final StringBuilder newText = new StringBuilder(oldText.length() + 2);
|
||||
newText.append("(");
|
||||
newText.append(oldText.substring(0, cursorPosition));
|
||||
newText.append(")");
|
||||
newText.append(oldText.substring(cursorPosition));
|
||||
editor.setText(newText.toString(), cursorPosition + 2);
|
||||
}
|
||||
});
|
||||
result = true;
|
||||
|
@@ -14,7 +14,6 @@ import android.text.ClipboardManager;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -37,7 +36,7 @@ import org.solovyev.common.text.StringUtils;
|
||||
* Date: 9/12/11
|
||||
* Time: 11:15 PM
|
||||
*/
|
||||
public enum CalculatorModel implements HistoryControl<CalculatorHistoryState>, CalculatorEngineControl {
|
||||
public enum CalculatorModel implements HistoryControl<CalculatorHistoryState>, CalculatorEngineControl, CursorControl {
|
||||
|
||||
instance;
|
||||
|
||||
@@ -271,7 +270,7 @@ public enum CalculatorModel implements HistoryControl<CalculatorHistoryState>, C
|
||||
doTextOperation(new CalculatorModel.TextOperation() {
|
||||
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
public void doOperation(@NotNull CalculatorEditor editor) {
|
||||
int cursorPositionOffset = 0;
|
||||
final StringBuilder textToBeInserted = new StringBuilder(text);
|
||||
|
||||
@@ -296,16 +295,36 @@ public enum CalculatorModel implements HistoryControl<CalculatorHistoryState>, C
|
||||
}
|
||||
}
|
||||
|
||||
editor.getText().insert(editor.getSelectionStart(), textToBeInserted.toString());
|
||||
editor.setSelection(editor.getSelectionStart() + cursorPositionOffset, editor.getSelectionEnd() + cursorPositionOffset);
|
||||
editor.insert(textToBeInserted.toString());
|
||||
editor.moveSelection(cursorPositionOffset);
|
||||
}
|
||||
}, delayEvaluate);
|
||||
}
|
||||
}
|
||||
|
||||
public static interface TextOperation {
|
||||
@Override
|
||||
public void setCursorOnStart() {
|
||||
this.editor.setCursorOnStart();
|
||||
}
|
||||
|
||||
void doOperation(@NotNull EditText editor);
|
||||
@Override
|
||||
public void setCursorOnEnd() {
|
||||
this.editor.setCursorOnEnd();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveCursorLeft() {
|
||||
this.editor.moveCursorLeft();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveCursorRight() {
|
||||
this.editor.moveCursorRight();
|
||||
}
|
||||
|
||||
public static interface TextOperation {
|
||||
|
||||
void doOperation(@NotNull CalculatorEditor editor);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -14,12 +14,13 @@ import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ListView;
|
||||
import com.google.ads.AdView;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.solovyev.android.ads.AdsController;
|
||||
import org.solovyev.android.calculator.CalculatorEditor;
|
||||
import org.solovyev.android.calculator.CalculatorLocatorImpl;
|
||||
import org.solovyev.android.calculator.CalculatorModel;
|
||||
import org.solovyev.android.calculator.R;
|
||||
import org.solovyev.android.calculator.jscl.JsclOperation;
|
||||
@@ -175,19 +176,8 @@ public abstract class AbstractHistoryActivity extends ListActivity {
|
||||
}
|
||||
|
||||
public static void useHistoryItem(@NotNull final CalculatorHistoryState historyState, @NotNull AbstractHistoryActivity activity) {
|
||||
|
||||
// before evaluating history item - clear display (in order to get Error message in display if evaluation fail)
|
||||
CalculatorModel.instance.getDisplay().setText("");
|
||||
CalculatorModel.instance.doTextOperation(new CalculatorModel.TextOperation() {
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
final EditorHistoryState editorState = historyState.getEditorState();
|
||||
editor.setText(editorState.getText());
|
||||
editor.setSelection(editorState.getCursorPosition());
|
||||
}
|
||||
}, false, historyState.getDisplayState().getJsclOperation(), true);
|
||||
|
||||
CalculatorModel.instance.setCursorOnEnd();
|
||||
final EditorHistoryState editorState = historyState.getEditorState();
|
||||
CalculatorLocatorImpl.getInstance().getCalculatorEditor().setText(StringUtils.getNotEmpty(editorState.getText(), ""), editorState.getCursorPosition())
|
||||
|
||||
activity.finish();
|
||||
}
|
||||
|
Reference in New Issue
Block a user