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"
}
}
else {
- group.addAll(GoBackward(), GoForward(), Separator.getInstance(), EditHint(), AddHint(), RemoveHint())
+ group.addAll(GoBackward(), GoForward(), Separator.getInstance(), EditHint())
}
studyToolWindow.setActionToolbar(group)
setHintText(hints)
}
}
- 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) {