1 package org
.argeo
.app
.swt
.terms
;
5 import org
.argeo
.api
.acr
.Content
;
6 import org
.argeo
.app
.api
.Term
;
7 import org
.argeo
.app
.api
.TermsManager
;
8 import org
.argeo
.app
.ux
.SuiteStyle
;
9 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
10 import org
.argeo
.cms
.swt
.MouseDoubleClick
;
11 import org
.argeo
.cms
.swt
.MouseDown
;
12 import org
.argeo
.cms
.swt
.Selected
;
13 import org
.argeo
.cms
.swt
.SwtEditablePart
;
14 import org
.argeo
.cms
.swt
.widgets
.ContextOverlay
;
15 import org
.eclipse
.swt
.SWT
;
16 import org
.eclipse
.swt
.events
.FocusEvent
;
17 import org
.eclipse
.swt
.events
.FocusListener
;
18 import org
.eclipse
.swt
.layout
.GridLayout
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.eclipse
.swt
.widgets
.Control
;
21 import org
.eclipse
.swt
.widgets
.Text
;
22 import org
.eclipse
.swt
.widgets
.ToolBar
;
23 import org
.eclipse
.swt
.widgets
.ToolItem
;
25 /** {@link SwtEditablePart} for terms. */
26 public class SingleTermPart
extends AbstractTermsPart
{
27 private static final long serialVersionUID
= -4961135649177920808L;
29 public SingleTermPart(Composite parent
, int style
, Content item
, TermsManager termsManager
, String typology
) {
30 super(parent
, style
, item
, termsManager
, typology
);
34 protected Control
createControl(Composite box
, String style
) {
36 Composite block
= new Composite(box
, SWT
.NONE
);
37 block
.setLayout(CmsSwtUtils
.noSpaceGridLayout(3));
39 createHighlight(block
);
41 Text txt
= new Text(block
, SWT
.SINGLE
);
42 CmsSwtUtils
.style(txt
, style
== null ? SuiteStyle
.simpleInput
.style() : style
);
44 ToolBar toolBar
= new ToolBar(block
, SWT
.HORIZONTAL
);
46 ToolItem deleteItem
= new ToolItem(toolBar
, SWT
.PUSH
);
47 styleDelete(deleteItem
);
48 deleteItem
.addSelectionListener((Selected
) (e
) -> {
53 ToolItem cancelItem
= new ToolItem(toolBar
, SWT
.PUSH
);
54 styleCancel(cancelItem
);
55 cancelItem
.addSelectionListener((Selected
) (e
) -> {
59 ContextOverlay contextOverlay
= new ContextOverlay(txt
, SWT
.NONE
) {
60 private static final long serialVersionUID
= -7980078594405384874L;
63 protected void onHide() {
67 contextOverlay
.setLayout(new GridLayout());
69 txt
.addModifyListener((e
) -> {
70 String filter
= txt
.getText().toLowerCase();
71 if ("".equals(filter
.trim()))
73 refresh(contextOverlay
, filter
, txt
);
75 txt
.addFocusListener(new FocusListener() {
76 private static final long serialVersionUID
= -6024501573409619949L;
79 public void focusLost(FocusEvent event
) {
80 // if (!contextOverlay.isDisposed() && contextOverlay.isShellVisible())
81 // getDisplay().asyncExec(() -> stopEditing());
85 public void focusGained(FocusEvent event
) {
87 if (!contextOverlay
.isDisposed() && !contextOverlay
.isShellVisible())
88 refresh(contextOverlay
, null, txt
);
91 layout(new Control
[] { block
});
92 getDisplay().asyncExec(() -> txt
.setFocus());
95 Composite block
= new Composite(box
, SWT
.NONE
);
96 block
.setLayout(CmsSwtUtils
.noSpaceGridLayout(2));
97 Term currentValue
= getValue();
98 if (currentValue
!= null) {
99 Text lbl
= new Text(block
, SWT
.SINGLE
);
100 lbl
.setEditable(false);
101 String display
= getTermLabel(currentValue
);
102 lbl
.setText(display
);
103 CmsSwtUtils
.style(lbl
, style
== null ? SuiteStyle
.simpleInput
.style() : style
);
104 processTermListLabel(currentValue
, lbl
);
106 lbl
.addMouseListener((MouseDoubleClick
) (e
) -> {
113 ToolBar toolBar
= new ToolBar(block
, SWT
.HORIZONTAL
);
114 ToolItem addItem
= new ToolItem(toolBar
, SWT
.FLAT
);
116 addItem
.addSelectionListener((Selected
) (e
) -> {
120 // add dummy text so that height wont's move afterwards
121 Text lbl
= new Text(block
, SWT
.SINGLE
);
122 lbl
.setEditable(false);
123 if (!isEditable()) {// empty, non editable
124 if (getMessage() != null)
125 lbl
.setMessage(getMessage());
133 protected void refresh(ContextOverlay contextArea
, String filter
, Text txt
) {
134 CmsSwtUtils
.clear(contextArea
);
135 List
<?
extends Term
> terms
= termsManager
.listAllTerms(typology
.getId());
136 terms
: for (Term term
: terms
) {
137 String display
= getTermLabel(term
);
138 if (filter
!= null && !display
.toLowerCase().contains(filter
))
140 Text termL
= new Text(contextArea
, SWT
.WRAP
);
141 termL
.setEditable(false);
142 termL
.setText(display
);
143 processTermListLabel(term
, termL
);
144 if (isTermSelectable(term
))
145 termL
.addMouseListener((MouseDown
) (e
) -> {
155 protected Term
getValue() {
156 String property
= typology
.getId();
157 String id
= getContent().attr(property
);
158 Term term
= termsManager
.getTerm(id
);
163 protected void setValue(Term value
) {
164 String property
= typology
.getId();
166 getContent().remove(property
);
168 getContent().put(property
, value
.getId());
169 // Jcr.set(getNode(), property, value != null ? value.getId() : null);
170 // Jcr.save(getNode());