RUBY-19607 don't recreate settings panels each selection

This commit is contained in:
Dmitry.Krasilschikov
2017-05-28 20:34:38 +03:00
parent c3152e7892
commit 0f15e4bc1a
3 changed files with 16 additions and 2 deletions
@@ -76,6 +76,11 @@ public class ProjectSettingsStepBase<T> 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<T> 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();
}
@@ -24,4 +24,5 @@ public abstract class AbstractActionWithPanel extends AnAction implements DumbAw
public abstract JPanel createPanel();
public void onPanelSelected() {}
}
@@ -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<Object, JPanel> 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());