| /******************************************************************************* |
| * Copyright (c) 2007, 2008 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.views.properties.tabbed; |
| |
| import org.eclipse.core.runtime.ISafeRunnable; |
| import org.eclipse.jface.util.SafeRunnable; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.FillLayout; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.IWorkbenchPart; |
| |
| /** |
| * A property tab is composed by one or more property sections and is used to |
| * categorize sections. |
| * |
| * @author Anthony Hunter |
| * @since 3.4 |
| */ |
| public final class TabContents { |
| |
| private ISection[] sections; |
| |
| private boolean controlsCreated; |
| |
| /** |
| * |
| */ |
| public TabContents() { |
| controlsCreated = false; |
| } |
| |
| /** |
| * Retrieve a numbered index for the section. |
| * @param section the section. |
| * @return the section index. |
| */ |
| public int getSectionIndex(ISection section) { |
| for (int i = 0; i < sections.length; i++) { |
| if (section == sections[i]) { |
| return i; |
| } |
| } |
| return -1; |
| } |
| |
| /** |
| * Retrieve the section at a numbered index. |
| * @param i a numbered index. |
| * @return the section. |
| */ |
| public ISection getSectionAtIndex(int i) { |
| if (i >= 0 && i < sections.length) { |
| return sections[i]; |
| } |
| return null; |
| } |
| |
| /** |
| * Retrieve the sections on the tab. |
| * |
| * @return the sections on the tab. |
| */ |
| public ISection[] getSections() { |
| return sections; |
| } |
| |
| /** |
| * Creates page's sections controls. |
| * |
| * @param parent |
| * @param page |
| */ |
| public void createControls(Composite parent, |
| final TabbedPropertySheetPage page) { |
| Composite pageComposite = page.getWidgetFactory().createComposite( |
| parent, SWT.NO_FOCUS); |
| GridLayout layout = new GridLayout(); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| layout.verticalSpacing = 0; |
| pageComposite.setLayout(layout); |
| |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| final Composite sectionComposite = page.getWidgetFactory() |
| .createComposite(pageComposite, SWT.NO_FOCUS); |
| sectionComposite.setLayout(new FillLayout()); |
| int style = (section.shouldUseExtraSpace()) ? GridData.FILL_BOTH |
| : GridData.FILL_HORIZONTAL; |
| GridData data = new GridData(style); |
| data.heightHint = section.getMinimumHeight(); |
| sectionComposite.setLayoutData(data); |
| |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.createControls(sectionComposite, page); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| controlsCreated = true; |
| } |
| |
| /** |
| * Dispose of page's sections controls. |
| */ |
| public void dispose() { |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.dispose(); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| } |
| |
| /** |
| * Sends the lifecycle event to the page's sections. |
| */ |
| public void aboutToBeShown() { |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.aboutToBeShown(); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| } |
| |
| /** |
| * Sends the lifecycle event to the page's sections. |
| */ |
| public void aboutToBeHidden() { |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.aboutToBeHidden(); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| } |
| |
| /** |
| * Sets page's sections input objects. |
| * |
| * @param part |
| * @param selection |
| */ |
| public void setInput(final IWorkbenchPart part, final ISelection selection) { |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.setInput(part, selection); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| } |
| |
| /** |
| * Set the sections for the tab. |
| * |
| * @param sections the sections for the tab. |
| */ |
| public void setSections(ISection[] sections) { |
| this.sections = sections; |
| } |
| |
| /** |
| * Determine if the controls have been created. |
| * |
| * @return <code>true</code> if controls have been created. |
| */ |
| public boolean controlsHaveBeenCreated() { |
| return controlsCreated; |
| } |
| |
| /** |
| * If controls have been created, refresh all sections on the page. |
| */ |
| public void refresh() { |
| if (controlsCreated) { |
| for (int i = 0; i < sections.length; i++) { |
| final ISection section = sections[i]; |
| ISafeRunnable runnable = new SafeRunnable() { |
| |
| public void run() |
| throws Exception { |
| section.refresh(); |
| } |
| }; |
| SafeRunnable.run(runnable); |
| } |
| } |
| } |
| } |