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
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
13 class ToggleDiffAligningModeAction : DumbAwareToggleAction() {
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)
21 e.presentation.isEnabledAndVisible = available
28 override fun getActionUpdateThread(): ActionUpdateThread {
29 return ActionUpdateThread.EDT
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
37 override fun setSelected(e: AnActionEvent, state: Boolean) {
38 val viewer = e.getData(DIFF_VIEWER) as SimpleDiffViewer
40 TextDiffViewerUtil.getTextSettings(viewer.context).isEnableAligningChangesMode = state