Prettify postfix template editors

- minimal size for applicable contexts list
- resizable textarea and applicable contexts list
- fill entire dialog
- proper comment label
This commit is contained in:
Alexander Zolotov
2019-03-11 13:16:41 +03:00
parent 8664dfa776
commit 29b8151e7a
3 changed files with 27 additions and 34 deletions
@@ -23,6 +23,7 @@ import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.FormBuilder;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -46,7 +47,7 @@ public class JavaPostfixTemplateEditor extends PostfixTemplateEditorBase<JavaPos
myPanel = FormBuilder.createFormBuilder()
.addLabeledComponent("Minimum language level:", myLanguageLevelCombo)
.addComponent(myEditTemplateAndConditionsPanel)
.addComponentFillVertically(myEditTemplateAndConditionsPanel, UIUtil.DEFAULT_VGAP)
.getPanel();
}
@@ -8,8 +8,8 @@ import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.components.JBTextField;
import com.intellij.uiDesigner.core.Spacer;
import com.intellij.util.ui.FormBuilder;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,10 +59,9 @@ public class PostfixEditTemplateDialog extends DialogWrapper {
@Override
protected JComponent createCenterPanel() {
return FormBuilder.createFormBuilder()
.addLabeledComponent("Key:", myTemplateNameTextField)
.addComponent(myEditor.getComponent())
.addComponentFillVertically(new Spacer(), 0)
.getPanel();
.addLabeledComponent("Key:", myTemplateNameTextField)
.addComponentFillVertically(myEditor.getComponent(), UIUtil.DEFAULT_VGAP)
.getPanel();
}
@Nullable
@@ -17,6 +17,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.panel.PanelGridBuilder;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.ui.AnActionButton;
@@ -24,17 +25,16 @@ import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.ListUtil;
import com.intellij.ui.ToolbarDecorator;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBList;
import com.intellij.util.ObjectUtils;
import com.intellij.util.ui.DialogUtil;
import com.intellij.util.ui.FormBuilder;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UI;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
public abstract class PostfixTemplateEditorBase<Condition extends PostfixTemplateExpressionCondition> implements PostfixTemplateEditor {
@@ -43,11 +43,8 @@ public abstract class PostfixTemplateEditorBase<Condition extends PostfixTemplat
@NotNull protected final JBList<Condition> myExpressionTypesList;
@NotNull protected final DefaultListModel<Condition> myExpressionTypesListModel;
@NotNull protected final JPanel myTemplateEditorPanel;
@NotNull protected final JPanel myExpressionTypesPanel;
@NotNull protected final JBCheckBox myApplyToTheTopmostJBCheckBox;
@NotNull protected final JPanel myEditTemplateAndConditionsPanel;
@NotNull protected final JBLabel myExpressionVariableHint;
protected class AddConditionAction extends DumbAwareAction {
@NotNull
@@ -77,12 +74,7 @@ public abstract class PostfixTemplateEditorBase<Condition extends PostfixTemplat
myApplyToTheTopmostJBCheckBox = new JBCheckBox("Apply to the &topmost expression");
DialogUtil.registerMnemonic(myApplyToTheTopmostJBCheckBox, '&');
myTemplateEditorPanel = new JPanel(new BorderLayout());
myTemplateEditorPanel.add(myTemplateEditor.getComponent());
myExpressionVariableHint = new JBLabel("Use $EXPR$ variable to refer target expression");
UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, myExpressionVariableHint);
myExpressionVariableHint.setFontColor(UIUtil.FontColor.BRIGHTER);
myApplyToTheTopmostJBCheckBox.setBorder(JBUI.Borders.emptyBottom(UIUtil.DEFAULT_VGAP));
myExpressionTypesListModel = JBList.createDefaultListModel();
myExpressionTypesList = new JBList<>(myExpressionTypesListModel);
@@ -98,24 +90,25 @@ public abstract class PostfixTemplateEditorBase<Condition extends PostfixTemplat
}
});
myExpressionTypesPanel = new JPanel(new BorderLayout());
FormBuilder builder = FormBuilder.createFormBuilder();
PanelGridBuilder grid = UI.PanelFactory.grid().resize();
if (showExpressionTypes) {
myExpressionTypesPanel.add(ToolbarDecorator.createDecorator(myExpressionTypesList)
.setAddAction(button -> showAddExpressionTypePopup(button))
.setRemoveAction(button -> ListUtil.removeSelectedItems(myExpressionTypesList))
.disableUpDownActions()
.createPanel());
myExpressionTypesPanel.setMinimumSize(new Dimension(-1, 100));
builder.addLabeledComponent("Applicable expression types:", myExpressionTypesPanel, true);
JPanel expressionTypesPanel = ToolbarDecorator.createDecorator(myExpressionTypesList)
.setAddAction(button -> showAddExpressionTypePopup(button))
.setRemoveAction(button -> ListUtil.removeSelectedItems(myExpressionTypesList))
.disableUpDownActions()
.setMinimumSize(JBUI.size(-1, 300))
.createPanel();
grid.add(UI.PanelFactory.panel(expressionTypesPanel)
.withLabel("Applicable expression types:")
.resizeY(true)
.moveLabelOnTop());
}
builder.addComponent(myApplyToTheTopmostJBCheckBox);
builder.addComponent(myTemplateEditorPanel);
builder.addComponent(myExpressionVariableHint);
myEditTemplateAndConditionsPanel = builder.getPanel();
grid.add(UI.PanelFactory.panel(myApplyToTheTopmostJBCheckBox));
grid.add(UI.PanelFactory.panel(myTemplateEditor.getComponent())
.anchorLabelOn(UI.Anchor.Top)
.withComment("Use $EXPR$ variable to refer target expression")
.resizeY(true));
myEditTemplateAndConditionsPanel = grid.createPanel();
}
@NotNull