[IFT] Refactor lesson end API

IJ-CR-17369

GitOrigin-RevId: 9446ba0ad535fae4b5c491ca14a98e91d48845bc
This commit is contained in:
Alexey Merkulov
2021-11-12 19:24:23 +03:00
committed by intellij-monorepo-bot
parent 3bd74af1be
commit 4eda6f4062
11 changed files with 31 additions and 18 deletions

View File

@@ -31,6 +31,7 @@ import training.dsl.LessonUtil.restorePopupPosition
import training.learn.LearnBundle
import training.ui.IftTestContainerFixture
import training.ui.LearningUiUtil.findComponentWithTimeout
import training.util.LessonEndInfo
import java.awt.Component
import java.awt.Point
import java.awt.Rectangle
@@ -290,7 +291,7 @@ class GitAnnotateLesson : GitLesson("Git.Annotate", GitLessonsBundle.message("gi
}
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
restorePopupPosition(project, DiffWindowBase.DEFAULT_DIALOG_GROUP_KEY, backupDiffLocation)
backupDiffLocation = null
restorePopupPosition(project, ChangeListViewerDialog.DIMENSION_SERVICE_KEY, backupRevisionsLocation)

View File

@@ -41,6 +41,7 @@ import training.dsl.*
import training.dsl.LessonUtil.adjustPopupPosition
import training.dsl.LessonUtil.restorePopupPosition
import training.ui.LearningUiUtil.findComponentWithTimeout
import training.util.LessonEndInfo
import java.awt.Point
import java.awt.Rectangle
import javax.swing.JButton
@@ -286,7 +287,7 @@ class GitChangelistsAndShelveLesson : GitLesson("Git.ChangelistsAndShelf", GitLe
restoreCommitWindowStateInformer()
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
restorePopupPosition(project, CommitChangeListDialog.DIMENSION_SERVICE_KEY, backupShelveDialogLocation)
backupShelveDialogLocation = null
restorePopupPosition(project, ApplyPatchDifferentiatedDialog.DIMENSION_SERVICE_KEY, backupUnshelveDialogLocation)

View File

@@ -36,6 +36,7 @@ import training.dsl.LessonUtil.adjustPopupPosition
import training.dsl.LessonUtil.restorePopupPosition
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiUtil.findComponentWithTimeout
import training.util.LessonEndInfo
import java.awt.Component
import java.awt.Point
import java.awt.event.InputEvent
@@ -237,7 +238,7 @@ class GitInteractiveRebaseLesson : GitLesson("Git.InteractiveRebase", GitLessons
text(GitLessonsBundle.message("git.interactive.rebase.congratulations"))
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
restorePopupPosition(project, GIT_INTERACTIVE_REBASE_DIALOG_DIMENSION_KEY, backupRebaseDialogLocation)
backupRebaseDialogLocation = null
}

View File

@@ -31,6 +31,7 @@ import org.assertj.swing.fixture.JTableFixture
import training.dsl.*
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiUtil.findComponentWithTimeout
import training.util.LessonEndInfo
import java.util.regex.Pattern
class GitProjectHistoryLesson : GitLesson("Git.ProjectHistory", GitLessonsBundle.message("git.project.history.lesson.name")) {
@@ -211,7 +212,7 @@ class GitProjectHistoryLesson : GitLesson("Git.ProjectHistory", GitLessonsBundle
text(GitLessonsBundle.message("git.project.history.invitation.to.commit.lesson"))
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
if (showGitBranchesBackup != null) {
val logUiProperties = VcsProjectLog.getInstance(project).mainLogUi?.properties ?: error("Failed to get MainVcsLogUiProperties")
logUiProperties[SHOW_GIT_BRANCHES_LOG_PROPERTY] = showGitBranchesBackup!!

View File

@@ -47,6 +47,7 @@ import training.dsl.LessonUtil.adjustPopupPosition
import training.dsl.LessonUtil.sampleRestoreNotification
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiUtil.findComponentWithTimeout
import training.util.LessonEndInfo
import training.util.toNullableString
import java.awt.Point
import java.awt.Rectangle
@@ -334,7 +335,7 @@ class GitQuickStartLesson : GitLesson("Git.QuickStart", GitLessonsBundle.message
GitProjectUtil.createRemoteProject("origin", project)
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
LessonUtil.restorePopupPosition(project, SearchEverywhereManagerImpl.LOCATION_SETTINGS_KEY, backupSearchEverywhereLocation)
backupSearchEverywhereLocation = null
}

View File

@@ -13,6 +13,7 @@ import training.learn.lesson.LessonListener
import training.learn.lesson.LessonState
import training.learn.lesson.LessonStateManager
import training.statistic.LessonStartingWay
import training.util.LessonEndInfo
import training.util.filterUnseenLessons
import training.util.findLanguageByID
@@ -49,7 +50,7 @@ abstract class Lesson(@NonNls val id: String, @Nls val name: String) {
open val testScriptProperties: TaskTestContext.TestScriptProperties = TaskTestContext.TestScriptProperties()
open fun onLessonEnd(project: Project, lessonPassed: Boolean) = Unit
open fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) = Unit
fun addLessonListener(lessonListener: LessonListener) {
lessonListeners.add(lessonListener)
@@ -70,9 +71,9 @@ abstract class Lesson(@NonNls val id: String, @Nls val name: String) {
lessonListeners.forEach { it.lessonStarted(this, way) }
}
internal fun onStop(project: Project, lessonPassed: Boolean) {
internal fun onStop(project: Project, lessonPassed: Boolean, currentTaskIndex: Int, currentVisualIndex: Int) {
lessonListeners.forEach { it.lessonStopped(this) }
onLessonEnd(project, lessonPassed)
onLessonEnd(project, LessonEndInfo(lessonPassed, currentTaskIndex, currentVisualIndex))
}
internal fun pass() {

View File

@@ -80,7 +80,7 @@ class LessonManager {
private fun stopLesson(lessonPassed: Boolean) {
shownRestoreNotification = null
currentLessonExecutor?.takeIf { !it.hasBeenStopped }?.let {
it.lesson.onStop(it.project, lessonPassed)
it.lesson.onStop(it.project, lessonPassed, it.currentTaskIndex, it.currentVisualIndex)
it.stopLesson()
currentLessonExecutor = null
}

View File

@@ -47,6 +47,7 @@ import training.learn.lesson.LessonManager
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiHighlightingManager.HighlightingOptions
import training.ui.LearningUiUtil
import training.util.LessonEndInfo
import training.util.isToStringContains
import java.awt.Component
import java.awt.Point
@@ -272,8 +273,8 @@ class LocalHistoryLesson : KLesson("CodeAssistance.LocalHistory", LessonsBundle.
text(LessonsBundle.message("local.history.congratulations"))
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
if (!lessonPassed) return
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
if (!lessonEndInfo.lessonPassed) return
ApplicationManager.getApplication().executeOnPooledThread {
val editorComponent = LearningUiUtil.findComponentOrNull(project, EditorComponentImpl::class.java) { editor ->
UIUtil.getParentOfType(SingleHeightTabs::class.java, editor) != null

View File

@@ -18,6 +18,7 @@ import training.dsl.LessonUtil.restorePopupPosition
import training.learn.LessonsBundle
import training.learn.course.KLesson
import training.learn.course.LessonType
import training.util.LessonEndInfo
import training.util.isToStringContains
import java.awt.Point
import java.awt.event.KeyEvent
@@ -133,7 +134,7 @@ abstract class SearchEverywhereLesson : KLesson("Search everywhere", LessonsBund
epilogue()
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
restorePopupPosition(project, SearchEverywhereManagerImpl.LOCATION_SETTINGS_KEY, backupPopupLocation)
backupPopupLocation = null
}

View File

@@ -0,0 +1,8 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package training.util
data class LessonEndInfo(
val lessonPassed: Boolean,
val currentTaskIndex: Int,
val currentVisualIndex: Int,
)

View File

@@ -65,10 +65,7 @@ import training.learn.lesson.general.run.toggleBreakpointTask
import training.project.ProjectUtils
import training.ui.LearningUiHighlightingManager
import training.ui.LearningUiManager
import training.util.getActionById
import training.util.invokeActionForFocusContext
import training.util.isToStringContains
import training.util.learningToolWindow
import training.util.*
import java.awt.Point
import java.awt.Rectangle
import java.awt.event.KeyEvent
@@ -159,7 +156,7 @@ class PythonOnboardingTour :
}
}
override fun onLessonEnd(project: Project, lessonPassed: Boolean) {
override fun onLessonEnd(project: Project, lessonEndInfo: LessonEndInfo) {
restorePopupPosition(project, SearchEverywhereManagerImpl.LOCATION_SETTINGS_KEY, backupPopupLocation)
backupPopupLocation = null
@@ -167,7 +164,7 @@ class PythonOnboardingTour :
uiSettings.showNavigationBar = showNavigationBarPreference
uiSettings.fireUISettingsChanged()
if (!lessonPassed) return
if (!lessonEndInfo.lessonPassed) return
val dataContextPromise = DataManager.getInstance().dataContextFromFocusAsync
invokeLater {
val result = MessageDialogBuilder.yesNoCancel(PythonLessonsBundle.message("python.onboarding.finish.title"),