1
23package org.jzuul.gdk.swt;
24
25import java.util.Arrays;
26import java.util.Iterator;
27
28import org.eclipse.swt.SWT;
29import org.eclipse.swt.events.SelectionEvent;
30import org.eclipse.swt.events.SelectionListener;
31import org.eclipse.swt.events.ShellAdapter;
32import org.eclipse.swt.events.ShellEvent;
33import org.eclipse.swt.layout.GridData;
34import org.eclipse.swt.layout.GridLayout;
35import org.eclipse.swt.widgets.Button;
36import org.eclipse.swt.widgets.Dialog;
37import org.eclipse.swt.widgets.Display;
38import org.eclipse.swt.widgets.Event;
39import org.eclipse.swt.widgets.Group;
40import org.eclipse.swt.widgets.List;
41import org.eclipse.swt.widgets.Shell;
42import org.jdom.Element;
43import org.jzuul.engine.gui.utils.Util;
44
45
52public class EventEditorDialog extends Dialog {
53
54 protected String[] events = { "default", "takeup", "drop", "playerenter", "playerleave", "use", "dialog_continue", "dialog_custom_result_1", "dialog_custom_result_2", "dialog_custom_result_3", "dialog_error", "dialog_npc_give", "dialog_npc_take", "dialog_end_failure", "dialog_end_success", "use_success", "use_failure", "timer" };
59 protected List eventList;
60
61 protected ActionEditorComposite actionComposite;
62
63 protected String currentEvent;
64
65 protected java.util.List eventElementsList;
66
67
70 public EventEditorDialog(Shell arg0) {
71 super(arg0);
72 Arrays.sort(events);
73 }
74
75
79 public EventEditorDialog(Shell arg0, int arg1) {
80 super(arg0, arg1);
81 Arrays.sort(events);
82 }
83
84 public void setEvents(String[] events) {
85 this.events = events;
86
87 }
88
89 public Object open(java.util.List eventElements) {
90 eventElementsList = eventElements;
91 Shell parent = getParent();
92 final Shell shell = new Shell(parent, SWT.BORDER | SWT.MIN | SWT.RESIZE | SWT.APPLICATION_MODAL);
93 shell.setText(Messages.getString("EDIT_EVENT_ACTIONS")); shell.setLayout(new GridLayout(10, true));
95 shell.setImage(Util.getImagefromResource(parent.getDisplay(),"etc/artwork/jz.png")); shell.addShellListener(new ShellAdapter() {
97
98 public void shellClosed(ShellEvent e) {
99 cleanUpChanges();
00 }
01 });
02
03 { eventList = new List(shell, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE | SWT.CHECK);
05 final GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL
06 | GridData.GRAB_VERTICAL);
07 gridData.horizontalSpan = 3;
08 eventList.setLayoutData(gridData);
09 eventList.setItems(events);
10 eventList.addSelectionListener(new SelectionListener() {
11
12 public void widgetSelected(SelectionEvent arg0) {
13 cleanUpChanges();
14 currentEvent = eventList.getItem(eventList.getSelectionIndex());
15 showActionsByEvent(currentEvent);
17 }
18
19 public void widgetDefaultSelected(SelectionEvent arg0) {
20 }
21 });
22
23 }
24 { actionComposite = new ActionEditorComposite(shell, SWT.NONE,findEvent(null));
26 }
27 { final Group bottomGroup = new Group(shell, SWT.NONE);
29 GridData groupLD = new GridData(GridData.FILL_HORIZONTAL);
30 groupLD.heightHint = 40;
31 groupLD.horizontalSpan = 10;
32 bottomGroup.setLayoutData(groupLD);
33
34 bottomGroup.setLayout(new GridLayout(10, true));
35
36 GridData buttonData = new GridData(GridData.VERTICAL_ALIGN_END);
37 buttonData.heightHint = 30;
38 buttonData.widthHint = 80;
39
40 Button ok = new Button(bottomGroup, SWT.PUSH);
41 ok.setText(Messages.getString("OK")); ok.addSelectionListener(new SelectionListener() {
43
44 public void widgetSelected(SelectionEvent arg0) {
45 cleanUpChanges();
46 shell.dispose();
47 }
48
49 public void widgetDefaultSelected(SelectionEvent arg0) {
50 }
51 });
52 ok.setLayoutData(buttonData);
53
54 }
55 eventList.select(0);
56 eventList.notifyListeners(SWT.Selection, new Event());
57
58 shell.setSize(620, 480);
59 shell.open();
60 Display display = parent.getDisplay();
61 while (!shell.isDisposed()) {
62 if (!display.readAndDispatch()) display.sleep();
63 }
64 return null;
65 }
66
67 public Element findEvent(String name) {
68 if (name == null) { name = events[0]; }
69 for (Iterator elementIter = eventElementsList.iterator(); elementIter.hasNext();) {
70 Element eventElement = (Element) elementIter.next();
71 if (eventElement.getAttributeValue("name").equals(name)) { return eventElement; } }
73 Element newEl = new Element("event"); newEl.setAttribute("name", name); eventElementsList.add(newEl);
77 return newEl;
78 }
79
80 public void showActionsByEvent(String event) {
81 Element eventEl = findEvent(event);
82 Element actions = eventEl.getChild("actions"); if (actions == null) return;
84 java.util.List singleActions = actions.getChildren();
85 actionComposite.showActionElements(singleActions);
86 }
87
88 protected void cleanUpChanges() {
89 replaceActions(currentEvent, actionComposite.getElementList());
90 }
91
92 protected void replaceActions(String eventName, java.util.List actionElements) {
93 Element event = findEvent(eventName);
94 if (actionElements.isEmpty()) {
95 event.detach();
96 return;
97 }
98
99 event.removeChildren("actions"); Element actions = new Element("actions"); actions.addContent(actionElements);
02 event.addContent(actions);
03
04 System.err.println("Added " + actionElements.size() + " Elements to event " + eventName); }
06
07}