blob: c8d9a4fcb6fc367aca7105a27f44c3808f63d8e0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.skills.ui.views.journal;
import java.text.DateFormat;
import java.util.Date;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.skills.model.IUserTask;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
public class DetailHeaderComposite extends Composite {
private static String formatDate(Date date) {
return DateFormat.getDateTimeInstance().format(date);
}
public static Composite create(Composite parent, FormToolkit toolkit, ISelectionProvider selectionProvider) {
return new DetailHeaderComposite(parent, toolkit, selectionProvider);
}
private final Composite fBlindComposite;
private IUserTask fTask = null;
private final Composite fAvailableTaskComposite;
private final Composite fActiveTaskComposite;
private final Composite fCompletedTaskComposite;
public DetailHeaderComposite(Composite parent, FormToolkit toolkit, ISelectionProvider selectionProvider) {
super(parent, toolkit.getOrientation());
toolkit.paintBordersFor(this);
setLayout(new StackLayout());
fBlindComposite = createBlindComposite(toolkit);
fAvailableTaskComposite = createAvailableTaskComposite(toolkit, selectionProvider);
fActiveTaskComposite = createActiveTaskComposite(toolkit, selectionProvider);
fCompletedTaskComposite = createCompletedTaskComposite(toolkit, selectionProvider);
setTopControl(fBlindComposite);
selectionProvider.addSelectionChangedListener(event -> {
final Object element = event.getStructuredSelection().getFirstElement();
if (element instanceof IUserTask) {
fTask = (IUserTask) element;
if (getUserTask().isCompleted())
setTopControl(fCompletedTaskComposite);
else if (getUserTask().isStarted())
setTopControl(fActiveTaskComposite);
else
setTopControl(fAvailableTaskComposite);
} else
setTopControl(fBlindComposite);
layout(true);
});
}
private void setTopControl(Control control) {
((StackLayout) getLayout()).topControl = control;
}
private Composite createBlindComposite(FormToolkit toolkit) {
final Composite composite = toolkit.createComposite(this, SWT.NONE);
toolkit.paintBordersFor(composite);
return composite;
}
private Composite createAvailableTaskComposite(final FormToolkit toolkit, ISelectionProvider selectionProvider) {
final Composite composite = toolkit.createComposite(this, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
toolkit.paintBordersFor(composite);
final Label lblNewLabel = new Label(composite, SWT.NONE);
toolkit.adapt(lblNewLabel, true, true);
lblNewLabel.setText("img");
final Hyperlink hprlnkStartTask = toolkit.createHyperlink(composite, "start task", SWT.NONE);
hprlnkStartTask.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
getUserTask().setStarted(new Date());
getUserTask().activate();
}
});
toolkit.paintBordersFor(hprlnkStartTask);
return composite;
}
public IUserTask getUserTask() {
return fTask;
}
private Composite createActiveTaskComposite(final FormToolkit toolkit, ISelectionProvider selectionProvider) {
final Composite composite = toolkit.createComposite(this, SWT.NONE);
composite.setLayout(new GridLayout(3, false));
toolkit.paintBordersFor(composite);
toolkit.createLabel(composite, "started:", SWT.NONE);
final Label lblActiveStartDate = toolkit.createLabel(composite, "", SWT.NONE);
new Label(composite, SWT.NONE);
toolkit.createLabel(composite, "hints used:", SWT.NONE);
final Label lblShownHints = toolkit.createLabel(composite, "", SWT.NONE);
final Hyperlink hprlnkShowHint = toolkit.createHyperlink(composite, "show hint", SWT.NONE);
hprlnkShowHint.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
toolkit.paintBordersFor(hprlnkShowHint);
hprlnkShowHint.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
getUserTask().revealNextHint();
layout(true);
}
});
selectionProvider.addSelectionChangedListener(event -> {
final Object element = event.getStructuredSelection().getFirstElement();
if (element instanceof IUserTask) {
if (((IUserTask) element).isStarted()) {
lblActiveStartDate.setText(formatDate(((IUserTask) element).getStarted()));
final int hintsDisplayed = ((IUserTask) element).getHintsDisplayed();
final int hintsCount = ((IUserTask) element).getTask().getHints().size();
lblShownHints.setText(hintsDisplayed + "/" + hintsCount);
hprlnkShowHint.setVisible(hintsDisplayed < hintsCount);
lblActiveStartDate.requestLayout();
lblShownHints.requestLayout();
hprlnkShowHint.requestLayout();
}
}
});
return composite;
}
private Composite createCompletedTaskComposite(final FormToolkit toolkit, ISelectionProvider selectionProvider) {
final Composite composite = toolkit.createComposite(this, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
toolkit.paintBordersFor(composite);
toolkit.createLabel(composite, "started:", SWT.NONE);
final Label lblStartDate = toolkit.createLabel(composite, "", SWT.NONE);
toolkit.createLabel(composite, "completed:", SWT.NONE);
final Label lblCompletionDate = toolkit.createLabel(composite, "", SWT.NONE);
selectionProvider.addSelectionChangedListener(event -> {
final Object element = event.getStructuredSelection().getFirstElement();
if (element instanceof IUserTask) {
if (((IUserTask) element).isCompleted()) {
lblStartDate.setText(formatDate(((IUserTask) element).getStarted()));
lblCompletionDate.setText(formatDate(((IUserTask) element).getFinished()));
lblStartDate.requestLayout();
lblCompletionDate.requestLayout();
}
}
});
return composite;
}
}