b13da9f960c356e66b279749e459de5becefeaa8
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / properties / TmfTimestampFormatPage.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2013 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.ui.properties;
14
15 import org.eclipse.jface.preference.IPreferenceStore;
16 import org.eclipse.jface.preference.PreferencePage;
17 import org.eclipse.jface.preference.RadioGroupFieldEditor;
18 import org.eclipse.jface.util.IPropertyChangeListener;
19 import org.eclipse.jface.util.PropertyChangeEvent;
20 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestampFormat;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.SelectionEvent;
23 import org.eclipse.swt.events.SelectionListener;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.eclipse.swt.widgets.Label;
29 import org.eclipse.swt.widgets.Text;
30 import org.eclipse.ui.IWorkbench;
31 import org.eclipse.ui.IWorkbenchPreferencePage;
32
33 /**
34 * The TMF timestamp format configuration page. This page is used to select
35 * the global timestamp and interval time formats (for display and parsing).
36 * The user can either pick a pre-defined format or enter his/her own.
37 *
38 * @version 1.0
39 * @author Francois Chouinard
40 * @since 2.0
41 */
42 public class TmfTimestampFormatPage extends PreferencePage implements IWorkbenchPreferencePage, SelectionListener, IPropertyChangeListener {
43
44 // ------------------------------------------------------------------------
45 // Constants
46 // ------------------------------------------------------------------------
47
48 // Date and Time formats
49 private static final String[][] fDateTimeFormats = new String[][] {
50 { TmfTimePreferences.DATE_YEAR_FMT, TmfTimePreferences.DATE_YEAR_FMT },
51 { TmfTimePreferences.DATE_YEAR2_FMT, TmfTimePreferences.DATE_YEAR2_FMT },
52 { TmfTimePreferences.DATE_MONTH_FMT, TmfTimePreferences.DATE_MONTH_FMT },
53 { TmfTimePreferences.DATE_DAY_FMT, TmfTimePreferences.DATE_DAY_FMT },
54 { TmfTimePreferences.DATE_JDAY_FMT, TmfTimePreferences.DATE_JDAY_FMT },
55 { TmfTimePreferences.TIME_HOUR_FMT, TmfTimePreferences.TIME_HOUR_FMT },
56 { TmfTimePreferences.TIME_MINUTE_FMT, TmfTimePreferences.TIME_MINUTE_FMT },
57 { TmfTimePreferences.TIME_SECOND_FMT, TmfTimePreferences.TIME_SECOND_FMT },
58 { TmfTimePreferences.TIME_ELAPSED_FMT + " (secs in epoch)", TmfTimePreferences.TIME_ELAPSED_FMT }, //$NON-NLS-1$
59 { "(none)", TmfTimePreferences.TIME_NO_FMT }, //$NON-NLS-1$
60 };
61
62 // Sub-second formats
63 private static final String[][] fSubSecondFormats = new String[][] {
64 { TmfTimePreferences.SUBSEC_MILLI_FMT + " (ms)", TmfTimePreferences.SUBSEC_MILLI_FMT }, //$NON-NLS-1$
65 { TmfTimePreferences.SUBSEC_MICRO_FMT + " (µs)", TmfTimePreferences.SUBSEC_MICRO_FMT }, //$NON-NLS-1$
66 { TmfTimePreferences.SUBSEC_NANO_FMT + " (ns)", TmfTimePreferences.SUBSEC_NANO_FMT }, //$NON-NLS-1$
67 };
68
69 // Date and Time delimiters
70 private static final String[][] fDateTimeDelimiters = new String[][] {
71 { "(none)", TmfTimePreferences.DELIMITER_NONE }, //$NON-NLS-1$
72 { " (space)", TmfTimePreferences.DELIMITER_SPACE }, //$NON-NLS-1$
73 { ", (comma)", TmfTimePreferences.DELIMITER_COMMA }, //$NON-NLS-1$
74 { "- (dash)", TmfTimePreferences.DELIMITER_DASH }, //$NON-NLS-1$
75 { "_ (underline)", TmfTimePreferences.DELIMITER_UNDERLINE }, //$NON-NLS-1$
76 { ": (colon)", TmfTimePreferences.DELIMITER_COLON }, //$NON-NLS-1$
77 { "; (semicolon)", TmfTimePreferences.DELIMITER_SEMICOLON }, //$NON-NLS-1$
78 { "/ (slash)", TmfTimePreferences.DELIMITER_SLASH }, //$NON-NLS-1$
79 { "\" (dbl-quote)", TmfTimePreferences.DELIMITER_DQUOT }, //$NON-NLS-1$
80 };
81
82 // Sub-Second delimiters
83 private static final String[][] fSubSecondDelimiters = new String[][] {
84 { "(none)", TmfTimePreferences.DELIMITER_NONE }, //$NON-NLS-1$
85 { " (space)", TmfTimePreferences.DELIMITER_SPACE }, //$NON-NLS-1$
86 { ", (comma)", TmfTimePreferences.DELIMITER_COMMA }, //$NON-NLS-1$
87 { "- (dash)", TmfTimePreferences.DELIMITER_DASH }, //$NON-NLS-1$
88 { "_ (underline)", TmfTimePreferences.DELIMITER_UNDERLINE }, //$NON-NLS-1$
89 { ": (colon)", TmfTimePreferences.DELIMITER_COLON }, //$NON-NLS-1$
90 { "; (semicolon)", TmfTimePreferences.DELIMITER_SEMICOLON }, //$NON-NLS-1$
91 { "/ (slash)", TmfTimePreferences.DELIMITER_SLASH }, //$NON-NLS-1$
92 { "\" (dbl-quote)", TmfTimePreferences.DELIMITER_DQUOT }, //$NON-NLS-1$
93 { ". (period)", TmfTimePreferences.DELIMITER_PERIOD }, //$NON-NLS-1$
94 };
95
96 // ------------------------------------------------------------------------
97 // Attributes
98 // ------------------------------------------------------------------------
99
100 // General stuff
101 private Composite fPage;
102 private IPreferenceStore fPreferenceStore;
103 private TmfTimePreferences fTimePreference;
104
105 // Example section
106 private Composite fExampleSection;
107 private Text fPatternDisplay;
108 private Text fExampleDisplay;
109 private String fTimePattern;
110
111 // Date/Time format section
112 private RadioGroupFieldEditor fDateTimeFields;
113 private RadioGroupFieldEditor fSSecFields;
114
115 // Delimiters section
116 private RadioGroupFieldEditor fDateFieldDelim;
117 private RadioGroupFieldEditor fTimeFieldDelim;
118 private RadioGroupFieldEditor fSSecFieldDelim;
119
120 // IPropertyChangeListener data
121 private String fProperty;
122 private String fChangedProperty;
123
124 // ------------------------------------------------------------------------
125 // Constructors
126 // ------------------------------------------------------------------------
127
128 /**
129 * The default constructor
130 */
131 public TmfTimestampFormatPage() {
132 fPreferenceStore = TmfTimePreferences.getPreferenceStore();
133 fTimePreference = TmfTimePreferences.getInstance();
134 }
135
136 // ------------------------------------------------------------------------
137 // IWorkbenchPreferencePage
138 // ------------------------------------------------------------------------
139
140 @Override
141 public void init(IWorkbench workbench) {
142 }
143
144 // ------------------------------------------------------------------------
145 // PreferencePage
146 // ------------------------------------------------------------------------
147
148 @Override
149 protected Control createContents(Composite parent) {
150
151 // Overall preference page layout
152 parent.setLayout(new GridLayout());
153 fPage = new Composite(parent, SWT.NONE);
154 fPage.setLayout(new GridLayout());
155 fPage.setLayoutData(new GridData(
156 GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL));
157
158 // Example section
159 fExampleSection = new Composite(fPage, SWT.NONE);
160 fExampleSection.setLayout(new GridLayout(2, false));
161 fExampleSection.setLayoutData(new GridData(GridData.FILL_BOTH));
162
163 Label patternLabel = new Label(fExampleSection, SWT.HORIZONTAL);
164 patternLabel.setText("Current Format: "); //$NON-NLS-1$
165 fPatternDisplay = new Text(fExampleSection, SWT.BORDER | SWT.READ_ONLY);
166 fPatternDisplay.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
167
168 Label exampleLabel = new Label(fExampleSection, SWT.NONE);
169 exampleLabel.setText("Sample Display: "); //$NON-NLS-1$
170 fExampleDisplay = new Text(fExampleSection, SWT.BORDER | SWT.READ_ONLY);
171 fExampleDisplay.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
172
173 Label separator = new Label(fPage, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_NONE);
174 separator.setLayoutData(
175 new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
176
177 // Date and Time section
178 fDateTimeFields = new RadioGroupFieldEditor(
179 TmfTimePreferences.DATIME, "Date and Time format", 3, fDateTimeFormats, fPage, true); //$NON-NLS-1$
180 fDateTimeFields.setPreferenceStore(fPreferenceStore);
181 fDateTimeFields.load();
182 fDateTimeFields.setPropertyChangeListener(this);
183
184 // Sub-second section
185 fSSecFields = new RadioGroupFieldEditor(
186 TmfTimePreferences.SUBSEC, "Sub-second format", 3, fSubSecondFormats, fPage, true); //$NON-NLS-1$
187 fSSecFields.setPreferenceStore(fPreferenceStore);
188 fSSecFields.load();
189 fSSecFields.setPropertyChangeListener(this);
190
191 // Separators section
192 fDateFieldDelim = new RadioGroupFieldEditor(
193 TmfTimePreferences.DATE_DELIMITER, "Date delimiter", 5, fDateTimeDelimiters, fPage, true); //$NON-NLS-1$
194 fDateFieldDelim.setPreferenceStore(fPreferenceStore);
195 fDateFieldDelim.load();
196 fDateFieldDelim.setPropertyChangeListener(this);
197
198 fTimeFieldDelim = new RadioGroupFieldEditor(
199 TmfTimePreferences.TIME_DELIMITER, "Time delimiter", 5, fDateTimeDelimiters, fPage, true); //$NON-NLS-1$
200 fTimeFieldDelim.setPreferenceStore(fPreferenceStore);
201 fTimeFieldDelim.load();
202 fTimeFieldDelim.setPropertyChangeListener(this);
203
204 fSSecFieldDelim = new RadioGroupFieldEditor(
205 TmfTimePreferences.SSEC_DELIMITER, "Sub-Second Delimiter", 5, fSubSecondDelimiters, fPage, true); //$NON-NLS-1$
206 fSSecFieldDelim.setPreferenceStore(fPreferenceStore);
207 fSSecFieldDelim.load();
208 fSSecFieldDelim.setPropertyChangeListener(this);
209
210 fTimePreference.initPatterns();
211 refresh();
212 return fPage;
213 }
214
215 @Override
216 protected void performDefaults() {
217 fDateTimeFields.loadDefault();
218 fSSecFields.loadDefault();
219 fDateFieldDelim.loadDefault();
220 fTimeFieldDelim.loadDefault();
221 fSSecFieldDelim.loadDefault();
222
223 fTimePreference.setDefaults();
224 fTimePattern = TmfTimePreferences.getTimePattern();
225 displayExample();
226 }
227
228 @Override
229 protected void performApply() {
230 fDateTimeFields.store();
231 fSSecFields.store();
232 fDateFieldDelim.store();
233 fTimeFieldDelim.store();
234 fSSecFieldDelim.store();
235
236 TmfTimePreferences.setTimePattern(fTimePattern);
237 displayExample();
238 }
239
240 @Override
241 public boolean performOk() {
242 performApply();
243 return super.performOk();
244 }
245
246 // ------------------------------------------------------------------------
247 // SelectionListener
248 // ------------------------------------------------------------------------
249
250 @Override
251 public void widgetSelected(SelectionEvent e) {
252 }
253
254 @Override
255 public void widgetDefaultSelected(SelectionEvent e) {
256 }
257
258 // ------------------------------------------------------------------------
259 // IPropertyChangeListener
260 // ------------------------------------------------------------------------
261
262 @Override
263 public void propertyChange(PropertyChangeEvent event) {
264 Object source = event.getSource();
265 Object value = event.getNewValue();
266 if (source instanceof RadioGroupFieldEditor && value instanceof String &&
267 !(value.equals(fChangedProperty) && source == fProperty))
268 {
269 fProperty = ((RadioGroupFieldEditor) source).getPreferenceName();
270 fChangedProperty = (String) value;
271 refresh();
272 }
273 }
274
275 // ------------------------------------------------------------------------
276 // Helper functions
277 // ------------------------------------------------------------------------
278
279 private void refresh() {
280 updatePatterns();
281 displayExample();
282 }
283
284 void updatePatterns() {
285 if (TmfTimePreferences.DATIME.equals(fProperty)) {
286 fTimePreference.setDateTimeFormat(fChangedProperty);
287 } else if (TmfTimePreferences.SUBSEC.equals(fProperty)) {
288 fTimePreference.setSSecFormat(fChangedProperty);
289 } else if (TmfTimePreferences.DATE_DELIMITER.equals(fProperty)) {
290 fTimePreference.setDateFieldSep(fChangedProperty);
291 } else if (TmfTimePreferences.TIME_DELIMITER.equals(fProperty)) {
292 fTimePreference.setTimeFieldSep(fChangedProperty);
293 } else if (TmfTimePreferences.SSEC_DELIMITER.equals(fProperty)) {
294 fTimePreference.setSSecFieldSep(fChangedProperty);
295 }
296 fTimePreference.updatePatterns();
297 fTimePattern = TmfTimePreferences.getTimePattern();
298 }
299
300 private void displayExample() {
301 long ts = 1332170682500677380L;
302 fPatternDisplay.setText(fTimePattern);
303 fPatternDisplay.redraw();
304
305 fExampleDisplay.setText(new TmfTimestampFormat(fTimePattern).format(ts));
306 fExampleDisplay.redraw();
307 }
308
309 }
This page took 0.0376339999999999 seconds and 5 git commands to generate.