]> git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java
86b5b23f4c49b849d47a76578e2dee3be76dc5f1
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / composites / ItemTemplateTitleComposite.java
1 package org.argeo.slc.akb.ui.composites;
2
3 import java.util.List;
4
5 import javax.jcr.Node;
6 import javax.jcr.Property;
7
8 import org.argeo.slc.akb.ui.AkbUiUtils;
9 import org.argeo.slc.akb.utils.AkbJcrUtils;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.events.ModifyEvent;
12 import org.eclipse.swt.events.ModifyListener;
13 import org.eclipse.swt.layout.GridData;
14 import org.eclipse.swt.layout.GridLayout;
15 import org.eclipse.swt.widgets.Combo;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Label;
18 import org.eclipse.swt.widgets.Text;
19 import org.eclipse.ui.forms.AbstractFormPart;
20 import org.eclipse.ui.forms.IManagedForm;
21 import org.eclipse.ui.forms.widgets.FormToolkit;
22
23 public class ItemTemplateTitleComposite extends Composite {
24 // private final static Log log =
25 // LogFactory.getLog(MixTitleComposite.class);
26
27 private final Node akbNode;
28 private final FormToolkit toolkit;
29 private final IManagedForm form;
30 // Don't forget to unregister on dispose
31 private AbstractFormPart formPart;
32
33 // To enable set focus
34 private Text titleTxt;
35
36 public ItemTemplateTitleComposite(Composite parent, int style,
37 FormToolkit toolkit, IManagedForm form, Node akbNode) {
38 super(parent, style);
39 this.akbNode = akbNode;
40 this.toolkit = toolkit;
41 this.form = form;
42 populate();
43 toolkit.adapt(this);
44 }
45
46 private void populate() {
47 // Initialization
48 Composite parent = this;
49
50 parent.setLayout(new GridLayout(4, false));
51
52 // first line: Item name
53 toolkit.createLabel(parent, "Name");
54 titleTxt = toolkit.createText(parent, "", SWT.BORDER);
55 GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
56 titleTxt.setLayoutData(gd);
57
58 // Second line: alias management
59 toolkit.createLabel(parent, "Alias");
60 final Combo typeCmb = new Combo(parent, SWT.READ_ONLY);
61
62 // TODO enable live refresh
63 final List<Node> definedAliases = AkbJcrUtils
64 .getDefinedAliasForNode(akbNode);
65
66 final String[] names = new String[definedAliases.size()];
67 int i = 0;
68 for (Node node : definedAliases)
69 names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE);
70 typeCmb.setItems(names);
71
72 gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
73 typeCmb.setLayoutData(gd);
74
75 // 3rd line: description
76 Label lbl = toolkit.createLabel(parent, "Description");
77 lbl.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
78 final Text descTxt = toolkit.createText(parent, "", SWT.BORDER
79 | SWT.MULTI | SWT.WRAP);
80 gd = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
81 descTxt.setLayoutData(gd);
82
83 // Part Management
84 final AbstractFormPart part = new AbstractFormPart() {
85 public void refresh() {
86 super.refresh();
87 // update display value
88 AkbUiUtils.refreshFormTextWidget(titleTxt, akbNode,
89 Property.JCR_TITLE);
90 AkbUiUtils.refreshFormTextWidget(descTxt, akbNode,
91 Property.JCR_DESCRIPTION);
92
93 // TODO implement this
94 // typeCmb.select(getCurrTypeIndex());
95 typeCmb.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(akbNode));
96 }
97 };
98
99 // Listeners
100 AkbUiUtils.addTextModifyListener(titleTxt, akbNode, Property.JCR_TITLE,
101 part);
102 AkbUiUtils.addTextModifyListener(descTxt, akbNode,
103 Property.JCR_DESCRIPTION, part);
104
105 typeCmb.addModifyListener(new ModifyListener() {
106 @Override
107 public void modifyText(ModifyEvent event) {
108 // try {
109 int oldIndex = -1; // getCurrTypeIndex();
110 int selIndex = typeCmb.getSelectionIndex();
111
112 // insure something has really been modified
113 if (selIndex < 0 || oldIndex == selIndex)
114 return;
115
116 // TODO set new alias
117 part.markDirty();
118 // } catch (RepositoryException e) {
119 // throw new AkbException(
120 // "Error while updating connector alias", e);
121 // }
122 }
123 });
124
125 form.addPart(part);
126 }
127
128 @Override
129 public boolean setFocus() {
130 return titleTxt.setFocus();
131 }
132
133 protected void disposePart(AbstractFormPart part) {
134 if (part != null) {
135 form.removePart(part);
136 part.dispose();
137 }
138 }
139
140 @Override
141 public void dispose() {
142 disposePart(formPart);
143 super.dispose();
144 }
145 }