/******************************************************************************* * Copyright (c) 2006-2007 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * IBM Research *******************************************************************************/ package com.ibm.research.tours.dialogs; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import com.ibm.research.tours.ITimeLimit; import com.ibm.research.tours.TimeLimit; public class TimeDialog extends Dialog { private String fTitle; private String fMessage; private Button fTimeCheckButton; private ITimeLimit fTimeLimit; private boolean fIsTimeSet; private Spinner fMinuteSpinner; private Spinner fSecondSpinner; public TimeDialog(Shell parentShell, String title, String message) { super(parentShell); fTitle = title; fMessage = message; } public void init(ITimeLimit limit) { if(limit != null) { fTimeLimit = limit; fIsTimeSet = true; } else fTimeLimit = new TimeLimit(); } public boolean isTimeLimitSet() { return fIsTimeSet; } public ITimeLimit getTimeLimit() { return fTimeLimit; } protected void configureShell(Shell shell) { super.configureShell(shell); if (fTitle != null) { shell.setText(fTitle); } } @Override protected Control createDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); fTimeCheckButton = new Button(composite,SWT.CHECK); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); fTimeCheckButton.setLayoutData(data); fTimeCheckButton.setText(fMessage); fTimeCheckButton.setSelection(fIsTimeSet); fTimeCheckButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { fIsTimeSet = fTimeCheckButton.getSelection(); fMinuteSpinner.setEnabled(fIsTimeSet); fSecondSpinner.setEnabled(fIsTimeSet); } public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); Group timeGroup = new Group(composite,SWT.SHADOW_ETCHED_IN); GridLayout groupLayout = new GridLayout(4,false); timeGroup.setLayout(groupLayout); GridData timeGroupData = new GridData(GridData.FILL_BOTH); timeGroupData.horizontalSpan = 2; timeGroup.setLayoutData(timeGroupData); timeGroup.setText("Time Limit"); Label minuteLabel = new Label(timeGroup,SWT.NONE); minuteLabel.setText("Minutes"); fMinuteSpinner = new Spinner(timeGroup,SWT.BORDER); if(fTimeLimit!=null) fMinuteSpinner.setSelection(fTimeLimit.getMinutes()); fMinuteSpinner.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if(fTimeLimit!=null) fTimeLimit.setMinutes(fMinuteSpinner.getSelection()); } }); Label secondLabel = new Label(timeGroup,SWT.NONE); secondLabel.setText("Seconds"); fSecondSpinner = new Spinner(timeGroup,SWT.BORDER); fSecondSpinner.setMaximum(60); if(fTimeLimit!=null) fSecondSpinner.setSelection(fTimeLimit.getSeconds()); fSecondSpinner.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if(fTimeLimit!=null) fTimeLimit.setSeconds(fSecondSpinner.getSelection()); } }); fMinuteSpinner.setEnabled(fIsTimeSet); fSecondSpinner.setEnabled(fIsTimeSet); return parent; } }