package com.jaumard.sails.ui;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.util.text.StringUtil;
import com.jaumard.sails.utils.SailsJSCommandLine;
import com.jaumard.sails.utils.SpringUtilities;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* Created by jaumard on 06/04/2015.
*/
public class GenerateContentPopup extends JPanel
{
private ComboBox itemType;
private JTextField nameField;
private JHintTextField extrasField;
private GeneratePopupListener listener;
public GenerateContentPopup()
{
super();
setLayout(new BorderLayout());
init();
}
public GenerateContentPopup(LayoutManager layout)
{
super(layout);
init();
}
private void init()
{
setFocusable(true);
add(getForm(), BorderLayout.CENTER);
add(getButtons(), BorderLayout.SOUTH);
}
public void setCurrentItem(String item)
{
itemType.setSelectedItem(StringUtil.capitalize(item));
}
private JPanel getForm()
{
SpringLayout layout = new SpringLayout();
JPanel form = new JPanel(layout);
JLabel l = new JLabel("Item :", JLabel.TRAILING);
String[] strings = {
StringUtil.capitalize(SailsJSCommandLine.GENERATE_API),
StringUtil.capitalize(SailsJSCommandLine.GENERATE_MODEL),
StringUtil.capitalize(SailsJSCommandLine.GENERATE_CONTROLLER),
StringUtil.capitalize(SailsJSCommandLine.GENERATE_ADAPTER)
};
itemType = new ComboBox(strings, 10);
itemType.setFocusable(true);
itemType.requestFocus();
itemType.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
String item = (String) itemType.getSelectedItem();
if (item.toLowerCase().equals(SailsJSCommandLine.GENERATE_API) || item.toLowerCase().equals(SailsJSCommandLine.GENERATE_ADAPTER))
{
extrasField.setEnabled(false);
extrasField.setText("");
extrasField.setHint("");
}
else
{
extrasField.setEnabled(true);
extrasField.setText("");
if (item.toLowerCase().equals(SailsJSCommandLine.GENERATE_MODEL))
{
extrasField.setHint("attribute1:type1 attribute2:type2...");
}
else if (item.toLowerCase().equals(SailsJSCommandLine.GENERATE_CONTROLLER))
{
extrasField.setHint("action1 action2...");
}
}
}
}
});
l.setLabelFor(itemType);
form.add(l);
form.add(itemType);
JLabel l2 = new JLabel("Name :", JLabel.TRAILING);
nameField = new JTextField(10);
nameField.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
submitForm();
}
}
});
l.setLabelFor(nameField);
form.add(l2);
form.add(nameField);
JLabel l3 = new JLabel("Extra :", JLabel.TRAILING);
extrasField = new JHintTextField(10);
extrasField.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
submitForm();
}
}
});
extrasField.setEnabled(false);
l.setLabelFor(extrasField);
form.add(l3);
form.add(extrasField);
SpringUtilities.makeCompactGrid(form,
3, 2, //rows, cols
5, 5, //initialX, initialY
5, 5);
return form;
}
private JPanel getButtons()
{
JPanel buttons = new JPanel();
JButton cancel = new JButton("Cancel");
JButton validate = new JButton("Generate");
cancel.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (listener != null)
{
listener.onCancelClick();
}
}
});
validate.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
submitForm();
}
});
validate.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
submitForm();
}
}
});
buttons.add(cancel);
buttons.add(validate);
return buttons;
}
private void submitForm()
{
if (listener == null)
{
throw new RuntimeException("GenerateContentPopup need a listener");
}
else
{
if (getName() == null || getName().isEmpty())
{
listener.onError("Sorry, a name is required.");
}
else
{
listener.onValidateClick();
}
}
}
public String getName()
{
return nameField.getText();
}
public String getItemType()
{
return ((String) itemType.getSelectedItem()).toLowerCase();
}
public String getExtras()
{
return extrasField.getText();
}
public GeneratePopupListener getListener()
{
return listener;
}
public void setListener(GeneratePopupListener listener)
{
this.listener = listener;
}
public void setFocus()
{
itemType.requestFocus();
}
public interface GeneratePopupListener
{
void onError(String error);
void onCancelClick();
void onValidateClick();
}
}