From e0974b0adeb67296e3a49fbd6940b88e1fa05b2b Mon Sep 17 00:00:00 2001 From: anna Date: Sat, 9 Apr 2011 20:22:45 +0200 Subject: [PATCH] introduce parameter: layout --- .../InplaceIntroduceConstantPopup.java | 2 +- .../InplaceIntroduceParameterPopup.java | 90 +++++++++++++++---- .../IntroduceParameterSettingsUI.java | 2 +- 3 files changed, 73 insertions(+), 21 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java index 368662305e90..6fa66246a4aa 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/InplaceIntroduceConstantPopup.java @@ -226,7 +226,7 @@ public class InplaceIntroduceConstantPopup { return visibilityCombo; } - static void appendActions(final JComboBox visibilityCombo, final Project project) { + public static void appendActions(final JComboBox visibilityCombo, final Project project) { final AnAction arrow = new AnAction() { @Override public void actionPerformed(AnActionEvent e) { diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java index 1254d9567356..f377dd2186f0 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java @@ -18,24 +18,31 @@ package com.intellij.refactoring.introduceParameter; import com.intellij.codeInsight.intention.impl.TypeExpression; import com.intellij.codeInsight.template.impl.TemplateManagerImpl; import com.intellij.codeInsight.template.impl.TemplateState; +import com.intellij.ide.ui.ListCellRendererWrapper; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.util.*; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.util.PsiUtil; +import com.intellij.refactoring.IntroduceParameterRefactoring; import com.intellij.refactoring.JavaRefactoringSettings; +import com.intellij.refactoring.RefactoringBundle; +import com.intellij.refactoring.introduceField.InplaceIntroduceConstantPopup; import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer; import com.intellij.refactoring.ui.TypeSelectorManager; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; +import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.TitlePanel; import com.intellij.usageView.UsageInfo; +import com.intellij.util.ui.UIUtil; import gnu.trove.TIntArrayList; import gnu.trove.TIntProcedure; @@ -67,6 +74,9 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { private String myParameterName; private final String myExprText; + private JComboBox myReplaceFieldsCb; + private boolean myInitialized = false; + InplaceIntroduceParameterPopup(final Project project, final Editor editor, @@ -95,30 +105,78 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { myWholePanel = new JPanel(new GridBagLayout()); myWholePanel.setBorder(null); final GridBagConstraints gc = - new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0); + new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0); final TitlePanel titlePanel = new TitlePanel(); titlePanel.setBorder(null); titlePanel.setText(IntroduceParameterHandler.REFACTORING_NAME); + gc.gridwidth = 2; myWholePanel.add(titlePanel, gc); - gc.insets = new Insets(5, 5, 5, 0); + gc.insets = new Insets(0, 5, 0, 0); + gc.gridwidth = 1; + gc.fill = GridBagConstraints.NONE; if (myOccurrences.length > 1 && !myIsInvokedOnDeclaration) { gc.gridy++; createOccurrencesCb(gc, myWholePanel, myOccurrences.length); } - final JavaRefactoringSettings settings = JavaRefactoringSettings.getInstance(); - createLocalVariablePanel(gc, myWholePanel, settings); - createRemoveParamsPanel(gc, myWholePanel); - if (Util.anyFieldsWithGettersPresent(classMemberRefs)) { - gc.gridy++; - myWholePanel.add(createReplaceFieldsWithGettersPanel(), gc); - } gc.gridy++; + gc.insets.left = 5; createDelegateCb(gc, myWholePanel); + + + final JavaRefactoringSettings settings = JavaRefactoringSettings.getInstance(); + final JPanel rightPanel = new JPanel(new GridBagLayout()); + final GridBagConstraints rgc = new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,0,0,5), 0, 0); + createLocalVariablePanel(rgc, rightPanel, settings); + createRemoveParamsPanel(rgc, rightPanel); + if (Util.anyFieldsWithGettersPresent(classMemberRefs)) { + rgc.gridy++; + rightPanel.add(createReplaceFieldsWithGettersPanel(), rgc); + } + + gc.gridx = 1; + gc.gridheight = myCbReplaceAllOccurences != null ? 3 : 2; + gc.gridy = 1; + myWholePanel.add(rightPanel, gc); } + @Override + protected JPanel createReplaceFieldsWithGettersPanel() { + final LabeledComponent component = new LabeledComponent(); + myReplaceFieldsCb = new JComboBox(new Integer[] {IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_ALL, + IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_INACCESSIBLE, IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE}); + myReplaceFieldsCb.setRenderer(new ListCellRendererWrapper(myReplaceFieldsCb) { + @Override + public void customize(JList list, Integer value, int index, boolean selected, boolean hasFocus) { + switch (value) { + case IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE: + setText(UIUtil.removeMnemonic(RefactoringBundle.message("do.not.replace"))); + break; + case IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_INACCESSIBLE: + setText(UIUtil.removeMnemonic(RefactoringBundle.message("replace.fields.inaccessible.in.usage.context"))); + break; + default: + setText(UIUtil.removeMnemonic(RefactoringBundle.message("replace.all.fields"))); + } + } + }); + myReplaceFieldsCb.setSelectedItem(JavaRefactoringSettings.getInstance().INTRODUCE_PARAMETER_REPLACE_FIELDS_WITH_GETTERS); + InplaceIntroduceConstantPopup.appendActions(myReplaceFieldsCb, myProject); + component.setComponent(myReplaceFieldsCb); + component.setText(RefactoringBundle.message("replace.fields.used.in.expressions.with.their.getters")); + component.getLabel().setDisplayedMnemonic('u'); + component.setLabelLocation(BorderLayout.NORTH); + component.setBorder(IdeBorderFactory.createEmptyBorder(3, 3, 2, 2)); + return component; + } + + @Override + protected int getReplaceFieldsWithGetters() { + return (Integer)myReplaceFieldsCb.getSelectedItem(); + } + void inplaceIntroduceParameter() { startIntroduceTemplate(false); } @@ -182,17 +240,11 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { @Override protected JComponent getComponent() { - final JPanel panel = new JPanel(new BorderLayout()); - panel.add(myWholePanel, BorderLayout.CENTER); - - final JPanel wrapper = new JPanel(new BorderLayout()); - wrapper.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - if (myCanBeFinal != null) { - wrapper.add(myCanBeFinal, BorderLayout.NORTH); + if (!myInitialized) { + myInitialized = true; + myWholePanel.add(myCanBeFinal, new GridBagConstraints(0, myCbReplaceAllOccurences == null ? 2 : 3, 1, 1, 0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 5, 2, 5), 0, 0)); } - panel.add(wrapper, BorderLayout.SOUTH); - - return panel; + return myWholePanel; } @Override diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java index 21fee109fade..ee404b0bf2a3 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterSettingsUI.java @@ -251,7 +251,7 @@ public abstract class IntroduceParameterSettingsUI { panel.add(myCbDeleteLocalVariable, gbConstraints); myCbDeleteLocalVariable.setSelected(settings.INTRODUCE_PARAMETER_DELETE_LOCAL_VARIABLE); - gbConstraints.insets = new Insets(4, 0, 4, 8); + gbConstraints.insets = new Insets(0, 0, 4, 8); if(myHasInitializer) { myCbUseInitializer = new StateRestoringCheckBox(); myCbUseInitializer.setText(RefactoringBundle.message("use.variable.initializer.to.initialize.parameter"));