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;
}
}