Fix EDU-726 Reuse edit dialog in hint popup view in course creator
authorValentina Kiryushkina <valentina.kiryushkina@jetbrains.com>
Mon, 8 Aug 2016 15:49:55 +0000 (18:49 +0300)
committerValentina Kiryushkina <valentina.kiryushkina@jetbrains.com>
Mon, 8 Aug 2016 16:13:57 +0000 (19:13 +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/CCEditAnswerPlaceholder.java
python/educational-core/student/src/com/jetbrains/edu/learning/ui/CCCreateAnswerPlaceholderDialog.java [moved from python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/ui/CCCreateAnswerPlaceholderDialog.java with 98% similarity]
python/educational-core/student/src/com/jetbrains/edu/learning/ui/CCCreateAnswerPlaceholderPanel.form [moved from python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/ui/CCCreateAnswerPlaceholderPanel.form with 98% similarity]
python/educational-core/student/src/com/jetbrains/edu/learning/ui/CCCreateAnswerPlaceholderPanel.java [moved from python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/ui/CCCreateAnswerPlaceholderPanel.java with 99% similarity]
python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyHint.kt

index 70e2f210eaaa8f892f1af37e4012e6bc2c9398e6..c6cfa9df1b21e185f7c39e8f9394b026231059d4 100644 (file)
@@ -14,13 +14,13 @@ import com.intellij.psi.PsiDocumentManager;
 import com.intellij.psi.PsiFile;
 import com.intellij.ui.JBColor;
 import com.intellij.util.DocumentUtil;
-import com.jetbrains.edu.coursecreator.ui.CCCreateAnswerPlaceholderDialog;
 import com.jetbrains.edu.learning.StudyUtils;
 import com.jetbrains.edu.learning.core.EduAnswerPlaceholderPainter;
 import com.jetbrains.edu.learning.core.EduNames;
 import com.jetbrains.edu.learning.core.EduUtils;
 import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
 import com.jetbrains.edu.learning.courseFormat.TaskFile;
+import com.jetbrains.edu.learning.ui.CCCreateAnswerPlaceholderDialog;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.List;
index 72a33a1e02613d37a20aedb33f072326daf55e6f..f524329ad4feba6e9cb91af0a3dbd7685af68397 100644 (file)
@@ -6,7 +6,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.psi.PsiDirectory;
 import com.intellij.psi.PsiFile;
 import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
-import com.jetbrains.edu.coursecreator.ui.CCCreateAnswerPlaceholderDialog;
+import com.jetbrains.edu.learning.ui.CCCreateAnswerPlaceholderDialog;
 import org.jetbrains.annotations.NotNull;
 
 public class CCEditAnswerPlaceholder extends CCAnswerPlaceholderAction {
similarity index 98%
rename from python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/ui/CCCreateAnswerPlaceholderPanel.form
rename to python/educational-core/student/src/com/jetbrains/edu/learning/ui/CCCreateAnswerPlaceholderPanel.form
index 738a4ed1379b839633550f51989cf5ede0c394dc..bf06cb993c463418a0a8dff975e7830c4d8a0a52 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.coursecreator.ui.CCCreateAnswerPlaceholderPanel">
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.learning.ui.CCCreateAnswerPlaceholderPanel">
   <grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
     <margin top="0" left="0" bottom="0" right="0"/>
     <constraints>
index 9dd7d85dbd7dacce0a5ee7f470c2ca87e2055693..150cebb945c04fb2f02178bc7911ce480286a219 100644 (file)
@@ -1,23 +1,18 @@
 package com.jetbrains.edu.learning.ui
 
 import com.intellij.icons.AllIcons
-import com.intellij.ide.browsers.WebBrowserManager
-import com.intellij.openapi.Disposable
-import com.intellij.openapi.actionSystem.*
-import com.intellij.openapi.application.ApplicationManager
-import com.intellij.openapi.editor.Document
-import com.intellij.openapi.editor.Editor
-import com.intellij.openapi.editor.EditorFactory
-import com.intellij.openapi.editor.ex.EditorEx
-import com.intellij.openapi.editor.ex.FocusChangeListener
+import com.intellij.openapi.actionSystem.AnAction
+import com.intellij.openapi.actionSystem.AnActionEvent
+import com.intellij.openapi.actionSystem.DefaultActionGroup
+import com.intellij.openapi.actionSystem.Separator
 import com.intellij.openapi.project.Project
-import com.intellij.openapi.util.Disposer
 import com.jetbrains.edu.learning.StudyTaskManager
 import com.jetbrains.edu.learning.StudyUtils
 import com.jetbrains.edu.learning.core.EduNames
 import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder
 
-class StudyHint(private val myPlaceholder: AnswerPlaceholder?, project: Project) {
+class StudyHint(private val myPlaceholder: AnswerPlaceholder?, 
+                project: Project) {
   
   companion object {
     private val OUR_WARNING_MESSAGE = "Put the caret in the answer placeholder to get hint"
@@ -55,7 +50,7 @@ class StudyHint(private val myPlaceholder: AnswerPlaceholder?, project: Project)
           }
         }
         else {
-          group.addAll(GoBackward(), GoForward(), Separator.getInstance(), EditHint(), AddHint(), RemoveHint())
+          group.addAll(GoBackward(), GoForward(), Separator.getInstance(), EditHint())
         }
         studyToolWindow.setActionToolbar(group)
         setHintText(hints)
@@ -96,59 +91,11 @@ class StudyHint(private val myPlaceholder: AnswerPlaceholder?, project: Project)
     }
   }
 
-  private inner class EditHint : ToggleAction("Edit Hint", "Edit Hint", AllIcons.Modules.Edit) {
-
-    private var currentDocument: Document? = null
-
-    override fun isSelected(e: AnActionEvent): Boolean {
-      e.project ?: return false
-      return isEditingMode
-    }
-
-    override fun setSelected(e: AnActionEvent, state: Boolean) {
-      val project = e.project ?: return
-      e.presentation.text = if (state) "Save Hint" else "Edit Hint"
-      doOnSelection(state, project)
-    }
-
-    fun doOnSelection(state: Boolean, project: Project) {
-      if (state) {
-        isEditingMode = true
-        val factory = EditorFactory.getInstance()
-        val initialText = if (myShownHintNumber < myPlaceholder!!.hints.size) myPlaceholder.hints[myShownHintNumber] else ""
-        currentDocument = factory.createDocument(initialText)
-        WebBrowserManager.getInstance().isShowBrowserHover = false
-        if (currentDocument != null) {
-          val createdEditor = factory.createEditor(currentDocument as Document, project) as EditorEx
-          Disposer.register(project, Disposable { factory.releaseEditor(createdEditor) })
-          val editorComponent = createdEditor.component
-          studyToolWindow.setTopComponent(editorComponent)
-          studyToolWindow.repaint()
-
-          createdEditor.addFocusListener(object: FocusChangeListener {
-            override fun focusGained(editor: Editor?) {
-              if (createdEditor.document.text == newHintDefaultText) {
-                ApplicationManager.getApplication().runWriteAction { createdEditor.document.setText("") }
-              }
-            }
-
-            override fun focusLost(editor: Editor?) {
-            }
-
-          })
-        }
-      }
-      else {
-        isEditingMode = false
-        if (myShownHintNumber < myPlaceholder!!.hints.size) {
-          myPlaceholder.setHintByIndex(myShownHintNumber, currentDocument!!.text)
-        }
-        else {
-          myPlaceholder.addHint(currentDocument!!.text)
-        }
-        setHintText(myPlaceholder.hints)
-        studyToolWindow.setDefaultTopComponent()
-      }
+  private inner class EditHint : AnAction("Edit Hint", "Edit Hint", AllIcons.Modules.Edit) {
+    
+    override fun actionPerformed(e: AnActionEvent?) {
+      val dialog = CCCreateAnswerPlaceholderDialog(e!!.project!!, myPlaceholder!!)
+      dialog.show()
     }
 
     override fun update(e: AnActionEvent) {