From 0f15e4bc1a47d1aa672bed27b3587fd87efba33f Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Thu, 25 May 2017 17:25:16 +0300 Subject: [PATCH] RUBY-19607 don't recreate settings panels each selection --- .../ide/util/projectWizard/ProjectSettingsStepBase.java | 9 +++++++++ .../wm/impl/welcomeScreen/AbstractActionWithPanel.java | 1 + .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 8 ++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java index 1c7e4ce9311c..1f426a29f73d 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java @@ -76,6 +76,11 @@ public class ProjectSettingsStepBase extends AbstractActionWithPanel implemen public void actionPerformed(@NotNull AnActionEvent e) { } + @Override + public void onPanelSelected() { + checkWebProjectValid(); + } + @Override public JPanel createPanel() { final JPanel mainPanel = new JPanel(new BorderLayout()); @@ -181,6 +186,10 @@ public class ProjectSettingsStepBase extends AbstractActionWithPanel implemen }; myLocationField.getTextField().getDocument().addDocumentListener(documentAdapter); Disposer.register(this, () -> myLocationField.getTextField().getDocument().removeDocumentListener(documentAdapter)); + checkWebProjectValid(); + } + + private void checkWebProjectValid() { if (myProjectGenerator instanceof WebProjectTemplate && !((WebProjectTemplate)myProjectGenerator).postponeValidation()) { checkValid(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/AbstractActionWithPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/AbstractActionWithPanel.java index cc9564d9e800..090501fb0cd1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/AbstractActionWithPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/AbstractActionWithPanel.java @@ -24,4 +24,5 @@ public abstract class AbstractActionWithPanel extends AnAction implements DumbAw public abstract JPanel createPanel(); + public void onPanelSelected() {} } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index d51d80c2535b..ae2b2d2a848d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -75,6 +75,7 @@ import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.function.Consumer; @@ -876,7 +877,8 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame, Disposable, Ac if (back != null && !singleProjectGenerator) { actionsListPanel.add(back, BorderLayout.SOUTH); } - + + final HashMap panelsMap = ContainerUtil.newHashMap(); ListSelectionListener selectionListener = e -> { if (e.getValueIsAdjusting()) { // Update when a change has been finalized. @@ -888,7 +890,9 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame, Disposable, Ac } Object value = list.getSelectedValue(); if (value instanceof AbstractActionWithPanel) { - JPanel panel = ((AbstractActionWithPanel)value).createPanel(); + final JPanel panel = panelsMap.computeIfAbsent(value, o -> ((AbstractActionWithPanel)value).createPanel()); + ((AbstractActionWithPanel)value).onPanelSelected(); + panel.setBorder(JBUI.Borders.empty(7, 10)); selected.set(panel); main.add(selected.get());