diff --git a/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt b/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt index a66eddc8fe00..5c659bbd999f 100644 --- a/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt +++ b/plugins/ide-features-trainer/src/training/dsl/LessonUtil.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.application.ApplicationNamesInfo import com.intellij.openapi.application.invokeLater import com.intellij.openapi.client.ClientSystemInfo import com.intellij.openapi.editor.Editor +import com.intellij.openapi.editor.EditorKind import com.intellij.openapi.editor.EditorModificationUtil import com.intellij.openapi.editor.LogicalPosition import com.intellij.openapi.editor.ex.EditorEx @@ -158,6 +159,14 @@ object LessonUtil { } } + fun TaskRuntimeContext.selectNeededItem(isTotalItem: (Any) -> Boolean): Boolean? { + return (previous.ui as? JList<*>)?.let { ui -> + if (!ui.isShowing) return false + val selectedIndex = ui.selectedIndex + selectedIndex != -1 && isTotalItem(ui.model.getElementAt(selectedIndex)) + } + } + fun TaskRuntimeContext.checkPositionOfEditor(sample: LessonSample, checkCaret: TaskRuntimeContext.(LessonSample) -> Boolean = { checkCaretValid(it) } ): TaskContext.RestoreNotification? { @@ -238,6 +247,10 @@ object LessonUtil { return UIUtil.getParentOfType(SearchEverywhereUI::class.java, focusOwner) != null } + fun isMainEditorComponent(component: Component?): Boolean { + return component is EditorComponentImpl && component.editor.editorKind == EditorKind.MAIN_EDITOR + } + fun findItem(ui: JList<*>, checkList: (item: Any) -> Boolean): Int? { for (i in 0 until ui.model.size) { val elementAt = ui.model.getElementAt(i) diff --git a/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt b/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt index acac117d52c5..91e03b38b99d 100644 --- a/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt +++ b/plugins/ide-features-trainer/src/training/dsl/TaskContext.kt @@ -59,7 +59,7 @@ abstract class TaskContext : LearningDslBase { * Delay may be needed to give pass condition take place. * It is a hack solution because of possible race conditions. * @param [checkByTimer] Check by timer may be useful in UI detection tasks (in submenus for example). - * @param [restoreRequired] returns true iff restore is needed + * @param [restoreRequired] returns true if restore is needed */ open fun restoreState(restoreId: TaskId? = null, delayMillis: Int = 0, checkByTimer: Int? = null, restoreRequired: TaskRuntimeContext.() -> Boolean) = Unit diff --git a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/LocalHistoryLesson.kt b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/LocalHistoryLesson.kt index c38102837e06..b8eb4d4c5e3e 100644 --- a/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/LocalHistoryLesson.kt +++ b/plugins/ide-features-trainer/src/training/learn/lesson/general/assistance/LocalHistoryLesson.kt @@ -15,7 +15,6 @@ import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.invokeAndWaitIfNeeded import com.intellij.openapi.application.invokeLater import com.intellij.openapi.editor.Editor -import com.intellij.openapi.editor.EditorKind import com.intellij.openapi.editor.EditorModificationUtil import com.intellij.openapi.editor.LogicalPosition import com.intellij.openapi.editor.ex.EditorEx @@ -33,6 +32,7 @@ import org.assertj.swing.fixture.JListFixture import org.jetbrains.annotations.Nls import training.FeaturesTrainerIcons import training.dsl.* +import training.dsl.LessonUtil.isMainEditorComponent import training.dsl.LessonUtil.restoreIfModifiedOrMoved import training.learn.LearnBundle import training.learn.LessonsBundle @@ -44,7 +44,6 @@ import training.ui.LearningUiHighlightingManager import training.ui.LearningUiHighlightingManager.HighlightingOptions import training.ui.LearningUiUtil import training.util.LessonEndInfo -import java.awt.Component import java.awt.Point import java.awt.Rectangle @@ -291,10 +290,6 @@ class LocalHistoryLesson( else null } - private fun isMainEditorComponent(component: Component?): Boolean { - return component is EditorComponentImpl && component.editor.editorKind == EditorKind.MAIN_EDITOR - } - // If message is null it will remove the existing hint and allow file modification private fun LessonContext.setEditorHint(@Nls message: String?) { prepareRuntimeTask {