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