blob: c74b3079ec3951fc998cfbf973870f4b98df3725 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM - Initial API and implementation
******************************************************************************/
package org.eclipse.team.internal.ccvs.ui;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class HistoryFilterDialog extends Dialog {
private boolean dateEntered;
private HistoryView historyView;
private HistoryFilter historyFilter;
//widgets
private Button orRadio;
private Button andRadio;
private Combo fromDayCombo;
private Combo toDayCombo;
private Combo fromMonthCombo;
private Combo toMonthCombo;
private Combo fromYearCombo;
private Combo toYearCombo;
private Text author;
private Text comment;
public HistoryFilterDialog(HistoryView view) {
super(view.getViewSite().getShell());
this.historyView = view;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Policy.bind("HistoryFilterDialog.title")); //$NON-NLS-1$
}
protected Control createDialogArea(Composite parent) {
Composite topLevel = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
topLevel.setLayout(layout);
//"and" and "or" search radio buttons
Label label = new Label(topLevel, SWT.NONE);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
label.setLayoutData(data);
label.setText(Policy.bind("HistoryFilterDialog.showMatching")); //$NON-NLS-1$
andRadio = new Button(topLevel, SWT.RADIO);
andRadio.setText(Policy.bind("HistoryFilterDialog.matchingAll")); //$NON-NLS-1$
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
andRadio.setLayoutData(data);
andRadio.setSelection(true);
orRadio = new Button(topLevel, SWT.RADIO);
orRadio.setText(Policy.bind("HistoryFilterDialog.matchingAny")); //$NON-NLS-1$
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
orRadio.setLayoutData(data);
//author
label = new Label(topLevel, SWT.NONE);
label.setText(Policy.bind("HistoryFilterDialog.author")); //$NON-NLS-1$
author = new Text(topLevel, SWT.BORDER);
author.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
//comment
label = new Label(topLevel, SWT.NONE);
label.setText(Policy.bind("HistoryFilterDialog.comment")); //$NON-NLS-1$
comment = new Text(topLevel, SWT.BORDER);
comment.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
//"from" date
label = new Label(topLevel, SWT.NONE);
label.setText(Policy.bind("HistoryFilterDialog.fromDate")); //$NON-NLS-1$
Composite fdComposite = new Composite(topLevel, SWT.NONE);
GridLayout fdLayout = new GridLayout();
fdLayout.numColumns = 3;
fdComposite.setLayout(fdLayout);
fromMonthCombo = new Combo(fdComposite, SWT.READ_ONLY);
fromDayCombo = new Combo(fdComposite, SWT.READ_ONLY);
fromYearCombo = new Combo(fdComposite, SWT.NONE);
fromYearCombo.setTextLimit(4);
//"to" date
label = new Label(topLevel, SWT.NONE);
label.setText(Policy.bind("HistoryFilterDialog.toDate")); //$NON-NLS-1$
Composite tdComposite = new Composite(topLevel, SWT.NONE);
GridLayout tdLayout = new GridLayout();
tdLayout.numColumns = 3;
tdComposite.setLayout(tdLayout);
toMonthCombo = new Combo(tdComposite, SWT.READ_ONLY);
toDayCombo = new Combo(tdComposite, SWT.READ_ONLY);
toYearCombo = new Combo(tdComposite, SWT.NONE);
toYearCombo.setTextLimit(4);
//set day, month and year combos with numbers
//years allows a selection from the past 5 years
//or any year written in
String days[] = new String[31];
for (int i = 0; i < 31; i++) {
days[i] = String.valueOf(i + 1);
}
String months[] = new String[12];
SimpleDateFormat format = new SimpleDateFormat("MMMM"); //$NON-NLS-1$
Calendar calendar = Calendar.getInstance();
for (int i = 0; i < 12; i++) {
calendar.set(Calendar.MONTH, i);
months[i] = format.format(calendar.getTime());
}
String years[] = new String[5];
Calendar calender = Calendar.getInstance();
for (int i = 0; i < 5; i++) {
years[i] = String.valueOf(calender.get(1) - i);
}
fromDayCombo.setItems(days);
toDayCombo.setItems(days);
fromMonthCombo.setItems(months);
toMonthCombo.setItems(months);
fromYearCombo.setItems(years);
toYearCombo.setItems(years);
fromYearCombo.select(0);
toYearCombo.select(0);
initializeValues();
return topLevel;
}
void initializeValues() {
if (historyFilter == null) return;
if (historyFilter.author != null) {
author.setText(historyFilter.author);
}
if (historyFilter.comment != null) {
comment.setText(historyFilter.comment);
}
orRadio.setSelection(historyFilter.isOr);
andRadio.setSelection(!historyFilter.isOr);
Calendar calendar = Calendar.getInstance();
if (historyFilter.fromDate != null) {
calendar.setTime(historyFilter.fromDate);
fromDayCombo.select(calendar.get(Calendar.DATE) - 1);
fromMonthCombo.select(calendar.get(Calendar.MONTH));
String yearValue = String.valueOf(calendar.get(Calendar.YEAR));
int index = fromYearCombo.indexOf(yearValue);
if (index == -1) {
fromYearCombo.add(yearValue);
index = fromYearCombo.indexOf(yearValue);
}
fromYearCombo.select(index);
}
if (historyFilter.toDate != null) {
calendar.setTime(historyFilter.toDate);
toDayCombo.select(calendar.get(Calendar.DATE) - 1);
toMonthCombo.select(calendar.get(Calendar.MONTH));
String yearValue = String.valueOf(calendar.get(Calendar.YEAR));
int index = toYearCombo.indexOf(yearValue);
if (index == -1) {
toYearCombo.add(yearValue);
index = toYearCombo.indexOf(yearValue);
}
toYearCombo.select(index);
}
}
/**
* A button has been pressed. Process the dialog contents.
*/
protected void buttonPressed(int buttonId) {
if (IDialogConstants.CANCEL_ID == buttonId) {
super.buttonPressed(buttonId);
return;
}
Date fromDate = null, toDate = null;
if ((fromMonthCombo.getSelectionIndex() >= 0)
&& (toMonthCombo.getSelectionIndex() >= 0)
&& (fromDayCombo.getSelectionIndex() >= 0)
&& (toDayCombo.getSelectionIndex() >= 0)
&& (fromYearCombo.getText().length() > 0)
&& (toYearCombo.getText().length() > 0)) {
//set the calander with the user input
//set the hours, minutes and seconds to 00
//so as to cover the whole day
Calendar calendar = Calendar.getInstance();
calendar.set(
Integer.parseInt(String.valueOf(fromYearCombo.getText())),
fromMonthCombo.getSelectionIndex(),
Integer.parseInt(String.valueOf(fromDayCombo.getText())),
00, 00, 00);
fromDate = calendar.getTime();
//set the calander with the user input
//set the hours, minutes and seconds to 23, 59, 59
//so as to cover the whole day
calendar.set(
Integer.parseInt(String.valueOf(toYearCombo.getText())),
toMonthCombo.getSelectionIndex(),
Integer.parseInt(String.valueOf(toDayCombo.getText())),
23, 59, 59);
toDate = calendar.getTime();
}
//create the filter
historyFilter = new HistoryFilter(
historyView,
author.getText(),
comment.getText(),
fromDate,
toDate,
orRadio.getSelection());
super.buttonPressed(buttonId);
}
/**
* Returns the filter that was created from the provided
* user input.
*/
public HistoryFilter getFilter() {
return historyFilter;
}
/**
* Set the intial value of the dialog to the given filter.
*/
public void setFilter(HistoryFilter filter) {
this.historyFilter = filter;
}
}