[Kotlin UI DSL] Moving API into common platform place

GitOrigin-RevId: d1140b983c8944f3f768e1ab9ade93e31bb5dfa7
This commit is contained in:
Pavel Porvatov
2023-08-18 11:14:58 +02:00
committed by intellij-monorepo-bot
parent f146f208e7
commit edbf3b5222
13 changed files with 68 additions and 42 deletions

View File

@@ -25,10 +25,7 @@ import com.intellij.ui.EditorTextField
import com.intellij.ui.JBColor import com.intellij.ui.JBColor
import com.intellij.ui.OnePixelSplitter import com.intellij.ui.OnePixelSplitter
import com.intellij.ui.SimpleListCellRenderer import com.intellij.ui.SimpleListCellRenderer
import com.intellij.ui.dsl.builder.IntelliJSpacingConfiguration import com.intellij.ui.dsl.builder.*
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.gridLayout.HorizontalAlign import com.intellij.ui.dsl.gridLayout.HorizontalAlign
import com.intellij.ui.dsl.gridLayout.UnscaledGaps import com.intellij.ui.dsl.gridLayout.UnscaledGaps
import com.intellij.ui.dsl.gridLayout.VerticalAlign import com.intellij.ui.dsl.gridLayout.VerticalAlign

View File

@@ -13,6 +13,7 @@ import com.intellij.ui.components.DropDownLink
import com.intellij.ui.components.panels.VerticalLayout import com.intellij.ui.components.panels.VerticalLayout
import com.intellij.ui.dsl.builder.AlignX import com.intellij.ui.dsl.builder.AlignX
import com.intellij.ui.dsl.builder.RightGap import com.intellij.ui.dsl.builder.RightGap
import com.intellij.ui.dsl.builder.actionsButton
import com.intellij.ui.dsl.builder.panel import com.intellij.ui.dsl.builder.panel
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil
import com.intellij.util.ui.components.BorderLayoutPanel import com.intellij.util.ui.components.BorderLayoutPanel

View File

@@ -13,6 +13,7 @@ import com.intellij.ui.ExperimentalUI
import com.intellij.ui.StateRestoringCheckBox import com.intellij.ui.StateRestoringCheckBox
import com.intellij.ui.dsl.builder.IntelliJSpacingConfiguration import com.intellij.ui.dsl.builder.IntelliJSpacingConfiguration
import com.intellij.ui.dsl.builder.RightGap 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.builder.panel
import com.intellij.ui.dsl.gridLayout.UnscaledGaps import com.intellij.ui.dsl.gridLayout.UnscaledGaps
import com.intellij.ui.dsl.gridLayout.toUnscaledGaps import com.intellij.ui.dsl.gridLayout.toUnscaledGaps

View File

