mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-05 08:06:56 +07:00
IDEA-333998 multi-page dialog refactoring
GitOrigin-RevId: 1c4ad7493ac55487ac20fbce2c95ffeb86d60cae
This commit is contained in:
committed by
intellij-monorepo-bot
parent
06145574e5
commit
99b2dbb308
@@ -1,7 +1,7 @@
|
||||
package com.intellij.ide.startup.importSettings
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.productChooser.ProductChooserDialog
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.MultiplePageDialog
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.extensions.ExtensionNotApplicableException
|
||||
import com.intellij.platform.ide.bootstrap.IdeStartupWizard
|
||||
@@ -17,7 +17,8 @@ private class IdeStartupWizardImpl : IdeStartupWizard {
|
||||
|
||||
override suspend fun run() {
|
||||
withContext(Dispatchers.EDT) {
|
||||
ImportSettingsDialogWrapper.show(ProductChooserDialog())
|
||||
|
||||
MultiplePageDialog.show(ProductChooserDialog())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
// 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.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.settingChooser.SettingChooserDialog
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.JBrActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.SettingsService
|
||||
import com.intellij.ide.startup.importSettings.chooser.settingChooser.SettingChooserDialog
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.ui.DialogWrapper
|
||||
|
||||
class ConfigAction(val callback: (Int) -> Unit) : DumbAwareAction() {
|
||||
class ConfigAction(val callback: (PageProvider) -> Unit) : DumbAwareAction() {
|
||||
val service = SettingsService.getInstance().getJbService()
|
||||
val config
|
||||
get() = service.getConfig()
|
||||
@@ -30,8 +29,6 @@ class ConfigAction(val callback: (Int) -> Unit) : DumbAwareAction() {
|
||||
}
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
callback(DialogWrapper.OK_EXIT_CODE)
|
||||
|
||||
ImportSettingsDialogWrapper.show(SettingChooserDialog(JBrActionsDataProvider.getInstance(), config))
|
||||
callback(SettingChooserDialog(JBrActionsDataProvider.getInstance(), config))
|
||||
}
|
||||
}
|
||||
@@ -2,21 +2,22 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.*
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import java.awt.Component
|
||||
import java.awt.Graphics
|
||||
import javax.swing.Icon
|
||||
|
||||
class JbChooserAction(callback: (Int) -> Unit) : MainChooserAction<JbService>(JBrActionsDataProvider.getInstance(), callback) {
|
||||
class JbChooserAction(callback: (PageProvider) -> Unit) : MainChooserAction<JbService>(JBrActionsDataProvider.getInstance(), callback) {
|
||||
override fun getIcon(products: List<Product>): Icon? {
|
||||
return ImportJbIcon(products) { provider.getProductIcon(it) }
|
||||
}
|
||||
}
|
||||
|
||||
class ExpChooserAction(callback: (Int) -> Unit) : MainChooserAction<ExternalService>(ExtActionsDataProvider.getInstance(), callback)
|
||||
class ExpChooserAction(callback: (PageProvider) -> Unit) : MainChooserAction<ExternalService>(ExtActionsDataProvider.getInstance(), callback)
|
||||
|
||||
class SyncChooserAction(callback: (Int) -> Unit) : MainChooserAction<SyncService>(SyncActionsDataProvider.getInstance(), callback) {
|
||||
class SyncChooserAction(callback: (PageProvider) -> Unit) : MainChooserAction<SyncService>(SyncActionsDataProvider.getInstance(), callback) {
|
||||
private val service = SettingsService.getInstance().getSyncService()
|
||||
|
||||
override fun getIcon(products: List<Product>): Icon? {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// 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.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.ActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.BaseService
|
||||
import com.intellij.ide.startup.importSettings.data.Product
|
||||
@@ -8,7 +9,7 @@ import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import javax.swing.Icon
|
||||
|
||||
open class MainChooserAction<T : BaseService>(val provider: ActionsDataProvider<T>, val callback: (Int) -> Unit) : ProductChooserAction() {
|
||||
open class MainChooserAction<T : BaseService>(val provider: ActionsDataProvider<T>, val callback: (PageProvider) -> Unit) : ProductChooserAction() {
|
||||
private var array: Array<AnAction> = emptyArray()
|
||||
|
||||
override fun displayTextInToolbar(): Boolean {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.ActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.JBrActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.Product
|
||||
@@ -12,7 +13,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.Separator
|
||||
import javax.swing.JButton
|
||||
|
||||
class OtherOptions(val callback: (Int) -> Unit) : ProductChooserAction(), LinkAction {
|
||||
class OtherOptions(val callback: (PageProvider) -> Unit) : ProductChooserAction(), LinkAction {
|
||||
private val jbDataProvider = JBrActionsDataProvider.getInstance()
|
||||
private val syncDataProvider = SyncActionsDataProvider.getInstance()
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.settingChooser.SettingChooserItemAction
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.UiUtils
|
||||
import com.intellij.ide.startup.importSettings.data.ActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.Product
|
||||
@@ -27,7 +28,7 @@ abstract class ProductChooserAction : ChooseProductActionButton(null) {
|
||||
|
||||
abstract fun getChildren(e: AnActionEvent?): Array<AnAction>
|
||||
|
||||
protected fun productsToActions(products: List<Product>, provider: ActionsDataProvider<*>, callback: (Int) -> Unit): List<AnAction> {
|
||||
protected fun productsToActions(products: List<Product>, provider: ActionsDataProvider<*>, callback: (PageProvider) -> Unit): List<AnAction> {
|
||||
return products.map { pr -> SettingChooserItemAction(pr, provider, callback) }
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ProductProvider
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.UiUtils
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl
|
||||
@@ -13,7 +13,7 @@ import com.intellij.util.ui.JBUI
|
||||
import java.awt.*
|
||||
import javax.swing.*
|
||||
|
||||
class ProductChooserDialog : ProductProvider() {
|
||||
class ProductChooserDialog : PageProvider() {
|
||||
private val accountLabel = JLabel("user.name").apply {
|
||||
icon = AllIcons.General.User
|
||||
}
|
||||
@@ -24,12 +24,16 @@ class ProductChooserDialog : ProductProvider() {
|
||||
})
|
||||
}
|
||||
|
||||
private val callback: (PageProvider)-> Unit = {
|
||||
parentDialog?.showPage(it) ?: run {
|
||||
close(OK_EXIT_CODE)
|
||||
it.show()
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
val group = DefaultActionGroup()
|
||||
group.isPopup = false
|
||||
val callback: (Int)-> Unit = {
|
||||
close(OK_EXIT_CODE)
|
||||
}
|
||||
|
||||
group.add(SyncStateAction())
|
||||
group.add(SyncChooserAction(callback))
|
||||
@@ -49,7 +53,6 @@ class ProductChooserDialog : ProductProvider() {
|
||||
act.targetComponent = pane
|
||||
|
||||
pane.add(act.component)
|
||||
init()
|
||||
}
|
||||
|
||||
private fun createActionToolbar(group: ActionGroup, horizontal: Boolean): ActionToolbar {
|
||||
@@ -86,7 +89,7 @@ class ProductChooserDialog : ProductProvider() {
|
||||
rightSideButtons: MutableList<out JButton>,
|
||||
addHelpToLeftSide: Boolean): JPanel {
|
||||
val group = DefaultActionGroup()
|
||||
group.add(OtherOptions({}))
|
||||
group.add(OtherOptions(callback))
|
||||
|
||||
val at = createActionToolbar(group, true)
|
||||
at.targetComponent = pane
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
// 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.ide.startup.importSettings.chooser.productChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.MultiplePageDialog
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
|
||||
class ProductChooserDialogAction : DumbAwareAction() {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
ImportSettingsDialogWrapper.show(ProductChooserDialog())
|
||||
MultiplePageDialog.show(ProductChooserDialog())
|
||||
}
|
||||
}
|
||||
|
||||
class ProductChooserSingleDialogAction : DumbAwareAction() {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
ImportSettingsDialogWrapper.show(ProductChooserDialog())
|
||||
val dialog = ProductChooserDialog()
|
||||
dialog.isModal = false
|
||||
dialog.isResizable = false
|
||||
dialog.show()
|
||||
|
||||
dialog.pack()
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
// 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.ide.startup.importSettings.chooser.settingChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ProductProvider
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.*
|
||||
import java.awt.event.ActionEvent
|
||||
import javax.swing.Action
|
||||
|
||||
fun createDialog(provider: ActionsDataProvider<*>, product: SettingsContributor): ProductProvider {
|
||||
fun createDialog(provider: ActionsDataProvider<*>, product: SettingsContributor): PageProvider {
|
||||
if(provider is SyncActionsDataProvider && provider.productService.baseProduct(product.id)) {
|
||||
return SyncSettingDialog(provider, product)
|
||||
}
|
||||
@@ -61,8 +60,7 @@ class SyncSettingDialog(val provider: SyncActionsDataProvider, product: Settings
|
||||
|
||||
override fun doAction(e: ActionEvent?) {
|
||||
provider.productService.importSyncSettings()
|
||||
close(OK_EXIT_CODE)
|
||||
ImportSettingsDialogWrapper.doOk()
|
||||
doAction(OK_EXIT_CODE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.settingChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.productChooser.ProductChooserDialog
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ProductProvider
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.ActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.IconProductSize
|
||||
import com.intellij.ide.startup.importSettings.data.SettingsContributor
|
||||
@@ -25,7 +24,7 @@ import javax.swing.JComponent
|
||||
import javax.swing.JPanel
|
||||
import javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
|
||||
|
||||
open class SettingChooserDialog(private val provider: ActionsDataProvider<*>, val product: SettingsContributor) : ProductProvider() {
|
||||
open class SettingChooserDialog(private val provider: ActionsDataProvider<*>, val product: SettingsContributor) : PageProvider() {
|
||||
open val configurable = true
|
||||
protected val settingPanes = mutableListOf<BaseSettingPane>()
|
||||
|
||||
@@ -93,31 +92,16 @@ open class SettingChooserDialog(private val provider: ActionsDataProvider<*>, va
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
init {
|
||||
init()
|
||||
}
|
||||
|
||||
override fun createContent(): JComponent? {
|
||||
return pane
|
||||
}
|
||||
|
||||
override fun doOKAction() {
|
||||
super.doOKAction()
|
||||
ImportSettingsDialogWrapper.doOk()
|
||||
}
|
||||
|
||||
override fun doCancelAction() {
|
||||
super.doCancelAction()
|
||||
ImportSettingsDialogWrapper.doAction(CANCEL_EXIT_CODE)
|
||||
}
|
||||
|
||||
protected fun getBackAction(): Action {
|
||||
return object : DialogWrapperAction("Back") {
|
||||
|
||||
override fun doAction(e: ActionEvent?) {
|
||||
ImportSettingsDialogWrapper.show(ProductChooserDialog())
|
||||
close(CANCEL_EXIT_CODE)
|
||||
parentDialog?.showPage(ProductChooserDialog())
|
||||
doAction(CANCEL_EXIT_CODE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// 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.ide.startup.importSettings.chooser.settingChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.MultiplePageDialog
|
||||
import com.intellij.ide.startup.importSettings.data.JBrActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.TestJbService
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
@@ -9,7 +9,7 @@ import com.intellij.openapi.project.DumbAwareAction
|
||||
|
||||
class SettingChooserDialogAction : DumbAwareAction() {
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
ImportSettingsDialogWrapper.show(SettingChooserDialog(JBrActionsDataProvider.getInstance(), TestJbService.main))
|
||||
MultiplePageDialog.show(SettingChooserDialog(JBrActionsDataProvider.getInstance(), TestJbService.main))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
// 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.ide.startup.importSettings.chooser.settingChooser
|
||||
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.ImportSettingsDialogWrapper
|
||||
import com.intellij.ide.startup.importSettings.chooser.ui.PageProvider
|
||||
import com.intellij.ide.startup.importSettings.data.ActionsDataProvider
|
||||
import com.intellij.ide.startup.importSettings.data.Product
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.ui.DialogWrapper
|
||||
|
||||
class SettingChooserItemAction(val product: Product, val provider: ActionsDataProvider<*>, val callback: (Int) -> Unit) : DumbAwareAction() {
|
||||
class SettingChooserItemAction(val product: Product, val provider: ActionsDataProvider<*>, val callback: (PageProvider) -> Unit) : DumbAwareAction() {
|
||||
|
||||
override fun displayTextInToolbar(): Boolean {
|
||||
return true
|
||||
@@ -21,10 +20,7 @@ class SettingChooserItemAction(val product: Product, val provider: ActionsDataPr
|
||||
}
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
callback(DialogWrapper.OK_EXIT_CODE)
|
||||
|
||||
ImportSettingsDialogWrapper.show(createDialog(provider, product))
|
||||
|
||||
callback(createDialog(provider, product))
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,48 +1,25 @@
|
||||
package com.intellij.ide.startup.importSettings.chooser.ui
|
||||
|
||||
import com.intellij.openapi.ui.DialogWrapper
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.util.ui.JBDimension
|
||||
import java.awt.GridBagConstraints
|
||||
import java.awt.GridBagLayout
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.JPanel
|
||||
import javax.swing.SwingUtilities
|
||||
import javax.swing.JRootPane
|
||||
|
||||
class ImportSettingsDialogWrapper private constructor() : DialogWrapper(null) {
|
||||
class MultiplePageDialog private constructor(): DialogWrapper(null) {
|
||||
companion object{
|
||||
private var sdw: ImportSettingsDialogWrapper? = null
|
||||
fun show(page: PageProvider) {
|
||||
val dialog = MultiplePageDialog()
|
||||
dialog.showPage(page)
|
||||
dialog.isModal = false
|
||||
dialog.isResizable = false
|
||||
dialog.show()
|
||||
|
||||
fun doOk() {
|
||||
sdw?.doOk()
|
||||
}
|
||||
|
||||
fun doAction(exitCode: Int) {
|
||||
sdw?.close(exitCode)
|
||||
}
|
||||
|
||||
fun show(dialog: ProductProvider): DialogWrapper {
|
||||
var dw = sdw ?: ImportSettingsDialogWrapper()
|
||||
if(dw.isDisposed) {
|
||||
dw = ImportSettingsDialogWrapper()
|
||||
Disposer.register(dw.disposable) { sdw = null }
|
||||
}
|
||||
|
||||
if(!dw.isShowing) {
|
||||
dw.isResizable = true
|
||||
dw.isModal = false
|
||||
dw.show()
|
||||
}
|
||||
|
||||
dw.showDialog(dialog)
|
||||
SwingUtilities.invokeLater{
|
||||
dw.pack()
|
||||
}
|
||||
sdw = dw
|
||||
return dw
|
||||
dialog.pack()
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
init()
|
||||
}
|
||||
@@ -51,14 +28,9 @@ class ImportSettingsDialogWrapper private constructor() : DialogWrapper(null) {
|
||||
|
||||
private lateinit var southPanel: JComponent
|
||||
|
||||
private var current: ProductProvider? = null
|
||||
private var current: PageProvider? = null
|
||||
|
||||
fun doOk() {
|
||||
applyFields()
|
||||
close(OK_EXIT_CODE)
|
||||
}
|
||||
|
||||
fun showDialog(dialog: ProductProvider) {
|
||||
fun showPage(dialog: PageProvider) {
|
||||
val gbc = GridBagConstraints()
|
||||
gbc.gridx = 0
|
||||
gbc.gridy = 0
|
||||
@@ -66,6 +38,8 @@ class ImportSettingsDialogWrapper private constructor() : DialogWrapper(null) {
|
||||
gbc.weighty = 1.0
|
||||
gbc.fill = GridBagConstraints.BOTH
|
||||
|
||||
dialog.parentDialog = this
|
||||
|
||||
dialog.content?.let {
|
||||
panel.add(it, gbc)
|
||||
}
|
||||
@@ -95,9 +69,39 @@ class ImportSettingsDialogWrapper private constructor() : DialogWrapper(null) {
|
||||
}
|
||||
}
|
||||
|
||||
abstract class ProductProvider : DialogWrapper(null) {
|
||||
abstract class PageProvider() : DialogWrapper(null) {
|
||||
var content: JComponent? = null
|
||||
var southPanel: JComponent = JPanel()
|
||||
var parentDialog: MultiplePageDialog? = null
|
||||
set(value) {
|
||||
field = value
|
||||
init()
|
||||
}
|
||||
|
||||
override fun getRootPane(): JRootPane {
|
||||
return parentDialog?.rootPane ?: super.getRootPane()
|
||||
}
|
||||
|
||||
override fun doOKAction() {
|
||||
super.doOKAction()
|
||||
parentDialog?.performOKAction()
|
||||
}
|
||||
|
||||
fun doAction(exitCode: Int){
|
||||
close(exitCode)
|
||||
}
|
||||
|
||||
override fun doCancelAction() {
|
||||
super.doCancelAction()
|
||||
parentDialog?.doCancelAction()
|
||||
}
|
||||
|
||||
override fun show() {
|
||||
if(parentDialog != null) return
|
||||
init()
|
||||
super.show()
|
||||
}
|
||||
|
||||
final override fun createCenterPanel(): JComponent? {
|
||||
content = createContent()
|
||||
return content
|
||||
Reference in New Issue
Block a user