/* Specially treat Age */
else if (field.getId() == INews.AGE_IN_DAYS || field.getId() == INews.AGE_IN_MINUTES) {
Composite container = new Composite(inputField, SWT.NONE);
container.setLayout(LayoutUtils.createGridLayout(2, 0, 0));
final Spinner spinner = new Spinner(container, SWT.BORDER);
spinner.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
spinner.setMinimum(1);
spinner.setMaximum(1000000);
final Combo combo = new Combo(container, SWT.BORDER | SWT.READ_ONLY);
combo.add(Messages.SearchConditionItem_DAYS);
combo.add(Messages.SearchConditionItem_HOURS);
combo.add(Messages.SearchConditionItem_MINUTES);
Listener listener = new Listener() {
public void handleEvent(Event event) {
fInputValue = getAgeValue(spinner, combo);
if (!fInputValue.equals(input))
fModified = true;
}
};
spinner.addListener(SWT.Modify, listener);
combo.addListener(SWT.Modify, listener);
/* Pre-Select input if given */
Object presetInput = (input == null) ? fInputValue : input;
if (presetInput != null && presetInput instanceof Integer) {
Integer inputValue = (Integer) presetInput;
/* Day */
if (inputValue >= 0) {
spinner.setSelection(inputValue);
combo.select(0);
}
/* Hour */
else if (inputValue % 60 == 0) {
spinner.setSelection(Math.abs(inputValue) / 60);
combo.select(1);
}
/* Minute */
else {
spinner.setSelection(Math.abs(inputValue));
combo.select(2);
}
}
/* Otherwise use Default */
else {
spinner.setSelection(1);
combo.select(0);
}
/* Update Input Value */
fInputValue = getAgeValue(spinner, combo);
}
/* Create new Input Field based on search-value-type */
else {
switch (field.getSearchValueType().getId()) {
/* Type: Boolean */
case ISearchValueType.BOOLEAN: {
final Combo combo = new Combo(inputField, SWT.BORDER | SWT.READ_ONLY);
combo.add(Messages.SearchConditionItem_TRUE);
combo.add(Messages.SearchConditionItem_FALSE);
combo.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
fInputValue = Boolean.valueOf(combo.getItem(combo.getSelectionIndex()));
if (!fInputValue.equals(input))
fModified = true;
}
});
/* Pre-Select input if given */
Object presetInput = (input == null) ? fInputValue : input;
if (presetInput != null && presetInput instanceof Boolean)
combo.select(((Boolean) presetInput) ? 0 : 1);
else
combo.select(0);
/* Update Input Value */
fInputValue = Boolean.valueOf(combo.getItem(combo.getSelectionIndex()));
break;
}
/* Type: Date / Time */
case ISearchValueType.DATE:
case ISearchValueType.TIME:
case ISearchValueType.DATETIME: {
final Calendar cal = Calendar.getInstance();
final DateTime datetime = new DateTime(inputField, SWT.DATE | SWT.BORDER);
datetime.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
cal.set(Calendar.DATE, datetime.getDay());
cal.set(Calendar.MONTH, datetime.getMonth());
cal.set(Calendar.YEAR, datetime.getYear());
fInputValue = cal.getTime();
if (!fInputValue.equals(input))
fModified = true;
}
});
/* Pre-Select input if given */
Object presetInput = (input == null) ? fInputValue : input;
if (presetInput != null && presetInput instanceof Date)
cal.setTime((Date) presetInput);
datetime.setDay(cal.get(Calendar.DATE));
datetime.setMonth(cal.get(Calendar.MONTH));
datetime.setYear(cal.get(Calendar.YEAR));
/* Update Input Value */
fInputValue = cal.getTime();
break;
}
/* Type: Enumeration */
case ISearchValueType.ENUM: {
final Text text = new Text(inputField, SWT.BORDER);
text.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
fInputValue = text.getText();
if (!fInputValue.equals(input))
fModified = true;
}
});
/* Provide Auto-Complete Field */
OwlUI.hookAutoComplete(text, field.getSearchValueType().getEnumValues(), true, true);
/* Pre-Select input if given */
String inputValue = (input != null ? input.toString() : null);
if (inputValue != null)
text.setText(inputValue);
/* Update Input Value */
fInputValue = text.getText();
break;
}
/* Type: Number */
case ISearchValueType.NUMBER:
case ISearchValueType.INTEGER: {
final Spinner spinner = new Spinner(inputField, SWT.BORDER);
spinner.setMinimum(0);
spinner.setMaximum(1000);
spinner.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
fInputValue = spinner.getSelection();
if (!fInputValue.equals(input))
fModified = true;
}
});
/* Pre-Select input if given */
Object presetInput = (input == null) ? fInputValue : input;
if (presetInput != null && presetInput instanceof Integer)
spinner.setSelection((Integer) presetInput);
/* Update Input Value */
fInputValue = spinner.getSelection();
break;
}
/* Type: String */