diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/RegExpDialog.kt b/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/RegExpDialog.kt index 96678284f286..3fd47c9577d3 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/RegExpDialog.kt +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/RegExpDialog.kt @@ -25,10 +25,7 @@ import com.intellij.ui.EditorTextField import com.intellij.ui.JBColor import com.intellij.ui.OnePixelSplitter import com.intellij.ui.SimpleListCellRenderer -import com.intellij.ui.dsl.builder.IntelliJSpacingConfiguration -import com.intellij.ui.dsl.builder.RightGap -import com.intellij.ui.dsl.builder.Row -import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.dsl.builder.* import com.intellij.ui.dsl.gridLayout.HorizontalAlign import com.intellij.ui.dsl.gridLayout.UnscaledGaps import com.intellij.ui.dsl.gridLayout.VerticalAlign diff --git a/platform/execution-impl/src/com/intellij/execution/target/TargetEnvironmentLanguagesPanel.kt b/platform/execution-impl/src/com/intellij/execution/target/TargetEnvironmentLanguagesPanel.kt index febde5dbf307..1e510b951de1 100644 --- a/platform/execution-impl/src/com/intellij/execution/target/TargetEnvironmentLanguagesPanel.kt +++ b/platform/execution-impl/src/com/intellij/execution/target/TargetEnvironmentLanguagesPanel.kt @@ -13,6 +13,7 @@ import com.intellij.ui.components.DropDownLink import com.intellij.ui.components.panels.VerticalLayout import com.intellij.ui.dsl.builder.AlignX import com.intellij.ui.dsl.builder.RightGap +import com.intellij.ui.dsl.builder.actionsButton import com.intellij.ui.dsl.builder.panel import com.intellij.util.ui.UIUtil import com.intellij.util.ui.components.BorderLayoutPanel diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindPopupHeader.kt b/platform/lang-impl/src/com/intellij/find/impl/FindPopupHeader.kt index 14d744c92e01..d64cb10393c8 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindPopupHeader.kt +++ b/platform/lang-impl/src/com/intellij/find/impl/FindPopupHeader.kt @@ -13,6 +13,7 @@ import com.intellij.ui.ExperimentalUI import com.intellij.ui.StateRestoringCheckBox import com.intellij.ui.dsl.builder.IntelliJSpacingConfiguration import com.intellij.ui.dsl.builder.RightGap +import com.intellij.ui.dsl.builder.actionButton import com.intellij.ui.dsl.builder.panel import com.intellij.ui.dsl.gridLayout.UnscaledGaps import com.intellij.ui.dsl.gridLayout.toUnscaledGaps diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/ButtonsGroup.kt b/platform/platform-api/src/com/intellij/ui/dsl/builder/ButtonsGroup.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/dsl/builder/ButtonsGroup.kt rename to platform/platform-api/src/com/intellij/ui/dsl/builder/ButtonsGroup.kt diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/ChangeContext.kt b/platform/platform-api/src/com/intellij/ui/dsl/builder/ChangeContext.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/dsl/builder/ChangeContext.kt rename to platform/platform-api/src/com/intellij/ui/dsl/builder/ChangeContext.kt diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/MutableProperty.kt b/platform/platform-api/src/com/intellij/ui/dsl/builder/MutableProperty.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/dsl/builder/MutableProperty.kt rename to platform/platform-api/src/com/intellij/ui/dsl/builder/MutableProperty.kt diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/RowsRange.kt b/platform/platform-api/src/com/intellij/ui/dsl/builder/RowsRange.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/dsl/builder/RowsRange.kt rename to platform/platform-api/src/com/intellij/ui/dsl/builder/RowsRange.kt diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/MutablePropertyImpl.kt b/platform/platform-api/src/com/intellij/ui/dsl/builder/impl/MutablePropertyImpl.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/MutablePropertyImpl.kt rename to platform/platform-api/src/com/intellij/ui/dsl/builder/impl/MutablePropertyImpl.kt diff --git a/platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt b/platform/platform-api/src/com/intellij/ui/layout/ComponentPredicate.kt similarity index 100% rename from platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt rename to platform/platform-api/src/com/intellij/ui/layout/ComponentPredicate.kt diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/Row.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/Row.kt index 11cf658c5b86..b37502c515ca 100644 --- a/platform/platform-impl/src/com/intellij/ui/dsl/builder/Row.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/Row.kt @@ -216,14 +216,27 @@ interface Row { fun button(@NlsContexts.Button text: String, action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell - fun actionButton(action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell + /** + * This method is moved into extension because Kotlin UI DSL is going to be moved into public API, but [ActionButton] is a part of impl API + * To fix compilation issue add `import com.intellij.ui.dsl.builder.actionButton` + */ + @Deprecated("Use extension function com.intellij.ui.dsl.builder.ExtensionsKt.actionButton instead", level = DeprecationLevel.HIDDEN) + @ApiStatus.ScheduledForRemoval + fun actionButton(action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell { + return actionButton(action, actionPlace) + } /** - * Creates an [ActionButton] with [icon] and menu with provided [actions] + * This method is moved into extension because Kotlin UI DSL is going to be moved into public API, but [ActionButton] is a part of impl API. + * To fix compilation issue add `import com.intellij.ui.dsl.builder.actionsButton` */ + @Deprecated("Use extension function com.intellij.ui.dsl.builder.ExtensionsKt.actionButton instead", level = DeprecationLevel.HIDDEN) + @ApiStatus.ScheduledForRemoval fun actionsButton(vararg actions: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN, - icon: Icon = AllIcons.General.GearPlain): Cell + icon: Icon = AllIcons.General.GearPlain): Cell { + return actionsButton(*actions, actionPlace = actionPlace, icon = icon) + } @Deprecated("Use overloaded method", level = DeprecationLevel.HIDDEN) @ApiStatus.ScheduledForRemoval diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/extensions.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/extensions.kt new file mode 100644 index 000000000000..03e2acaa086b --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/extensions.kt @@ -0,0 +1,46 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.ui.dsl.builder + +import com.intellij.icons.AllIcons +import com.intellij.openapi.actionSystem.* +import com.intellij.openapi.actionSystem.impl.ActionButton +import com.intellij.openapi.project.DumbAware +import com.intellij.openapi.ui.popup.JBPopupFactory +import com.intellij.openapi.ui.popup.util.PopupUtil +import org.jetbrains.annotations.NonNls +import javax.swing.Icon + +// This file contains extension functions that relates to platform-impl package only. +// Common platform related functionality should be put in correspondent module + + +fun Row.actionButton(action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell { + val component = ActionButton(action, action.templatePresentation.clone(), actionPlace, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE) + return cell(component) +} + +/** + * Creates an [ActionButton] with [icon] and menu with provided [actions] + */ +fun Row.actionsButton(vararg actions: AnAction, + @NonNls actionPlace: String = ActionPlaces.UNKNOWN, + icon: Icon = AllIcons.General.GearPlain): Cell { + val actionGroup = PopupActionGroup(arrayOf(*actions)) + actionGroup.templatePresentation.icon = icon + return cell(ActionButton(actionGroup, actionGroup.templatePresentation.clone(), actionPlace, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE)) +} + +private class PopupActionGroup(private val actions: Array) : ActionGroup(), DumbAware { + init { + isPopup = true + templatePresentation.isPerformGroup = actions.isNotEmpty() + } + + override fun getChildren(e: AnActionEvent?): Array = actions + + override fun actionPerformed(e: AnActionEvent) { + val popup = JBPopupFactory.getInstance().createActionGroupPopup(null, this, e.dataContext, + JBPopupFactory.ActionSelectionAid.MNEMONICS, true) + PopupUtil.showForActionButtonEvent(popup, e) + } +} diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/RowImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/RowImpl.kt index 2db1cb70d7e7..1dd71890e35c 100644 --- a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/RowImpl.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/RowImpl.kt @@ -2,19 +2,16 @@ package com.intellij.ui.dsl.builder.impl import com.intellij.BundleBase -import com.intellij.openapi.actionSystem.* +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.DefaultActionGroup import com.intellij.openapi.actionSystem.ex.ActionUtil -import com.intellij.openapi.actionSystem.impl.ActionButton import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.observable.properties.GraphProperty import com.intellij.openapi.observable.properties.ObservableProperty import com.intellij.openapi.observable.properties.whenPropertyChanged -import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.ui.TextFieldWithBrowseButton -import com.intellij.openapi.ui.popup.JBPopupFactory -import com.intellij.openapi.ui.popup.util.PopupUtil import com.intellij.openapi.util.NlsContexts import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.ContextHelpLabel @@ -222,17 +219,6 @@ internal open class RowImpl(private val dialogPanelConfig: DialogPanelConfig, return result } - override fun actionButton(action: AnAction, actionPlace: String): Cell { - val component = ActionButton(action, action.templatePresentation.clone(), actionPlace, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE) - return cell(component) - } - - override fun actionsButton(vararg actions: AnAction, actionPlace: String, icon: Icon): Cell { - val actionGroup = PopupActionGroup(arrayOf(*actions)) - actionGroup.templatePresentation.icon = icon - return cell(ActionButton(actionGroup, actionGroup.templatePresentation.clone(), actionPlace, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE)) - } - override fun segmentedButton(options: Collection, property: GraphProperty, renderer: (T) -> @Nls String): Cell { val actionGroup = DefaultActionGroup(options.map { DeprecatedSegmentedButtonAction(it, property, renderer(it)) }) val toolbar = SegmentedButtonToolbar(actionGroup, parent.spacingConfiguration) @@ -475,18 +461,3 @@ internal open class RowImpl(private val dialogPanelConfig: DialogPanelConfig, return result } } - -private class PopupActionGroup(private val actions: Array): ActionGroup(), DumbAware { - init { - isPopup = true - templatePresentation.isPerformGroup = actions.isNotEmpty() - } - - override fun getChildren(e: AnActionEvent?): Array = actions - - override fun actionPerformed(e: AnActionEvent) { - val popup = JBPopupFactory.getInstance().createActionGroupPopup(null, this, e.dataContext, - JBPopupFactory.ActionSelectionAid.MNEMONICS, true) - PopupUtil.showForActionButtonEvent(popup, e) - } -} diff --git a/plugins/settings-sync/src/com/intellij/settingsSync/SettingsSyncTroubleshootingAction.kt b/plugins/settings-sync/src/com/intellij/settingsSync/SettingsSyncTroubleshootingAction.kt index 4bdb7ef9cdfd..737911376120 100644 --- a/plugins/settings-sync/src/com/intellij/settingsSync/SettingsSyncTroubleshootingAction.kt +++ b/plugins/settings-sync/src/com/intellij/settingsSync/SettingsSyncTroubleshootingAction.kt @@ -23,10 +23,7 @@ import com.intellij.settingsSync.auth.SettingsSyncAuthService import com.intellij.ui.JBAccountInfoService import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBScrollPane -import com.intellij.ui.dsl.builder.Panel -import com.intellij.ui.dsl.builder.Row -import com.intellij.ui.dsl.builder.RowLayout -import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.dsl.builder.* import com.intellij.util.io.Compressor import com.intellij.util.ui.JBUI import com.intellij.util.ui.UIUtil