/** * Copyright (c) 2003-2004 Fabrizio Giustina. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.aptana.ide.core.ui.preferences; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.resource.ImageDescriptor; 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.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; /** * @author fgiust * @version $Revision $ ($Author $) */ public abstract class TabbedFieldEditorPreferencePage extends FieldEditorPreferencePage { /** * Tab folder. */ private TabFolder folder; /** * Maximum number of columns for field editors. */ private int maxNumOfColumns; /** * Creates a new field editor preference page with the given style, an empty title, and no image. * @param style either <code>GRID</code> or <code>FLAT</code> */ protected TabbedFieldEditorPreferencePage(int style) { super(style); } /** * Creates a new field editor preference page with the given title and style, but no image. * @param title the title of this preference page * @param style either <code>GRID</code> or <code>FLAT</code> */ protected TabbedFieldEditorPreferencePage(String title, int style) { super(title, style); } /** * Creates a new field editor preference page with the given title, image, and style. * @param title the title of this preference page * @param image the image for this preference page, or <code>null</code> if none * @param style either <code>GRID</code> or <code>FLAT</code> */ protected TabbedFieldEditorPreferencePage(String title, ImageDescriptor image, int style) { super(title, image, style); } /** * Adds the given field editor to this page. * @param editor the field editor */ protected void addField(FieldEditor editor) { // needed for layout, since there is no way to get fields editor from parent this.maxNumOfColumns = Math.max(this.maxNumOfColumns, editor.getNumberOfControls()); super.addField(editor); } /** * Adjust the layout of the field editors so that they are properly aligned. */ protected void adjustGridLayout() { if (folder != null) { TabItem[] items = folder.getItems(); for (int j = 0; j < items.length; j++) { GridLayout layout = ((GridLayout) ((Composite) items[j].getControl()).getLayout()); layout.numColumns = this.maxNumOfColumns; layout.marginHeight = 5; layout.marginWidth = 5; } } // need to call super.adjustGridLayout() since fieldEditor.adjustForNumColumns() is protected super.adjustGridLayout(); // reset the main container to a single column ((GridLayout) super.getFieldEditorParent().getLayout()).numColumns = 1; } /** * Returns a parent composite for a field editor. * <p> * This value must not be cached since a new parent may be created each time this method called. Thus this method * must be called each time a field editor is constructed. * </p> * @return a parent */ protected Composite getFieldEditorParent() { if (folder == null || folder.getItemCount() == 0) { return super.getFieldEditorParent(); } return (Composite) folder.getItem(folder.getItemCount() - 1).getControl(); } /** * Adds a tab to the page. * @param text the tab label */ public void addTab(String text) { if (folder == null) { // initialize tab folder folder = new TabFolder(super.getFieldEditorParent(), SWT.NONE); folder.setLayoutData(new GridData(GridData.FILL_BOTH)); } TabItem item = new TabItem(folder, SWT.NONE); item.setText(text); Composite currentTab = new Composite(folder, SWT.NULL); GridLayout layout = new GridLayout(); currentTab.setLayout(layout); currentTab.setFont(super.getFieldEditorParent().getFont()); currentTab.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); item.setControl(currentTab); } }