mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
PY-50536 [NPW] Added an adapter to covert GeneratorNewProjectWizard into a DirectoryProjectGenerator for new project dialogs in minor IDEs
GitOrigin-RevId: f045b92226a36aac498b60f3da4981bed29db213
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ca954ebf09
commit
d7393c78f8
@@ -5,9 +5,8 @@ import com.intellij.ide.util.projectWizard.AbstractNewProjectStep;
|
||||
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.jetbrains.python.newProject.PyFrameworkProjectGenerator;
|
||||
import com.jetbrains.python.newProject.PyNewProjectSettings;
|
||||
import com.jetbrains.python.newProject.PythonProjectGenerator;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.jetbrains.python.newProject.*;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -37,7 +36,14 @@ public final class PyCharmNewProjectStep extends AbstractNewProjectStep<PyNewPro
|
||||
@Override
|
||||
protected ProjectSettingsStepBase<PyNewProjectSettings> createProjectSpecificSettingsStep(@NotNull DirectoryProjectGenerator<PyNewProjectSettings> projectGenerator,
|
||||
@NotNull AbstractCallback<PyNewProjectSettings> callback) {
|
||||
return new ProjectSpecificSettingsStep<>(projectGenerator, callback);
|
||||
var npwGenerator = ObjectUtils.tryCast(projectGenerator, NewProjectWizardDirectoryGeneratorAdapter.class);
|
||||
if (npwGenerator != null) {
|
||||
//noinspection unchecked
|
||||
return new NewProjectWizardProjectSettingsStep<PyNewProjectSettings>(npwGenerator);
|
||||
}
|
||||
else {
|
||||
return new ProjectSpecificSettingsStep<>(projectGenerator, callback);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.jetbrains.python.newProject
|
||||
|
||||
import com.intellij.ide.util.projectWizard.AbstractNewProjectStep
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep
|
||||
import com.intellij.ide.util.projectWizard.ProjectSettingsStepBase
|
||||
import com.intellij.ide.util.projectWizard.WizardContext
|
||||
import com.intellij.ide.wizard.AbstractNewProjectWizardBuilder
|
||||
import com.intellij.ide.wizard.GeneratorNewProjectWizard
|
||||
import com.intellij.ide.wizard.NewProjectWizardStep
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleType
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.DirectoryProjectGeneratorBase
|
||||
import com.intellij.platform.GeneratorPeerImpl
|
||||
import com.intellij.platform.ProjectGeneratorPeer
|
||||
import javax.swing.Icon
|
||||
import javax.swing.JButton
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.JPanel
|
||||
|
||||
/**
|
||||
* A base adapter class to turn a [GeneratorNewProjectWizard] into a
|
||||
* [com.intellij.platform.DirectoryProjectGenerator] and register as an extension point.
|
||||
*
|
||||
* @see NewProjectWizardProjectSettingsStep
|
||||
*/
|
||||
open class NewProjectWizardDirectoryGeneratorAdapter<T>(val wizard: GeneratorNewProjectWizard) : DirectoryProjectGeneratorBase<T>() {
|
||||
internal lateinit var step: NewProjectWizardStep
|
||||
internal lateinit var moduleWizardStep: ModuleWizardStep
|
||||
|
||||
@Suppress("DialogTitleCapitalization")
|
||||
override fun getName(): String = wizard.name
|
||||
override fun getLogo(): Icon = wizard.icon
|
||||
|
||||
override fun generateProject(project: Project, baseDir: VirtualFile, settings: T, module: Module) {
|
||||
step.setupProject(project)
|
||||
}
|
||||
|
||||
override fun createPeer(): ProjectGeneratorPeer<T> {
|
||||
val context = WizardContext(null) {}
|
||||
val builder = object : AbstractNewProjectWizardBuilder() {
|
||||
override fun getModuleType(): ModuleType<*>? = null
|
||||
override fun createStep(context: WizardContext): NewProjectWizardStep =
|
||||
wizard.createStep(context).also {
|
||||
step = it
|
||||
}
|
||||
}
|
||||
return object : GeneratorPeerImpl<T>() {
|
||||
override fun getComponent(): JComponent =
|
||||
builder.getCustomOptionsStep(context, context.disposable).also {
|
||||
moduleWizardStep = it
|
||||
}.component
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A wizard-enabled project settings step that you should use for your [projectGenerator] in your
|
||||
* [AbstractNewProjectStep.Customization.createProjectSpecificSettingsStep] to provide the project wizard UI and actions.
|
||||
*/
|
||||
@Suppress("ComponentNotRegistered")
|
||||
class NewProjectWizardProjectSettingsStep<T>(val projectGenerator: NewProjectWizardDirectoryGeneratorAdapter<T>)
|
||||
: ProjectSettingsStepBase<T>(projectGenerator, null) {
|
||||
|
||||
init {
|
||||
myCallback = AbstractNewProjectStep.AbstractCallback()
|
||||
}
|
||||
|
||||
override fun createAndFillContentPanel(): JPanel =
|
||||
JPanel(VerticalFlowLayout()).apply {
|
||||
add(peer.component)
|
||||
}
|
||||
|
||||
override fun registerValidators() {}
|
||||
|
||||
override fun getProjectLocation(): String =
|
||||
projectGenerator.step.context.projectFileDirectory
|
||||
|
||||
override fun getActionButton(): JButton =
|
||||
super.getActionButton().apply {
|
||||
addActionListener {
|
||||
projectGenerator.moduleWizardStep.updateDataModel()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user