package guis;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import core.GameState;
import core.Main;
import entity.AbilityEntity;
/**
* Class for ability_wizard, handle input and output
* @author Innocentius
*
*/
public class AbilityWizard {
private static Shell shell;
private static Display display;
public static boolean cancel = false;
public static AbilityEntity newability;
static String abilityname;
static String abilityscript;
public Boolean desfirst;
public AbilityWizard(Display d)
{
if (GameState.isWindowOpen("Ability")) {
return;
}
display = d;
shell = new Shell(d);
shell.setImage(new Image(display, "images/bnb_logo.gif"));
shell.setText("Create New Ability");
int width = display.getMonitors()[0].getBounds().width;
shell.setSize(width / 3, width * 2 / 9);
new ArrayList<Composite>();
desfirst = false;
createPageContent();
GameState.windowsOpen.add("Ability");
run();
}
public void run()
{
center(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
GameState.windowsOpen.remove("Ability");
}
/**
* Set window to be the center.
* @param shell the window needed to be in the center
*/
private static void center(Shell shell)
{
Rectangle bds = shell.getDisplay().getBounds();
Point p = shell.getSize();
int nLeft = (bds.width - p.x) / 2;
int nTop = (bds.height - p.y) / 2;
shell.setBounds(nLeft, nTop, p.x, p.y);
}
/**
* We get the inputs, put them into Strings, hash map it, then create a new feat... BUT where should I put it?
* TODO verify the storing method
*/
private void createPageContent()
{
GridLayout gl = new GridLayout(6, true);
gl.verticalSpacing = 5;
shell.setLayout(gl);
GridData gd;
final Label wiz1Label = new Label(shell, SWT.NONE);
wiz1Label.setText("Enter Fields");
gd = new GridData(GridData.FILL, GridData.FILL,false, false);
gd.horizontalSpan = 6;
wiz1Label.setLayoutData(gd);
wiz1Label.pack();
Text nameInput = new Text(shell, SWT.BORDER);
nameInput.setMessage("Name");
gd = new GridData(GridData.FILL, GridData.FILL, false, false);
gd.horizontalSpan = 3;
nameInput.setLayoutData(gd);
nameInput.pack();
Text descriptionInput = new Text(shell, SWT.WRAP | SWT.V_SCROLL |SWT.BORDER);
descriptionInput.setText("Description (Optional)");
descriptionInput.addListener(SWT.Activate, new Listener(){
public void handleEvent(Event event)
{
if(!desfirst)
{
System.out.println("a");
descriptionInput.setText("");
desfirst = true;
}
}
});
gd = new GridData(GridData.FILL, GridData.FILL, true, false);
gd.horizontalSpan = 6;
gd.verticalSpan = 26;
descriptionInput.setLayoutData(gd);
descriptionInput.pack();
Label blank = new Label(shell, SWT.NONE);
gd = new GridData(GridData.FILL, GridData.FILL, true, true);
gd.verticalSpan = 4;
gd.horizontalSpan = 6;
blank.setLayoutData(gd);
blank.pack();
Button save = new Button(shell, SWT.PUSH);
save.setText("Save");
save.addListener(SWT.Selection, new Listener()
{
public void handleEvent(Event event)
{
if(nameInput.getText().equals(""))
{
nameInput.setBackground(display.getSystemColor(SWT.COLOR_RED));
return;
}
abilityname = nameInput.getText();
abilityscript = descriptionInput.getText();
LinkedHashMap<String, String> a = new LinkedHashMap<String, String>();
a.put("NAME", abilityname);
a.put("DESCRIPTION", abilityscript);
newability = new AbilityEntity(a);
Main.gameState.abilities.put(abilityname, newability);
Main.gameState.customContent.put(abilityname, newability);
shell.close();
}
}
);
gd = new GridData(GridData.FILL, GridData.CENTER, false, false);
gd.horizontalSpan = 1;
save.setLayoutData(gd);
//save.pack();
shell.layout();
shell.pack();
// final Text wizpage1text = new Text(wizpage1, SWT.BORDER);
// wizpage1text.setBounds(50, 50, 150, 50);
// wizpage1text.setText("Ability_NONAME");
// Button next1 = createNextButton(wizpage1);//TODO cancel and previous button
// createBackButton(wizpage1, wizPanel, wizLayout);
// createCancelButton(wizpage1, wizPanel, wizLayout);
// next1.addListener(SWT.Selection, new Listener()
// {
// public void handleEvent(Event event)
// {
// if(wizpage1text.getText() != "")
// {
// abilityname = wizpage1text.getText();
// if(wizpagenum < wizPages.size() - 1)
// {
// wizpagenum++;
// wizLayout.topControl = wizPages.get(wizpagenum);
// wizPanel.layout();
// }
// else if(wizpagenum == wizPages.size() - 1)
// {
// System.out.println("PANIC: ITEM WIZARD PAGE 1 OUT");
// shell.close();
// }
// }
// else
// {
// wiz1Label.setBackground(display.getSystemColor(SWT.COLOR_RED));
// }
// }
// }
// );
// wizpage1.pack();
// wizPages.add(wizpage1);
// //Page2 -- Description
// final Composite wizpage2 = new Composite(wizPanel, SWT.NONE);
// Label wiz2Label = new Label(wizpage2, SWT.NONE);
// wiz2Label.setText("Enter Description (Optional)");
// wiz2Label.pack();
// final Text wizpage2text = new Text(wizpage2, SWT.BORDER);
// wizpage2text.setBounds(50, 50, 300, 200);
// wizpage2text.setText("Description here");
// Button next2 = createNextButton(wizpage2);
// createBackButton(wizpage2, wizPanel, wizLayout);
// createCancelButton(wizpage2, wizPanel, wizLayout);
// next2.addListener(SWT.Selection, new Listener()
// {
// public void handleEvent(Event event)
// {
// if(wizpage2text.getText() != "")
// {
// abilityscript = wizpage2text.getText();
// }
// else
// {
// abilityscript = "<empty>";
// }
// CreateVerificationPage(wizPanel, wizLayout);
// if(wizpagenum < wizPages.size() - 1)
// {
// wizpagenum++;
//
// wizLayout.topControl = wizPages.get(wizpagenum);
// wizPanel.layout();
// }
// else if(wizpagenum == wizPages.size() - 1)
// {
// shell.close();
// }
// }
//
//
// });
// wizPages.add(wizpage2);
// wizLayout.topControl = wizpage1;
// wizPanel.layout();
}
// private void CreateVerificationPage(final Composite wizPanel,
// final StackLayout wizLayout) {
// if(wizPages.size() > wizpagenum + 1)
// {
// wizPages.remove(wizpagenum + 1);
// }
// final Composite verific = new Composite(wizPanel, SWT.NONE);
// Label wiz8Label = new Label(verific, SWT.NONE);
// wiz8Label.setText("Name: " + abilityname + "\nDescription: " + abilityscript);
// wiz8Label.pack();
// Button confirm = new Button(verific, SWT.PUSH);
// createBackButton(verific, wizPanel, wizLayout);
// createCancelButton(verific, wizPanel, wizLayout);
// confirm.setText("Confirm");
// confirm.setBounds(WIDTH-117, HEIGHT - 90, 100, 50);
// confirm.addListener(SWT.Selection, new Listener()
// {
// public void handleEvent(Event event)
// {
// //TODO save the item
// shell.close();
// }
// });
// wizPages.add(verific);
//
// }
// public static Button createNextButton(Composite c) {
// Button nextButton = new Button(c, SWT.PUSH);
// nextButton.setText("Next");
// nextButton.setBounds(WIDTH - 117, HEIGHT - 90, 100, 50);
// return nextButton;
// }
//
// /**
// *COPY FROM CHAR WIZARD
// * creates a back button on composite c in the bottom right corner.
// * also sets the listener for the created button that changes the top
// * control page of the layout of the panel to be the previous page
// * @param c
// * @param panel
// * @param layout
// * @return
// */
// public static Button createBackButton(Composite c, final Composite panel,
// final StackLayout layout) {
// Button backButton = new Button(c, SWT.PUSH);
// backButton.setText("Back");
// backButton.setBounds(WIDTH - 220, HEIGHT - 90, 100, 50);
// backButton.addListener(SWT.Selection, new Listener() {
//
// public void handleEvent(Event event) {
// if (wizpagenum > 0)
// wizpagenum--;
// layout.topControl = wizPages.get(wizpagenum);
// panel.layout();
// }
// });
// return backButton;
// }
//
// /**
// * COPY FROM CHAR WIZARD
// * creates a cancel button on composite c in bottom left corner.
// * also sets the listener for the created button that changes the homePanel
// * top control to be home and resets the wizard page counter wizPageNum
// * @param c
// * @param home
// * @param panel
// * @param layout
// * @return
// */
// public static Button createCancelButton(Composite c,
// final Composite panel, final StackLayout layout) {
// Button cancelButton = new Button(c, SWT.PUSH);
// cancelButton.setText("Cancel");
// cancelButton.setBounds(10, HEIGHT - 90, 100, 50);
// cancelButton.addListener(SWT.Selection, new Listener() {
// public void handleEvent(Event event) {
// cancel = false;
// final Shell areYouSureShell = new Shell(display);
// areYouSureShell.setText("Cancel");
// areYouSureShell.setSize(300, 200);
// center(areYouSureShell);
//
// Label areYouSure = new Label(areYouSureShell, SWT.NONE);
// areYouSure.setLocation(40,50);
// areYouSure.setText("Are you sure you want to cancel?");
// areYouSure.pack();
//
// Button yes = new Button(areYouSureShell, SWT.PUSH);
// yes.setBounds(10,130,130,30);
// yes.setText("Yes, Cancel");
// yes.addListener(SWT.Selection, new Listener() {
// public void handleEvent(Event event) {
// cancel = true;
// areYouSureShell.dispose();
// }
// });
//
// Button no = new Button(areYouSureShell, SWT.PUSH);
// no.setBounds(160,130,130,30);
// no.setText("No, Don't Cancel");
// no.addListener(SWT.Selection, new Listener() {
// public void handleEvent(Event event) {
// cancel = false;
// areYouSureShell.dispose();
// }
// });
//
// areYouSureShell.open();
// while (!areYouSureShell.isDisposed()) {
// if (!display.readAndDispatch()) {
// display.sleep();
// }
// }
// if (cancel) {
// shell.close();
// }
// }
// });
// return cancelButton;
// }
/**
* simple getter
*/
public Shell getshell()
{
return shell;
}
}