@@ -216,14 +216,27 @@ interface Row {
fun button(@NlsContexts.Button text: String, action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell<JButton> fun button(@NlsContexts.Button text: String, action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell<JButton>
fun actionButton(action: AnAction, @NonNls actionPlace: String = ActionPlaces.UNKNOWN): Cell<ActionButton> /**
* 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<ActionButton> {
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, fun actionsButton(vararg actions: AnAction,
@NonNls actionPlace: String = ActionPlaces.UNKNOWN, @NonNls actionPlace: String = ActionPlaces.UNKNOWN,
icon: Icon = AllIcons.General.GearPlain): Cell<ActionButton> icon: Icon = AllIcons.General.GearPlain): Cell<ActionButton> {
return actionsButton(*actions, actionPlace = actionPlace, icon = icon)
}
@Deprecated("Use overloaded method", level = DeprecationLevel.HIDDEN) @Deprecated("Use overloaded method", level = DeprecationLevel.HIDDEN)
@ApiStatus.ScheduledForRemoval @ApiStatus.ScheduledForRemoval

View File

@@ -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<ActionButton> {
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<ActionButton> {
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<AnAction>) : ActionGroup(), DumbAware {
init {
isPopup = true
templatePresentation.isPerformGroup = actions.isNotEmpty()
}
override fun getChildren(e: AnActionEvent?): Array<AnAction> = actions
override fun actionPerformed(e: AnActionEvent) {
val popup = JBPopupFactory.getInstance().createActionGroupPopup(null, this, e.dataContext,
JBPopupFactory.ActionSelectionAid.MNEMONICS, true)
PopupUtil.showForActionButtonEvent(popup, e)
}
}

View File

@@ -2,19 +2,16 @@
package com.intellij.ui.dsl.builder.impl package com.intellij.ui.dsl.builder.impl
import com.intellij.BundleBase 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.ex.ActionUtil
import com.intellij.openapi.actionSystem.impl.ActionButton
import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.fileChooser.FileChooserDescriptor
import com.intellij.openapi.observable.properties.GraphProperty import com.intellij.openapi.observable.properties.GraphProperty
import com.intellij.openapi.observable.properties.ObservableProperty import com.intellij.openapi.observable.properties.ObservableProperty
import com.intellij.openapi.observable.properties.whenPropertyChanged import com.intellij.openapi.observable.properties.whenPropertyChanged
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.ui.ComboBox
import com.intellij.openapi.ui.TextFieldWithBrowseButton 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.util.NlsContexts
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.ui.ContextHelpLabel import com.intellij.ui.ContextHelpLabel
@@ -222,17 +219,6 @@ internal open class RowImpl(private val dialogPanelConfig: DialogPanelConfig,
return result return result
} }
override fun actionButton(action: AnAction, actionPlace: String): Cell<ActionButton> {
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<ActionButton> {
val actionGroup = PopupActionGroup(arrayOf(*actions))
actionGroup.templatePresentation.icon = icon
return cell(ActionButton(actionGroup, actionGroup.templatePresentation.clone(), actionPlace, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE))
}
override fun <T> segmentedButton(options: Collection<T>, property: GraphProperty<T>, renderer: (T) -> @Nls String): Cell<SegmentedButtonToolbar> { override fun <T> segmentedButton(options: Collection<T>, property: GraphProperty<T>, renderer: (T) -> @Nls String): Cell<SegmentedButtonToolbar> {
val actionGroup = DefaultActionGroup(options.map { DeprecatedSegmentedButtonAction(it, property, renderer(it)) }) val actionGroup = DefaultActionGroup(options.map { DeprecatedSegmentedButtonAction(it, property, renderer(it)) })
val toolbar = SegmentedButtonToolbar(actionGroup, parent.spacingConfiguration) val toolbar = SegmentedButtonToolbar(actionGroup, parent.spacingConfiguration)
@@ -475,18 +461,3 @@ internal open class RowImpl(private val dialogPanelConfig: DialogPanelConfig,
return result return result
} }
} }
private class PopupActionGroup(private val actions: Array<AnAction>): ActionGroup(), DumbAware {
init {
isPopup = true
templatePresentation.isPerformGroup = actions.isNotEmpty()
}
override fun getChildren(e: AnActionEvent?): Array<AnAction> = actions
override fun actionPerformed(e: AnActionEvent) {
val popup = JBPopupFactory.getInstance().createActionGroupPopup(null, this, e.dataContext,
JBPopupFactory.ActionSelectionAid.MNEMONICS, true)
PopupUtil.showForActionButtonEvent(popup, e)
}
}

View File

@@ -23,10 +23,7 @@ import com.intellij.settingsSync.auth.SettingsSyncAuthService
import com.intellij.ui.JBAccountInfoService import com.intellij.ui.JBAccountInfoService
import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBLabel
import com.intellij.ui.components.JBScrollPane import com.intellij.ui.components.JBScrollPane
import com.intellij.ui.dsl.builder.Panel import com.intellij.ui.dsl.builder.*
import com.intellij.ui.dsl.builder.Row
import com.intellij.ui.dsl.builder.RowLayout
import com.intellij.ui.dsl.builder.panel
import com.intellij.util.io.Compressor import com.intellij.util.io.Compressor
import com.intellij.util.ui.JBUI import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil