/* * Copyright (c) 2004-2011 Marco Maccaferri 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: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.ui.internal.markets; import java.util.Calendar; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.nebula.widgets.cdatetime.CDT; import org.eclipse.nebula.widgets.cdatetime.CDateTime; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipsetrader.ui.Util; public class HolidayDialog extends Dialog { CDateTime date; Text description; Button closed; Button open; Label openTimeLabel; CDateTime openTime; Label closeTimeLabel; CDateTime closeTime; MarketHolidayElement element; private SelectionAdapter buttonSelectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateButtonsEnablement(); } }; private ModifyListener validationModifyListener = new ModifyListener() { @Override public void modifyText(ModifyEvent e) { getButton(IDialogConstants.OK_ID).setEnabled(isValid()); } }; private SelectionAdapter validationSelectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getButton(IDialogConstants.OK_ID).setEnabled(isValid()); } }; public HolidayDialog(Shell parentShell, MarketHolidayElement day) { super(parentShell); this.element = day; } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Edit Market Holiday"); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { parent = (Composite) super.createDialogArea(parent); Composite content = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(2, false); gridLayout.marginWidth = gridLayout.marginHeight = 0; content.setLayout(gridLayout); Label label = new Label(content, SWT.NONE); label.setText("Date"); date = new CDateTime(content, CDT.BORDER | CDT.DATE_SHORT | CDT.DROP_DOWN | CDT.TAB_FIELDS); date.setPattern(Util.getDateFormatPattern()); label = new Label(content, SWT.NONE); label.setText("Description"); label.setLayoutData(new GridData(convertHorizontalDLUsToPixels(50), SWT.DEFAULT)); description = new Text(content, SWT.BORDER); description.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); ((GridData) description.getLayoutData()).widthHint = convertWidthInCharsToPixels(50); label = new Label(content, SWT.NONE); closed = new Button(content, SWT.RADIO); closed.setText("Market is closed"); label = new Label(content, SWT.NONE); open = new Button(content, SWT.RADIO); open.setText("Market is partially open"); openTimeLabel = new Label(content, SWT.NONE); openTimeLabel.setText("Open Time"); openTime = new CDateTime(content, CDT.BORDER | CDT.TAB_FIELDS | CDT.SPINNER); openTime.setPattern("HH:mm"); openTime.setLayoutData(new GridData(convertHorizontalDLUsToPixels(50), SWT.DEFAULT)); openTime.setNullText(""); closeTimeLabel = new Label(content, SWT.NONE); closeTimeLabel.setText("Close Time"); closeTime = new CDateTime(content, CDT.BORDER | CDT.TAB_FIELDS | CDT.SPINNER); closeTime.setPattern("HH:mm"); closeTime.setLayoutData(new GridData(convertHorizontalDLUsToPixels(50), SWT.DEFAULT)); closeTime.setNullText(""); if (element != null) { date.setSelection(element.getDate()); description.setText(element.getDescription() != null ? element.getDescription() : ""); closed.setSelection(element.getOpenTime() == null || element.getCloseTime() == null); open.setSelection(element.getOpenTime() != null && element.getCloseTime() != null); openTime.setSelection(element.getOpenTime()); closeTime.setSelection(element.getCloseTime()); } else { date.setSelection(Calendar.getInstance().getTime()); description.setText(""); closed.setSelection(true); open.setSelection(false); openTime.setSelection(null); closeTime.setSelection(null); } date.addSelectionListener(validationSelectionListener); description.addModifyListener(validationModifyListener); closed.addSelectionListener(buttonSelectionListener); open.addSelectionListener(buttonSelectionListener); openTime.addSelectionListener(validationSelectionListener); closeTime.addSelectionListener(validationSelectionListener); return parent; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Control control = super.createContents(parent); updateButtonsEnablement(); return control; } protected void updateButtonsEnablement() { openTimeLabel.setEnabled(open.getSelection()); openTime.setEnabled(open.getSelection()); closeTimeLabel.setEnabled(open.getSelection()); closeTime.setEnabled(open.getSelection()); getButton(IDialogConstants.OK_ID).setEnabled(isValid()); } protected boolean isValid() { if (date.getSelection() == null) { return false; } if (description.getText().equals("")) { return false; } if (open.getSelection()) { if (openTime.getSelection() == null) { return false; } if (closeTime.getSelection() == null) { return false; } } return true; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { commitChanges(); super.okPressed(); } protected void commitChanges() { if (element == null) { element = new MarketHolidayElement(); } element.setDate(date.getSelection()); element.setDescription(!description.getText().equals("") ? description.getText() : null); element.setOpenTime(open.getSelection() ? openTime.getSelection() : null); element.setCloseTime(open.getSelection() ? closeTime.getSelection() : null); } public MarketHolidayElement getElement() { return element; } }