/******************************************************************************* * Copyright (c) 2008, 2012 Stepan Rutz. * 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: * Stepan Rutz - initial implementation *******************************************************************************/ package org.eclipse.nebula.widgets.geomap.internal.geomapbrowser; import org.eclipse.nebula.widgets.geomap.GeoMap; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Listener; /** * Base implementation of an abstract page, eg something that owns an swt * control. Common functions are a header widget and an embedded * {@link PageContainer}. * * <p>This file is part of the showcase for the {@link GeoMap} but does * not include any core functionality that is typically embedded. Users who * only want to embed the swt-map as a widget don't typically use this class. * </p> * * @author stepan.rutz@gmx.de * @version $Revision$ */ public abstract class AbstractPage implements Page { private PageContainer container; private Composite composite; protected PageContainer getContainer() { return container; } protected Composite getComposite() { return composite; } public Control getControl(PageContainer container, Composite parent) { if (composite == null) { this.container = container; composite = new Composite(parent, SWT.NONE); composite.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { AbstractPage.this.widgetDisposed(e); } }); composite.setLayout(new GridLayout(2, false)); container.adapt(composite); initContent(container, composite); } return composite; } protected void addHeaderRow(PageContainer container, Composite parent, String text) { HeaderControl header = new HeaderControl(parent); container.adapt(header); header.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2 , 1)); header.setText(text); } protected Link addInfoText(PageContainer container, Composite parent, String text) { Link link = new Link(parent, SWT.WRAP | SWT.MULTI); container.adapt(link); GridData layoutData = new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2 , 1); link.setLayoutData(layoutData); link.setText(text); link.addListener (SWT.Selection, new Listener () { public void handleEvent(Event event) { try { if (event.text != null && event.text.length() > 0) Program.launch(event.text); } catch (Exception e) { e.printStackTrace(); } } }); return link; } protected void addActionLink(PageContainer container, Composite parent, String text, SelectionAdapter selectionAdapter) { Composite wrap = new Composite(parent, SWT.NONE); wrap.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); container.adapt(wrap); GridLayout layout = new GridLayout(2, false); layout.marginLeft = 8; layout.marginHeight = 0; wrap.setLayout(layout); Label titleImage = new Label(wrap, SWT.WRAP); container.adapt(titleImage); Link link = new Link(wrap, SWT.NONE); container.adapt(link); link.setText(text); link.addSelectionListener(selectionAdapter); } protected abstract void widgetDisposed(DisposeEvent e); protected abstract void initContent(PageContainer container, Composite composite); }