blob: eeac819898874924c95b75b66424052ec75bd294 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012, 2013, 2014 Red Hat, Inc.
* All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
*
* @author Bob Brodt
******************************************************************************/
package org.eclipse.bpmn2.modeler.core.merrimac.dialogs;
import java.util.Date;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Shell;
/**
*
*/
public class DateTimeObjectEditor extends ReadonlyTextObjectEditor {
/**
* @param parent
* @param object
* @param feature
*/
public DateTimeObjectEditor(AbstractDetailComposite parent, EObject object, EStructuralFeature feature) {
super(parent, object, feature);
}
@Override
protected Control createControl(Composite composite, String label, int style) {
return super.createControl(composite, label, style);
}
@Override
protected void buttonClicked(int buttonId) {
Object value = object.eGet(feature);
if (value==null)
value = new Date();
if (!(value instanceof Date)) {
value = new Date();
}
String title = NLS.bind(Messages.DateTimeObjectEditor__Title, getLabel().getText());
DateTimeDialog dialog = new DateTimeDialog(getControl().getShell(), title, style);
dialog.setDate((Date)value);
if (dialog.open() == Window.OK) {
super.setValue(dialog.getDate());
}
}
public static class DateTimeDialog extends Dialog {
private Button okButton;
String title;
private Date result;
private DateTime calendar;
private DateTime date;
private DateTime time;
private int style = SWT.CALENDAR | SWT.TIME;
/**
* @param parentShell
*/
protected DateTimeDialog(Shell parentShell, String title, int syle) {
super(parentShell);
this.title = title;
}
public void setDate(Date date) {
this.result = date == null ? new Date() : date;
}
protected Control createDialogArea(Composite parent) {
Composite composite = createMyComposite(parent);
if ((style & (SWT.CALENDAR | SWT.DATE | SWT.TIME)) == 0)
style = SWT.CALENDAR | SWT.TIME;
if ((style & SWT.CALENDAR)!=0) {
calendar = new DateTime(composite, SWT.CALENDAR);
calendar.setDate(result.getYear(), result.getMonth(), result.getDay());
}
else if ((style & SWT.DATE)!=0) {
date = new DateTime(composite, SWT.DATE);
date.setDate(result.getYear(), result.getMonth(), result.getDay());
}
if ((style & SWT.TIME)!=0) {
time = new DateTime(composite, SWT.TIME);
time.setTime(result.getHours(), result.getMinutes(), result.getSeconds());
}
return composite;
}
private Composite createMyComposite(Composite parent) {
// create a composite with standard margins and spacing
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(1, false);
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);
return composite;
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
if (title!=null)
shell.setText(title);
else
shell.setText(Messages.DateTimeObjectEditor_Select_Date_Time_Title);
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
// create OK and Cancel buttons by default
okButton = createButton(parent, IDialogConstants.OK_ID,
IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.OK_ID) {
result = new Date();
if (calendar!=null) {
result.setYear(calendar.getYear() - 1900);
result.setMonth(calendar.getMonth());
result.setDate(calendar.getDay());
}
if (date!=null) {
result.setYear(date.getYear() - 1900);
result.setMonth(date.getMonth());
result.setDate(date.getDay());
}
if (time!=null) {
result.setHours(time.getHours());
result.setMinutes(time.getMinutes());
result.setSeconds(time.getSeconds());
}
} else {
result = null;
}
super.buttonPressed(buttonId);
}
public Date getDate() {
return result;
}
}
}