EDU-658 Create placeholder without selection
authorLiana Bakradze <liana.bakradze@jetbrains.com>
Wed, 29 Jun 2016 14:01:42 +0000 (17:01 +0300)
committerLiana Bakradze <liana.bakradze@jetbrains.com>
Wed, 29 Jun 2016 14:01:42 +0000 (17:01 +0300)
python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCAddAnswerPlaceholder.java
python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCDeleteAllAnswerPlaceholdersAction.java
python/educational-core/student/src/com/jetbrains/edu/learning/core/EduNames.java

index 2ad1d79faf1fb5776b10d5163992b878dbf8a6ee..7de216ebcd345efc6a8442008ad1b4a3c61e744b 100644 (file)
@@ -54,14 +54,13 @@ public class CCAddAnswerPlaceholder extends CCAnswerPlaceholderAction {
     }
 
     final SelectionModel model = editor.getSelectionModel();
-    final int offset = model.getSelectionStart();
+    final int offset = model.hasSelection() ? model.getSelectionStart() : editor.getCaretModel().getOffset();
     final AnswerPlaceholder answerPlaceholder = new AnswerPlaceholder();
 
     answerPlaceholder.setOffset(offset);
     answerPlaceholder.setUseLength(false);
 
-    String selectedText = model.getSelectedText();
-    answerPlaceholder.setPossibleAnswer(selectedText);
+    answerPlaceholder.setPossibleAnswer(model.hasSelection() ? model.getSelectedText() : EduNames.PLACEHOLDER);
 
     CCCreateAnswerPlaceholderDialog dlg = new CCCreateAnswerPlaceholderDialog(project, answerPlaceholder);
     dlg.show();
@@ -69,6 +68,10 @@ public class CCAddAnswerPlaceholder extends CCAnswerPlaceholderAction {
       return;
     }
 
+    if (!model.hasSelection()) {
+      DocumentUtil.writeInRunUndoTransparentAction(() -> document.insertString(offset, EduNames.PLACEHOLDER));
+    }
+
     TaskFile taskFile = state.getTaskFile();
     int index = taskFile.getAnswerPlaceholders().size() + 1;
     answerPlaceholder.setIndex(index);
@@ -147,7 +150,7 @@ public class CCAddAnswerPlaceholder extends CCAnswerPlaceholderAction {
     presentation.setVisible(true);
     if (canAddPlaceholder(state) || canDeletePlaceholder(state)) {
       presentation.setEnabled(true);
-      presentation.setText((state.getAnswerPlaceholder() == null ? "Add " : "Delete ") + EduNames.PLACEHOLDER);
+      presentation.setText((state.getAnswerPlaceholder() == null ? "Add " : "Delete ") + EduNames.ANSWER_PLACEHOLDER);
     }
   }
 
@@ -155,12 +158,13 @@ public class CCAddAnswerPlaceholder extends CCAnswerPlaceholderAction {
   private static boolean canAddPlaceholder(@NotNull CCState state) {
     Editor editor = state.getEditor();
     SelectionModel selectionModel = editor.getSelectionModel();
-    if (!selectionModel.hasSelection()) {
-      return false;
+    if (selectionModel.hasSelection()) {
+      int start = selectionModel.getSelectionStart();
+      int end = selectionModel.getSelectionEnd();
+      return !arePlaceholdersIntersect(state.getTaskFile(), start, end);
     }
-    int start = selectionModel.getSelectionStart();
-    int end = selectionModel.getSelectionEnd();
-    return !arePlaceholdersIntersect(state.getTaskFile(), start, end);
+    int offset = editor.getCaretModel().getOffset();
+    return state.getTaskFile().getAnswerPlaceholder(offset) == null;
   }
 
   private static boolean canDeletePlaceholder(@NotNull CCState state) {
index 7c10fba712b4c2c0c31b873677d81e3b35e2c7e3..d5ca9e5b883884f418a05d3657635ec291dad0f5 100644 (file)
@@ -28,7 +28,7 @@ import java.util.List;
 
 public class CCDeleteAllAnswerPlaceholdersAction extends DumbAwareAction {
 
-  public static final String ACTION_NAME = "Delete All " + EduNames.PLACEHOLDER + "s";
+  public static final String ACTION_NAME = "Delete All " + EduNames.ANSWER_PLACEHOLDER + "s";
 
   public CCDeleteAllAnswerPlaceholdersAction() {
     super(ACTION_NAME);
index 33dddd6a6a1904aea7542fd9a758f0edd91cc0c9..48fb4c23ef4aafda7603aba669d1169daee0b1ce 100644 (file)
@@ -46,7 +46,8 @@ public class EduNames {
   public static final String STUDY = "Study";
   public static final String ADAPTIVE = "Adaptive";
 
-  public static final String PLACEHOLDER = "Answer Placeholder";
+  public static final String ANSWER_PLACEHOLDER = "Answer Placeholder";
+  public static final String PLACEHOLDER = "placeholder";
   public static final String SRC = "src";
   private EduNames() {
   }