diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java | 755 |
1 files changed, 0 insertions, 755 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java deleted file mode 100644 index 90fd790cba..0000000000 --- a/bundles/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java +++ /dev/null @@ -1,755 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. - * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de). - * 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 - * Compeople AG - QtJambi/Qt based implementation for Windows/Mac OS X/Linux - *******************************************************************************/ -package org.eclipse.swt.widgets; - -import java.util.ArrayList; - -import com.trolltech.qt.gui.QTabWidget; -import com.trolltech.qt.gui.QVBoxLayout; -import com.trolltech.qt.gui.QWidget; -import com.trolltech.qt.gui.QSizePolicy.Policy; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.internal.qt.QtSWTConverter; - -/** - * Instances of this class implement the notebook user interface metaphor. It - * allows the user to select a notebook page from set of pages. - * <p> - * The item children that may be added to instances of this class must be of - * type <code>TabItem</code>. <code>Control</code> children are created and then - * set into a tab item using <code>TabItem#setControl</code>. - * </p> - * <p> - * Note that although this class is a subclass of <code>Composite</code>, it - * does not make sense to set a layout on it. - * </p> - * <p> - * <dl> - * <dt><b>Styles:</b></dt> - * <dd>TOP, BOTTOM</dd> - * <dt><b>Events:</b></dt> - * <dd>Selection</dd> - * </dl> - * <p> - * Note: Only one of the styles TOP and BOTTOM may be specified. - * </p> - * <p> - * IMPORTANT: This class is <em>not</em> intended to be subclassed. - * </p> - * - * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder, - * TabItem snippets</a> - * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: - * ControlExample</a> - * @see <a href="http://www.eclipse.org/swt/">Sample code and further - * information</a> - * @noextend This class is not intended to be subclassed by clients. - */ -public class TabFolder extends Composite { - private java.util.List<TabItem> items; - private java.util.List<QWidget> tabWidgets; - - /** - * Constructs a new instance of this class given its parent and a style - * value describing its behavior and appearance. - * <p> - * The style value is either one of the style constants defined in class - * <code>SWT</code> which is applicable to instances of this class, or must - * be built by <em>bitwise OR</em>'ing together (that is, using the - * <code>int</code> "|" operator) two or more of those <code>SWT</code> - * style constants. The class description lists the style constants that are - * applicable to the class. Style bits are also inherited from superclasses. - * </p> - * - * @param parent - * a composite control which will be the parent of the new - * instance (cannot be null) - * @param style - * the style of control to construct - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the parent</li> - * <li>ERROR_INVALID_SUBCLASS - if this class is not an - * allowed subclass</li> - * </ul> - * - * @see SWT - * @see Widget#checkSubclass - * @see Widget#getStyle - */ - public TabFolder(Composite parent, int style) { - super(parent, checkStyle(style)); - } - - @Override - protected QWidget createQWidget(int style) { - state &= ~(CANVAS | THEME_BACKGROUND); - items = new ArrayList<TabItem>(4); - tabWidgets = new ArrayList<QWidget>(4); - return new QTabWidget(); - } - - @Override - protected void connectSignals() { - getQTabWidget().currentChanged.connect(this, "selectionEvent(int)");//$NON-NLS-1$ - } - - QTabWidget getQTabWidget() { - return (QTabWidget) getQWidget(); - } - - protected void selectionEvent(int index) { - if (index != -1 && items != null) { - TabItem item = getItem(index); - Event event = new Event(); - event.item = item; - sendEvent(SWT.Selection, event); - } - } - - protected void addQChild() { - // do nothing - } - - static int checkStyle(int style) { - style = checkBits(style, SWT.TOP, SWT.BOTTOM, 0, 0, 0, 0); - - /* - * Even though it is legal to create this widget with scroll bars, they - * serve no useful purpose because they do not automatically scroll the - * widget's client area. The fix is to clear the SWT style. - */ - return style & ~(SWT.H_SCROLL | SWT.V_SCROLL); - } - - @Override - protected void checkSubclass() { - if (!isValidSubclass()) { - error(SWT.ERROR_INVALID_SUBCLASS); - } - } - - void createItem(TabItem item, int index) { - int count = getQTabWidget().count(); - if (!(0 <= index && index <= count)) { - error(SWT.ERROR_INVALID_RANGE); - } - - items.add(index, item); - - QWidget widget = new QWidget(); - widget.setSizePolicy(Policy.Expanding, Policy.Expanding); - widget.setContentsMargins(0, 0, 0, 0); - QVBoxLayout layout = new QVBoxLayout(); - layout.setContentsMargins(0, 0, 0, 0); - widget.setLayout(layout); - - tabWidgets.add(index, widget); - - getQTabWidget().insertTab(index, widget, item.getText()); - - /* - * Send a selection event when the item that is added becomes the new - * selection. This only happens when the first item is added. - */ - if (index == 0) { - Event event = new Event(); - event.item = item; - sendEvent(SWT.Selection, event); - } - } - - void updateItem(TabItem item, Control oldControl) { - int index = indexOf(item); - QWidget container = tabWidgets.get(index); - - if (oldControl != null) { - QWidget widget = oldControl.getQMasterWidget(); - if (widget != null) { - container.layout().removeWidget(widget); - } - } - - Control control = item.getControl(); - QWidget widget = null; - if (control != null) { - widget = control.getQMasterWidget(); - } - if (widget == null) { - return; - } - container.layout().addWidget(widget); - } - - void destroyItem(TabItem item) { - int count = getQTabWidget().count(); - int index = 0; - while (index < count) { - if (items.get(index) == item) { - break; - } - index++; - } - if (index == count) { - return; - } - int selectionIndex = getQTabWidget().currentIndex(); - items.remove(count); - if (count > 0 && index == selectionIndex) { - setSelection(Math.max(0, selectionIndex - 1), true); - } - } - - @Override - Control findThemeControl() { - /* It is not possible to change the background of this control */ - return this; - } - - @Override - public Rectangle getClientArea() { - checkWidget(); - return QtSWTConverter.convert(getQTabWidget().contentsRect()); - } - - /** - * Adds the listener to the collection of listeners who will be notified - * when the user changes the receiver's selection, by sending it one of the - * messages defined in the <code>SelectionListener</code> interface. - * <p> - * When <code>widgetSelected</code> is called, the item field of the event - * object is valid. <code>widgetDefaultSelected</code> is not called. - * </p> - * - * @param listener - * the listener which should be notified when the user changes - * the receiver's selection - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - * - * @see SelectionListener - * @see #removeSelectionListener - * @see SelectionEvent - */ - public void addSelectionListener(SelectionListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - TypedListener typedListener = new TypedListener(listener); - addListener(SWT.Selection, typedListener); - addListener(SWT.DefaultSelection, typedListener); - } - - /** - * Returns the item at the given, zero-relative index in the receiver. - * Throws an exception if the index is out of range. - * - * @param index - * the index of the item to return - * @return the item at the given index - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_INVALID_RANGE - if the index is not between 0 - * and the number of elements in the list minus 1 (inclusive) - * </li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public TabItem getItem(int index) { - checkWidget(); - int count = getQTabWidget().count(); - if (!(0 <= index && index < count)) { - error(SWT.ERROR_INVALID_RANGE); - } - return items.get(index); - } - - /** - * Returns the tab item at the given point in the receiver or null if no - * such item exists. The point is in the coordinate system of the receiver. - * - * @param point - * the point used to locate the item - * @return the tab item at the given point, or null if the point is not in a - * tab item - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the point is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - * - * @since 3.4 - */ - public TabItem getItem(Point point) { - checkWidget(); - if (point == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - QWidget widget = getQTabWidget().childAt(point.x, point.y); - if (widget == null) { - return null; - } - int index = getQTabWidget().indexOf(widget); - if (index < 0 || index >= items.size()) { - return null; - } - return items.get(index); - } - - /** - * Returns the number of items contained in the receiver. - * - * @return the number of items - * - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public int getItemCount() { - checkWidget(); - return getQTabWidget().count(); - } - - /** - * Returns an array of <code>TabItem</code>s which are the items in the - * receiver. - * <p> - * Note: This is not the actual structure used by the receiver to maintain - * its list of items, so modifying the array will not affect the receiver. - * </p> - * - * @return the items in the receiver - * - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public TabItem[] getItems() { - checkWidget(); - int count = getQTabWidget().count(); - TabItem[] result = new TabItem[count]; - System.arraycopy(items, 0, result, 0, count); - return result; - } - - /** - * Returns an array of <code>TabItem</code>s that are currently selected in - * the receiver. An empty array indicates that no items are selected. - * <p> - * Note: This is not the actual structure used by the receiver to maintain - * its selection, so modifying the array will not affect the receiver. - * </p> - * - * @return an array representing the selection - * - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public TabItem[] getSelection() { - checkWidget(); - int index = getQTabWidget().currentIndex(); - if (index == -1) { - return new TabItem[0]; - } - return new TabItem[] { items.get(index) }; - } - - /** - * Returns the zero-relative index of the item which is currently selected - * in the receiver, or -1 if no item is selected. - * - * @return the index of the selected item - * - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public int getSelectionIndex() { - checkWidget(); - return getQTabWidget().currentIndex(); - } - - /** - * Searches the receiver's list starting at the first item (index 0) until - * an item is found that is equal to the argument, and returns the index of - * that item. If no item is found, returns -1. - * - * @param item - * the search item - * @return the index of the item - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the item is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public int indexOf(TabItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - int count = getQTabWidget().count(); - for (int i = 0; i < count; i++) { - if (items.get(i) == item) { - return i; - } - } - return -1; - } - - @Override - Point minimumSize(int wHint, int hHint, boolean flushCache) { - Control[] children = _getChildren(); - int width = 0, height = 0; - for (int i = 0; i < children.length; i++) { - Control child = children[i]; - int index = 0; - int count = getChildrenCount(); - while (index < count) { - if (items.get(index).control == child) { - break; - } - index++; - } - if (index == count) { - Rectangle rect = child.getBounds(); - width = Math.max(width, rect.x + rect.width); - height = Math.max(height, rect.y + rect.height); - } else { - Point size = child.computeSize(wHint, hHint, flushCache); - width = Math.max(width, size.x); - height = Math.max(height, size.y); - } - } - return new Point(width, height); - } - - @Override - boolean mnemonicHit(char key) { - for (int i = 0; i < items.size(); i++) { - TabItem item = items.get(i); - if (item != null) { - char ch = findMnemonic(item.getText()); - if (Character.toUpperCase(key) == Character.toUpperCase(ch)) { - if (forceFocus()) { - if (i != getSelectionIndex()) { - setSelection(i, true); - } - return true; - } - } - } - } - return false; - } - - @Override - boolean mnemonicMatch(char key) { - for (int i = 0; i < items.size(); i++) { - TabItem item = items.get(i); - if (item != null) { - char ch = findMnemonic(item.getText()); - if (Character.toUpperCase(key) == Character.toUpperCase(ch)) { - return true; - } - } - } - return false; - } - - @Override - void releaseChildren(boolean destroy) { - if (items != null) { - int count = getQTabWidget().count(); - for (int i = 0; i < count; i++) { - TabItem item = items.get(i); - if (item != null && !item.isDisposed()) { - item.release(false); - } - } - items = null; - } - super.releaseChildren(destroy); - } - - @Override - void removeControl(Control control) { - super.removeControl(control); - int count = getQTabWidget().count(); - for (int i = 0; i < count; i++) { - TabItem item = items.get(i); - if (item.control == control) { - getQTabWidget().removeTab(i); - item.setControl(null); - } - } - } - - /** - * Removes the listener from the collection of listeners who will be - * notified when the user changes the receiver's selection. - * - * @param listener - * the listener which should no longer be notified - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - * - * @see SelectionListener - * @see #addSelectionListener - */ - public void removeSelectionListener(SelectionListener listener) { - checkWidget(); - if (listener == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (eventTable == null) { - return; - } - eventTable.unhook(SWT.Selection, listener); - eventTable.unhook(SWT.DefaultSelection, listener); - } - - /** - * Sets the receiver's selection to the given item. The current selected is - * first cleared, then the new item is selected. - * - * @param item - * the item to select - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the item is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - * - * @since 3.2 - */ - public void setSelection(TabItem item) { - checkWidget(); - if (item == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - setSelection(new TabItem[] { item }); - } - - /** - * Sets the receiver's selection to be the given array of items. The current - * selected is first cleared, then the new items are selected. - * - * @param items - * the array of items - * - * @exception IllegalArgumentException - * <ul> - * <li>ERROR_NULL_ARGUMENT - if the items array is null</li> - * </ul> - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public void setSelection(TabItem[] items) { - checkWidget(); - if (items == null) { - error(SWT.ERROR_NULL_ARGUMENT); - } - if (items.length == 0) { - setSelection(-1, false); - } else { - for (int i = items.length - 1; i >= 0; --i) { - int index = indexOf(items[i]); - if (index != -1) { - setSelection(index, false); - } - } - } - } - - @Override - public void setFont(Font font) { - checkWidget(); - Rectangle oldRect = getClientArea(); - super.setFont(font); - Rectangle newRect = getClientArea(); - if (!oldRect.equals(newRect)) { - //sendResize(); - int index = getQTabWidget().currentIndex(); - if (index != -1) { - TabItem item = items.get(index); - Control control = item.control; - if (control != null && !control.isDisposed()) { - control.setBounds(getClientArea()); - } - } - } - } - - /** - * Selects the item at the given zero-relative index in the receiver. If the - * item at the index was already selected, it remains selected. The current - * selection is first cleared, then the new items are selected. Indices that - * are out of range are ignored. - * - * @param index - * the index of the item to select - * - * @exception SWTException - * <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been - * disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the - * thread that created the receiver</li> - * </ul> - */ - public void setSelection(int index) { - checkWidget(); - int count = getQTabWidget().count(); - if (!(0 <= index && index < count)) { - return; - } - setSelection(index, false); - } - - void setSelection(int index, boolean notify) { - int oldIndex = getQTabWidget().currentIndex(); - if (oldIndex == index) { - return; - } - if (oldIndex != -1) { - TabItem item = items.get(oldIndex); - Control control = item.control; - if (control != null && !control.isDisposed()) { - control.setVisible(false); - } - } - getQTabWidget().setCurrentIndex(index); - int newIndex = getQTabWidget().currentIndex(); - if (newIndex != -1) { - TabItem item = items.get(newIndex); - Control control = item.control; - if (control != null && !control.isDisposed()) { - control.setBounds(getClientArea()); - control.setVisible(true); - } - if (notify) { - Event event = new Event(); - event.item = item; - sendEvent(SWT.Selection, event); - } - } - } - - @Override - boolean traversePage(boolean next) { - int count = getItemCount(); - if (count <= 1) { - return false; - } - int index = getSelectionIndex(); - if (index == -1) { - index = 0; - } else { - int offset = next ? 1 : -1; - index = (index + offset + count) % count; - } - setSelection(index, true); - if (index == getSelectionIndex()) { - // TODO - //OS.SendMessage(handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0); - return true; - } - return false; - } - -} |