/*******************************************************************************
* Copyright (c) 2015 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer.util.internal.dialog;
import java.util.Calendar;
import java.util.Date;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.nebula.widgets.xviewer.core.model.DateRangeType;
import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
/**
* @author Donald G. Dunne
*/
public class ColumnFilterDialog extends DialogWithEntry {
private final XViewerColumn column;
private ComboViewer dateRangeTypeCombo;
private DateTime date1Widget;
private Date date1, date2;
private DateRangeType dateRangeType = null;
private DateTime date2Widget;
private DateTime time1Widget;
private DateTime time2Widget;
private Composite widgetComp;
public ColumnFilterDialog(Shell shell, String dialogTitle, String dialogMessage, int question, String[] strings, int i, XViewerColumn column) {
super(shell, dialogTitle, null, dialogMessage, MessageDialog.QUESTION, strings, 0);
this.column = column;
}
@Override
protected void createExtendedArea(Composite parent) {
super.createExtendedArea(parent);
if (column.getSortDataType() == SortDataType.Date) {
widgetComp = new Composite(parent, SWT.NONE);
widgetComp.setLayout(new GridLayout(6, false));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
widgetComp.setLayoutData(gd);
Label label = new Label(widgetComp, SWT.NONE);
label.setText("Date Match: ");
dateRangeTypeCombo = new ComboViewer(widgetComp, SWT.NONE);
dateRangeTypeCombo.setContentProvider(new ArrayContentProvider());
dateRangeTypeCombo.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((DateRangeType) element).getDisplayName();
}
});
dateRangeTypeCombo.setInput(DateRangeType.values());
dateRangeTypeCombo.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
String text2 = dateRangeTypeCombo.getCombo().getText();
dateRangeType = DateRangeType.get(text2);
updateDate2Composite();
}
});
date1Widget = new DateTime(widgetComp, SWT.CALENDAR);
date1Widget.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setDate1Selection();
}
});
// set initial date
Calendar cal = Calendar.getInstance();
cal.set(date1Widget.getYear(), date1Widget.getMonth(), date1Widget.getDay(), 0, 0);
date1 = cal.getTime();
time1Widget = new DateTime(widgetComp, SWT.TIME);
time1Widget.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setDate1Selection();
}
});
time1Widget.setHours(0);
time1Widget.setMinutes(0);
time1Widget.setSeconds(0);
}
}
private boolean isBetweenDates() {
dateRangeType = DateRangeType.get(dateRangeTypeCombo.getCombo().getText());
return dateRangeType == DateRangeType.Between_Dates;
}
public void updateDate2Composite() {
if (isBetweenDates()) {
date2Widget = new DateTime(widgetComp, SWT.CALENDAR);
date2Widget.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setDate2Selection();
}
});
time2Widget = new DateTime(widgetComp, SWT.TIME);
time2Widget.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setDate2Selection();
}
});
time2Widget.setHours(0);
time2Widget.setMinutes(0);
time2Widget.setSeconds(0);
} else {
if (date2Widget != null) {
date2Widget.dispose();
date2Widget = null;
time2Widget.dispose();
time2Widget = null;
}
}
widgetComp.layout(true, true);
final Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
getShell().setSize(newSize);
}
private void setDate1Selection() {
Calendar cal = Calendar.getInstance();
cal.set(date1Widget.getYear(), date1Widget.getMonth(), date1Widget.getDay(), time1Widget.getHours(),
time1Widget.getMinutes());
date1 = cal.getTime();
}
private void setDate2Selection() {
if (date2Widget.isEnabled()) {
Calendar cal = Calendar.getInstance();
cal.set(date2Widget.getYear(), date2Widget.getMonth(), date2Widget.getDay(), date2Widget.getHours(),
date2Widget.getMinutes());
date2 = cal.getTime();
} else {
date2 = null;
}
}
public Date getDate1() {
return date1;
}
public void setDate1(Date date1) {
this.date1 = date1;
}
public Date getDate2() {
return date2;
}
public void setDate2(Date date2) {
this.date2 = date2;
}
public DateRangeType getDateRangeType() {
return dateRangeType;
}
public void setDateRangeType(DateRangeType dateRangeType) {
this.dateRangeType = dateRangeType;
}
}