/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.gef.ui.editor; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; public class TabFolderContainerPresentation extends PageContainerPresentationBase implements SelectionListener { private CTabFolder container = null; public void addPage(Composite container, int index, Control pageControl) { CTabFolder tabFolder = (CTabFolder) container; CTabItem item = new CTabItem(tabFolder, SWT.NONE, index); item.setControl(pageControl); } public Composite createContainer(Composite parent) { if (container != null && !container.isDisposed()) return container; container = new CTabFolder(parent, SWT.BOTTOM | SWT.FLAT); container.setBackground(container.getDisplay().getSystemColor( SWT.COLOR_WHITE)); if (hasListener()) { container.addSelectionListener(this); } return container; } public void disposePage(Composite container, int pageIndex) { CTabItem item = getItem(container, pageIndex); Control pageControl = item.getControl(); item.dispose(); if (pageControl != null) { pageControl.dispose(); } } private CTabItem getItem(Composite container, int pageIndex) { return ((CTabFolder) container).getItem(pageIndex); } public int getActivePage(Composite container) { CTabFolder tabFolder = (CTabFolder) container; if (tabFolder != null && !tabFolder.isDisposed()) { return tabFolder.getSelectionIndex(); } return -1; } public Control getPageControl(Composite container, int pageIndex) { return getItem(container, pageIndex).getControl(); } public int getPageCount(Composite container) { CTabFolder tabFolder = (CTabFolder) container; return tabFolder.getItemCount(); } public Image getPageImage(Composite container, int pageIndex) { return getItem(container, pageIndex).getImage(); } public String getPageText(Composite container, int pageIndex) { return getItem(container, pageIndex).getText(); } public void setActivePage(Composite container, int pageIndex) { ((CTabFolder) container).setSelection(pageIndex); } public void setPageControl(Composite container, int pageIndex, Control pageControl) { getItem(container, pageIndex).setControl(pageControl); } public void setPageImage(Composite container, int pageIndex, Image image) { getItem(container, pageIndex).setImage(image); } public void setPageText(Composite container, int pageIndex, String text) { getItem(container, pageIndex).setText(text); } public Object getSelectedPage() { return Integer.valueOf(getActivePage(container)); } public void addPageChangedListener(IPageChangedListener listener) { boolean hadListener = hasListener(); super.addPageChangedListener(listener); boolean hasListener = hasListener(); if (!hadListener && hasListener) { if (container != null && !container.isDisposed()) { container.addSelectionListener(this); } } } public void removePageChangedListener(IPageChangedListener listener) { boolean hadListener = hasListener(); super.removePageChangedListener(listener); boolean hasListener = hasListener(); if (hadListener && !hasListener) { if (container != null && !container.isDisposed()) { container.removeSelectionListener(this); } } } public int findPage(Composite container, int x, int y) { CTabItem item = ((CTabFolder) container).getItem(new Point(x, y)); if (item != null) { return ((CTabFolder) container).indexOf(item); } return -1; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { firePageChangedEvent(); } }