X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.entity.ui%2Fsrc%2Forg%2Fargeo%2Fentity%2Fui%2Fforms%2FMultiTermsPart.java;fp=org.argeo.entity.ui%2Fsrc%2Forg%2Fargeo%2Fentity%2Fui%2Fforms%2FMultiTermsPart.java;h=0000000000000000000000000000000000000000;hp=8d407638626ecc8885b08b2b78d53b47f86bc591;hb=6e56ffa34cb02ab04d028423aea342e3dfed4358;hpb=c285180bece610b2c2921d44fe14b6dde2123efa diff --git a/org.argeo.entity.ui/src/org/argeo/entity/ui/forms/MultiTermsPart.java b/org.argeo.entity.ui/src/org/argeo/entity/ui/forms/MultiTermsPart.java deleted file mode 100644 index 8d40763..0000000 --- a/org.argeo.entity.ui/src/org/argeo/entity/ui/forms/MultiTermsPart.java +++ /dev/null @@ -1,207 +0,0 @@ -package org.argeo.entity.ui.forms; - -import java.util.ArrayList; -import java.util.List; - -import javax.jcr.Item; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.cms.ui.forms.FormStyle; -import org.argeo.cms.ui.util.CmsUiUtils; -import org.argeo.cms.ui.viewers.EditablePart; -import org.argeo.cms.ui.widgets.ContextOverlay; -import org.argeo.eclipse.ui.MouseDoubleClick; -import org.argeo.eclipse.ui.MouseDown; -import org.argeo.eclipse.ui.Selected; -import org.argeo.entity.Term; -import org.argeo.entity.TermsManager; -import org.argeo.jcr.Jcr; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.FocusEvent; -import org.eclipse.swt.events.FocusListener; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.ToolBar; -import org.eclipse.swt.widgets.ToolItem; - -/** {@link EditablePart} for multiple terms. */ -public class MultiTermsPart extends AbstractTermsPart { - private static final long serialVersionUID = -4961135649177920808L; - private final static Log log = LogFactory.getLog(MultiTermsPart.class); - - public MultiTermsPart(Composite parent, int style, Item item, TermsManager termsManager, String typology) { - super(parent, style, item, termsManager, typology); - } - - @Override - protected Control createControl(Composite box, String style) { - Composite placeholder = new Composite(box, SWT.NONE); - - boolean vertical = SWT.VERTICAL == (getStyle() & SWT.VERTICAL); - RowLayout rl = new RowLayout(vertical ? SWT.VERTICAL : SWT.HORIZONTAL); - rl = CmsUiUtils.noMarginsRowLayout(rl); -// rl.wrap = true; -// rl.justify = true; - placeholder.setLayout(rl); - List currentValue = getValue(); - if (currentValue != null && !currentValue.isEmpty()) { - for (Term value : currentValue) { - Composite block = new Composite(placeholder, SWT.NONE); - block.setLayout(CmsUiUtils.noSpaceGridLayout(3)); - Label lbl = new Label(block, SWT.NONE); - String display = getTermLabel(value); - lbl.setText(display); - CmsUiUtils.style(lbl, style == null ? FormStyle.propertyText.style() : style); - processTermListLabel(value, lbl); - if (isEditable()) - lbl.addMouseListener((MouseDoubleClick) (e) -> { - startEditing(); - }); - if (isEditing()) { - ToolBar toolBar = new ToolBar(block, SWT.HORIZONTAL); - ToolItem deleteItem = new ToolItem(toolBar, SWT.FLAT); - styleDelete(deleteItem); - deleteItem.addSelectionListener((Selected) (e) -> { - // we retrieve them again here because they may have changed - List curr = getValue(); - List newValue = new ArrayList<>(); - for (Term v : curr) { - if (!v.equals(value)) - newValue.add(v); - } - setValue(newValue); - block.dispose(); - layout(true, true); - }); - - } - } - } else {// empty - if (isEditable() && !isEditing()) { - ToolBar toolBar = new ToolBar(placeholder, SWT.HORIZONTAL); - ToolItem addItem = new ToolItem(toolBar, SWT.FLAT); - styleAdd(addItem); - addItem.addSelectionListener((Selected) (e) -> { - startEditing(); - }); - } - } - - if (isEditing()) { - Composite block = new Composite(placeholder, SWT.NONE); - block.setLayout(CmsUiUtils.noSpaceGridLayout(3)); - - createHighlight(block); - - Text txt = new Text(block, SWT.SINGLE | SWT.BORDER); - txt.setLayoutData(CmsUiUtils.fillWidth()); -// txt.setMessage("[new]"); - - CmsUiUtils.style(txt, style == null ? FormStyle.propertyText.style() : style); - - ToolBar toolBar = new ToolBar(block, SWT.HORIZONTAL); - ToolItem cancelItem = new ToolItem(toolBar, SWT.FLAT); - styleCancel(cancelItem); - cancelItem.addSelectionListener((Selected) (e) -> { - stopEditing(); - }); - - ContextOverlay contextOverlay = new ContextOverlay(txt, SWT.NONE) { - private static final long serialVersionUID = -7980078594405384874L; - - @Override - protected void onHide() { - stopEditing(); - } - }; - contextOverlay.setLayout(new GridLayout()); - // filter - txt.addModifyListener((e) -> { - String filter = txt.getText().toLowerCase(); - if ("".equals(filter.trim())) - filter = null; - refresh(contextOverlay, filter, txt); - }); - txt.addFocusListener(new FocusListener() { - private static final long serialVersionUID = -6024501573409619949L; - - @Override - public void focusLost(FocusEvent event) { -// if (!contextOverlay.isDisposed() && contextOverlay.isShellVisible()) -// getDisplay().asyncExec(() -> stopEditing()); - } - - @Override - public void focusGained(FocusEvent event) { - // txt.setText(""); - if (!contextOverlay.isDisposed() && !contextOverlay.isShellVisible()) - refresh(contextOverlay, null, txt); - } - }); - layout(new Control[] { txt }); - // getDisplay().asyncExec(() -> txt.setFocus()); - } - return placeholder; - } - - @Override - protected void refresh(ContextOverlay contextArea, String filter, Text txt) { - CmsUiUtils.clear(contextArea); - List terms = termsManager.listAllTerms(typology.getId()); - List currentValue = getValue(); - terms: for (Term term : terms) { - if (currentValue != null && currentValue.contains(term)) - continue terms; - String display = getTermLabel(term); - if (filter != null && !display.toLowerCase().contains(filter)) - continue terms; - Label termL = new Label(contextArea, SWT.WRAP); - termL.setText(display); - processTermListLabel(term, termL); - if (isTermSelectable(term)) - termL.addMouseListener((MouseDown) (e) -> { - List newValue = new ArrayList<>(); - List curr = getValue(); - if (currentValue != null) - newValue.addAll(curr); - newValue.add(term); - setValue(newValue); - contextArea.hide(); - stopEditing(); - }); - } - contextArea.show(); - } - - protected List getValue() { - String property = typology.getId(); - List curr = Jcr.getMultiple(getNode(), property); - List res = new ArrayList<>(); - if (curr != null) - terms: for (String str : curr) { - Term term = termsManager.getTerm(str); - if (term == null) { - log.warn("Ignoring term " + str + " for " + getNode() + ", as it was not found."); - continue terms; - } - res.add(term); - } - return res; - } - - protected void setValue(List value) { - String property = typology.getId(); - List ids = new ArrayList<>(); - for (Term term : value) { - ids.add(term.getId()); - } - Jcr.set(getNode(), property, ids); - Jcr.save(getNode()); - } - -}