/*
* Copyright (c) 2006 Eclipse.org
*
* 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:
* Dmitry Stadnik - initial API and implementation
*/
package org.eclipse.gmf.internal.common.ui;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.Hyperlink;
/**
* @author dstadnik
*/
public class PredefinedModelExtension implements ModelSelectionPageExtension {
protected final ModelSelectionPage page;
protected final List<URI> uris;
public PredefinedModelExtension(ModelSelectionPage page, List<URI> uris) {
this.page = page;
this.uris = uris;
}
protected String getLabelText() {
return Messages.PredefinedModelExtensionPredefinedModels;
}
public void createControl(Composite parent) {
Composite plate = new Composite(parent, SWT.NONE);
{
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
plate.setLayoutData(data);
}
plate.setLayout(new GridLayout());
ExpandableComposite hlSection = new ExpandableComposite(plate, SWT.NONE, ExpandableComposite.TWISTIE);
hlSection.setText(getLabelText());
hlSection.setLayoutData(new GridData());
Composite hlPlate = new Composite(hlSection, SWT.NONE);
hlPlate.setLayout(new GridLayout());
hlSection.setClient(hlPlate);
hlSection.addExpansionListener(new IExpansionListener() {
public void expansionStateChanged(ExpansionEvent e) {
Composite pc = (Composite) page.getControl();
pc.layout(true, true);
}
public void expansionStateChanging(ExpansionEvent e) {
}
});
for (URI uri : uris) {
createHyperlink(hlPlate, uri);
}
}
protected Hyperlink createHyperlink(Composite parent, final URI uri) {
final Hyperlink hyperlink = new Hyperlink(parent, SWT.NONE);
hyperlink.setForeground(page.getShell().getDisplay().getSystemColor(SWT.COLOR_BLUE));
hyperlink.setText(uri.toString());
hyperlink.addHyperlinkListener(new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
setPredefinedModelURI(uri);
}
public void linkEntered(HyperlinkEvent e) {
hyperlink.setUnderlined(true);
}
public void linkExited(HyperlinkEvent e) {
hyperlink.setUnderlined(false);
}
});
GridData data = new GridData();
hyperlink.setLayoutData(data);
return hyperlink;
}
protected void setPredefinedModelURI(URI uri) {
page.setURI(uri);
page.updateURI();
}
public void setResource(Resource resource) {
}
}