diff --git a/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.form b/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.form deleted file mode 100644 index 9074397..0000000 --- a/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.form +++ /dev/null @@ -1,65 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.java b/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.java index 943a117..f3f5c31 100644 --- a/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.java +++ b/src/main/java/de/espend/idea/php/annotation/ui/SettingsForm.java @@ -1,31 +1,50 @@ package de.espend.idea.php.annotation.ui; import com.intellij.openapi.options.Configurable; +import com.intellij.ui.IdeBorderFactory; +import com.intellij.ui.TitledSeparator; +import com.intellij.util.ui.FormBuilder; +import com.intellij.util.ui.JBUI; import de.espend.idea.php.annotation.ApplicationSettings; import de.espend.idea.php.annotation.util.PluginUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.*; /** * @author Daniel Espendiller */ public class SettingsForm implements Configurable { - private JCheckBox appendRoundBracket; - private JPanel panel; - private JButton buttonCleanIndex; + private final JCheckBox appendRoundBracket = new JCheckBox("Insert round bracket after class name"); + private final JButton buttonCleanIndex = new JButton("Schedule annotation reindex"); + private final JPanel panel; public SettingsForm() { - buttonCleanIndex.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - PluginUtil.forceReindex(); - super.mouseClicked(e); - } - }); + this.panel = createPanel(); + + buttonCleanIndex.addActionListener(e -> PluginUtil.forceReindex()); + updateUIFromSettings(); + } + + private JPanel createPanel() { + JPanel actionsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); + actionsPanel.add(buttonCleanIndex); + + JPanel content = FormBuilder.createFormBuilder() + .addComponent(new TitledSeparator("Actions")) + .addComponent(actionsPanel, JBUI.scale(6)) + .addVerticalGap(JBUI.scale(12)) + .addComponent(new TitledSeparator("Autocomplete (Annotations)")) + .addComponent(appendRoundBracket, JBUI.scale(6)) + .getPanel(); + + JPanel root = new JPanel(new BorderLayout()); + root.setBorder(IdeBorderFactory.createEmptyBorder(JBUI.insets(10, 0, 0, 0))); + root.add(content, BorderLayout.NORTH); + + return root; } @Nls @@ -48,9 +67,7 @@ public JComponent createComponent() { @Override public boolean isModified() { - return - !appendRoundBracket.isSelected() == ApplicationSettings.getInstance().appendRoundBracket - ; + return appendRoundBracket.isSelected() != ApplicationSettings.getInstance().appendRoundBracket; } @Override diff --git a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.form b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.form deleted file mode 100644 index c47a0cd..0000000 --- a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.form +++ /dev/null @@ -1,109 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.java b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.java index 396e1f8..199c78e 100644 --- a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.java +++ b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasForm.java @@ -1,81 +1,102 @@ package de.espend.idea.php.annotation.ui; +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.ui.ValidationInfo; +import com.intellij.util.ui.FormBuilder; +import com.intellij.util.ui.JBUI; +import com.intellij.ui.components.JBCheckBox; +import com.intellij.ui.components.JBTextField; import com.jetbrains.php.config.PhpLanguageLevel; import com.jetbrains.php.refactoring.PhpNameUtil; import de.espend.idea.php.annotation.dict.UseAliasOption; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.event.*; /** * @author Daniel Espendiller */ -public class UseAliasForm extends JDialog { +public class UseAliasForm extends DialogWrapper { @NotNull private final UseAliasOption useAliasOption; @NotNull private final Callback callback; - private JPanel contentPane; - private JButton buttonOK; - private JButton buttonCancel; - private JTextField textClassName; - private JTextField textAlias; - private JCheckBox checkStatus; - - public UseAliasForm(@NotNull UseAliasOption useAliasOption, @NotNull Callback callback) { + + private final JBTextField textClassName = new JBTextField(); + private final JBTextField textAlias = new JBTextField(); + private final JBCheckBox checkStatus = new JBCheckBox("Enabled"); + private final JPanel contentPane; + + public UseAliasForm(@Nullable Component component, @NotNull UseAliasOption useAliasOption, @NotNull Callback callback) { + super(component, true); this.useAliasOption = useAliasOption; this.callback = callback; - - setContentPane(contentPane); - setModal(true); - getRootPane().setDefaultButton(buttonOK); + this.contentPane = createPanel(); textClassName.setText(useAliasOption.getClassName()); textAlias.setText(useAliasOption.getAlias()); checkStatus.setSelected(useAliasOption.isEnabled()); - buttonOK.addActionListener(e -> onOK()); + setTitle("Use Alias"); + init(); + } + + private JPanel createPanel() { + JPanel panel = FormBuilder.createFormBuilder() + .addLabeledComponent("Class (Doctrine\\ORM\\Mapping)", textClassName, 1, false) + .addLabeledComponent("Alias (ORM)", textAlias, 1, false) + .addComponent(checkStatus, JBUI.scale(8)) + .getPanel(); - buttonCancel.addActionListener(e -> onCancel()); + panel.setBorder(JBUI.Borders.empty(8)); + panel.setPreferredSize(JBUI.size(400, panel.getPreferredSize().height)); - setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - onCancel(); - } - }); + return panel; + } - contentPane.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + @Override + protected @Nullable JComponent createCenterPanel() { + return contentPane; } - private void onOK() { - String classText = StringUtils.strip(textClassName.getText(), "\\"); - if(!PhpNameUtil.isValidNamespaceFullName(classText, PhpLanguageLevel.DEFAULT)) { - JOptionPane.showMessageDialog(this, "Invalid class name"); - return; + @Override + public @Nullable JComponent getPreferredFocusedComponent() { + return textClassName; + } + + @Override + protected @Nullable ValidationInfo doValidate() { + String classText = getNormalizedClassName(); + if (!PhpNameUtil.isValidNamespaceFullName(classText, PhpLanguageLevel.DEFAULT)) { + return new ValidationInfo("Invalid class name", textClassName); } String alias = textAlias.getText(); - if(!PhpNameUtil.isValidNamespaceFullName(alias, PhpLanguageLevel.DEFAULT)) { - JOptionPane.showMessageDialog(this, "Invalid alias"); - return; + if (!PhpNameUtil.isValidNamespaceFullName(alias, PhpLanguageLevel.DEFAULT)) { + return new ValidationInfo("Invalid alias", textAlias); } - this.useAliasOption.setClassName(classText); - this.useAliasOption.setAlias(alias); + return null; + } + + @Override + protected void doOKAction() { + this.useAliasOption.setClassName(getNormalizedClassName()); + this.useAliasOption.setAlias(textAlias.getText()); this.useAliasOption.setEnabled(checkStatus.isSelected()); this.callback.ok(this.useAliasOption); - dispose(); + super.doOKAction(); } - private void onCancel() { - dispose(); + @NotNull + private String getNormalizedClassName() { + return StringUtils.strip(textClassName.getText(), "\\"); } public static void create(@NotNull Component component, @NotNull Callback callback) { @@ -83,12 +104,7 @@ public static void create(@NotNull Component component, @NotNull Callback callba } public static void create(@NotNull Component component, @NotNull UseAliasOption option, @NotNull Callback callback) { - UseAliasForm dialog = new UseAliasForm(option, callback); - dialog.setMinimumSize(new Dimension(400, 0)); - dialog.pack(); - dialog.setTitle("Use Alias"); - dialog.setLocationRelativeTo(component); - dialog.setVisible(true); + new UseAliasForm(component, option, callback).show(); } public interface Callback { diff --git a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.form b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.form deleted file mode 100644 index a873591..0000000 --- a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.form +++ /dev/null @@ -1,42 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.java b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.java index e5ea2d1..10735ed 100644 --- a/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.java +++ b/src/main/java/de/espend/idea/php/annotation/ui/UseAliasListForm.java @@ -5,6 +5,7 @@ import com.intellij.ui.table.TableView; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.ElementProducer; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.ListTableModel; import de.espend.idea.php.annotation.ApplicationSettings; import de.espend.idea.php.annotation.dict.UseAliasOption; @@ -12,6 +13,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.awt.*; import java.util.ArrayList; /** @@ -21,15 +23,13 @@ public class UseAliasListForm implements Configurable { private final ListTableModel modelList; private final TableView tableView; + private final JPanel panel; + private final JPanel tablePanel = new JPanel(new BorderLayout()); + private final JButton buttonReset = new JButton("Default reset"); private boolean changed = false; - private JPanel panel1; - private JPanel panel; - private JButton buttonReset; - public UseAliasListForm() { this.tableView = new TableView<>(); - this.modelList = new ListTableModel<>( new ClassColumn(), new AliasColumn(), @@ -37,47 +37,36 @@ public UseAliasListForm() { ); this.tableView.setModelAndUpdateColumns(this.modelList); + this.panel = createPanel(); buttonReset.addActionListener(e -> { - tableView.getTableViewModel().fireTableDataChanged(); - changed = true; resetList(); + changed = true; apply(); ApplicationSettings.getInstance().provideDefaults = false; JOptionPane.showMessageDialog(panel, "Default alias applied"); }); + tablePanel.add(createToolbarDecorator().createPanel(), BorderLayout.CENTER); initList(); } - private void resetList() { - while (this.modelList.getRowCount() > 0) { - this.modelList.removeRow(0); - } + private JPanel createPanel() { + JLabel description = new JLabel("Auto insert use alias for given class scope eg \"Doctrine\\ORM\\Mapping as ORM\""); - this.modelList.addRows(ApplicationSettings.getDefaultUseAliasOption()); - } + JPanel header = new JPanel(new BorderLayout(JBUI.scale(8), 0)); + header.add(description, BorderLayout.WEST); + header.add(buttonReset, BorderLayout.EAST); - private void initList() { - this.modelList.addRows(ApplicationSettings.getUseAliasOptionsWithDefaultFallback()); - } + JPanel root = new JPanel(new BorderLayout(0, JBUI.scale(10))); + root.add(header, BorderLayout.NORTH); + root.add(tablePanel, BorderLayout.CENTER); - @Nls - @Override - public String getDisplayName() { - return "Use Alias"; - } - - @Nullable - @Override - public String getHelpTopic() { - return null; + return root; } - @Nullable - @Override - public JComponent createComponent() { - ToolbarDecorator tablePanel = ToolbarDecorator.createDecorator(this.tableView, new ElementProducer<>() { + private ToolbarDecorator createToolbarDecorator() { + ToolbarDecorator tableDecorator = ToolbarDecorator.createDecorator(this.tableView, new ElementProducer<>() { @Override public UseAliasOption createElement() { return null; @@ -89,35 +78,67 @@ public boolean canCreateElement() { } }); - tablePanel.setEditAction(anActionButton -> { - + tableDecorator.setEditAction(anActionButton -> { UseAliasOption useAliasOption = tableView.getSelectedObject(); if (useAliasOption == null) { return; } - UseAliasForm.create(panel1, useAliasOption, option -> { + UseAliasForm.create(panel, useAliasOption, option -> { tableView.getTableViewModel().fireTableDataChanged(); changed = true; }); }); - tablePanel.setAddAction(anActionButton -> UseAliasForm.create(panel1, option -> { + tableDecorator.setAddAction(anActionButton -> UseAliasForm.create(panel, option -> { tableView.getListTableModel().addRow(option); changed = true; })); - tablePanel.setRemoveAction(anActionButton -> { - modelList.removeRow(tableView.getSelectedRow()); + tableDecorator.setRemoveAction(anActionButton -> { + int selectedRow = tableView.getSelectedRow(); + if (selectedRow < 0) { + return; + } + + modelList.removeRow(selectedRow); tableView.getTableViewModel().fireTableDataChanged(); changed = true; }); - tablePanel.disableDownAction(); - tablePanel.disableUpAction(); + tableDecorator.disableDownAction(); + tableDecorator.disableUpAction(); - this.panel1.add(tablePanel.createPanel()); + return tableDecorator; + } + private void resetList() { + while (this.modelList.getRowCount() > 0) { + this.modelList.removeRow(0); + } + + this.modelList.addRows(ApplicationSettings.getDefaultUseAliasOption()); + } + + private void initList() { + this.modelList.addRows(ApplicationSettings.getUseAliasOptionsWithDefaultFallback()); + } + + @Nls + @Override + public String getDisplayName() { + return "Use Alias"; + } + + @Nullable + @Override + public String getHelpTopic() { + return null; + } + + @Nullable + @Override + public JComponent createComponent() { return this.panel; } @@ -140,6 +161,7 @@ public void reset() { } initList(); + this.changed = false; } @Override @@ -175,29 +197,34 @@ public String valueOf(UseAliasOption option) { private class DisableColumn extends ColumnInfo { - public DisableColumn() { + DisableColumn() { super("Status"); } + @Override public Boolean valueOf(UseAliasOption twigPath) { return twigPath.isEnabled(); } + @Override public void setValue(UseAliasOption twigPath, Boolean value) { twigPath.setEnabled(value); tableView.getListTableModel().fireTableDataChanged(); changed = true; } + @Override public int getWidth(JTable table) { return 50; } + @Override public boolean isCellEditable(UseAliasOption groupItem) { return true; } - public Class getColumnClass() { + @Override + public Class getColumnClass() { return Boolean.class; } }