1
23package org.jzuul.gdk.swt;
24
25import java.util.ArrayList;
26import java.util.Iterator;
27import java.util.List;
28
29import org.eclipse.swt.SWT;
30import org.eclipse.swt.events.SelectionEvent;
31import org.eclipse.swt.events.SelectionListener;
32import org.eclipse.swt.layout.GridData;
33import org.eclipse.swt.layout.GridLayout;
34import org.eclipse.swt.widgets.Button;
35import org.eclipse.swt.widgets.Combo;
36import org.eclipse.swt.widgets.Composite;
37import org.eclipse.swt.widgets.Group;
38import org.eclipse.swt.widgets.Label;
39import org.eclipse.swt.widgets.Shell;
40import org.eclipse.swt.widgets.Text;
41import org.jdom.Content;
42import org.jdom.Element;
43import org.jdom.Parent;
44
45
52public class CharacterDetailsComposite extends Composite {
53
54 Text description;
55
56 Combo action;
57
58 List actions;
60 Element character;
61
62 PropertyComposite properties;
63
64 private Button bt1;
65
66 private Button bt2;
67
68
72 public CharacterDetailsComposite(Composite arg0, int arg1) {
73 super(arg0, arg1);
74
75 actions = new ArrayList();
76 character = new Element("person");
78 GridData layoutGridData = new GridData(GridData.FILL_BOTH);
80 layoutGridData.horizontalSpan = 4;
81 this.setLayoutData(layoutGridData);
82 GridLayout layout = new GridLayout(1, false);
83 this.setLayout(layout);
84
85 final Group group = new Group(this, SWT.NONE);
87 GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
88 group.setLayoutData(gridData);
89 GridLayout groupLayout = new GridLayout(2, false);
90 group.setLayout(groupLayout);
91
92 new Label((Composite) group, SWT.NONE).setText(Messages.getString("DESCRIPTION_COLON")); description = new Text((Composite) group, SWT.BORDER);
94 description.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
95
96 properties = new PropertyComposite((Composite) this, SWT.NONE);
97
98
00 final Group buttonGroup = new Group(this, SWT.NONE);
01 GridData buttonGridData = new GridData(GridData.FILL_HORIZONTAL);
02 buttonGridData.horizontalSpan = 1;
03 buttonGroup.setLayoutData(buttonGridData);
04 GridLayout buttonGroupLayout = new GridLayout(2, false);
05 buttonGroup.setLayout(buttonGroupLayout);
06
07 bt1 = new Button((Composite) buttonGroup, SWT.NONE);
08 bt1.setText(Messages.getString("EDIT_EVENTS")); bt1.addSelectionListener(new SelectionListener() {
10
11 public void widgetSelected(SelectionEvent arg0) {
12 EventEditorDialog ed = new EventEditorDialog(new Shell(arg0.display));
13 ed.open(character.getChildren("event")); }
15
16 public void widgetDefaultSelected(SelectionEvent arg0) {
17 }
18 });
19
20 bt2 = new Button((Composite) buttonGroup, SWT.PUSH);
21 bt2.setText(Messages.getString("EDIT_DIALOGS")); bt2.addSelectionListener(new SelectionListener() {
23
24 public void widgetSelected(SelectionEvent arg0) {
25 DialogEditorDialog ed = new DialogEditorDialog(new Shell(arg0.display));
26 ed.open(getDialogForCharacter());
27
28 }
29
30 public void widgetDefaultSelected(SelectionEvent arg0) {
31 }
32 });
33 group.layout();
34 }
35
36 public void showCharacterElement(Element character) {
37 if (character != null) {
38 this.enable();
39 this.character = character;
40 String desc = character.getChildText("description"); if (desc != null && !desc.equals("")) { description.setText(desc);
43 } else {
44 description.setText(""); description.setFocus();
46 }
47 description.setSelection(description.getText().length());
48 properties.showProperties(character.getChildren("property"));
50 } else {
51 this.clean();
52 }
53 }
54
55 public void updateElement() {
56 if (character != null) {
57 enable();
58 Element e = character.getChild("description"); if (e != null) {
60 e.setText(description.getText());
61 } else {
62 character.addContent(new Element("description").setText(description.getText())); }
64 character.removeChildren("property"); character.addContent(properties.getElementList());
66 } else {
67 disable();
68 }
69 }
70
71 protected Element getDialogForCharacter() {
72 String name = character.getAttributeValue("name"); if (name == null) return null;
74 Parent gamefile = character;
75
76 List contents = JdomHelpers.getFirstLevelElements(character);
77 Element dialogs = null;
78 for (Iterator contentIter = contents.iterator(); contentIter.hasNext();) {
79 Content jdomContent = (Content) contentIter.next();
80 if (jdomContent instanceof Element) {
81 Element jdomElement = (Element) jdomContent;
82 if (jdomElement.getName().equals("dialogs")) { dialogs = jdomElement;
84 break;
85 }
86 }
87 }
88 if (dialogs != null) {
89 System.err.println("Dialog != null"); List dialogOwner = dialogs.getChildren("dialog-owner"); for (Iterator dialogOwnerIter = dialogOwner.iterator(); dialogOwnerIter.hasNext();) {
92 Element ownerElement = (Element) dialogOwnerIter.next();
93 if (ownerElement.getAttributeValue("name").equals(name)) { return ownerElement; } }
95 }
96 Element newEl = new Element("dialog-owner"); newEl.setAttribute("name", name);
99 dialogs.addContent(newEl);
00
01 return newEl;
02 }
03
04 protected void clean() {
05 this.description.setText(""); if (this.action != null) this.action.select(0);
07 this.actions = null;
08 this.character = null;
09 this.properties.showProperties(null);
10 disable();
11 }
12
13 public void enable() {
14 setEnabled(true);
15 }
16
17 public void disable() {
18 setEnabled(false);
19 }
20
21 public void setEnabled(boolean enabled) {
22 description.setEnabled(enabled);
23 if (action != null) {
24 action.setEnabled(enabled);
25 }
26 properties.setEnabled(enabled);
27 bt1.setEnabled(enabled);
28 bt2.setEnabled(enabled);
29 properties.setEnabled(enabled);
30 }
31
32}