[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.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

View File

@@ -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

View File

@@ -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

View File

@@ -216,14 +216,27 @@ interface Row {
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,
@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)
@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
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<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> {
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<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.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