]> git.argeo.org Git - gpl/argeo-suite.git/blob - swt/org.argeo.app.swt/src/org/argeo/app/swt/terms/AbstractTermsPart.java
Improve SWT utils
[gpl/argeo-suite.git] / swt / org.argeo.app.swt / src / org / argeo / app / swt / terms / AbstractTermsPart.java
1 package org.argeo.app.swt.terms;
2
3 import org.argeo.api.acr.Content;
4 import org.argeo.api.cms.ux.CmsIcon;
5 import org.argeo.app.api.Term;
6 import org.argeo.app.api.TermsManager;
7 import org.argeo.app.api.Typology;
8 import org.argeo.cms.Localized;
9 import org.argeo.cms.swt.CmsSwtTheme;
10 import org.argeo.cms.swt.CmsSwtUtils;
11 import org.argeo.cms.swt.SwtEditablePart;
12 import org.argeo.cms.swt.widgets.ContextOverlay;
13 import org.argeo.cms.swt.widgets.StyledControl;
14 import org.argeo.cms.ux.acr.ContentPart;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.graphics.Color;
17 import org.eclipse.swt.layout.GridData;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Label;
21 import org.eclipse.swt.widgets.Text;
22 import org.eclipse.swt.widgets.ToolItem;
23
24 /** Common logic between single and mutliple terms editable part. */
25 public abstract class AbstractTermsPart extends StyledControl implements SwtEditablePart, ContentPart {
26 private static final long serialVersionUID = -5497097995341927710L;
27 protected final TermsManager termsManager;
28 protected final Typology typology;
29
30 private final boolean editable;
31
32 private CmsIcon deleteIcon;
33 private CmsIcon addIcon;
34 private CmsIcon cancelIcon;
35
36 private Color highlightColor;
37 private Composite highlight;
38
39 private boolean canDelete = true;
40
41 protected final CmsSwtTheme theme;
42
43 @SuppressWarnings("rawtypes")
44 private Class<? extends Enum> localized;
45
46 public AbstractTermsPart(Composite parent, int style, Content item, TermsManager termsManager, String typology) {
47 super(parent, style);
48 if (item == null)
49 throw new IllegalArgumentException("Item cannot be null");
50 setData(item);
51 this.termsManager = termsManager;
52 this.typology = termsManager.getTypology(typology);
53 this.theme = CmsSwtUtils.getCmsTheme(parent);
54 editable = !(SWT.READ_ONLY == (style & SWT.READ_ONLY));
55 highlightColor = parent.getDisplay().getSystemColor(SWT.COLOR_GRAY);
56 }
57
58 public boolean isEditable() {
59 return editable;
60 }
61
62 protected void createHighlight(Composite block) {
63 highlight = new Composite(block, SWT.NONE);
64 highlight.setBackground(highlightColor);
65 GridData highlightGd = new GridData(SWT.FILL, SWT.FILL, false, false);
66 highlightGd.widthHint = 5;
67 highlightGd.heightHint = 3;
68 highlight.setLayoutData(highlightGd);
69
70 }
71
72 protected String getTermLabel(Term term) {
73 if (term instanceof Localized) {
74 return ((Localized) term).lead();
75 } else {
76 if (localized != null) {
77 @SuppressWarnings("unchecked")
78 String msg = ((Localized) Enum.valueOf(localized, term.getName())).lead();
79 return msg;
80 } else {
81 return term.getName();
82 }
83 }
84
85 }
86
87 protected abstract void refresh(ContextOverlay contextArea, String filter, Text txt);
88
89 protected boolean isTermSelectable(Term term) {
90 return true;
91 }
92
93 protected void processTermListLabel(Term term, Label label) {
94
95 }
96
97 protected void setControlLayoutData(Control control) {
98 control.setLayoutData(CmsSwtUtils.fillAll());
99 }
100
101 protected void setContainerLayoutData(Composite composite) {
102 composite.setLayoutData(CmsSwtUtils.fillAll());
103 }
104
105 //
106 // STYLING
107 //
108 public void setDeleteIcon(CmsIcon deleteIcon) {
109 this.deleteIcon = deleteIcon;
110 }
111
112 public void setAddIcon(CmsIcon addIcon) {
113 this.addIcon = addIcon;
114 }
115
116 public void setCancelIcon(CmsIcon cancelIcon) {
117 this.cancelIcon = cancelIcon;
118 }
119
120 protected TermsManager getTermsManager() {
121 return termsManager;
122 }
123
124 protected void styleDelete(ToolItem deleteItem) {
125 if (deleteIcon != null)
126 deleteItem.setImage(theme.getSmallIcon(deleteIcon));
127 else
128 deleteItem.setText("-");
129 }
130
131 protected void styleCancel(ToolItem cancelItem) {
132 if (cancelIcon != null)
133 cancelItem.setImage(theme.getSmallIcon(cancelIcon));
134 else
135 cancelItem.setText("X");
136 }
137
138 protected void styleAdd(ToolItem addItem) {
139 if (addIcon != null)
140 addItem.setImage(theme.getSmallIcon(addIcon));
141 else
142 addItem.setText("+");
143 }
144
145 @Override
146 public Content getContent() {
147 return (Content) getData();
148 }
149
150 public void setCanDelete(boolean canDelete) {
151 this.canDelete = canDelete;
152 }
153
154 public boolean isCanDelete() {
155 return canDelete;
156 }
157
158 @SuppressWarnings("rawtypes")
159 public void setLocalized(Class<? extends Enum> localized) {
160 this.localized = localized;
161 }
162
163 }