load jps libraries concurrently
[idea/community.git] / platform / diff-impl / src / com / intellij / diff / actions / impl / ToggleDiffAligningModeAction.kt
1 // 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.
2 package com.intellij.diff.actions.impl
3
4 import com.intellij.diff.tools.simple.SimpleDiffViewer
5 import com.intellij.diff.tools.util.DiffDataKeys.DIFF_VIEWER
6 import com.intellij.diff.tools.util.base.TextDiffViewerUtil
7 import com.intellij.diff.util.DiffUserDataKeys.ALIGNED_TWO_SIDED_DIFF
8 import com.intellij.diff.util.DiffUtil
9 import com.intellij.openapi.actionSystem.ActionUpdateThread
10 import com.intellij.openapi.actionSystem.AnActionEvent
11 import com.intellij.openapi.project.DumbAwareToggleAction
12
13 class ToggleDiffAligningModeAction : DumbAwareToggleAction() {
14
15   override fun update(e: AnActionEvent) {
16     val viewer = e.getData(DIFF_VIEWER)
17     val available = e.project != null
18                     && viewer is SimpleDiffViewer
19                     && !DiffUtil.isUserDataFlagSet(ALIGNED_TWO_SIDED_DIFF, viewer.request)
20     if (!available) {
21       e.presentation.isEnabledAndVisible = available
22       return
23     }
24
25     super.update(e)
26   }
27
28   override fun getActionUpdateThread(): ActionUpdateThread {
29     return ActionUpdateThread.EDT
30   }
31
32   override fun isSelected(e: AnActionEvent): Boolean {
33     val viewer = e.getData(DIFF_VIEWER) as? SimpleDiffViewer ?: return false
34     return TextDiffViewerUtil.getTextSettings(viewer.context).isEnableAligningChangesMode
35   }
36
37   override fun setSelected(e: AnActionEvent, state: Boolean) {
38     val viewer = e.getData(DIFF_VIEWER) as SimpleDiffViewer
39
40     TextDiffViewerUtil.getTextSettings(viewer.context).isEnableAligningChangesMode = state
41     viewer.rediff()
42   }
43 }