From a409f81f5749d30a72beb0152a48f2302ed3d0b9 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 7 Oct 2025 14:12:24 +0200 Subject: [PATCH] DBE-23582 Show grid with subscription promo in free tier GitOrigin-RevId: c3a16180302c45d082b56b799c82c6ed7a3db2f3 --- grid/impl/resources/intellij.grid.impl.xml | 1 + .../src/datagrid/CustomGridToolbarProvider.kt | 20 +++++++++++++++++++ grid/impl/src/datagrid/GridUtil.java | 10 +++++----- grid/impl/src/run/ui/FloatingPagingManager.kt | 15 +++++++++----- grid/impl/src/run/ui/TableResultPanel.java | 19 ++++++++++++------ .../src/run/ui/grid/GridEditorPanelBase.java | 2 +- platform/platform-api/api-dump.txt | 1 - .../src/com/intellij/ide/HelpTooltip.java | 2 +- 8 files changed, 51 insertions(+), 19 deletions(-) create mode 100644 grid/impl/src/datagrid/CustomGridToolbarProvider.kt diff --git a/grid/impl/resources/intellij.grid.impl.xml b/grid/impl/resources/intellij.grid.impl.xml index 3a5b1c3ba84b..0e7daa3b9a61 100644 --- a/grid/impl/resources/intellij.grid.impl.xml +++ b/grid/impl/resources/intellij.grid.impl.xml @@ -11,6 +11,7 @@ + diff --git a/grid/impl/src/datagrid/CustomGridToolbarProvider.kt b/grid/impl/src/datagrid/CustomGridToolbarProvider.kt new file mode 100644 index 000000000000..f43084529e81 --- /dev/null +++ b/grid/impl/src/datagrid/CustomGridToolbarProvider.kt @@ -0,0 +1,20 @@ +package com.intellij.database.datagrid + +import com.intellij.openapi.actionSystem.ActionGroup +import com.intellij.openapi.actionSystem.ActionManager +import com.intellij.openapi.actionSystem.ActionToolbar +import com.intellij.openapi.extensions.ExtensionPointName +import org.jetbrains.annotations.NonNls + +interface CustomGridToolbarProvider { + companion object { + val EP_NAME: ExtensionPointName = ExtensionPointName.create("com.intellij.database.datagrid.customToolbarProvider") + + fun createToolbar(dataGrid: DataGrid, @NonNls place: String, actions: ActionGroup): ActionToolbar { + return EP_NAME.extensionList.firstNotNullOfOrNull { it.createToolbar(dataGrid, place, actions) } + ?: ActionManager.getInstance().createActionToolbar(place, actions, true) + } + } + + fun createToolbar(dataGrid: DataGrid, @NonNls place: String, actions: ActionGroup): ActionToolbar? +} \ No newline at end of file diff --git a/grid/impl/src/datagrid/GridUtil.java b/grid/impl/src/datagrid/GridUtil.java index 46ba74677c1b..96a6d8e81751 100644 --- a/grid/impl/src/datagrid/GridUtil.java +++ b/grid/impl/src/datagrid/GridUtil.java @@ -109,6 +109,7 @@ import static com.intellij.database.DatabaseDataKeys.DATA_GRID_SETTINGS_KEY; import static com.intellij.database.DatabaseDataKeys.GRID_KEY; import static com.intellij.database.run.actions.ShowPaginationActionKt.getSHOW_PAGINATION; import static com.intellij.database.run.ui.DataAccessType.DATA_WITH_MUTATIONS; +import static com.intellij.openapi.actionSystem.ActionPlaces.EDITOR_TOOLBAR; public class GridUtil extends GridUtilCore { public static final int ADDITIONAL_ROWS_COUNT = 5; @@ -134,7 +135,7 @@ public class GridUtil extends GridUtilCore { public static void addBottomHeader(@NotNull DataGrid grid) { ActionManager actionManager = ActionManager.getInstance(); ActionGroup actions = (ActionGroup)actionManager.getAction("Console.InEditorTableResult.Horizontal.Group"); - ActionToolbar toolbar = actionManager.createActionToolbar(ActionPlaces.EDITOR_TOOLBAR, actions, true); + ActionToolbar toolbar = actionManager.createActionToolbar(EDITOR_TOOLBAR, actions, true); toolbar.setTargetComponent(grid.getPanel().getComponent()); toolbar.getComponent().setOpaque(false); @@ -803,9 +804,8 @@ public class GridUtil extends GridUtilCore { public static @NotNull JComponent addGridHeaderComponent(@NotNull DataGrid dataGrid, boolean transparent, ActionGroup actions, ActionGroup secondaryActions) { - ActionManager actionManager = ActionManager.getInstance(); - ActionToolbar toolbar = actionManager.createActionToolbar(ActionPlaces.EDITOR_TOOLBAR, actions, true); - ActionToolbar toolbarSecondary = actionManager.createActionToolbar(ActionPlaces.EDITOR_TOOLBAR, secondaryActions, true); + ActionToolbar toolbar = CustomGridToolbarProvider.Companion.createToolbar(dataGrid, EDITOR_TOOLBAR, actions); + ActionToolbar toolbarSecondary = CustomGridToolbarProvider.Companion.createToolbar(dataGrid, EDITOR_TOOLBAR, secondaryActions); toolbar.setTargetComponent(dataGrid.getPanel().getComponent()); toolbarSecondary.setTargetComponent(dataGrid.getPanel().getComponent()); toolbarSecondary.setReservePlaceAutoPopupIcon(false); @@ -832,7 +832,7 @@ public class GridUtil extends GridUtilCore { public static @NotNull JComponent addVerticalGridHeaderComponent(@NotNull DataGrid dataGrid, @Nullable String actionGroupName) { ActionManager actionManager = ActionManager.getInstance(); ActionGroup actions = actionGroupName == null ? new EmptyActionGroup() : (ActionGroup)actionManager.getAction(actionGroupName); - ActionToolbar toolbar = actionManager.createActionToolbar(ActionPlaces.EDITOR_TOOLBAR, actions, false); + ActionToolbar toolbar = actionManager.createActionToolbar(EDITOR_TOOLBAR, actions, false); toolbar.setTargetComponent(dataGrid.getPanel().getComponent()); toolbar.getComponent().setOpaque(false); diff --git a/grid/impl/src/run/ui/FloatingPagingManager.kt b/grid/impl/src/run/ui/FloatingPagingManager.kt index eb603b72e7f5..9b80ed571392 100644 --- a/grid/impl/src/run/ui/FloatingPagingManager.kt +++ b/grid/impl/src/run/ui/FloatingPagingManager.kt @@ -1,6 +1,7 @@ package com.intellij.database.run.ui import com.intellij.database.DatabaseDataKeys +import com.intellij.database.datagrid.CustomGridToolbarProvider import com.intellij.database.datagrid.DataGrid import com.intellij.database.datagrid.GridUtil.getSettings import com.intellij.database.run.ui.TableResultPanel.LayeredPaneWithSizer @@ -55,11 +56,15 @@ class FloatingPagingManager { val actionManager = ActionManager.getInstance() val actions = actionManager.getAction("Console.TableResult.Pagination.Floating.Group") as ActionGroup val moreActions = actionManager.getAction("Console.TableResult.Pagination.Floating.MoreGroup") as ActionGroup - val toolbar = actionManager.createActionToolbar(ActionPlaces.GRID_FLOATING_PAGING_TOOLBAR, DefaultActionGroup( - actions, - Separator.getInstance(), - MoreActionGroup().apply { addAll(moreActions) } - ), true) + val toolbar = CustomGridToolbarProvider.createToolbar( + grid, + ActionPlaces.GRID_FLOATING_PAGING_TOOLBAR, + DefaultActionGroup( + actions, + Separator.getInstance(), + MoreActionGroup().apply { addAll(moreActions) } + ) + ) toolbar.targetComponent = targetPane toolbar.component.isOpaque = true diff --git a/grid/impl/src/run/ui/TableResultPanel.java b/grid/impl/src/run/ui/TableResultPanel.java index 1ce6c294ace6..6623f5293335 100644 --- a/grid/impl/src/run/ui/TableResultPanel.java +++ b/grid/impl/src/run/ui/TableResultPanel.java @@ -103,7 +103,7 @@ public class TableResultPanel extends UserDataHolderBase private ErrorNotificationPanel myErrorNotificationPanel; private final GridMainPanel myMainPanel; - private final LayeredPaneWithSizer myLayeredPane; + protected final LayeredPaneWithSizer myLayeredPane; private ResultView myResultView; private final ActionGroup myPopupActionGroup; @@ -347,7 +347,7 @@ public class TableResultPanel extends UserDataHolderBase myColumnAttributes.myAnonymousColumnName = name; } - private void createResultView() { + protected void createResultView() { myResultView = myViewFactory.createResultView(this, myColumnHeaderActions, myRowHeaderActions); myColorModel = new GridColorModelImpl(this, getDatabaseMutator(this), myResultViewSettings.myTransparentRowHeaderBg, myResultViewSettings.myTransparentColumnHeaderBg); @@ -1604,17 +1604,18 @@ public class TableResultPanel extends UserDataHolderBase } } - @Override - public void setPresentationMode(@NotNull GridPresentationMode presentationMode) { - if (myPresentationMode == presentationMode) return; + protected final void reloadPresentation() { + reloadPresentation(myPresentationMode, true); + } + private void reloadPresentation(GridPresentationMode presentationMode, boolean force) { saveAndRestoreSelection(this, () -> { myPresentationMode = presentationMode; ResultViewFactory newFactory = ResultViewFactory.of(presentationMode); boolean requestFocusInSearchField = mySearchSession != null && IdeFocusManager.getInstance(getProject()).getFocusOwner() == mySearchSession.getComponent().getSearchTextComponent(); - if (myViewFactory != newFactory) { + if (force || myViewFactory != newFactory) { boolean wasTransposed = myResultView.isTransposed(); myViewFactory = newFactory; myLayeredPane.removeAll(); @@ -1642,6 +1643,12 @@ public class TableResultPanel extends UserDataHolderBase }); } + @Override + public void setPresentationMode(@NotNull GridPresentationMode presentationMode) { + if (myPresentationMode == presentationMode) return; + reloadPresentation(presentationMode, false); + } + @Override public @NotNull GridPresentationMode getPresentationMode() { return myPresentationMode; diff --git a/grid/impl/src/run/ui/grid/GridEditorPanelBase.java b/grid/impl/src/run/ui/grid/GridEditorPanelBase.java index 3d705f8359b2..a412e778b147 100644 --- a/grid/impl/src/run/ui/grid/GridEditorPanelBase.java +++ b/grid/impl/src/run/ui/grid/GridEditorPanelBase.java @@ -294,7 +294,7 @@ public abstract class GridEditorPanelBase extends JPanel public void update(@NotNull AnActionEvent e) { DataGrid grid = getDataGrid(e.getDataContext()); GridEditorPanel panel = grid == null ? null : myGetPanel.fun(grid); - e.getPresentation().setEnabled(panel != null && LookupManager.getActiveLookup(panel.getEditor()) == null); + e.getPresentation().setEnabled(panel != null && panel.getComponent().isEnabled() && LookupManager.getActiveLookup(panel.getEditor()) == null); } @Override diff --git a/platform/platform-api/api-dump.txt b/platform/platform-api/api-dump.txt index a4d464396c38..7b0e74cfbe26 100644 --- a/platform/platform-api/api-dump.txt +++ b/platform/platform-api/api-dump.txt @@ -51,7 +51,6 @@ com.intellij.ide.FrameStateListener - onFrameDeactivated():V - onFrameDeactivated(com.intellij.openapi.wm.IdeFrame):V c:com.intellij.ide.HelpTooltip -- psf:INFO_COLOR:java.awt.Color - p:createIsOverTipMouseListener():java.awt.event.MouseListener - p:shouldForceHiding():Z pc:com.intellij.ide.HelpTooltip$OverTipMouseListener diff --git a/platform/platform-api/src/com/intellij/ide/HelpTooltip.java b/platform/platform-api/src/com/intellij/ide/HelpTooltip.java index 56db373bb3bc..8f0345f1c53a 100644 --- a/platform/platform-api/src/com/intellij/ide/HelpTooltip.java +++ b/platform/platform-api/src/com/intellij/ide/HelpTooltip.java @@ -106,7 +106,7 @@ import static com.intellij.openapi.util.text.HtmlChunk.html; * The UI designer will offer to create {@code private void createUIComponents()} method where you can create the label with a static method.

*/ public class HelpTooltip { - protected static final Color INFO_COLOR = JBColor.namedColor("ToolTip.infoForeground", JBUI.CurrentTheme.ContextHelp.FOREGROUND); + private static final Color INFO_COLOR = JBColor.namedColor("ToolTip.infoForeground", JBUI.CurrentTheme.ContextHelp.FOREGROUND); private static final Color LINK_COLOR = JBColor.namedColor("ToolTip.linkForeground", JBUI.CurrentTheme.Link.Foreground.ENABLED); private static final JBValue MAX_WIDTH = new JBValue.UIInteger("HelpTooltip.maxWidth", 250);