Option to add and remove custom actions in the wizard

This commit is contained in:
Evenprime 2011-05-16 14:27:01 +02:00
parent c6aa6b213b
commit ed0a36879c
4 changed files with 161 additions and 49 deletions

View File

@ -64,12 +64,12 @@ public class NoCheatConfiguration {
}
root = new ParentOption("");
root = new ParentOption("", false);
/*** LOGGING section ***/
{
ParentOption loggingNode = new ParentOption("logging");
ParentOption loggingNode = new ParentOption("logging", false);
root.add(loggingNode);
loggingNode.add(new MediumStringOption("filename",
@ -90,7 +90,7 @@ public class NoCheatConfiguration {
/*** ACTIVE section ***/
{
ParentOption activeNode = new ParentOption("active");
ParentOption activeNode = new ParentOption("active", false);
root.add(activeNode);
activeNode.add(new BooleanOption("speedhack",
@ -109,7 +109,7 @@ public class NoCheatConfiguration {
/*** SPEEDHACK section ***/
{
ParentOption speedhackNode = new ParentOption("speedhack");
ParentOption speedhackNode = new ParentOption("speedhack", false);
root.add(speedhackNode);
speedhackNode.add(new LongStringOption("logmessage",
@ -117,7 +117,7 @@ public class NoCheatConfiguration {
/*** SPEEDHACK LIMITS section ***/
{
ParentOption speedhackLimitsNode = new ParentOption("limits");
ParentOption speedhackLimitsNode = new ParentOption("limits", false);
speedhackNode.add(speedhackLimitsNode);
speedhackLimitsNode.add(new IntegerOption("low",
@ -130,7 +130,7 @@ public class NoCheatConfiguration {
/*** SPEEDHACK ACTIONS section ***/
{
ParentOption speedhackActionNode = new ParentOption("action");
ParentOption speedhackActionNode = new ParentOption("action", false);
speedhackNode.add(speedhackActionNode);
speedhackActionNode.add(new MediumStringOption("low",
@ -144,7 +144,7 @@ public class NoCheatConfiguration {
/*** MOVING section ***/
{
ParentOption movingNode = new ParentOption("moving");
ParentOption movingNode = new ParentOption("moving", false);
root.add(movingNode);
movingNode.add(new LongStringOption("logmessage",
@ -158,7 +158,7 @@ public class NoCheatConfiguration {
/*** MOVING ACTION section ***/
{
ParentOption movingActionNode = new ParentOption("action");
ParentOption movingActionNode = new ParentOption("action", false);
movingNode.add(movingActionNode);
movingActionNode.add(new MediumStringOption("low",
@ -172,12 +172,12 @@ public class NoCheatConfiguration {
/*** AIRBUILD section ***/
{
ParentOption airbuildNode = new ParentOption("airbuild");
ParentOption airbuildNode = new ParentOption("airbuild", false);
root.add(airbuildNode);
/*** AIRBUILD LIMITS section ***/
{
ParentOption airbuildLimitsNode = new ParentOption("limits");
ParentOption airbuildLimitsNode = new ParentOption("limits", false);
airbuildNode.add(airbuildLimitsNode);
airbuildLimitsNode.add(new IntegerOption("low",
@ -190,7 +190,7 @@ public class NoCheatConfiguration {
/*** AIRBUILD ACTION section ***/
{
ParentOption airbuildActionNode = new ParentOption("action");
ParentOption airbuildActionNode = new ParentOption("action", false);
airbuildNode.add(airbuildActionNode);
airbuildActionNode.add(new MediumStringOption("low",
@ -204,25 +204,25 @@ public class NoCheatConfiguration {
/*** BEDTELEPORT section ***/
{
ParentOption bedteleportNode = new ParentOption("bedteleport");
ParentOption bedteleportNode = new ParentOption("bedteleport", false);
root.add(bedteleportNode);
}
/*** ITEMDUPE section ***/
{
ParentOption itemdupeNode = new ParentOption("itemdupe");
ParentOption itemdupeNode = new ParentOption("itemdupe", false);
root.add(itemdupeNode);
}
/*** BOGUSITEMS section ***/
{
ParentOption bogusitemsNode = new ParentOption("bogusitems");
ParentOption bogusitemsNode = new ParentOption("bogusitems", false);
root.add(bogusitemsNode);
}
/*** CUSTOMACTIONS section ***/
{
ParentOption customActionsNode = new ParentOption("customactions");
ParentOption customActionsNode = new ParentOption("customactions", true);
root.add(customActionsNode);
Set<String> customs = SimpleYaml.getKeys("customactions", yamlContent);

View File

@ -13,9 +13,11 @@ public class ParentOption extends Option {
private static final long serialVersionUID = 3162246550749560727L;
private LinkedList<Option> children = new LinkedList<Option>();
private boolean editable;
public ParentOption(String identifier) {
public ParentOption(String identifier, boolean editable) {
super(identifier);
this.editable = editable;
}
public final Collection<Option> getChildOptions() {
@ -27,6 +29,16 @@ public class ParentOption extends Option {
children.addLast(option);
}
public final void remove(Option option) {
if(editable)
children.remove(option);
}
public boolean isEditable() {
return editable;
}
@Override
public String toYAMLString(String prefix) {

View File

@ -41,7 +41,7 @@ public class Wizard extends JFrame {
inside.add(root2);
JButton b = new JButton("TEST");
JButton b = new JButton("Save");
b.addActionListener(new ActionListener() {
@ -49,16 +49,22 @@ public class Wizard extends JFrame {
public void actionPerformed(ActionEvent arg0) {
String s = config.getRoot().toYAMLString("");
JOptionPane.showMessageDialog(null, s);
NoCheatConfiguration.writeConfigFile(new File("config.yml"), config);
NoCheatConfiguration.writeConfigFile(new File("NoCheat/nocheat.yml"), config);
JOptionPane.showMessageDialog(null, "Saved");
} });
b.setAlignmentY(0.0F);
inside.add(b);
inside.doLayout();
this.doLayout();
this.pack();
this.setSize(900, 700);
this.setTitle("NoCheat configuration utility");
}
}

View File

@ -3,15 +3,20 @@ package cc.co.evenprime.bukkit.nocheat.wizard.gui;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import cc.co.evenprime.bukkit.nocheat.config.ChildOption;
import cc.co.evenprime.bukkit.nocheat.config.CustomActionOption;
import cc.co.evenprime.bukkit.nocheat.config.Option;
import cc.co.evenprime.bukkit.nocheat.config.ParentOption;
@ -22,8 +27,8 @@ public class ParentOptionGui extends JPanel {
*/
private static final long serialVersionUID = 5277750257203546802L;
private ParentOption option;
private LinkedList<Option> children = new LinkedList<Option>();
private final ParentOption option;
private final LinkedList<Option> children = new LinkedList<Option>();
public ParentOptionGui(ParentOption option) {
this.option = option;
@ -31,59 +36,126 @@ public class ParentOptionGui extends JPanel {
if(option.getIdentifier().length() > 0) {
this.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(BorderFactory.createMatteBorder(2, 2,
2, 2, Color.BLACK), " " + option.getIdentifier() + ": "),
BorderFactory.createEmptyBorder(5,5,5,5))));
2, 2, Color.BLACK), " " + option.getIdentifier() + ": "),
BorderFactory.createEmptyBorder(5,5,5,5))));
}
this.setLayout(new GridBagLayout());
for(Option o : this.option.getChildOptions()) {
add(o);
children.add(o);
}
recreateContent();
}
private void add(Option option) {
if(option instanceof ParentOption) {
private void recreateContent() {
this.removeAll();
this.children.clear();
int line = 0;
if(this.option.isEditable()) {
final JTextField nameField = new JTextField("actionname");
nameField.setColumns(14);
JPanel p2 = new JPanel();
p2.add(nameField);
JButton createNew = new JButton("new");
createNew.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
option.add(new CustomActionOption(nameField.getText(), "yourcommand [player]"));
recreateContent();
}
});
JPanel p = new JPanel();
p.add(createNew);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = line;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
c.ipady = 15;
c.weightx = 1;
this.add(p, c);
c.gridx = 1;
c.gridy = line;
c.gridwidth = 3;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
c.ipady = 15;
c.weightx = 1;
this.add(p2, c);
line++;
}
for(Option o : this.option.getChildOptions()) {
add(o, line);
children.add(o);
line++;
}
this.revalidate();
}
private void add(final Option child, int line) {
if(child instanceof ParentOption) {
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = children.size();
c.gridy = line;
c.gridwidth = 3; // Spans over three columns
if(this.option.isEditable()) c.gridwidth = 4; // Spans over four columns
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
c.ipady = 15;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(new ParentOptionGui((ParentOption)option), c);
this.add(new ParentOptionGui((ParentOption)child), c);
}
else if(option instanceof ChildOption)
else if(child instanceof ChildOption)
{
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = children.size();
c.gridy = line;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 10;
c.weightx = 0;
this.add(new JLabel(option.getIdentifier() + ":"), c);
this.add(new JLabel(child.getIdentifier() + ":"), c);
c.gridx = 1;
c.gridy = children.size();
c.gridy = line;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
c.weightx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
JComponent child = ChildOptionGuiFactory.create((ChildOption)option);
JComponent tmp = ChildOptionGuiFactory.create((ChildOption)child);
this.add(child, c);
this.add(tmp, c);
c.gridx = 2;
c.gridy = children.size();
c.gridy = line;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
@ -92,6 +164,28 @@ public class ParentOptionGui extends JPanel {
this.add(Box.createHorizontalGlue(), c);
if(this.option.isEditable()) {
c.gridx = 3;
c.gridy = line;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
c.ipadx = 5;
c.weightx = 1;
JButton removeButton = new JButton("delete");
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
option.remove(child);
recreateContent();
}
});
this.add(removeButton, c);
}
}
}