package gui;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JList;
import database.BooleanDatabaseProperty;
import database.CustomProperty;
import database.DatabaseProperty;
import database.IntegerDatabaseProperty;
import database.ItemListDatabaseProperty;
import database.TextDatabaseProperty;
import database.StringListDatabaseProperty;
import database.StringPairListDatabaseProperty;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Component;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
public class CustomPropertyDefinitionFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 7417065173869407704L;
private JPanel contentPane;
private JTextField nameSelect;
private JList subpropertyList;
private DefaultListModel listModel;
private JComboBox typeSelect;
private JButton btnRemove;
private JFrame _selfRef;
private static String[] _propertyTypes = new String[]{"Text", "Integer", "Boolean", "Item List", "String List", "String Pairs"};
private WindowMain _parent;
private String _name;
/**
* Create the frame.
*/
public CustomPropertyDefinitionFrame(WindowMain parent, String propertyName) {
_selfRef = this;
_parent = parent;
_name = propertyName;
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
_parent.returnFromCustomPropertyDef(null);
}
});
setTitle("Define Your Own Custom Property");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 718, 466);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
JPanel addRemovePanel = new JPanel();
contentPane.add(addRemovePanel);
addRemovePanel.setLayout(new BoxLayout(addRemovePanel, BoxLayout.X_AXIS));
JButton btnAdd = new JButton("Add Subproperty of Type:");
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String propertyType = typeSelect.getSelectedItem().toString();
String propertyName = nameSelect.getText();
DatabaseProperty subProperty;
if(propertyType.equals("Text"))
subProperty = new TextDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else if(propertyType.equals("Integer"))
subProperty = new IntegerDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else if(propertyType.equals("Boolean"))
subProperty = new BooleanDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else if (propertyType.equals("String List"))
subProperty = new StringListDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else if(propertyType.equals("Item List"))
subProperty = new ItemListDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else if(propertyType.equals("String Pairs"))
subProperty = new StringPairListDatabaseProperty(propertyName) {
@Override
public String toString() {
return getName() + " (" + getType() + ")";
}
};
else
return;
listModel.addElement(subProperty);
subpropertyList.setSelectedValue(subProperty, true);
}
});
addRemovePanel.add(btnAdd);
typeSelect = new JComboBox();
typeSelect.setModel(new DefaultComboBoxModel(_propertyTypes));
typeSelect.setMaximumSize(new Dimension(Integer.MAX_VALUE, btnAdd.getPreferredSize().height));
addRemovePanel.add(typeSelect);
JLabel lblWithName = new JLabel("with name:");
addRemovePanel.add(lblWithName);
nameSelect = new JTextField();
addRemovePanel.add(nameSelect);
nameSelect.setColumns(10);
nameSelect.setMaximumSize(new Dimension(Integer.MAX_VALUE, btnAdd.getPreferredSize().height));
btnRemove = new JButton("Remove Selected Subproperty");
btnRemove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(subpropertyList.getSelectedValue() != null) {
listModel.removeElement(subpropertyList.getSelectedValue());
}
}
});
btnRemove.setVisible(false);
addRemovePanel.add(btnRemove);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane);
subpropertyList = new JList();
subpropertyList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
btnRemove.setVisible(subpropertyList.getSelectedValue() != null);
}
});
subpropertyList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollPane.setViewportView(subpropertyList);
listModel = new DefaultListModel();
subpropertyList.setModel(listModel);
JButton btnDone = new JButton("Done!");
btnDone.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(listModel.size() == 0) {
_parent.returnFromCustomPropertyDef(null);
}
DatabaseProperty[] propertyList = new DatabaseProperty[listModel.size()];
for(int i = 0; i < listModel.size(); i++) {
propertyList[i] = (DatabaseProperty)listModel.get(i);
}
CustomProperty propertyToReturn = new CustomProperty(_name, propertyList);
_parent.returnFromCustomPropertyDef(propertyToReturn);
_selfRef.dispose();
}
});
btnDone.setAlignmentX(Component.CENTER_ALIGNMENT);
contentPane.add(btnDone);
}
}