From cc596a270b9f35c48d23ad017a2d0a9dee0ec2d3 Mon Sep 17 00:00:00 2001 From: Ivan Shershnev Date: Mon, 10 Nov 2025 15:40:58 +0100 Subject: [PATCH] [DBE] DBE-24448 DBE-23942 Fix action context for value editor (cherry picked from commit c5c7ec2466755190f237aee5f73dce12da5c8433) (approved in IJ-CR-184414) GitOrigin-RevId: f2aa31d4630eb21a04d78a22d0f6c036862387dc --- grid/impl/resources/intellij.grid.impl.xml | 4 +++ grid/impl/src/run/ui/EditorCellViewer.kt | 3 ++ grid/impl/src/run/ui/TableResultPanel.java | 3 -- .../src/run/ui/TableResultPanelUIDataRule.kt | 35 +++++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 grid/impl/src/run/ui/TableResultPanelUIDataRule.kt diff --git a/grid/impl/resources/intellij.grid.impl.xml b/grid/impl/resources/intellij.grid.impl.xml index 0e7daa3b9a61..56ff0cbb98bd 100644 --- a/grid/impl/resources/intellij.grid.impl.xml +++ b/grid/impl/resources/intellij.grid.impl.xml @@ -31,6 +31,10 @@ description="Factor for cache size for rendered table cells"/> + + diff --git a/grid/impl/src/run/ui/EditorCellViewer.kt b/grid/impl/src/run/ui/EditorCellViewer.kt index 97d621629f06..2d0d4344c648 100644 --- a/grid/impl/src/run/ui/EditorCellViewer.kt +++ b/grid/impl/src/run/ui/EditorCellViewer.kt @@ -12,6 +12,7 @@ import com.intellij.ide.highlighter.HighlighterFactory import com.intellij.ide.util.PropertiesComponent import com.intellij.lang.Language import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.PlatformCoreDataKeys import com.intellij.openapi.actionSystem.UiDataProvider import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.WriteAction @@ -22,6 +23,7 @@ import com.intellij.openapi.editor.event.DocumentEvent import com.intellij.openapi.editor.event.DocumentListener import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider import com.intellij.openapi.fileTypes.PlainTextLanguage import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key @@ -78,6 +80,7 @@ class EditorCellViewer(private val project: Project, private val wrappedComponent = UiDataProvider.wrapComponent(editor.component) { sink -> sink[CommonDataKeys.EDITOR] = editor + sink[PlatformCoreDataKeys.FILE_EDITOR] = TextEditorProvider.getInstance().getTextEditor(editor) } override val component: JComponent diff --git a/grid/impl/src/run/ui/TableResultPanel.java b/grid/impl/src/run/ui/TableResultPanel.java index 6623f5293335..9d50aed21ad9 100644 --- a/grid/impl/src/run/ui/TableResultPanel.java +++ b/grid/impl/src/run/ui/TableResultPanel.java @@ -875,9 +875,6 @@ public class TableResultPanel extends UserDataHolderBase protected void uiDataSnapshot(@NotNull DataSink sink) { sink.set(CommonDataKeys.PROJECT, myProject); sink.setNull(CommonDataKeys.EDITOR); - sink.set(PlatformDataKeys.COPY_PROVIDER, new GridCopyProvider(this)); - sink.set(PlatformDataKeys.PASTE_PROVIDER, new GridPasteProvider(this, GridUtil::retrieveDataFromText)); - sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, new DeleteRowsAction()); sink.set(DatabaseDataKeys.DATA_GRID_KEY, this); sink.set(LangDataKeys.NO_NEW_ACTION, Boolean.TRUE); diff --git a/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt b/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt new file mode 100644 index 000000000000..bee3d4d8adcf --- /dev/null +++ b/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt @@ -0,0 +1,35 @@ +package com.intellij.database.run.ui + +import com.intellij.database.DatabaseDataKeys +import com.intellij.database.datagrid.GridUtil +import com.intellij.database.run.actions.DeleteRowsAction +import com.intellij.database.run.ui.grid.GridCopyProvider +import com.intellij.database.run.ui.grid.GridPasteProvider +import com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR +import com.intellij.openapi.actionSystem.DataSink +import com.intellij.openapi.actionSystem.DataSnapshot +import com.intellij.openapi.actionSystem.PlatformDataKeys.COPY_PROVIDER +import com.intellij.openapi.actionSystem.PlatformDataKeys.CUT_PROVIDER +import com.intellij.openapi.actionSystem.PlatformDataKeys.DELETE_ELEMENT_PROVIDER +import com.intellij.openapi.actionSystem.PlatformDataKeys.PASTE_PROVIDER +import com.intellij.openapi.actionSystem.UiDataRule +import com.intellij.openapi.editor.ex.EditorEx + +class TableResultPanelUIDataRule : UiDataRule { + override fun uiDataSnapshot(sink: DataSink, snapshot: DataSnapshot) { + val grid = snapshot[DatabaseDataKeys.DATA_GRID_KEY] ?: return + sink[COPY_PROVIDER] = GridCopyProvider(grid) + sink[PASTE_PROVIDER] = GridPasteProvider(grid, GridUtil::retrieveDataFromText) + sink[DELETE_ELEMENT_PROVIDER] = DeleteRowsAction() + } +} + +class InnerEditorsTableResultPanelUIDataRule : UiDataRule { + override fun uiDataSnapshot(sink: DataSink, snapshot: DataSnapshot) { + val editor = snapshot[EDITOR] as? EditorEx ?: return + sink[COPY_PROVIDER] = editor.getCopyProvider() + sink[PASTE_PROVIDER] = editor.getPasteProvider() + sink[CUT_PROVIDER] = editor.getCutProvider() + sink[DELETE_ELEMENT_PROVIDER] = editor.getDeleteProvider() + } +} \ No newline at end of file