package org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring;
import java.util.Set;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.editor.FormPage;
import org.nightlabs.base.ui.composite.DateTimeControl;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.timepattern.TimePatternSetComposite;
import org.nightlabs.base.ui.timepattern.TimePatternSetModifyEvent;
import org.nightlabs.base.ui.timepattern.TimePatternSetModifyListener;
import org.nightlabs.base.ui.timepattern.builder.TimePatternSetBuilderWizard;
import org.nightlabs.jfire.trade.recurring.RecurringOfferConfiguration;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.l10n.IDateFormatter;
import org.nightlabs.timepattern.TimePattern;
import org.nightlabs.util.Util;
/**
* @author Fitas Amine <!-- fitas [AT] nightlabs [DOT] de -->
*
*/
public class RecurringTimingConfigSection extends AbstractRecurringConfigGeneralSection {
private final TimePatternSetComposite timePatternSetComposite;
private final DateTimeControl stopDateControl;
private final Button enableEndCheck;
public RecurringTimingConfigSection(final FormPage page, final Composite parent, final RecurringOfferConfigurationPageController controller) {
super(page, parent, controller);
getSection().setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.text")); //$NON-NLS-1$
setDescription(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.description")); //$NON-NLS-1$
timePatternSetComposite = new TimePatternSetComposite(getContainer(), SWT.NONE);
timePatternSetComposite.addTimePatternSetModifyListener(new TimePatternSetModifyListener(){
@Override
public void timePatternSetModified(final TimePatternSetModifyEvent event)
{
saveTimePattern();
}
});
final XComposite enableDateContainer = new XComposite(getContainer(), SWT.NONE, LayoutMode.LEFT_RIGHT_WRAPPER);
enableDateContainer.getGridLayout().numColumns = 2;
enableEndCheck = new Button(enableDateContainer, SWT.CHECK);
enableEndCheck.setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.button.text.activateEndDate")); //$NON-NLS-1$
enableEndCheck.setToolTipText(""); //$NON-NLS-1$
enableEndCheck.setSelection(false);
enableEndCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
stopDateControl.setEnabled(enableEndCheck.getSelection());
if(!enableEndCheck.getSelection())
{
getController().getControllerObject().setSuspendDate(null);
markDirty();
}
}
});
stopDateControl = new DateTimeControl(enableDateContainer,false,SWT.NONE, IDateFormatter.FLAGS_DATE_SHORT_TIME_HM);
stopDateControl.setEnabled(false);
stopDateControl.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
if(stopDateControl.getDate()!=null)
getController().getControllerObject().setSuspendDate(stopDateControl.getDate());
markDirty();
}
});
final DefineRecurringTimePatternAction defineRecurringTimePatternAction = new DefineRecurringTimePatternAction();
getToolBarManager().add(defineRecurringTimePatternAction);
final AddRecurringTimePatternAction addRecurringTimePatternAction = new AddRecurringTimePatternAction();
getToolBarManager().add(addRecurringTimePatternAction);
final RemoveRecurringTimePatternAction removeRecurringTimePatternAction = new RemoveRecurringTimePatternAction();
getToolBarManager().add(removeRecurringTimePatternAction);
updateToolBarManager();
}
@Override
protected void updateConfigOffer(
final RecurringOfferConfiguration recurringOfferConfiguration) {
timePatternSetComposite.setTimePatternSet(Util.cloneSerializable(recurringOfferConfiguration.getCreatorTask().getTimePatternSet()));
}
class AddRecurringTimePatternAction
extends Action
{
public AddRecurringTimePatternAction() {
super();
setId(AddRecurringTimePatternAction.class.getName());
setText("+"); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.addAction.tooltip")); //$NON-NLS-1$
}
@Override
public void run() {
createRecurringTimePatternClicked();
}
}
class RemoveRecurringTimePatternAction
extends Action
{
public RemoveRecurringTimePatternAction() {
super();
setId(RemoveRecurringTimePatternAction.class.getName());
setText("-"); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.removeAction.tooltip")); //$NON-NLS-1$
}
@Override
public void run() {
removeRecurringTimePatternClicked();
}
}
class DefineRecurringTimePatternAction
extends Action
{
public DefineRecurringTimePatternAction() {
super();
setId(DefineRecurringTimePatternAction.class.getName());
setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.defineAction.text")); //$NON-NLS-1$
setToolTipText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.recurring.RecurringTimingConfigSection.defineAction.tooltip")); //$NON-NLS-1$
}
@Override
public void run() {
defineRecurringTimePatternClicked();
}
}
protected void createRecurringTimePatternClicked()
{
timePatternSetComposite.createTimePattern();
}
protected void removeRecurringTimePatternClicked()
{
timePatternSetComposite.removeSelectedTimePatterns();
}
protected void defineRecurringTimePatternClicked()
{ // open the time pattern wizard and hide the date control
if(TimePatternSetBuilderWizard.open(timePatternSetComposite.getShell(), timePatternSetComposite.getTimePatternSet()))
{
saveTimePattern();
}
}
protected void saveTimePattern()
{
timePatternSetComposite.refresh(true);
getController().getControllerObject().getCreatorTask().getTimePatternSet().clearTimePatterns();
final Set<TimePattern> patterns = timePatternSetComposite.getTimePatternSet().getTimePatterns();
for (final TimePattern p : patterns) {
getController().getControllerObject().getCreatorTask().getTimePatternSet().addTimePattern(p);
}
markDirty();
}
}