mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
IJPL-165414: vcs marker: Move "Highlight words" action form toolbar to the context menu
Add "Copy" as well to the context menu (cherry picked from commit 7a64bba4ba719d3a5a45e9ca51ecf27ca8ed9bd0) IJ-CR-149651 GitOrigin-RevId: 4dac3794ff4e2716cfdf5fed1fbc6b5cd1c1550f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
90ee4cefd1
commit
633ffa3474
@@ -147,12 +147,13 @@ object LineStatusMarkerPopupActions {
|
||||
}
|
||||
|
||||
@ApiStatus.NonExtendable
|
||||
open class ToggleByWordDiffAction(private val editor: Editor,
|
||||
private val tracker: LineStatusTrackerI<*>,
|
||||
private val range: Range,
|
||||
private val mousePosition: Point?,
|
||||
private val controller: LineStatusMarkerRendererWithPopupController)
|
||||
: ToggleAction(DiffBundle.message("highlight.words"), null, AllIcons.Actions.Highlighting), DumbAware, LightEditCompatible {
|
||||
open class ToggleByWordDiffAction(
|
||||
private val editor: Editor,
|
||||
private val tracker: LineStatusMarkerRangesSource<*>,
|
||||
private val range: Range,
|
||||
private val mousePosition: Point?,
|
||||
private val controller: LineStatusMarkerRendererWithPopupController,
|
||||
) : ToggleAction(DiffBundle.message("highlight.words"), null, AllIcons.Actions.Highlighting), DumbAware, LightEditCompatible {
|
||||
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT
|
||||
|
||||
|
||||
@@ -6,9 +6,14 @@ import com.intellij.diff.comparison.ByWord
|
||||
import com.intellij.diff.comparison.ComparisonPolicy
|
||||
import com.intellij.diff.util.DiffUtil
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.ActionGroup
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.openapi.editor.Document
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.editor.event.EditorMouseEvent
|
||||
import com.intellij.openapi.editor.impl.ContextMenuPopupHandler
|
||||
import com.intellij.openapi.editor.impl.EditorImpl
|
||||
import com.intellij.openapi.editor.markup.MarkupEditorFilter
|
||||
import com.intellij.openapi.fileTypes.FileType
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType
|
||||
@@ -32,7 +37,7 @@ abstract class LineStatusTrackerMarkerRenderer(
|
||||
popupDisposable: Disposable): LineStatusMarkerPopupPanel {
|
||||
var editorComponent: JComponent? = null
|
||||
if (range.hasVcsLines()) {
|
||||
editorComponent = createVcsContentComponent(range, editor, popupDisposable)
|
||||
editorComponent = createVcsContentComponent(range, editor, mousePosition, popupDisposable)
|
||||
}
|
||||
val actions = createToolbarActions(editor, range, mousePosition) +
|
||||
createAdditionalToolbarActions(editor, range, mousePosition, popupDisposable)
|
||||
@@ -41,18 +46,28 @@ abstract class LineStatusTrackerMarkerRenderer(
|
||||
return LineStatusMarkerPopupPanel.create(editor, toolbar, editorComponent, additionalInfoPanel)
|
||||
}
|
||||
|
||||
private fun createVcsContentComponent(range: Range, editor: Editor, disposable: Disposable): JComponent {
|
||||
private fun createVcsContentComponent(range: Range, editor: Editor, mousePosition: Point?, disposable: Disposable): JComponent {
|
||||
val vcsRange = DiffUtil.getLinesRange(vcsDocument, range.vcsLine1, range.vcsLine2)
|
||||
val vcsContent = DiffUtil.getLinesContent(vcsDocument, range.vcsLine1, range.vcsLine2).toString()
|
||||
val textField = LineStatusMarkerPopupPanel.createTextField(editor, vcsContent)
|
||||
LineStatusMarkerPopupPanel.installBaseEditorSyntaxHighlighters(project, textField, vcsDocument, vcsRange,
|
||||
fileType ?: PlainTextFileType.INSTANCE)
|
||||
installWordDiff(editor, textField, range, disposable)
|
||||
textField.addSettingsProvider { uEditor ->
|
||||
uEditor as? EditorImpl ?: return@addSettingsProvider
|
||||
val contextMenuActions = createEditorContextMenuActions(editor, range, mousePosition)
|
||||
if (contextMenuActions.isNotEmpty()) {
|
||||
uEditor.installPopupHandler(object : ContextMenuPopupHandler() {
|
||||
override fun getActionGroup(event: EditorMouseEvent): ActionGroup = DefaultActionGroup(contextMenuActions)
|
||||
})
|
||||
}
|
||||
}
|
||||
return LineStatusMarkerPopupPanel.createEditorComponent(editor, textField)
|
||||
}
|
||||
|
||||
protected open fun createToolbarActions(editor: Editor, range: Range, mousePosition: Point?): List<AnAction> = emptyList()
|
||||
protected open fun createAdditionalToolbarActions(editor: Editor, range: Range, mousePosition: Point?, popupDisposable: Disposable): List<AnAction> = emptyList()
|
||||
protected open fun createEditorContextMenuActions(editor: Editor, range: Range, mousePosition: Point?): List<AnAction> = emptyList()
|
||||
|
||||
protected open fun createAdditionalInfoPanel(editor: Editor,
|
||||
range: Range,
|
||||
|
||||
@@ -9,6 +9,8 @@ import com.intellij.ide.lightEdit.LightEditCompatible
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.openapi.actionSystem.KeepPopupOnPerform
|
||||
import com.intellij.openapi.actionSystem.Separator
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.editor.Document
|
||||
@@ -155,10 +157,17 @@ abstract class LocalLineStatusTrackerImpl<R : Range>(
|
||||
actions.add(RollbackLineStatusRangeAction(editor, range))
|
||||
actions.add(LineStatusMarkerPopupActions.ShowLineStatusRangeDiffAction(editor, tracker, range))
|
||||
actions.add(LineStatusMarkerPopupActions.CopyLineStatusRangeAction(editor, tracker, range))
|
||||
actions.add(LineStatusMarkerPopupActions.ToggleByWordDiffAction(editor, tracker, range, mousePosition, this))
|
||||
return actions
|
||||
}
|
||||
|
||||
override fun createEditorContextMenuActions(editor: Editor, range: Range, mousePosition: Point?): List<AnAction> = listOf(
|
||||
LineStatusMarkerPopupActions.CopyLineStatusRangeAction(editor, tracker, range),
|
||||
Separator.getInstance(),
|
||||
LineStatusMarkerPopupActions.ToggleByWordDiffAction(editor, tracker, range, mousePosition, this).apply {
|
||||
templatePresentation.keepPopupOnPerform = KeepPopupOnPerform.Never
|
||||
},
|
||||
)
|
||||
|
||||
override fun createAdditionalInfoPanel(editor: Editor, range: Range, mousePosition: Point?, disposable: Disposable): JComponent? {
|
||||
val clientIds = (range as? LstLocalRange)?.clientIds ?: return null
|
||||
return createClientIdGutterPopupPanel(tracker.project, clientIds)
|
||||
|
||||
@@ -14,10 +14,7 @@ import com.intellij.diff.util.DiffDrawUtil.InlineHighlighterBuilder
|
||||
import com.intellij.diff.util.DiffDrawUtil.LineHighlighterBuilder
|
||||
import com.intellij.ide.lightEdit.LightEditCompatible
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.diff.DiffBundle
|
||||
import com.intellij.openapi.diff.LineStatusMarkerColorScheme
|
||||
@@ -792,10 +789,17 @@ class GitStageLineStatusTracker(
|
||||
actions.add(RollbackLineStatusRangeAction(editor, range))
|
||||
actions.add(StageShowDiffAction(editor, range))
|
||||
actions.add(LineStatusMarkerPopupActions.CopyLineStatusRangeAction(editor, tracker, range))
|
||||
actions.add(LineStatusMarkerPopupActions.ToggleByWordDiffAction(editor, tracker, range, mousePosition, this))
|
||||
return actions
|
||||
}
|
||||
|
||||
override fun createEditorContextMenuActions(editor: Editor, range: Range, mousePosition: Point?): List<AnAction> = listOf(
|
||||
LineStatusMarkerPopupActions.CopyLineStatusRangeAction(editor, tracker, range),
|
||||
Separator.getInstance(),
|
||||
LineStatusMarkerPopupActions.ToggleByWordDiffAction(editor, tracker, range, mousePosition, this).apply {
|
||||
templatePresentation.keepPopupOnPerform = KeepPopupOnPerform.Never
|
||||
},
|
||||
)
|
||||
|
||||
override fun toString(): String = "GitStageLineStatusTracker.MyLineStatusMarkerPopupRenderer(tracker=$tracker)"
|
||||
|
||||
private inner class RollbackLineStatusRangeAction(editor: Editor, range: Range)
|
||||
|
||||
Reference in New Issue
Block a user