/*******************************************************************************
* 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 java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* An <code>Composite</code> subclass that shows just one
* of its child pages at a time.
*
* @see Page
*
* @author stepan.rutz@gmx.de
* @version $Revision$
*/
public class PageContainer extends Composite {
private Composite content;
private StackLayout stackLayout;
private ArrayList<Page> pages = new ArrayList<Page>();
private int activePageIndex = -1;
public PageContainer(Composite parent, int style) {
super(parent, style);
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
PageContainer.this.widgetDisposed(e);
}
});
adapt(this);
GridLayout layout = new GridLayout(1, false);
layout.marginWidth = layout.marginHeight = 0;
setLayout(layout);
stackLayout = new StackLayout();
TitleControl title = new TitleControl(this, null);
adapt(title);
title.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
title.setText("SWT MapWidget");
content = new Composite(this, SWT.NONE);
content.setLayout(stackLayout);
content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
adapt(content);
}
protected void widgetDisposed(DisposeEvent e) {
}
public void setPages(Page... pages) {
this.pages.clear();
this.pages.addAll(Arrays.asList(pages));
}
public Page[] getPages() {
return pages.toArray(new Page[pages.size()]);
}
public int indexOfPage(Page page) {
return pages.indexOf(page);
}
public int getActivePageIndex() {
return activePageIndex;
}
public void showPage(int index) {
stackLayout.topControl = pages.get(index).getControl(this, content);
content.layout();
activePageIndex = index;
}
public void adapt(Control control) {
control.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
}
}