1) Remove hint migration because it works only for migration from v2 to v3 and doesn't work for v3EAP to v3
2) Keep string hint field to obtain compatibility between v2, v3EAP and v3
3) Create list of "additional" hints to support multihints.
4) Create api for getting all hints, it aggregates one hint and list of additional hints. It allows version supporting multihints to work with hints as if there's only one list
int offset = document.getLineStartOffset(line) + start;
addChildWithName(placeholder, OFFSET, offset);
addChildWithName(placeholder, "useLength", "false");
- addHints(placeholder);
}
}
}
import org.jdom.Attribute;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
-import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.lang.reflect.Type;
taskStatus = addStatus(outputter, placeholderTextToStatus, taskStatus, placeholder);
addOffset(document, placeholder);
addInitialState(document, placeholder);
- addHints(placeholder);
}
}
if (taskStatus != null) {
addChildWithName(placeholder, OFFSET, offset);
}
- public static void addHints(@NotNull Element placeholder) throws StudyUnrecognizedFormatException {
- Element element = getChildWithName(placeholder, HINT, true);
- if (element == null) {
- return;
- }
- final String hint = element.getAttribute(VALUE).getValue();
- Element listElement = new Element(LIST);
- final Element hintElement = new Element(OPTION);
- hintElement.setAttribute(VALUE, hint);
- listElement.setContent(hintElement);
- addChildWithName(placeholder, HINTS, listElement);
- }
-
public static int getAsInt(Element element, String name) throws StudyUnrecognizedFormatException {
return Integer.valueOf(getChildWithName(element, name).getAttributeValue(VALUE));
}
*/
public class AnswerPlaceholder {
+
+ @SerializedName("hint")
+ @Expose private String myHint = "";
@SerializedName("hints")
- @Expose private List<String> myHints = new ArrayList<String>();
+ @Expose private List<String> myAdditionalHints = new ArrayList<String>();
@SerializedName("possible_answer")
@Expose private String possibleAnswer = "";
}
@NotNull
- public List<String> getHints() {
- return myHints;
+ public List<String> getAdditionalHints() {
+ return myAdditionalHints;
}
- public void setHints(@Nullable final List<String> hints) {
- myHints = hints;
+ public void setAdditionalHints(@Nullable final List<String> additionalHints) {
+ myAdditionalHints = additionalHints;
}
public String getPossibleAnswer() {
myOffset = offset;
}
+ public String getHint() {
+ return myHint;
+ }
+
+ public void setHint(String hint) {
+ myHint = hint;
+ }
+
+ @Transient
+ public List<String> getHints() {
+ final ArrayList<String> result = new ArrayList<>();
+ result.add(myHint);
+ result.addAll(myAdditionalHints);
+ return result;
+ }
+
+ @Transient
+ public void setHints(@NotNull final List<String> hints) {
+ if (hints.isEmpty()) return;
+ myHint = hints.get(0);
+ myAdditionalHints = hints.subList(1, hints.size());
+ }
+
+ public void setHintByIndex(int i, @NotNull final String text) {
+ if (i == 0) {
+ myHint = text;
+ }
+ else {
+ myAdditionalHints.set(i - 1, text);
+ }
+ }
+
+ public void addHint(@NotNull final String text) {
+ if (myHint.isEmpty() && myAdditionalHints.isEmpty()) {
+ myHint = text;
+ }
+ else {
+ myAdditionalHints.add(text);
+ }
+ }
+
+ public void removeHint(int i) {
+ if (i == 0) {
+ myHint = "";
+ }
+ else {
+ myAdditionalHints.remove(i);
+ }
+ }
+
public static class MyInitialState {
private int length = -1;
private int offset = -1;
}
else {
isEditingMode = false
- myPlaceholder!!.hints[myShownHintNumber] = currentDocument!!.text
+ myPlaceholder!!.setHintByIndex(myShownHintNumber, currentDocument!!.text)
studyToolWindow.setText(myPlaceholder.hints[myShownHintNumber])
studyToolWindow.setDefaultTopComponent()
}
private inner class AddHint : AnAction("Add Hint", "Add Hint", AllIcons.General.Add) {
override fun actionPerformed(e: AnActionEvent) {
- myPlaceholder!!.hints.add(newHintDefaultText)
+ myPlaceholder!!.addHint(newHintDefaultText)
myShownHintNumber++
studyToolWindow.setText(newHintDefaultText)
}
private inner class RemoveHint : AnAction("Remove Hint", "Remove Hint", AllIcons.General.Remove) {
override fun actionPerformed(e: AnActionEvent) {
- myPlaceholder!!.hints.removeAt(myShownHintNumber)
+ myPlaceholder!!.removeHint(myShownHintNumber)
myShownHintNumber = if (myPlaceholder.hints.size == 1) 0 else if (myShownHintNumber + 1 < myPlaceholder.hints.size) myShownHintNumber + 1 else myShownHintNumber - 1
studyToolWindow.setText(myPlaceholder.hints[myShownHintNumber])
}