/**
*
*/
package org.nightlabs.jfire.issuetracking.ui.issuelink.create;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.message.TitleAreaDialogErrorMessageDisplayer;
import org.nightlabs.base.ui.wizard.DynamicPathWizardPage;
import org.nightlabs.jdo.ObjectID;
import org.nightlabs.jfire.issue.IssueLinkType;
import org.nightlabs.jfire.issuetracking.ui.issuelink.IssueLinkAdder;
import org.nightlabs.jfire.issuetracking.ui.issuelink.IssueLinkDoubleClickListener;
import org.nightlabs.jfire.issuetracking.ui.issuelink.IssueLinkDoubleClickedEvent;
import org.nightlabs.jfire.issuetracking.ui.resource.Messages;
/**
* @author Chairat Kongarayawetchakun - chairat at nightlabs dot de
*
*/
public class SelectLinkedObjectWizardPage extends DynamicPathWizardPage
{
//UI
private Composite carrier;
private IssueLinkAdder issueLinkAdder;
//Used objects
private Set<ObjectID> linkedObjectIDs = new HashSet<ObjectID>();
public SelectLinkedObjectWizardPage() {
super(SelectLinkedObjectWizardPage.class.getName(), Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.create.SelectLinkedObjectWizardPage.title")); //$NON-NLS-1$
setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.create.SelectLinkedObjectWizardPage.description")); //$NON-NLS-1$
}
/**
* Set the currently active {@link IssueLinkAdder} or <code>null</code>.
*
* @param issueLinkAdder the {@link IssueLinkAdder} that has been selected in another wizard page or <code>null</code>, if it has been deselected.
*/
public void setIssueLinkAdder(final IssueLinkAdder issueLinkAdder) {
// In case there currently is some UI in our carrier, we clean it.
if (carrier == null)
throw new IllegalStateException("setIssueLinkAdder(...) called before createPageContents(...)!"); //$NON-NLS-1$
for (Control child : carrier.getChildren())
child.dispose();
this.issueLinkAdder = issueLinkAdder;
linkedObjectIDs.clear();
if (issueLinkAdder != null) {
IWizardContainer wizardContainer = getWizard().getContainer();
if (wizardContainer instanceof WizardDialog) {
issueLinkAdder.setErrorMessageDisplayer(new TitleAreaDialogErrorMessageDisplayer((WizardDialog)wizardContainer));
}
Composite issueLinkAdderComposite = issueLinkAdder.createComposite(carrier);
issueLinkAdderComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
carrier.layout(true);
issueLinkAdder.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
linkedObjectIDs.clear();
linkedObjectIDs.addAll(issueLinkAdder.getLinkedObjectIDs());
getContainer().updateButtons();
}
});
issueLinkAdder.addIssueLinkDoubleClickListener(new IssueLinkDoubleClickListener() {
@Override
public void issueLinkDoubleClicked(IssueLinkDoubleClickedEvent event) {
getContainer().showPage(getNextPage());
}
});
}
getContainer().updateButtons();
}
public Set<ObjectID> getLinkedObjectIDs() {
return linkedObjectIDs;
}
@Override
public Control createPageContents(Composite parent) {
carrier = new XComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
return carrier;
}
@Override
public boolean isPageComplete() {
return !linkedObjectIDs.isEmpty();
}
public IssueLinkAdder getIssueLinkAdder() {
return issueLinkAdder;
}
class IssueLinkTypeLabelProvider extends LabelProvider{
@Override
public String getText(Object element)
{
if (element instanceof IssueLinkType) {
IssueLinkType issueLinkType = (IssueLinkType) element;
return issueLinkType.getName().getText();
}
return super.getText(element);
}
}
}