Revision 5367d5aa
Added by Andreas Kohlbecker about 7 years ago
src/main/java/eu/etaxonomy/cdm/vaadin/component/TimePeriodField.java | ||
---|---|---|
11 | 11 |
import com.vaadin.data.fieldgroup.BeanFieldGroup; |
12 | 12 |
import com.vaadin.data.util.BeanItem; |
13 | 13 |
import com.vaadin.event.FieldEvents.TextChangeEvent; |
14 |
import com.vaadin.server.FontAwesome; |
|
14 | 15 |
import com.vaadin.ui.Alignment; |
16 |
import com.vaadin.ui.Button; |
|
15 | 17 |
import com.vaadin.ui.Component; |
16 | 18 |
import com.vaadin.ui.CssLayout; |
17 | 19 |
import com.vaadin.ui.CustomField; |
18 | 20 |
import com.vaadin.ui.GridLayout; |
19 | 21 |
import com.vaadin.ui.Label; |
20 | 22 |
import com.vaadin.ui.TextField; |
23 |
import com.vaadin.ui.themes.ValoTheme; |
|
21 | 24 |
|
22 | 25 |
import eu.etaxonomy.cdm.model.common.TimePeriod; |
23 | 26 |
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser; |
... | ... | |
44 | 47 |
|
45 | 48 |
GridLayout grid = new GridLayout(3, 3); |
46 | 49 |
|
50 |
CssLayout detailsView = new CssLayout(); |
|
51 |
CssLayout buttonTextField = new CssLayout(); |
|
52 |
|
|
53 |
CssLayout simpleView = new CssLayout(); |
|
54 |
|
|
55 |
TextField cacheField = new TextField(); |
|
56 |
|
|
47 | 57 |
/** |
48 | 58 |
* |
49 | 59 |
*/ |
... | ... | |
67 | 77 |
|
68 | 78 |
super.setPrimaryStyleName(PRIMARY_STYLE); |
69 | 79 |
|
80 |
CssLayout root = new CssLayout(); |
|
81 |
|
|
82 |
initSimpleView(); |
|
83 |
root.addComponent(simpleView); |
|
84 |
|
|
85 |
initDetailsView(); |
|
86 |
root.addComponent(detailsView); |
|
87 |
|
|
88 |
applyDefaultStyles(); |
|
89 |
|
|
90 |
showSimple(); |
|
91 |
|
|
92 |
return root; |
|
93 |
} |
|
94 |
|
|
95 |
/** |
|
96 |
* |
|
97 |
*/ |
|
98 |
private void initSimpleView() { |
|
99 |
|
|
100 |
cacheField.setWidth(100, Unit.PERCENTAGE); |
|
101 |
Button showDetailsButton = new Button(FontAwesome.CALENDAR); |
|
102 |
showDetailsButton.addClickListener(e -> showDetails()); |
|
103 |
simpleView.addComponent(showDetailsButton); |
|
104 |
simpleView.addComponent(cacheField); |
|
105 |
simpleView.addStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP); |
|
106 |
} |
|
107 |
|
|
108 |
/** |
|
109 |
* |
|
110 |
*/ |
|
111 |
private void initDetailsView() { |
|
112 |
|
|
70 | 113 |
parseField = new TextField(); |
71 | 114 |
parseField.setWidth(100, Unit.PERCENTAGE); |
72 | 115 |
parseField.setInputPrompt("This field will parse the entered time period"); |
73 | 116 |
parseField.addTextChangeListener(e -> parseInput(e)); |
74 | 117 |
|
118 |
Button closeDetailsButton = new Button(FontAwesome.CLOSE); |
|
119 |
closeDetailsButton.addClickListener(e -> showSimple()); |
|
120 |
|
|
121 |
buttonTextField.addComponent(closeDetailsButton); |
|
122 |
buttonTextField.addComponent(parseField); |
|
123 |
|
|
75 | 124 |
PartialDateField startDate = new PartialDateField("Start"); |
76 | 125 |
startDate.setInputPrompt("dd.mm.yyy"); |
77 | 126 |
PartialDateField endDate = new PartialDateField("End"); |
... | ... | |
86 | 135 |
toLabel = new Label("\u2014"); // EM DASH : 0x2014 |
87 | 136 |
|
88 | 137 |
int row = 0; |
89 |
grid.addComponent(parseField, 0, row, 2, row);
|
|
138 |
grid.addComponent(buttonTextField, 0, row, 2, row);
|
|
90 | 139 |
row++; |
91 | 140 |
grid.addComponent(startDate, 0, row); |
92 | 141 |
grid.addComponent(toLabel, 1, row); |
... | ... | |
97 | 146 |
|
98 | 147 |
grid.iterator().forEachRemaining(c -> c.setStyleName(getStyleName())); |
99 | 148 |
|
100 |
CssLayout marginwrapper = new CssLayout();
|
|
101 |
marginwrapper.setStyleName("margin-wrapper");
|
|
102 |
marginwrapper.addComponent(grid);
|
|
149 |
detailsView.setStyleName("margin-wrapper");
|
|
150 |
detailsView.addComponent(grid);
|
|
151 |
}
|
|
103 | 152 |
|
104 |
applyDefaultStyles(); |
|
105 | 153 |
|
106 |
return marginwrapper; |
|
154 |
/** |
|
155 |
* @return |
|
156 |
*/ |
|
157 |
private void showSimple() { |
|
158 |
detailsView.setVisible(false); |
|
159 |
simpleView.setVisible(true); |
|
107 | 160 |
} |
108 | 161 |
|
109 |
|
|
162 |
/** |
|
163 |
* @return |
|
164 |
*/ |
|
165 |
private void showDetails() { |
|
166 |
detailsView.setVisible(true); |
|
167 |
simpleView.setVisible(false); |
|
168 |
} |
|
110 | 169 |
|
111 | 170 |
/** |
112 | 171 |
* @param e |
... | ... | |
126 | 185 |
if(parseField != null) { |
127 | 186 |
parseField.addStyleName(RegistrationStyles.HELPER_FIELD); |
128 | 187 |
toLabel.addStyleName("to-label"); |
188 |
buttonTextField.addStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP); |
|
129 | 189 |
} |
130 | 190 |
|
131 | 191 |
} |
... | ... | |
134 | 194 |
protected void setInternalValue(TimePeriod newValue) { |
135 | 195 |
super.setInternalValue(newValue); |
136 | 196 |
fieldGroup.setItemDataSource(new BeanItem<TimePeriod>(newValue)); |
197 |
|
|
198 |
cacheField.setReadOnly(false); |
|
199 |
cacheField.setValue(newValue.toString()); |
|
200 |
cacheField.setReadOnly(true); |
|
137 | 201 |
} |
138 | 202 |
|
139 | 203 |
@Override |
140 | 204 |
public void setStyleName(String style) { |
141 | 205 |
super.setStyleName(style); |
142 | 206 |
grid.iterator().forEachRemaining(c -> c.setStyleName(style)); |
207 |
buttonTextField.iterator().forEachRemaining(c -> c.setStyleName(style)); |
|
208 |
simpleView.iterator().forEachRemaining(c -> c.setStyleName(style)); |
|
143 | 209 |
applyDefaultStyles(); |
144 | 210 |
} |
145 | 211 |
|
... | ... | |
147 | 213 |
public void addStyleName(String style) { |
148 | 214 |
super.addStyleName(style); |
149 | 215 |
grid.iterator().forEachRemaining(c -> c.addStyleName(style)); |
216 |
simpleView.iterator().forEachRemaining(c -> c.addStyleName(style)); |
|
217 |
buttonTextField.iterator().forEachRemaining(c -> c.addStyleName(style)); |
|
150 | 218 |
} |
151 | 219 |
|
152 | 220 |
/** |
Also available in: Unified diff
ref #6169 TimePeriod field with simple and details view